mongoid-giza 0.6.2 → 0.7.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 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: