picky 0.9.1 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/picky/cacher/partial/default.rb +1 -1
- data/lib/picky/cacher/partial_generator.rb +1 -1
- data/lib/picky/cacher/similarity/double_levenshtone.rb +1 -1
- data/lib/picky/generator.rb +1 -1
- data/lib/picky/index/file/basic.rb +2 -2
- data/lib/picky/index/file/json.rb +1 -1
- data/lib/picky/index/type.rb +1 -1
- data/lib/picky/indexers/solr.rb +1 -1
- data/lib/picky/indexes.rb +1 -1
- data/lib/picky/query/solr.rb +2 -2
- data/lib/picky/results/base.rb +4 -4
- data/lib/picky/routing.rb +4 -22
- data/lib/picky/sources/db.rb +1 -1
- data/lib/picky/sources/delicious.rb +5 -5
- data/lib/tasks/try.rake +1 -5
- data/spec/lib/cacher/partial/subtoken_spec.rb +29 -29
- data/spec/lib/query/allocation_spec.rb +8 -0
- data/spec/lib/sources/delicious_spec.rb +23 -4
- metadata +3 -3
| @@ -32,7 +32,7 @@ module Cacher | |
| 32 32 | 
             
                  # Generates an index for the given index (in exact index style).
         | 
| 33 33 | 
             
                  #
         | 
| 34 34 | 
             
                  # In the following form:
         | 
| 35 | 
            -
                  # [:meier, :mueller, :peter, :pater] => { : | 
| 35 | 
            +
                  # [:meier, :mueller, :peter, :pater] => { MR: [:meier], MLR: [:mueller], PTR: [:peter, :pater] }
         | 
| 36 36 | 
             
                  #
         | 
| 37 37 | 
             
                  def generate_from index
         | 
| 38 38 | 
             
                    hash = hashify index.keys
         | 
    
        data/lib/picky/generator.rb
    CHANGED
    
    
| @@ -18,7 +18,7 @@ module Index | |
| 18 18 | 
             
                  #
         | 
| 19 19 | 
             
                  def backup
         | 
| 20 20 | 
             
                    prepare_backup backup_path
         | 
| 21 | 
            -
                    FileUtils.cp cache_path, target, : | 
| 21 | 
            +
                    FileUtils.cp cache_path, target, verbose: true
         | 
| 22 22 | 
             
                  end
         | 
| 23 23 | 
             
                  def backup_path
         | 
| 24 24 | 
             
                    ::File.join ::File.dirname(cache_path), 'backup'
         | 
| @@ -30,7 +30,7 @@ module Index | |
| 30 30 | 
             
                  # Restore.
         | 
| 31 31 | 
             
                  #
         | 
| 32 32 | 
             
                  def restore
         | 
| 33 | 
            -
                    FileUtils.cp backup_file_path_of(cache_path), cache_path, : | 
| 33 | 
            +
                    FileUtils.cp backup_file_path_of(cache_path), cache_path, verbose: true
         | 
| 34 34 | 
             
                  end
         | 
| 35 35 | 
             
                  def backup_file_path_of path
         | 
| 36 36 | 
             
                    dir, name = ::File.split path
         | 
    
        data/lib/picky/index/type.rb
    CHANGED
    
    | @@ -19,7 +19,7 @@ module Index | |
| 19 19 | 
             
                  @combinator  = combinator_for categories, ignore_unassigned_tokens
         | 
| 20 20 | 
             
                end
         | 
| 21 21 | 
             
                def combinator_for categories, ignore_unassigned_tokens
         | 
| 22 | 
            -
                   Query::Combinator.new @categories, : | 
| 22 | 
            +
                   Query::Combinator.new @categories, ignore_unassigned_tokens: ignore_unassigned_tokens
         | 
| 23 23 | 
             
                end
         | 
| 24 24 |  | 
| 25 25 | 
             
                #
         | 
    
        data/lib/picky/indexers/solr.rb
    CHANGED
    
    | @@ -40,7 +40,7 @@ module Indexers | |
| 40 40 |  | 
| 41 41 | 
             
                  results.each do |indexed_id, *values|
         | 
| 42 42 | 
             
                    values.each &:downcase!
         | 
| 43 | 
            -
                    documents << hashed(values).merge(: | 
| 43 | 
            +
                    documents << hashed(values).merge(id: indexed_id, type: type_name)
         | 
| 44 44 | 
             
                  end
         | 
| 45 45 |  | 
| 46 46 | 
             
                  solr.add documents
         | 
    
        data/lib/picky/indexes.rb
    CHANGED
    
    | @@ -21,7 +21,7 @@ module Indexes | |
| 21 21 | 
             
                #      rake index:ordered
         | 
| 22 22 | 
             
                #
         | 
| 23 23 | 
             
                timed_exclaim "INDEXING USING #{Cores.max_processors} PROCESSORS, IN #{randomly ? 'RANDOM' : 'GIVEN'} ORDER."
         | 
| 24 | 
            -
                Cores.forked self.fields, { : | 
| 24 | 
            +
                Cores.forked self.fields, { randomly: randomly } do |field, cores|
         | 
| 25 25 | 
             
                  field.index
         | 
| 26 26 | 
             
                  field.cache
         | 
| 27 27 | 
             
                end
         | 
    
        data/lib/picky/query/solr.rb
    CHANGED
    
    | @@ -42,7 +42,7 @@ module Query | |
| 42 42 |  | 
| 43 43 | 
             
                    index_types.each do |index|
         | 
| 44 44 | 
             
                      begin
         | 
| 45 | 
            -
                        response = server.select : | 
| 45 | 
            +
                        response = server.select q: new_query, fq: "type:#{index.name}", hl: true, :'hl.fl' => '*', :'hl.simple.pre' => '<', :'hl.simple.post' => '>', facet: true
         | 
| 46 46 | 
             
                      rescue RSolr::RequestError => re
         | 
| 47 47 | 
             
                        return results
         | 
| 48 48 | 
             
                      end
         | 
| @@ -58,7 +58,7 @@ module Query | |
| 58 58 | 
             
                      similar[index.name] = possibilities unless possibilities.empty?
         | 
| 59 59 | 
             
                    end
         | 
| 60 60 |  | 
| 61 | 
            -
                    results.add : | 
| 61 | 
            +
                    results.add similar: similar
         | 
| 62 62 | 
             
                  end
         | 
| 63 63 |  | 
| 64 64 | 
             
                  # TODO
         | 
    
        data/lib/picky/results/base.rb
    CHANGED
    
    | @@ -20,10 +20,10 @@ module Results | |
| 20 20 | 
             
                #
         | 
| 21 21 | 
             
                #
         | 
| 22 22 | 
             
                def serialize
         | 
| 23 | 
            -
                  { : | 
| 24 | 
            -
                    : | 
| 25 | 
            -
                    : | 
| 26 | 
            -
                    : | 
| 23 | 
            +
                  { allocations: allocations.to_result,
         | 
| 24 | 
            +
                    offset:      offset,
         | 
| 25 | 
            +
                    duration:    duration,
         | 
| 26 | 
            +
                    total:       total }
         | 
| 27 27 | 
             
                end
         | 
| 28 28 | 
             
                # The default format is json.
         | 
| 29 29 | 
             
                #
         | 
    
        data/lib/picky/routing.rb
    CHANGED
    
    | @@ -5,9 +5,9 @@ require 'rack/mount' | |
| 5 5 | 
             
            class Routing
         | 
| 6 6 |  | 
| 7 7 | 
             
              @@defaults = {
         | 
| 8 | 
            -
                : | 
| 9 | 
            -
                : | 
| 10 | 
            -
                : | 
| 8 | 
            +
                query_key:    'query'.freeze,
         | 
| 9 | 
            +
                offset_key:   'offset'.freeze,
         | 
| 10 | 
            +
                content_type: 'application/octet-stream'.freeze
         | 
| 11 11 | 
             
              }
         | 
| 12 12 |  | 
| 13 13 | 
             
              def initialize
         | 
| @@ -32,24 +32,6 @@ class Routing | |
| 32 32 | 
             
                routes.call env
         | 
| 33 33 | 
             
              end
         | 
| 34 34 |  | 
| 35 | 
            -
              # # Set the defaults.
         | 
| 36 | 
            -
              # # 
         | 
| 37 | 
            -
              # # Options are:
         | 
| 38 | 
            -
              # #  * :query_key  => :query # default
         | 
| 39 | 
            -
              # #  * :offset_key => :offset # default
         | 
| 40 | 
            -
              # #  
         | 
| 41 | 
            -
              # #  * :tokenizer  => Tokenizers::Query.new # default
         | 
| 42 | 
            -
              # #
         | 
| 43 | 
            -
              # def defaults options = {}
         | 
| 44 | 
            -
              #   @defaults[:query_key]    = options[:query_key].to_s  if options[:query_key]
         | 
| 45 | 
            -
              #   @defaults[:offset_key]   = options[:offset_key].to_s if options[:offset_key]
         | 
| 46 | 
            -
              #   
         | 
| 47 | 
            -
              #   @defaults[:tokenizer]    = options[:tokenizer]       if options[:tokenizer]
         | 
| 48 | 
            -
              #   @defaults[:content_type] = options[:content_type]    if options[:content_type]
         | 
| 49 | 
            -
              #   
         | 
| 50 | 
            -
              #   @defaults
         | 
| 51 | 
            -
              # end
         | 
| 52 | 
            -
              
         | 
| 53 35 | 
             
              #
         | 
| 54 36 | 
             
              #
         | 
| 55 37 | 
             
              def route options = {}
         | 
| @@ -101,7 +83,7 @@ class Routing | |
| 101 83 | 
             
              def default_options url, route_options = {}
         | 
| 102 84 | 
             
                url = normalized url
         | 
| 103 85 |  | 
| 104 | 
            -
                options = { : | 
| 86 | 
            +
                options = { request_method: 'GET' }.merge route_options
         | 
| 105 87 |  | 
| 106 88 | 
             
                options[:path_info] = url if url
         | 
| 107 89 |  | 
    
        data/lib/picky/sources/db.rb
    CHANGED
    
    | @@ -7,7 +7,7 @@ module Sources | |
| 7 7 |  | 
| 8 8 | 
             
                attr_reader :select_statement, :database, :connection_options
         | 
| 9 9 |  | 
| 10 | 
            -
                def initialize select_statement, options = { : | 
| 10 | 
            +
                def initialize select_statement, options = { file: 'app/db.yml' }
         | 
| 11 11 | 
             
                  @select_statement = select_statement
         | 
| 12 12 | 
             
                  @database         = create_database_adapter
         | 
| 13 13 | 
             
                  @options          = options
         | 
| @@ -11,7 +11,7 @@ module Sources | |
| 11 11 | 
             
                  require 'www/delicious'
         | 
| 12 12 | 
             
                rescue LoadError
         | 
| 13 13 | 
             
                  puts "Delicious gem missing!\nTo use the delicious source, you need to:\n  1. Add the following line to Gemfile:\n     gem 'www-delicious'\n  2. Then, run:\n     bundle update\n"
         | 
| 14 | 
            -
                  exit | 
| 14 | 
            +
                  exit 1
         | 
| 15 15 | 
             
                end
         | 
| 16 16 |  | 
| 17 17 | 
             
                # Harvests the data to index.
         | 
| @@ -30,12 +30,12 @@ module Sources | |
| 30 30 | 
             
                #
         | 
| 31 31 | 
             
                def get_data
         | 
| 32 32 | 
             
                  @generated_id ||= 0
         | 
| 33 | 
            -
                  @posts ||= WWW::Delicious.new(@username, @password).posts_recent(: | 
| 33 | 
            +
                  @posts ||= WWW::Delicious.new(@username, @password).posts_recent(count: 100)
         | 
| 34 34 | 
             
                  @posts.each do |post|
         | 
| 35 35 | 
             
                    data = {
         | 
| 36 | 
            -
                      : | 
| 37 | 
            -
                      : | 
| 38 | 
            -
                      : | 
| 36 | 
            +
                      title: post.title,
         | 
| 37 | 
            +
                      tags:  post.tags.join(' '),
         | 
| 38 | 
            +
                      url:   post.url.to_s
         | 
| 39 39 | 
             
                    }
         | 
| 40 40 | 
             
                    @generated_id += 1
         | 
| 41 41 | 
             
                    yield @generated_id, data
         | 
    
        data/lib/tasks/try.rake
    CHANGED
    
    | @@ -15,11 +15,7 @@ namespace :try do | |
| 15 15 | 
             
              task :query, [:text] => :application do |_, options|
         | 
| 16 16 | 
             
                text = options.text
         | 
| 17 17 |  | 
| 18 | 
            -
                #  | 
| 19 | 
            -
                #
         | 
| 20 | 
            -
                # TODO Use the Query Tokenizer.
         | 
| 21 | 
            -
                #
         | 
| 22 | 
            -
                puts "\"#{text}\" is query tokenized as #{Tokenizers::Default::Query.tokenize(text.dup).to_a.map(&:to_s).map(&:to_sym)}"
         | 
| 18 | 
            +
                puts "\"#{text}\" is query tokenized as #{Tokenizers::Default::Query.tokenize(text).to_a.map(&:to_s).map(&:to_sym)}"
         | 
| 23 19 | 
             
              end
         | 
| 24 20 |  | 
| 25 21 | 
             
              desc "Try the given text with both the index and the query (type:field optional)."
         | 
| @@ -13,29 +13,29 @@ describe Cacher::Partial::Substring do | |
| 13 13 | 
             
                end
         | 
| 14 14 | 
             
                describe 'generate_from' do
         | 
| 15 15 | 
             
                  it 'should generate the right index' do
         | 
| 16 | 
            -
                    @cacher.generate_from( | 
| 17 | 
            -
                      : | 
| 18 | 
            -
                      : | 
| 19 | 
            -
                      : | 
| 20 | 
            -
                      : | 
| 21 | 
            -
                      : | 
| 22 | 
            -
                      : | 
| 23 | 
            -
                      : | 
| 24 | 
            -
                      : | 
| 25 | 
            -
                      : | 
| 26 | 
            -
                      : | 
| 27 | 
            -
                      : | 
| 16 | 
            +
                    @cacher.generate_from(florian: [1], flavia: [2]).should == {
         | 
| 17 | 
            +
                      florian: [1],
         | 
| 18 | 
            +
                      floria:  [1],
         | 
| 19 | 
            +
                      flori:   [1],
         | 
| 20 | 
            +
                      flor:    [1],
         | 
| 21 | 
            +
                      flo:     [1],
         | 
| 22 | 
            +
                      fl:   [1, 2],
         | 
| 23 | 
            +
                      f:    [1, 2], 
         | 
| 24 | 
            +
                      flavia:  [2],
         | 
| 25 | 
            +
                      flavi:   [2],
         | 
| 26 | 
            +
                      flav:    [2],
         | 
| 27 | 
            +
                      fla:     [2]
         | 
| 28 28 | 
             
                    }
         | 
| 29 29 | 
             
                  end
         | 
| 30 30 | 
             
                  it "should be fast" do
         | 
| 31 | 
            -
                    performance_of { @cacher.generate_from( | 
| 31 | 
            +
                    performance_of { @cacher.generate_from(florian: [1], flavia: [2]) }.should < 0.0001
         | 
| 32 32 | 
             
                  end
         | 
| 33 33 | 
             
                  it "should handle duplicate ids" do
         | 
| 34 | 
            -
                    @cacher.generate_from( | 
| 35 | 
            -
                      : | 
| 36 | 
            -
                      : | 
| 37 | 
            -
                      : | 
| 38 | 
            -
                      : | 
| 34 | 
            +
                    @cacher.generate_from(flo: [1], fla: [1]).should == {
         | 
| 35 | 
            +
                      flo: [1],
         | 
| 36 | 
            +
                      fl:  [1],
         | 
| 37 | 
            +
                      f:   [1],
         | 
| 38 | 
            +
                      fla: [1]
         | 
| 39 39 | 
             
                    }
         | 
| 40 40 | 
             
                  end
         | 
| 41 41 | 
             
                end
         | 
| @@ -43,24 +43,24 @@ describe Cacher::Partial::Substring do | |
| 43 43 | 
             
              context 'from set' do
         | 
| 44 44 | 
             
                describe 'negative from' do
         | 
| 45 45 | 
             
                  before(:each) do
         | 
| 46 | 
            -
                    @cacher = Cacher::Partial::Substring.new : | 
| 46 | 
            +
                    @cacher = Cacher::Partial::Substring.new from: -2
         | 
| 47 47 | 
             
                  end
         | 
| 48 48 | 
             
                  it 'should generate the right index' do
         | 
| 49 | 
            -
                    @cacher.generate_from( | 
| 50 | 
            -
                      : | 
| 51 | 
            -
                      : | 
| 52 | 
            -
                      : | 
| 53 | 
            -
                      : | 
| 49 | 
            +
                    @cacher.generate_from(florian: [1], flavia: [2]).should == {
         | 
| 50 | 
            +
                      florian: [1],
         | 
| 51 | 
            +
                      floria:  [1],
         | 
| 52 | 
            +
                      flavia:  [2],
         | 
| 53 | 
            +
                      flavi:   [2]
         | 
| 54 54 | 
             
                    }
         | 
| 55 55 | 
             
                  end
         | 
| 56 56 | 
             
                end
         | 
| 57 57 | 
             
                context "large from" do
         | 
| 58 58 | 
             
                  before(:each) do
         | 
| 59 | 
            -
                    @cacher = Cacher::Partial::Substring.new : | 
| 59 | 
            +
                    @cacher = Cacher::Partial::Substring.new from: 10
         | 
| 60 60 | 
             
                  end
         | 
| 61 61 | 
             
                  describe 'generate_from' do
         | 
| 62 62 | 
             
                    it 'should generate the right index' do
         | 
| 63 | 
            -
                      @cacher.generate_from( | 
| 63 | 
            +
                      @cacher.generate_from(florian: [1], :'01234567890' => [2] ).should == {
         | 
| 64 64 | 
             
                        :florian => [1],
         | 
| 65 65 | 
             
                        :'01234567890' => [2],
         | 
| 66 66 | 
             
                        :'0123456789' => [2]
         | 
| @@ -70,7 +70,7 @@ describe Cacher::Partial::Substring do | |
| 70 70 | 
             
                end
         | 
| 71 71 | 
             
                context 'default to' do
         | 
| 72 72 | 
             
                  before(:each) do
         | 
| 73 | 
            -
                    @cacher = Cacher::Partial::Substring.new : | 
| 73 | 
            +
                    @cacher = Cacher::Partial::Substring.new from: 4
         | 
| 74 74 | 
             
                  end
         | 
| 75 75 | 
             
                  describe 'to' do
         | 
| 76 76 | 
             
                    it 'should return the right value' do
         | 
| @@ -124,7 +124,7 @@ describe Cacher::Partial::Substring do | |
| 124 124 | 
             
                end
         | 
| 125 125 | 
             
                context 'to set' do
         | 
| 126 126 | 
             
                  before(:each) do
         | 
| 127 | 
            -
                    @cacher = Cacher::Partial::Substring.new : | 
| 127 | 
            +
                    @cacher = Cacher::Partial::Substring.new from: 4, to: -2
         | 
| 128 128 | 
             
                  end
         | 
| 129 129 | 
             
                  describe 'to' do
         | 
| 130 130 | 
             
                    it 'should return the right value' do
         | 
| @@ -150,7 +150,7 @@ describe Cacher::Partial::Substring do | |
| 150 150 | 
             
                end
         | 
| 151 151 | 
             
                context 'to set' do
         | 
| 152 152 | 
             
                  before(:each) do
         | 
| 153 | 
            -
                    @cacher = Cacher::Partial::Substring.new : | 
| 153 | 
            +
                    @cacher = Cacher::Partial::Substring.new from: 4, to: 0
         | 
| 154 154 | 
             
                  end
         | 
| 155 155 | 
             
                  describe 'to' do
         | 
| 156 156 | 
             
                    it 'should return the right value' do
         | 
| @@ -7,6 +7,14 @@ describe Query::Allocation do | |
| 7 7 | 
             
                @allocation = Query::Allocation.new @combinations
         | 
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| 10 | 
            +
              describe "eql?" do
         | 
| 11 | 
            +
                # TODO This works, but is not acceptable.
         | 
| 12 | 
            +
                #
         | 
| 13 | 
            +
                it "returns true" do
         | 
| 14 | 
            +
                  @allocation.eql?(:anything).should == true
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 10 18 | 
             
              describe "hash" do
         | 
| 11 19 | 
             
                it "delegates to the combinations" do
         | 
| 12 20 | 
             
                  @combinations.should_receive(:hash).once.with
         | 
| @@ -1,14 +1,33 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            +
            # TODO Slow spec.
         | 
| 4 | 
            +
            #
         | 
| 3 5 | 
             
            describe Sources::Delicious do
         | 
| 4 6 |  | 
| 5 7 | 
             
              context "with file" do
         | 
| 6 8 |  | 
| 7 9 | 
             
                describe "check_gem" do
         | 
| 8 | 
            -
                   | 
| 9 | 
            -
             | 
| 10 | 
            -
                   | 
| 11 | 
            -
             | 
| 10 | 
            +
                  before(:each) do
         | 
| 11 | 
            +
                    @source = Sources::Delicious.allocate
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
                  context "doesn't find www/delicious" do
         | 
| 14 | 
            +
                    before(:each) do
         | 
| 15 | 
            +
                      @source.should_receive(:require).any_number_of_times.and_raise LoadError
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                    it "puts & exits" do
         | 
| 18 | 
            +
                      @source.should_receive(:puts).once.with "Delicious gem missing!\nTo use the delicious source, you need to:\n  1. Add the following line to Gemfile:\n     gem 'www-delicious'\n  2. Then, run:\n     bundle update\n"
         | 
| 19 | 
            +
                      @source.should_receive(:exit).once.with 1
         | 
| 20 | 
            +
                      
         | 
| 21 | 
            +
                      @source.check_gem
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                  context "finds www/delicious" do
         | 
| 25 | 
            +
                    before(:each) do
         | 
| 26 | 
            +
                      @source.should_receive(:require).any_number_of_times.and_return
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                    it "checks if the gem is there" do
         | 
| 29 | 
            +
                      lambda { @source.check_gem }.should_not raise_error
         | 
| 30 | 
            +
                    end
         | 
| 12 31 | 
             
                  end
         | 
| 13 32 | 
             
                end
         | 
| 14 33 |  | 
    
        metadata
    CHANGED
    
    | @@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version | |
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 0
         | 
| 7 7 | 
             
              - 9
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: 0.9. | 
| 8 | 
            +
              - 2
         | 
| 9 | 
            +
              version: 0.9.2
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Florian Hanke
         | 
| @@ -14,7 +14,7 @@ autorequire: | |
| 14 14 | 
             
            bindir: bin
         | 
| 15 15 | 
             
            cert_chain: []
         | 
| 16 16 |  | 
| 17 | 
            -
            date: 2010-10- | 
| 17 | 
            +
            date: 2010-10-29 00:00:00 +02:00
         | 
| 18 18 | 
             
            default_executable: picky
         | 
| 19 19 | 
             
            dependencies: 
         | 
| 20 20 | 
             
            - !ruby/object:Gem::Dependency 
         |