mongoid-giza 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9edb036ce36b11799e47d366dd694c9b85ea5cba
4
- data.tar.gz: 1d91150beaa2ed2afd8b8328805df93394b59496
3
+ metadata.gz: 8593011380c8765b61fdf11371d82e7427889d30
4
+ data.tar.gz: 5d74f081406d8d50a3c76f588d17283ca2734606
5
5
  SHA512:
6
- metadata.gz: bf0041aab836a2511ca73c02b7540e6562747d39e0cee50ac15df020aaa23183d2fa8905e9ada8a7b45020371464290b08b537f638eba0c88aa75e1d4e384104
7
- data.tar.gz: 5d37e08e2e3332cbfdabb2ef80ae38bf75460aa103022e55e1b400e9e7fd557bc2ba782d4704f52d383195a3cfa7f7281b56c990e0d4d00817826ee12216f3af
6
+ metadata.gz: b3fc45f6e90137143f01bce79c31a525a1fada5174077c89ee7ac0dfe8aa267f8f219fdcf8a244b7bdbebe74f0082fa9e988e31b1c05294259b26d1ea1c0c920
7
+ data.tar.gz: edadbb151bff73bb6834a05db6775b2565e1c4a4006d3169abbacb6abbcc310ba4c42c45ea8f5c31729d02fcfab77585fe7a6f8e5c4cf0e50a4c5673a08fae99
@@ -1,10 +1,20 @@
1
- Style/SpaceInsideHashLiteralBraces:
2
- EnforcedStyle: no_space
1
+ AllCops:
2
+ TargetRubyVersion: 2.0
3
+
4
+ Metrics/BlockLength:
5
+ Exclude:
6
+ - "**/*_spec.rb"
7
+ - "mongoid-giza.gemspec"
3
8
 
4
9
  Style/Encoding:
5
10
  Enabled: true
6
11
  EnforcedStyle: when_needed
7
12
 
13
+ Style/FrozenStringLiteralComment:
14
+ Enabled: false
15
+
16
+ Style/SpaceInsideHashLiteralBraces:
17
+ EnforcedStyle: no_space
18
+
8
19
  Style/StringLiterals:
9
20
  EnforcedStyle: double_quotes
10
-
@@ -1,8 +1,9 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
3
  - 2.0.0
5
- - 2.1.6
6
- - 2.2.2
4
+ - 2.1.10
5
+ - 2.2.6
6
+ - 2.3.3
7
+ - 2.4.0
7
8
  services:
8
9
  - mongodb
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.0
4
+
5
+ #### Mongoid::Giza now requires Ruby >= 2.0
6
+
7
+ ### Breaking changes
8
+
9
+ * `Mongoid::Giza::Search#order_by` now accepts multiple ordering as a `Hash` (i.e.: `order_by age: :asc, :@id => :desc`)
10
+
11
+ ### Fixes
12
+
13
+ * Defined **Mongoid < 5.0** and **ActiveSupport < 5.0** as greater versions are not yet supported
14
+ * Use `YAML#safe_load` when available **(Ruby >= 2.1)**
15
+
3
16
  ## 0.6.2
4
17
 
5
18
  * Allow underscore on fields' and attributes' names
data/README.md CHANGED
@@ -180,8 +180,9 @@ Every other [Riddle::Client](http://rdoc.info/github/pat/riddle/Riddle/Client) s
180
180
  ```ruby
181
181
  result = Person.search do
182
182
  fulltext "john"
183
- with :age 18..40
184
- order_by :age :asc
183
+ with :age, 18..40
184
+ sort_mode :extended
185
+ order_by age: :asc, :@id => :desc
185
186
  end
186
187
 
187
188
  result[:Person].each do |person|
@@ -189,6 +190,15 @@ result[:Person].each do |person|
189
190
  end
190
191
  ```
191
192
 
193
+ #### Sorting MongoDB results
194
+
195
+ MongoDB doesn't return the documents on the "arbitrary" order defined by Sphinx. To maintain the Sphinx ordering you can do:
196
+
197
+ ```ruby
198
+ giza_ids = result[:matches].map { |match| match[:doc] }
199
+ people = result[:Person].sort_by { |person| giza_ids.index(person._giza_id) }
200
+ ```
201
+
192
202
  ## TODO
193
203
 
194
204
  * Support delta indexing
@@ -59,7 +59,7 @@ module Mongoid
59
59
  def generate_sphinx_indexes
60
60
  self.class.dynamic_sphinx_indexes.each do |dynamic_index|
61
61
  index = dynamic_index.generate_index(self)
62
- self.class.generated_sphinx_indexes.merge!(index.name => index)
62
+ self.class.generated_sphinx_indexes[index.name] = index
63
63
  self.class.giza_configuration.add_index(index, true)
64
64
  end
65
65
  end
@@ -174,13 +174,13 @@ module Mongoid
174
174
  # @param names [Array] a list of index names of this class that will be
175
175
  # indexed
176
176
  def sphinx_indexer!(*names)
177
- if names.length > 0
177
+ if !names.empty?
178
178
  indexes_names =
179
179
  sphinx_indexes_names.select { |name| names.include?(name) }
180
180
  else
181
181
  indexes_names = sphinx_indexes_names
182
182
  end
183
- Indexer.instance.index!(*indexes_names) if indexes_names.length > 0
183
+ Indexer.instance.index!(*indexes_names) unless indexes_names.empty?
184
184
  end
185
185
 
186
186
  # Retrieves all the sphinx indexes defined on this class, static and
@@ -27,8 +27,8 @@ module Mongoid
27
27
  # defined
28
28
  # @param env [String] environment whoose settings will be loaded
29
29
  def load(path, env)
30
- YAML.load(File.open(path).read)[env].each do |section_name, settings|
31
- section = instance_variable_get("@#{section_name}")
30
+ yaml_safe_load(File.open(path).read)[env].each do |section, settings|
31
+ section = instance_variable_get("@#{section}")
32
32
  next unless section
33
33
  settings.each do |setting, value|
34
34
  unless section == @index || section == @source
@@ -98,7 +98,7 @@ module Mongoid
98
98
  # set
99
99
  def apply_default_settings(default, section, index)
100
100
  default.class.settings.each do |setting|
101
- value = interpolate_string(default.send("#{setting}"), index)
101
+ value = interpolate_string(default.send(setting.to_s), index)
102
102
  setter(section, setting, value) unless value.nil?
103
103
  end
104
104
  end
@@ -128,7 +128,7 @@ module Mongoid
128
128
  # a generated {Mongoid::Giza::Index}
129
129
  def clear_generated_indexes
130
130
  @generated_indexes.each { |_, index| indices.delete(index) }
131
- @generated_indexes = {}
131
+ @generated_indexes = {}
132
132
  end
133
133
 
134
134
  # Removes Riddle::Index's specifieds as params
@@ -157,9 +157,8 @@ module Mongoid
157
157
  namespace = index.nil? ? Object.new : OpenStruct.new(index: index)
158
158
  if value.is_a?(String)
159
159
  return ERB.new(value).result(namespace.instance_eval { binding })
160
- else
161
- return value
162
160
  end
161
+ value
163
162
  end
164
163
 
165
164
  # Helper method to set a value to a setting from a section (i.e. indexer,
@@ -174,6 +173,16 @@ module Mongoid
174
173
  method = "#{setting}="
175
174
  section.send(method, value) if section.respond_to?(method)
176
175
  end
176
+
177
+ private
178
+
179
+ def yaml_safe_load(yaml_code)
180
+ if YAML.respond_to?(:safe_load)
181
+ YAML.safe_load(yaml_code)
182
+ else
183
+ YAML.load(yaml_code) # rubocop:disable Security/YAMLLoad
184
+ end
185
+ end
177
186
  end
178
187
  end
179
188
  end
@@ -20,7 +20,7 @@ module Mongoid
20
20
  Hash => :json,
21
21
  BSON::ObjectId => :string,
22
22
  ActiveSupport::TimeWithZone => :timestamp
23
- }
23
+ }.freeze
24
24
 
25
25
  attr_accessor :klass, :settings, :fields, :attributes
26
26
 
@@ -79,11 +79,11 @@ module Mongoid
79
79
  def attribute(name, type = nil, options = {}, &block)
80
80
  unless type
81
81
  field = @klass.fields[name.to_s]
82
- if field
83
- type = TYPES_MAP[field.type] || :string
84
- else
85
- type = :string
86
- end
82
+ type = if field
83
+ TYPES_MAP[field.type] || :string
84
+ else
85
+ :string
86
+ end
87
87
  end
88
88
  @attributes << Attribute.new(name, type, options, &block)
89
89
  end
@@ -9,7 +9,7 @@ module Mongoid
9
9
  TYPES = [
10
10
  :uint, :bool, :bigint, :timestamp, :float,
11
11
  :multi, :multi_64, :string, :json
12
- ]
12
+ ].freeze
13
13
 
14
14
  attr_accessor :default, :bits, :block
15
15
  attr_reader :name, :type
@@ -31,10 +31,11 @@ module Mongoid
31
31
  # @raise [TypeError] if the type is not valid. (see
32
32
  # {Mongoid::Giza::Index::Attribute::TYPES})
33
33
  def initialize(name, type, options = {}, &block)
34
- fail TypeError,
35
- "Attribute type not supported. " \
36
- "It must be one of the following: " \
37
- "#{TYPES.join(', ')}" unless TYPES.include? type
34
+ unless TYPES.include? type
35
+ raise TypeError,
36
+ "Attribute type not supported. It must be one of the " \
37
+ "following: #{TYPES.join(', ')}"
38
+ end
38
39
  @name = normalize(name)
39
40
  @type = type
40
41
  @block = block
@@ -5,7 +5,7 @@ module Mongoid
5
5
  attr_accessor :indexes, :query_string
6
6
  attr_reader :client
7
7
 
8
- alias_method :fulltext, :query_string=
8
+ alias fulltext query_string=
9
9
 
10
10
  # Creates a new search
11
11
  #
@@ -43,18 +43,19 @@ module Mongoid
43
43
 
44
44
  # Sets the order in which the results will be returned
45
45
  #
46
- # @param attribute [Symbol] the attribute used for sorting
47
- # @param order [Symbol] the order of the sorting. Valid values are :asc
48
- # and :desc
49
- def order_by(attribute, order)
50
- @client.sort_by = "#{attribute} #{order.to_s.upcase}"
46
+ # @param ordering [Hash] a hash with attribute names as keys and order
47
+ # as values (i.e.: attr1: :desc, attr2: :asc)
48
+ def order_by(ordering)
49
+ @client.sort_by = ordering.map do |attribute, order|
50
+ "#{attribute} #{order.to_s.upcase}"
51
+ end.join(", ")
51
52
  end
52
53
 
53
54
  # Executes the configured query
54
55
  #
55
56
  # @return [Array] an Array of Hashes as specified by Riddle::Response
56
57
  def run
57
- index = indexes.length > 0 ? indexes.join(" ") : "*"
58
+ index = !indexes.empty? ? indexes.join(" ") : "*"
58
59
  @client.query(query_string, index)
59
60
  end
60
61
 
@@ -92,6 +93,12 @@ module Mongoid
92
93
  @client.send method, *args
93
94
  end
94
95
  end
96
+
97
+ def respond_to_missing?(method, include_private = false)
98
+ @client.respond_to?(method) ||
99
+ @client.respond_to?("#{method}=") ||
100
+ super
101
+ end
95
102
  end
96
103
  end
97
104
  end
@@ -1,6 +1,6 @@
1
1
  module Mongoid
2
2
  # :nodoc:
3
3
  module Giza
4
- VERSION = "0.6.2"
4
+ VERSION = "0.7.0".freeze
5
5
  end
6
6
  end
@@ -104,9 +104,8 @@ module Mongoid
104
104
  def process_value(content, object)
105
105
  if content.is_a?(Index::Attribute) && content.type == :timestamp
106
106
  return object[content.name].to_time.to_i
107
- else
108
- return object[content.name]
109
107
  end
108
+ object[content.name]
110
109
  end
111
110
  end
112
111
  end
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
21
 
22
+ spec.required_ruby_version = ">= 2.0"
23
+
22
24
  spec.add_development_dependency "bundler", "~> 1.3"
23
25
  spec.add_development_dependency "rake"
24
26
  spec.add_development_dependency "rspec", ">= 2.14"
@@ -27,9 +29,9 @@ Gem::Specification.new do |spec|
27
29
  spec.add_development_dependency "database_cleaner", ">= 1.2.0"
28
30
  spec.add_development_dependency "rubocop", ">= 0.29.0"
29
31
 
30
- spec.add_runtime_dependency "mongoid", ">= 4.0"
32
+ spec.add_runtime_dependency "mongoid", ">= 4.0", "< 5.0"
31
33
  spec.add_runtime_dependency "riddle", ">= 1.5.11"
32
34
  spec.add_runtime_dependency "builder", ">= 3.0"
33
35
  spec.add_runtime_dependency "docile", ">= 1.1"
34
- spec.add_runtime_dependency "activesupport", ">= 4.0"
36
+ spec.add_runtime_dependency "activesupport", ">= 4.0", "< 5.0"
35
37
  end
@@ -359,7 +359,7 @@ describe Mongoid::Giza::Configuration do
359
359
  end
360
360
 
361
361
  describe "setter" do
362
- let(:section) { double("section") }
362
+ let(:section) { double("section") }
363
363
 
364
364
  let(:value) { double("value") }
365
365
 
@@ -381,7 +381,7 @@ describe Mongoid::Giza::Configuration do
381
381
  end
382
382
 
383
383
  describe "remove_generated_indexes" do
384
- let(:indices) { double("indices") }
384
+ let(:indices) { double("indices") }
385
385
 
386
386
  before do
387
387
  @config.instance_variable_set("@generated_indexes", name: :index,
@@ -22,7 +22,7 @@ describe Mongoid::Giza::Search do
22
22
 
23
23
  it "should accept a index list" do
24
24
  indexes = Mongoid::Giza::Search.new("localhost", 9132, [:index1, :index2])
25
- .indexes
25
+ .indexes
26
26
  expect(indexes).to eql([:index1, :index2])
27
27
  end
28
28
  end
@@ -59,7 +59,12 @@ describe Mongoid::Giza::Search do
59
59
  describe "order_by" do
60
60
  it "should set the search order" do
61
61
  expect(client).to receive(:sort_by=).with("attr ASC")
62
- search.order_by(:attr, :asc)
62
+ search.order_by(attr: :asc)
63
+ end
64
+
65
+ it "should accept a multiple ordering" do
66
+ expect(client).to receive(:sort_by=).with("attr1 ASC, attr2 DESC")
67
+ search.order_by(attr1: :asc, attr2: :desc)
63
68
  end
64
69
  end
65
70
 
@@ -287,14 +287,13 @@ describe Mongoid::Giza do
287
287
 
288
288
  it "should generate all the dynamic indexes of the class for the object" do
289
289
  expect(dynamic_index).to receive(:generate_index).with(person)
290
- .twice { index }
290
+ .twice { index }
291
291
  person.generate_sphinx_indexes
292
292
  end
293
293
 
294
294
  it "should merge the resulting indexes to the class' generated indexes" do
295
- expect(Person.generated_sphinx_indexes).to receive(:merge!)
296
- .with(name: index).twice
297
295
  person.generate_sphinx_indexes
296
+ expect(Person.generated_sphinx_indexes[:name]).to be(index)
298
297
  end
299
298
 
300
299
  it "should add the indexes to the configuration" do
@@ -18,7 +18,7 @@ MONGOID_CONFIG = {
18
18
  hosts: ["localhost:27017"]
19
19
  }
20
20
  }
21
- }
21
+ }.freeze
22
22
 
23
23
  Mongoid.configure do |config|
24
24
  config.load_configuration(MONGOID_CONFIG)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-giza
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maurício Batista
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-14 00:00:00.000000000 Z
11
+ date: 2017-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -115,6 +115,9 @@ dependencies:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '4.0'
118
+ - - "<"
119
+ - !ruby/object:Gem::Version
120
+ version: '5.0'
118
121
  type: :runtime
119
122
  prerelease: false
120
123
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,6 +125,9 @@ dependencies:
122
125
  - - ">="
123
126
  - !ruby/object:Gem::Version
124
127
  version: '4.0'
128
+ - - "<"
129
+ - !ruby/object:Gem::Version
130
+ version: '5.0'
125
131
  - !ruby/object:Gem::Dependency
126
132
  name: riddle
127
133
  requirement: !ruby/object:Gem::Requirement
@@ -171,6 +177,9 @@ dependencies:
171
177
  - - ">="
172
178
  - !ruby/object:Gem::Version
173
179
  version: '4.0'
180
+ - - "<"
181
+ - !ruby/object:Gem::Version
182
+ version: '5.0'
174
183
  type: :runtime
175
184
  prerelease: false
176
185
  version_requirements: !ruby/object:Gem::Requirement
@@ -178,6 +187,9 @@ dependencies:
178
187
  - - ">="
179
188
  - !ruby/object:Gem::Version
180
189
  version: '4.0'
190
+ - - "<"
191
+ - !ruby/object:Gem::Version
192
+ version: '5.0'
181
193
  description: Mongoid layer for the Sphinx fulltext search server that supports block
182
194
  fields and dynamic indexes
183
195
  email:
@@ -232,7 +244,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
232
244
  requirements:
233
245
  - - ">="
234
246
  - !ruby/object:Gem::Version
235
- version: '0'
247
+ version: '2.0'
236
248
  required_rubygems_version: !ruby/object:Gem::Requirement
237
249
  requirements:
238
250
  - - ">="
@@ -240,7 +252,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
240
252
  version: '0'
241
253
  requirements: []
242
254
  rubyforge_project:
243
- rubygems_version: 2.4.6
255
+ rubygems_version: 2.6.10
244
256
  signing_key:
245
257
  specification_version: 4
246
258
  summary: Mongoid layer for the Sphinx fulltext search server
@@ -257,4 +269,3 @@ test_files:
257
269
  - spec/mongoid/giza/xml_pipe2_spec.rb
258
270
  - spec/mongoid/giza_spec.rb
259
271
  - spec/spec_helper.rb
260
- has_rdoc: