mongoid-giza 0.5.1 → 0.6.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +10 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +12 -0
- data/Gemfile +2 -2
- data/README.md +2 -3
- data/Rakefile +10 -2
- data/lib/mongoid/giza.rb +93 -54
- data/lib/mongoid/giza/configuration.rb +62 -38
- data/lib/mongoid/giza/dynamic_index.rb +21 -15
- data/lib/mongoid/giza/index.rb +45 -31
- data/lib/mongoid/giza/index/attribute.rb +22 -17
- data/lib/mongoid/giza/index/field.rb +10 -8
- data/lib/mongoid/giza/indexer.rb +9 -6
- data/lib/mongoid/giza/models/{giza_id.rb → id.rb} +6 -8
- data/lib/mongoid/giza/railtie.rb +6 -3
- data/lib/mongoid/giza/search.rb +41 -27
- data/lib/mongoid/giza/version.rb +2 -1
- data/lib/mongoid/giza/xml_pipe2.rb +64 -18
- data/mongoid-giza.gemspec +12 -10
- data/spec/mongoid/giza/configuration_spec.rb +65 -46
- data/spec/mongoid/giza/dynamic_index_spec.rb +7 -5
- data/spec/mongoid/giza/index/attribute_spec.rb +41 -4
- data/spec/mongoid/giza/index/field_spec.rb +1 -1
- data/spec/mongoid/giza/index_spec.rb +23 -9
- data/spec/mongoid/giza/indexer_spec.rb +4 -1
- data/spec/mongoid/giza/models/giza_id_spec.rb +6 -6
- data/spec/mongoid/giza/search_spec.rb +57 -35
- data/spec/mongoid/giza/xml_pipe2_spec.rb +61 -18
- data/spec/mongoid/giza_spec.rb +93 -101
- data/spec/spec_helper.rb +3 -4
- metadata +25 -10
| @@ -5,7 +5,8 @@ require "spec_helper" | |
| 5 5 | 
             
            describe Mongoid::Giza::Index::Attribute do
         | 
| 6 6 | 
             
              describe "name" do
         | 
| 7 7 | 
             
                it "should be mandatory" do
         | 
| 8 | 
            -
                  expect { Mongoid::Giza::Index::Attribute.new } | 
| 8 | 
            +
                  expect { Mongoid::Giza::Index::Attribute.new }
         | 
| 9 | 
            +
                    .to raise_error(ArgumentError)
         | 
| 9 10 | 
             
                end
         | 
| 10 11 |  | 
| 11 12 | 
             
                it "should be set on creation" do
         | 
| @@ -43,7 +44,8 @@ describe Mongoid::Giza::Index::Attribute do | |
| 43 44 |  | 
| 44 45 | 
             
              describe "type" do
         | 
| 45 46 | 
             
                it "should be mandatory" do
         | 
| 46 | 
            -
                  expect { Mongoid::Giza::Index::Attribute.new("attribute") } | 
| 47 | 
            +
                  expect { Mongoid::Giza::Index::Attribute.new("attribute") }
         | 
| 48 | 
            +
                    .to raise_error(ArgumentError)
         | 
| 47 49 | 
             
                end
         | 
| 48 50 |  | 
| 49 51 | 
             
                it "should be set on creation" do
         | 
| @@ -53,12 +55,47 @@ describe Mongoid::Giza::Index::Attribute do | |
| 53 55 | 
             
                end
         | 
| 54 56 |  | 
| 55 57 | 
             
                it "should be a valid type" do
         | 
| 56 | 
            -
                  expect { Mongoid::Giza::Index::Attribute.new("attribute", :type) } | 
| 58 | 
            +
                  expect { Mongoid::Giza::Index::Attribute.new("attribute", :type) }
         | 
| 59 | 
            +
                    .to raise_error(TypeError)
         | 
| 57 60 | 
             
                end
         | 
| 58 61 | 
             
              end
         | 
| 59 62 |  | 
| 60 63 | 
             
              it "should accept a block" do
         | 
| 61 | 
            -
                attribute = Mongoid::Giza::Index::Attribute.new("attribute", :uint) { | 
| 64 | 
            +
                attribute = Mongoid::Giza::Index::Attribute.new("attribute", :uint) {}
         | 
| 62 65 | 
             
                expect(attribute.block).to be_a(Proc)
         | 
| 63 66 | 
             
              end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              describe "options" do
         | 
| 69 | 
            +
                describe "default" do
         | 
| 70 | 
            +
                  it "should accept default option" do
         | 
| 71 | 
            +
                    attribute = Mongoid::Giza::Index::Attribute.new("attribute",
         | 
| 72 | 
            +
                                                                    :uint, default: 1)
         | 
| 73 | 
            +
                    expect(attribute.default).to be 1
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  it "should be nil if not set" do
         | 
| 77 | 
            +
                    attribute = Mongoid::Giza::Index::Attribute.new("attribute", :uint)
         | 
| 78 | 
            +
                    expect(attribute.default).to be nil
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                describe "bits" do
         | 
| 83 | 
            +
                  it "should accept bits option" do
         | 
| 84 | 
            +
                    attribute = Mongoid::Giza::Index::Attribute.new("attribute",
         | 
| 85 | 
            +
                                                                    :uint, bits: 16)
         | 
| 86 | 
            +
                    expect(attribute.bits).to be 16
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  it "should ignore if it's not an int attribute" do
         | 
| 90 | 
            +
                    attribute = Mongoid::Giza::Index::Attribute.new("attribute",
         | 
| 91 | 
            +
                                                                    :bool, bits: 16)
         | 
| 92 | 
            +
                    expect(attribute.bits).to be nil
         | 
| 93 | 
            +
                  end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                  it "should be nil if not set" do
         | 
| 96 | 
            +
                    attribute = Mongoid::Giza::Index::Attribute.new("attribute", :uint)
         | 
| 97 | 
            +
                    expect(attribute.bits).to be nil
         | 
| 98 | 
            +
                  end
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
              end
         | 
| 64 101 | 
             
            end
         | 
| @@ -44,7 +44,7 @@ describe Mongoid::Giza::Index do | |
| 44 44 | 
             
                end
         | 
| 45 45 |  | 
| 46 46 | 
             
                it "should create a new Field" do
         | 
| 47 | 
            -
                  expect(Mongoid::Giza::Index::Field).to receive(:new).with(name,  | 
| 47 | 
            +
                  expect(Mongoid::Giza::Index::Field).to receive(:new).with(name, nil)
         | 
| 48 48 | 
             
                  index.field(name)
         | 
| 49 49 | 
             
                end
         | 
| 50 50 |  | 
| @@ -63,14 +63,17 @@ describe Mongoid::Giza::Index do | |
| 63 63 | 
             
              describe "attribute" do
         | 
| 64 64 | 
             
                let(:name) { "attribute" }
         | 
| 65 65 |  | 
| 66 | 
            -
                let(:type) { : | 
| 66 | 
            +
                let(:type) { :int }
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                let(:options) { {default: 1} }
         | 
| 67 69 |  | 
| 68 70 | 
             
                it "should require a name" do
         | 
| 69 71 | 
             
                  expect { index.attribute }.to raise_error(ArgumentError)
         | 
| 70 72 | 
             
                end
         | 
| 71 73 |  | 
| 72 74 | 
             
                it "should accept a type" do
         | 
| 73 | 
            -
                  expect(Mongoid::Giza::Index::Attribute).to receive(:new) | 
| 75 | 
            +
                  expect(Mongoid::Giza::Index::Attribute).to receive(:new)
         | 
| 76 | 
            +
                    .with(name, type, {})
         | 
| 74 77 | 
             
                  index.attribute(name, type)
         | 
| 75 78 | 
             
                end
         | 
| 76 79 |  | 
| @@ -85,21 +88,23 @@ describe Mongoid::Giza::Index do | |
| 85 88 | 
             
                    end
         | 
| 86 89 | 
             
                    fields
         | 
| 87 90 | 
             
                  end
         | 
| 88 | 
            -
                  expect(Mongoid::Giza::Index::Attribute).to receive(:new) | 
| 91 | 
            +
                  expect(Mongoid::Giza::Index::Attribute).to receive(:new)
         | 
| 92 | 
            +
                    .with(name, Mongoid::Giza::Index::TYPES_MAP[type], {})
         | 
| 89 93 | 
             
                  index.attribute(name)
         | 
| 90 94 | 
             
                end
         | 
| 91 95 |  | 
| 92 | 
            -
                it "should default to  | 
| 96 | 
            +
                it "should default to string when the field is not found" do
         | 
| 93 97 | 
             
                  allow(klass).to receive(:fields) do
         | 
| 94 98 | 
             
                    fields = double("fields")
         | 
| 95 99 | 
             
                    allow(fields).to receive(:[]).with(name) { nil }
         | 
| 96 100 | 
             
                    fields
         | 
| 97 101 | 
             
                  end
         | 
| 98 | 
            -
                  expect(Mongoid::Giza::Index::Attribute).to receive(:new) | 
| 102 | 
            +
                  expect(Mongoid::Giza::Index::Attribute).to receive(:new)
         | 
| 103 | 
            +
                    .with(name, :string, {})
         | 
| 99 104 | 
             
                  index.attribute(name)
         | 
| 100 105 | 
             
                end
         | 
| 101 106 |  | 
| 102 | 
            -
                it "should default to  | 
| 107 | 
            +
                it "should default to string when the type is not mapped" do
         | 
| 103 108 | 
             
                  allow(klass).to receive(:fields) do
         | 
| 104 109 | 
             
                    fields = double("fields")
         | 
| 105 110 | 
             
                    allow(fields).to receive(:[]).with(name) do
         | 
| @@ -109,9 +114,16 @@ describe Mongoid::Giza::Index do | |
| 109 114 | 
             
                    end
         | 
| 110 115 | 
             
                    fields
         | 
| 111 116 | 
             
                  end
         | 
| 112 | 
            -
                  expect(Mongoid::Giza::Index::Attribute).to receive(:new) | 
| 117 | 
            +
                  expect(Mongoid::Giza::Index::Attribute).to receive(:new)
         | 
| 118 | 
            +
                    .with(name, :string, {})
         | 
| 113 119 | 
             
                  index.attribute(name)
         | 
| 114 120 | 
             
                end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                it "should accept options" do
         | 
| 123 | 
            +
                  expect(Mongoid::Giza::Index::Attribute).to receive(:new)
         | 
| 124 | 
            +
                    .with(name, type, options)
         | 
| 125 | 
            +
                  index.attribute(name, type, options)
         | 
| 126 | 
            +
                end
         | 
| 115 127 | 
             
              end
         | 
| 116 128 |  | 
| 117 129 | 
             
              describe "name" do
         | 
| @@ -137,7 +149,9 @@ describe Mongoid::Giza::Index do | |
| 137 149 | 
             
                let(:buffer) { double("buffer") }
         | 
| 138 150 |  | 
| 139 151 | 
             
                it "should create a new XMLPipe2 object" do
         | 
| 140 | 
            -
                  expect(Mongoid::Giza::XMLPipe2).to receive(:new).with(index, buffer)  | 
| 152 | 
            +
                  expect(Mongoid::Giza::XMLPipe2).to receive(:new).with(index, buffer) do
         | 
| 153 | 
            +
                    xmlpipe2.as_null_object
         | 
| 154 | 
            +
                  end
         | 
| 141 155 | 
             
                  index.xmlpipe2(buffer)
         | 
| 142 156 | 
             
                end
         | 
| 143 157 |  | 
| @@ -11,7 +11,7 @@ describe Mongoid::Giza::Indexer do | |
| 11 11 |  | 
| 12 12 | 
             
              describe "index!" do
         | 
| 13 13 | 
             
                it "should execute the sphinx indexer" do
         | 
| 14 | 
            -
                  expect(@controller).to receive(:index).with(no_args | 
| 14 | 
            +
                  expect(@controller).to receive(:index).with(no_args)
         | 
| 15 15 | 
             
                  @indexer.index!
         | 
| 16 16 | 
             
                end
         | 
| 17 17 |  | 
| @@ -67,15 +67,18 @@ describe Mongoid::Giza::Indexer do | |
| 67 67 |  | 
| 68 68 | 
             
              describe "giza_classes" do
         | 
| 69 69 | 
             
                before(:all) do
         | 
| 70 | 
            +
                  # :nodoc:
         | 
| 70 71 | 
             
                  class One
         | 
| 71 72 | 
             
                    include Mongoid::Document
         | 
| 72 73 | 
             
                    include Mongoid::Giza
         | 
| 73 74 | 
             
                  end
         | 
| 74 75 |  | 
| 76 | 
            +
                  # :nodoc:
         | 
| 75 77 | 
             
                  class Two
         | 
| 76 78 | 
             
                    include Mongoid::Document
         | 
| 77 79 | 
             
                  end
         | 
| 78 80 |  | 
| 81 | 
            +
                  # :nodoc:
         | 
| 79 82 | 
             
                  class Three
         | 
| 80 83 | 
             
                    include Mongoid::Document
         | 
| 81 84 | 
             
                    include Mongoid::Giza
         | 
| @@ -1,8 +1,8 @@ | |
| 1 1 | 
             
            require "spec_helper"
         | 
| 2 2 |  | 
| 3 | 
            -
            describe Mongoid::Giza:: | 
| 3 | 
            +
            describe Mongoid::Giza::ID do
         | 
| 4 4 | 
             
              describe "instance" do
         | 
| 5 | 
            -
                let(:giza_id) { Mongoid::Giza:: | 
| 5 | 
            +
                let(:giza_id) { Mongoid::Giza::ID.new(id: :Person) }
         | 
| 6 6 |  | 
| 7 7 | 
             
                it "should be valid" do
         | 
| 8 8 | 
             
                  expect(giza_id).to be_valid
         | 
| @@ -17,14 +17,14 @@ describe Mongoid::Giza::GizaID do | |
| 17 17 | 
             
                end
         | 
| 18 18 | 
             
              end
         | 
| 19 19 |  | 
| 20 | 
            -
              describe " | 
| 20 | 
            +
              describe "next" do
         | 
| 21 21 | 
             
                before do
         | 
| 22 | 
            -
                  Mongoid::Giza:: | 
| 22 | 
            +
                  Mongoid::Giza::ID.create(id: :Person)
         | 
| 23 23 | 
             
                end
         | 
| 24 24 |  | 
| 25 25 | 
             
                it "should return the next id for the given class" do
         | 
| 26 | 
            -
                  expect(Mongoid::Giza:: | 
| 27 | 
            -
                  expect(Mongoid::Giza:: | 
| 26 | 
            +
                  expect(Mongoid::Giza::ID.next(:Person)).to eql(1)
         | 
| 27 | 
            +
                  expect(Mongoid::Giza::ID.next(:Person)).to eql(2)
         | 
| 28 28 | 
             
                end
         | 
| 29 29 | 
             
              end
         | 
| 30 30 | 
             
            end
         | 
| @@ -1,22 +1,19 @@ | |
| 1 1 | 
             
            require "spec_helper"
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe Mongoid::Giza::Search do
         | 
| 4 | 
            -
              let(:client)  | 
| 5 | 
            -
                client = double("client")
         | 
| 6 | 
            -
                allow(Riddle::Client).to receive(:new).with("localhost", 9132) { client }
         | 
| 7 | 
            -
                client
         | 
| 8 | 
            -
              end
         | 
| 4 | 
            +
              let(:client) { double("client") }
         | 
| 9 5 |  | 
| 10 6 | 
             
              let(:search) { Mongoid::Giza::Search.new("localhost", 9132) }
         | 
| 11 7 |  | 
| 12 | 
            -
              let(:filters)  | 
| 13 | 
            -
                filters = double("filters")
         | 
| 14 | 
            -
                allow(client).to receive(:filters) { filters }
         | 
| 15 | 
            -
                filters
         | 
| 16 | 
            -
              end
         | 
| 8 | 
            +
              let(:filters) { double("filters") }
         | 
| 17 9 |  | 
| 18 10 | 
             
              let(:filter) { double("filter") }
         | 
| 19 11 |  | 
| 12 | 
            +
              before do
         | 
| 13 | 
            +
                allow(Riddle::Client).to receive(:new).with("localhost", 9132) { client }
         | 
| 14 | 
            +
                allow(client).to receive(:filters) { filters }
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 20 17 | 
             
              describe "initialize" do
         | 
| 21 18 | 
             
                it "should create a new client with the given host and port" do
         | 
| 22 19 | 
             
                  expect(Riddle::Client).to receive(:new).with("localhost", 9132)
         | 
| @@ -24,28 +21,24 @@ describe Mongoid::Giza::Search do | |
| 24 21 | 
             
                end
         | 
| 25 22 |  | 
| 26 23 | 
             
                it "should accept a index list" do
         | 
| 27 | 
            -
                  indexes = Mongoid::Giza::Search.new("localhost", 9132, [:index1, :index2]) | 
| 24 | 
            +
                  indexes = Mongoid::Giza::Search.new("localhost", 9132, [:index1, :index2])
         | 
| 25 | 
            +
                            .indexes
         | 
| 28 26 | 
             
                  expect(indexes).to eql([:index1, :index2])
         | 
| 29 27 | 
             
                end
         | 
| 30 28 | 
             
              end
         | 
| 31 29 |  | 
| 32 30 | 
             
              describe "fulltext" do
         | 
| 33 | 
            -
                it "should  | 
| 34 | 
            -
                  expect(client).to receive(:append_query).with("query", "index1 index2")
         | 
| 35 | 
            -
                  allow(search).to receive(:indexes) { [:index1, :index2] }
         | 
| 36 | 
            -
                  search.fulltext("query")
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                it "should search all indexes by default" do
         | 
| 40 | 
            -
                  expect(client).to receive(:append_query).with("query", "*")
         | 
| 41 | 
            -
                  allow(search).to receive(:indexes) { [] }
         | 
| 31 | 
            +
                it "should define the query string" do
         | 
| 42 32 | 
             
                  search.fulltext("query")
         | 
| 33 | 
            +
                  expect(search.query_string).to eql("query")
         | 
| 43 34 | 
             
                end
         | 
| 44 35 | 
             
              end
         | 
| 45 36 |  | 
| 46 37 | 
             
              describe "with" do
         | 
| 47 38 | 
             
                it "should add a filter to the search" do
         | 
| 48 | 
            -
                  expect(Riddle::Client::Filter).to receive(:new).with("attr", 1, false)  | 
| 39 | 
            +
                  expect(Riddle::Client::Filter).to receive(:new).with("attr", 1, false) do
         | 
| 40 | 
            +
                    filter
         | 
| 41 | 
            +
                  end
         | 
| 49 42 | 
             
                  expect(filters).to receive(:<<).with(filter)
         | 
| 50 43 | 
             
                  client
         | 
| 51 44 | 
             
                  search.with(:attr, 1)
         | 
| @@ -54,7 +47,9 @@ describe Mongoid::Giza::Search do | |
| 54 47 |  | 
| 55 48 | 
             
              describe "without" do
         | 
| 56 49 | 
             
                it "should add a filter to the search" do
         | 
| 57 | 
            -
                  expect(Riddle::Client::Filter).to receive(:new).with("attr", 1, true)  | 
| 50 | 
            +
                  expect(Riddle::Client::Filter).to receive(:new).with("attr", 1, true) do
         | 
| 51 | 
            +
                    filter
         | 
| 52 | 
            +
                  end
         | 
| 58 53 | 
             
                  expect(filters).to receive(:<<).with(filter)
         | 
| 59 54 | 
             
                  client
         | 
| 60 55 | 
             
                  search.without(:attr, 1)
         | 
| @@ -69,30 +64,57 @@ describe Mongoid::Giza::Search do | |
| 69 64 | 
             
              end
         | 
| 70 65 |  | 
| 71 66 | 
             
              describe "run" do
         | 
| 72 | 
            -
                 | 
| 73 | 
            -
             | 
| 67 | 
            +
                let(:result) { double("result") }
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                before do
         | 
| 70 | 
            +
                  search.fulltext("query")
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                it "should execute the query" do
         | 
| 74 | 
            +
                  allow(search).to receive(:indexes) { [:index1, :index2] }
         | 
| 75 | 
            +
                  expect(client).to receive(:query).with("query", "index1 index2")
         | 
| 74 76 | 
             
                  search.run
         | 
| 75 77 | 
             
                end
         | 
| 76 78 |  | 
| 77 | 
            -
                it "should  | 
| 78 | 
            -
                  expect(client).to receive(: | 
| 79 | 
            -
                   | 
| 79 | 
            +
                it "should search all indexes by default" do
         | 
| 80 | 
            +
                  expect(client).to receive(:query).with("query", "*")
         | 
| 81 | 
            +
                  search.run
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                it "should return the result of the query" do
         | 
| 85 | 
            +
                  allow(client).to receive(:query).with("query", "*") { result }
         | 
| 86 | 
            +
                  expect(search.run).to be result
         | 
| 80 87 | 
             
                end
         | 
| 81 88 | 
             
              end
         | 
| 82 89 |  | 
| 83 90 | 
             
              describe "riddle methods mapping" do
         | 
| 84 | 
            -
                 | 
| 85 | 
            -
                   | 
| 86 | 
            -
             | 
| 91 | 
            +
                context "with no argument" do
         | 
| 92 | 
            +
                  it "should respond to method from riddle" do
         | 
| 93 | 
            +
                    allow(client).to receive(:respond_to?).with(:offset) { true }
         | 
| 94 | 
            +
                    expect(client).to receive(:"offset").with(no_args)
         | 
| 95 | 
            +
                    search.offset
         | 
| 96 | 
            +
                  end
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                context "with one argument" do
         | 
| 100 | 
            +
                  it "should respond to method from riddle" do
         | 
| 101 | 
            +
                    allow(client).to receive(:respond_to?).with("offset=") { true }
         | 
| 102 | 
            +
                    expect(client).to receive(:"offset=").with(1)
         | 
| 103 | 
            +
                    search.offset(1)
         | 
| 104 | 
            +
                  end
         | 
| 87 105 | 
             
                end
         | 
| 88 106 |  | 
| 89 | 
            -
                 | 
| 90 | 
            -
                   | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 107 | 
            +
                context "with multiple arguments" do
         | 
| 108 | 
            +
                  it "should respond to method from riddle" do
         | 
| 109 | 
            +
                    allow(client).to receive(:respond_to?).with(:offset) { true }
         | 
| 110 | 
            +
                    expect(client).to receive(:"offset").with(1, 2)
         | 
| 111 | 
            +
                    search.offset(1, 2)
         | 
| 112 | 
            +
                  end
         | 
| 93 113 | 
             
                end
         | 
| 94 114 |  | 
| 95 | 
            -
                it "should raise an error when the equivalent riddle's method does not  | 
| 115 | 
            +
                it "should raise an error when the equivalent riddle's method does not " \
         | 
| 116 | 
            +
                  "exists" do
         | 
| 117 | 
            +
                  allow(client).to receive(:respond_to?).with(:idontexist) { false }
         | 
| 96 118 | 
             
                  allow(client).to receive(:respond_to?).with("idontexist=") { false }
         | 
| 97 119 | 
             
                  expect { search.idontexist }.to raise_error(NoMethodError)
         | 
| 98 120 | 
             
                end
         | 
| @@ -15,20 +15,38 @@ describe Mongoid::Giza::XMLPipe2 do | |
| 15 15 | 
             
                  allow(@index).to receive(:fields) { [@field] }
         | 
| 16 16 | 
             
                  allow(@index).to receive(:attributes) { [@attribute] }
         | 
| 17 17 | 
             
                  allow(@field).to receive(:name) { :name }
         | 
| 18 | 
            +
                  allow(@field).to receive(:attribute)
         | 
| 18 19 | 
             
                  allow(@attribute).to receive(:name) { :age }
         | 
| 19 | 
            -
                  allow(@attribute).to receive(:type) { : | 
| 20 | 
            +
                  allow(@attribute).to receive(:type) { :int }
         | 
| 21 | 
            +
                  allow(@attribute).to receive(:default)
         | 
| 22 | 
            +
                  allow(@attribute).to receive(:bits)
         | 
| 20 23 | 
             
                end
         | 
| 21 24 |  | 
| 22 25 | 
             
                it "should generate the schema of the docset" do
         | 
| 23 | 
            -
                  allow(@field).to receive(:attribute) { false }
         | 
| 24 26 | 
             
                  xmlpipe2.generate_schema
         | 
| 25 | 
            -
                  expect(@buffer).to eql('<sphinx:schema><sphinx:field name="name" | 
| 27 | 
            +
                  expect(@buffer).to eql('<sphinx:schema><sphinx:field name="name"/>' \
         | 
| 28 | 
            +
                    '<sphinx:attr name="age" type="int"/></sphinx:schema>')
         | 
| 26 29 | 
             
                end
         | 
| 27 30 |  | 
| 28 31 | 
             
                it "should generate a field attribute" do
         | 
| 29 32 | 
             
                  allow(@field).to receive(:attribute) { true }
         | 
| 30 33 | 
             
                  xmlpipe2.generate_schema
         | 
| 31 | 
            -
                  expect(@buffer).to eql('<sphinx:schema><sphinx:field name="name"  | 
| 34 | 
            +
                  expect(@buffer).to eql('<sphinx:schema><sphinx:field name="name" '\
         | 
| 35 | 
            +
                    'attr="string"/><sphinx:attr name="age" type="int"/></sphinx:schema>')
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                it "should include default attribute if present" do
         | 
| 39 | 
            +
                  allow(@attribute).to receive(:default) { 1 }
         | 
| 40 | 
            +
                  xmlpipe2.generate_schema
         | 
| 41 | 
            +
                  expect(@buffer).to eql('<sphinx:schema><sphinx:field name="name"/>' \
         | 
| 42 | 
            +
                    '<sphinx:attr name="age" type="int" default="1"/></sphinx:schema>')
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                it "should include bits attribute if present" do
         | 
| 46 | 
            +
                  allow(@attribute).to receive(:bits) { 16 }
         | 
| 47 | 
            +
                  xmlpipe2.generate_schema
         | 
| 48 | 
            +
                  expect(@buffer).to eql('<sphinx:schema><sphinx:field name="name"/>' \
         | 
| 49 | 
            +
                    '<sphinx:attr name="age" type="int" bits="16"/></sphinx:schema>')
         | 
| 32 50 | 
             
                end
         | 
| 33 51 | 
             
              end
         | 
| 34 52 |  | 
| @@ -40,19 +58,19 @@ describe Mongoid::Giza::XMLPipe2 do | |
| 40 58 | 
             
                  allow(@index).to receive(:fields) { [field] }
         | 
| 41 59 | 
             
                  allow(@index).to receive(:attributes) { [attribute] }
         | 
| 42 60 | 
             
                  allow(@index).to receive(:criteria) { [person] }
         | 
| 43 | 
            -
                  allow(person).to receive(: | 
| 61 | 
            +
                  allow(person).to receive(:_giza_id) { 1 }
         | 
| 44 62 | 
             
                  allow(xmlpipe2).to receive(:generate_doc_tags).with([field], person) do
         | 
| 45 63 | 
             
                    @buffer << "<name>Person One</name>"
         | 
| 46 64 | 
             
                  end
         | 
| 47 | 
            -
                  allow(xmlpipe2).to receive(:generate_doc_tags) | 
| 48 | 
            -
                    @buffer << "<age>25</age>"
         | 
| 49 | 
            -
                  end
         | 
| 65 | 
            +
                  allow(xmlpipe2).to receive(:generate_doc_tags)
         | 
| 66 | 
            +
                    .with([attribute], person) { @buffer << "<age>25</age>" }
         | 
| 50 67 | 
             
                end
         | 
| 51 68 |  | 
| 52 69 | 
             
                context "static fields and attributes" do
         | 
| 53 70 | 
             
                  it "should generate the document entries" do
         | 
| 54 71 | 
             
                    xmlpipe2.generate_docset
         | 
| 55 | 
            -
                    expect(@buffer).to eql('<sphinx:document id="1"><name>Person One | 
| 72 | 
            +
                    expect(@buffer).to eql('<sphinx:document id="1"><name>Person One' \
         | 
| 73 | 
            +
                      "</name><age>25</age></sphinx:document>")
         | 
| 56 74 | 
             
                  end
         | 
| 57 75 | 
             
                end
         | 
| 58 76 | 
             
              end
         | 
| @@ -65,7 +83,7 @@ describe Mongoid::Giza::XMLPipe2 do | |
| 65 83 | 
             
                  @person = {name: "Person One", bio: "About me"}
         | 
| 66 84 | 
             
                  allow(name).to receive(:name) { :name }
         | 
| 67 85 | 
             
                  allow(name).to receive(:block) do
         | 
| 68 | 
            -
                     | 
| 86 | 
            +
                    proc { |document| document[:name].upcase }
         | 
| 69 87 | 
             
                  end
         | 
| 70 88 | 
             
                  allow(bio).to receive(:name) { :bio }
         | 
| 71 89 | 
             
                  allow(bio).to receive(:block) { nil }
         | 
| @@ -73,26 +91,51 @@ describe Mongoid::Giza::XMLPipe2 do | |
| 73 91 |  | 
| 74 92 | 
             
                it "should generate all tags for the given fields or attributes" do
         | 
| 75 93 | 
             
                  xmlpipe2.generate_doc_tags(@fields, @person)
         | 
| 76 | 
            -
                  expect(@buffer).to eql( | 
| 94 | 
            +
                  expect(@buffer).to eql("<name>PERSON ONE</name><bio>About me</bio>")
         | 
| 77 95 | 
             
                end
         | 
| 78 96 | 
             
              end
         | 
| 79 97 |  | 
| 80 98 | 
             
              describe "generate!" do
         | 
| 81 99 | 
             
                it "should generate a xml file of the index" do
         | 
| 82 100 | 
             
                  result = '<?xml version="1.0" encoding="utf-8"?>'
         | 
| 83 | 
            -
                  result <<  | 
| 84 | 
            -
                  result << | 
| 85 | 
            -
             | 
| 86 | 
            -
                  result <<  | 
| 87 | 
            -
                  result << ' | 
| 101 | 
            +
                  result << "<sphinx:docset><sphinx:schema>"
         | 
| 102 | 
            +
                  result <<
         | 
| 103 | 
            +
                    '<sphinx:field name="name"/><sphinx:attr name="age" type="int"/>'
         | 
| 104 | 
            +
                  result << "</sphinx:schema>"
         | 
| 105 | 
            +
                  result << '<sphinx:document id="1"><name>Person One</name><age>25</age>' \
         | 
| 106 | 
            +
                    "</sphinx:document>"
         | 
| 107 | 
            +
                  result << "</sphinx:docset>"
         | 
| 88 108 | 
             
                  expect(xmlpipe2).to receive(:generate_schema) do
         | 
| 89 | 
            -
                    @buffer << '<sphinx:schema><sphinx:field name="name"/><sphinx:attr  | 
| 109 | 
            +
                    @buffer << '<sphinx:schema><sphinx:field name="name"/><sphinx:attr ' \
         | 
| 110 | 
            +
                      'name="age" type="int"/></sphinx:schema>'
         | 
| 90 111 | 
             
                  end
         | 
| 91 112 | 
             
                  expect(xmlpipe2).to receive(:generate_docset) do
         | 
| 92 | 
            -
                    @buffer << '<sphinx:document id="1"><name>Person One</name | 
| 113 | 
            +
                    @buffer << '<sphinx:document id="1"><name>Person One</name>' \
         | 
| 114 | 
            +
                      "<age>25</age></sphinx:document>"
         | 
| 93 115 | 
             
                  end
         | 
| 94 116 | 
             
                  xmlpipe2.generate!
         | 
| 95 117 | 
             
                  expect(@buffer).to eql(result)
         | 
| 96 118 | 
             
                end
         | 
| 97 119 | 
             
              end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
              describe "process_value" do
         | 
| 122 | 
            +
                let(:time_attr) { Mongoid::Giza::Index::Attribute.new(:at, :timestamp) }
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                let(:attribute) { Mongoid::Giza::Index::Attribute.new(:age, :uint) }
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                let(:object) { {at: @now, age: 50} }
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                before do
         | 
| 129 | 
            +
                  @now = Time.new(1)
         | 
| 130 | 
            +
                end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                it "should convert timestamp attributes to unix time" do
         | 
| 133 | 
            +
                  value = xmlpipe2.process_value(time_attr, object)
         | 
| 134 | 
            +
                  expect(Time.at(value)).to eq(@now)
         | 
| 135 | 
            +
                end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                it "should return other values as is" do
         | 
| 138 | 
            +
                  expect(xmlpipe2.process_value(attribute, object)).to be 50
         | 
| 139 | 
            +
                end
         | 
| 140 | 
            +
              end
         | 
| 98 141 | 
             
            end
         |