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
|