de 0.0.4 → 0.0.5

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/de/de.rb CHANGED
@@ -114,30 +114,23 @@ module De
114
114
  str
115
115
  end
116
116
 
117
- # def to_hash
118
- # {
119
- # :name => @name,
120
- # :content => @content,
121
- # :class => self.class.name,
122
- # :children => children.map { |child| child.to_hash }
123
- # }
124
- # end
117
+ def to_hash
118
+ {
119
+ :name => @name,
120
+ :content => @content,
121
+ :class => self.class.name,
122
+ :children => children.map { |child| child.to_hash }
123
+ }
124
+ end
125
125
 
126
126
  class << self
127
127
 
128
- # def load(hash)
129
- # raise Error::InvalidExpressionError if (hash.keys - [:name, :content, :class, :children]).length > 0
130
- #
131
- # klass = hash[:class].constantize
132
- # params = case klass.method(:new).arity
133
- # when -1,0 then []
134
- # when -2,1 then [hash[:name]]
135
- # else [hash[:name], hash[:content]]
136
- # end
137
- #
138
- # obj = klass.send(:new, *params)
139
- # hash[:children].each { |child| obj << load(child) }
140
- # end
128
+ def load(hash)
129
+ raise Error::InvalidExpressionError if (hash.keys - [:name, :content, :class, :children]).length > 0
130
+
131
+ obj = hash[:class].constantize.send(:new, hash[:name], hash[:content])
132
+ hash[:children].each { |child| obj << load(child) }
133
+ end
141
134
  end
142
135
 
143
136
  private
@@ -143,8 +143,17 @@ module De
143
143
  #
144
144
  def |(obj)
145
145
  expression_content = []
146
- expression_content << SunspotSolr::And.new(self.children) if self.has_children?
147
- expression_content << SunspotSolr::And.new(obj.children) if obj.has_children?
146
+ [self, obj].select { |element| element.has_children? }.each do |element|
147
+ if element.children.length == 1
148
+ if element.first_child.is_a?(De::SunspotSolr::Or)
149
+ element.first_child.children.each { |child| expression_content << child }
150
+ else
151
+ expression_content << element.first_child
152
+ end
153
+ else
154
+ expression_content << SunspotSolr::And.new(element.children)
155
+ end
156
+ end
148
157
 
149
158
  Search.new("#{@name}+#{obj.name}", @klass, @options, expression_content.length > 0 ? [SunspotSolr::Or.new(expression_content)] : nil)
150
159
  end
@@ -204,6 +213,20 @@ module De
204
213
  evaluate(params).results
205
214
  end
206
215
 
216
+ # def to_hash
217
+ # children_hash = children.inject({}) { |result, child| result.merge(child.to_hash) }
218
+ # {:options => options, :children => children_hash}
219
+ # end
220
+ #
221
+ # class << self
222
+ #
223
+ # def load(hash)
224
+ # raise Error::InvalidExpressionError if (hash.keys - [:name, :content, :class, :children]).length > 0
225
+ #
226
+ # obj = hash[:class].constantize.send(:new, hash[:name], hash[:content])
227
+ # hash[:children].each { |child| obj << load(child) }
228
+ # end
229
+ # end
207
230
  end
208
231
  end
209
232
  end
data/lib/de/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module De
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -209,6 +209,64 @@ class DeSunspotSolrSearchTest < Test::Unit::TestCase
209
209
  assert_instance_of(And, and_operator2)
210
210
  assert_equal(2, and_operator2.children.length)
211
211
  assert(!and_operator2[operand.name].nil? && !and_operator2[operand2.name].nil? || !and_operator2[operand3.name].nil? && !and_operator2[operand4.name].nil?)
212
+
213
+ ###########
214
+ search1 = Search.new('search_product1', 'SomeClass', {
215
+ :properties => {
216
+ :client_id => {:type => :integer, :dynamic => false},
217
+ },
218
+ :dynamics => {:integer => :int_params, :string => :string_params, :time => :time_params, :text => :string_params}
219
+ })
220
+ search1 << operand
221
+ search1 << operand2
222
+ search2 = Search.new('search_product1', 'SomeClass', {
223
+ :properties => {
224
+ :client_id => {:type => :integer, :dynamic => false},
225
+ },
226
+ :dynamics => {:integer => :int_params, :string => :string_params, :time => :time_params, :text => :string_params}
227
+ })
228
+ search2 << operand3
229
+ search2 << operand4
230
+ search3 = Search.new('search_product1', 'SomeClass', {
231
+ :properties => {
232
+ :client_id => {:type => :integer, :dynamic => false},
233
+ },
234
+ :dynamics => {:integer => :int_params, :string => :string_params, :time => :time_params, :text => :string_params}
235
+ })
236
+ operand5 = EqualTo.new(:client_id, 61)
237
+ operand6 = EqualTo.new(:client_id, 92)
238
+ search3 << operand5
239
+ search3 << operand6
240
+ search = search1 | search2 | search3
241
+ assert_equal(1, search.children.length)
242
+ assert_instance_of(De::SunspotSolr::Or, search.first_child)
243
+ assert_equal(3, search.first_child.children.length)
244
+ (0..2).each do |index|
245
+ assert_instance_of(De::SunspotSolr::And, search.first_child.children[index])
246
+ assert_equal(2,search.first_child.children[index].children.length)
247
+ end
248
+
249
+ #########
250
+ search1 = Search.new('search_product1', 'SomeClass', {
251
+ :properties => {
252
+ :client_id => {:type => :integer, :dynamic => false},
253
+ },
254
+ :dynamics => {:integer => :int_params, :string => :string_params, :time => :time_params, :text => :string_params}
255
+ })
256
+ search1 << operand
257
+ search2 = Search.new('search_product1', 'SomeClass', {
258
+ :properties => {
259
+ :client_id => {:type => :integer, :dynamic => false},
260
+ },
261
+ :dynamics => {:integer => :int_params, :string => :string_params, :time => :time_params, :text => :string_params}
262
+ })
263
+ search2 << operand3
264
+ search = search1 | search2
265
+ assert_equal(1, search.children.length)
266
+ assert_instance_of(De::SunspotSolr::Or, search.first_child)
267
+ assert_equal(2, search.first_child.children.length)
268
+ assert_equal(operand, search.first_child.children[0])
269
+ assert_equal(operand3, search.first_child.children[1])
212
270
  end
213
271
 
214
272
  def test_intersection
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: de
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Olga Gorun
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-23 00:00:00 +03:00
18
+ date: 2011-10-04 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency