Changeset 2145

Show
Ignore:
Timestamp:
11/29/07 18:50:36 (14 months ago)
Author:
coji
Message:

lang/ruby/ssb: ケータイDBからの検索でuseragentからの部分一致サポートを追加

Location:
lang/ruby/ssb
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/ssb/libs/ssb/ktai_db.rb

    r2135 r2145  
    8383 
    8484      # 前方一致で探す 
    85       ret = list.select {|e| e[cond[0]] =~ Regexp.new("^#{cond[1]}.*", Regexp::IGNORECASE) } 
     85      ret = nil 
     86      if cond[0] == :useragent 
     87        # useragent のときだけ前方からの部分一致でok 
     88        ret = list.select {|e| e[cond[0]].index(cond[1]) } 
     89      else 
     90        # 普通は後方一致 
     91        ret = list.select {|e| e[cond[0]] =~ Regexp.union(/^#{cond[1]}.*/i) } 
     92      end 
    8693      if query.size == 0 
    8794        ret 
     
    100107 
    101108      for cond in remap_table do 
    102         if source =~ Regexp.new(cond, Regexp::IGNORECASE) 
     109        if source =~ Regexp.union(/#{cond}/i) 
    103110          source = cond 
    104111          break 
  • lang/ruby/ssb/public_html/ktai_db.rbx

    r2141 r2145  
    2020    def do_GET(req, res) 
    2121      res.header['Content-Type'] = 'text/html; charset=utf-8' 
    22       ktai = @db.search(:carrier => req.query['carrier'], 
    23                         :name    => req.query['name']) 
     22      ktai = @db.search(:carrier   => req.query['carrier'], 
     23                        :name      => req.query['name'], 
     24                        :useragent => req.query['useragent']) 
    2425      res.body += "<h1>search result</h1>" 
    2526      res.body += "carrier: #{req.query['carrier']}<br />" 
    2627      res.body += "name: #{req.query['name']}<br />" 
     28      res.body += "useragent #{req.query['useragent']}<br />" 
    2729      res.body += "result: #{ktai.size}" 
    2830      res.body += "<hr />" 
  • lang/ruby/ssb/test/test_ktai_db.rb

    r2135 r2145  
    101101    assert_equal(ret[0][:name], 'NM502i') 
    102102  end 
     103 
     104  # useragentで検索するとき、完全一致のときは1件だけ 
     105  def test_search_by_useragent_fullmatch 
     106    ret = @ktai_db.search(:useragent => 'UP.Browser/3.04-HI11 UP.Link/3.4.4') 
     107    assert_equal(ret.size, 1) 
     108    assert_equal(ret[0][:name], 'C302H') 
     109  end 
     110 
     111  # useragentで検索は前方からの部分一致でok 
     112  def test_search_by_useragent_partmatch 
     113    ret = @ktai_db.search(:useragent => 'UP.Browser/3.04') 
     114    assert_equal(ret.size, 8) 
     115    assert_equal(ret[0][:name], 'C301T') 
     116    assert_equal(ret[7][:name], 'C309H') 
     117  end 
    103118end 
    104119