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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e68c24c85a8ab1a5058c90204c1b4b48c8894717
|
4
|
+
data.tar.gz: 23a10d3f8db970eef859cb5b4675f15c42cdf4c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ebbc8f78cae69b1eac182a59ceadbc9b1b3c6c43f968e190d75078a812fb939df5967ba59740df6ae6304ac12eb65f2332a8d308587d4b48fe820ccef609f8f
|
7
|
+
data.tar.gz: 08c98fb01da3de22b160cbebe2c8a7c69eee0124e26cfc2f5d8078d6e41f324cce8e52660c2644391570fd9742ca0195b6ca801d7b801145754608fb704bcfc9
|
data/.rubocop.yml
ADDED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.6.0
|
4
|
+
|
5
|
+
* Mongoid 4 or higher is now required
|
6
|
+
* Removed charset_type option, since it has been removed from spinx since 2.2.2-beta. You can still define it in your confuguration if you're using an older sphinx version
|
7
|
+
* Renamed `Mongoid::Giza::GizaID` to `Mongoid::Giza::ID`
|
8
|
+
* Renamed `Mongoid::Giza::ID::next_id to Mongoid::Giza::ID::next`
|
9
|
+
* Renamed `giza_id` to `_giza_id`. Now it's a regular field instead of being dynamically assigned when needed
|
10
|
+
* Support for `default` and `bits` for attributes
|
11
|
+
* Removed *str2ordinal* and *str2wordcount* attribute types
|
12
|
+
* Automatically convert Date, Time and DateTime attributes to unix time
|
13
|
+
* Only support **ONE** fulltext query by *search block*. Instead of returning an Array o result Hashes now it only returns a result Hash
|
14
|
+
|
3
15
|
## 0.5.1
|
4
16
|
|
5
17
|
* Create a sparse unique index on `giza_id` field
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -168,7 +168,6 @@ Use the `search` block on the class that have the indexes where the search shoul
|
|
168
168
|
It returns a result array, where each position of the array is a [riddle result hash](http://rdoc.info/github/pat/riddle/Riddle/Client#query-instance_method), plus a key with the class name, that has the `Mongoid::Criteria` that selects the matching objects from the mongo database.
|
169
169
|
|
170
170
|
Inside the `search` block use the `fulltext` method to perform a fulltext search.
|
171
|
-
If multiple `fulltext` are called inside a `search` block, then each one will generate a separated query and will return a new position o the results array.
|
172
171
|
|
173
172
|
To filter your search using the attributes defined on the index creation, use the `with` and `without` methods, that accept the name of the attribute and the value or range.
|
174
173
|
|
@@ -179,13 +178,13 @@ Every other [Riddle::Client](http://rdoc.info/github/pat/riddle/Riddle/Client) s
|
|
179
178
|
**Example:** Searching on the person class
|
180
179
|
|
181
180
|
```ruby
|
182
|
-
|
181
|
+
result = Person.search do
|
183
182
|
fulltext "john"
|
184
183
|
with :age 18..40
|
185
184
|
order_by :age :asc
|
186
185
|
end
|
187
186
|
|
188
|
-
|
187
|
+
result[:Person].each do |person|
|
189
188
|
puts "#{person.name} is #{person.age} years old"
|
190
189
|
end
|
191
190
|
```
|
data/Rakefile
CHANGED
@@ -3,9 +3,17 @@ Bundler.setup
|
|
3
3
|
|
4
4
|
require "bundler/gem_tasks"
|
5
5
|
require "rspec/core/rake_task"
|
6
|
+
require "rubocop/rake_task"
|
6
7
|
|
7
|
-
|
8
|
+
RuboCop::RakeTask.new(:rubocop)
|
9
|
+
|
10
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
8
11
|
spec.pattern = "spec/**/*_spec.rb"
|
9
12
|
end
|
10
13
|
|
11
|
-
task
|
14
|
+
task :build do
|
15
|
+
Rake::Task[:rubocop].invoke
|
16
|
+
Rake::Task[:spec].invoke
|
17
|
+
end
|
18
|
+
|
19
|
+
task default: :build
|
data/lib/mongoid/giza.rb
CHANGED
@@ -7,18 +7,18 @@ require "mongoid/giza/index"
|
|
7
7
|
require "mongoid/giza/index/field"
|
8
8
|
require "mongoid/giza/index/attribute"
|
9
9
|
require "mongoid/giza/indexer"
|
10
|
-
require "mongoid/giza/models/
|
10
|
+
require "mongoid/giza/models/id"
|
11
11
|
require "mongoid/giza/railtie" if defined?(Rails)
|
12
12
|
require "mongoid/giza/search"
|
13
13
|
require "mongoid/giza/version"
|
14
14
|
require "mongoid/giza/xml_pipe2"
|
15
15
|
|
16
16
|
module Mongoid
|
17
|
-
|
18
17
|
# Module that should be included in a Mongoid::Document in order to
|
19
|
-
#
|
18
|
+
# index fields of documents of this class
|
20
19
|
#
|
21
|
-
# @example Creating a simple index with a full-text field (named fts) and an
|
20
|
+
# @example Creating a simple index with a full-text field (named fts) and an
|
21
|
+
# attribute (named attr)
|
22
22
|
# class Person
|
23
23
|
# include Mongoid::Document
|
24
24
|
# include Mongoid::Giza
|
@@ -32,7 +32,8 @@ module Mongoid
|
|
32
32
|
# end
|
33
33
|
# end
|
34
34
|
#
|
35
|
-
# @example Searching the previously defined index for people named John
|
35
|
+
# @example Searching the previously defined index for people named John
|
36
|
+
# between 18 and 59 years old
|
36
37
|
# results = Person.search do
|
37
38
|
# fulltext "john"
|
38
39
|
# with age: 18..59
|
@@ -43,57 +44,56 @@ module Mongoid
|
|
43
44
|
extend ActiveSupport::Concern
|
44
45
|
|
45
46
|
included do
|
46
|
-
|
47
|
-
|
47
|
+
ID.create(id: name.to_sym) unless ID.where(id: name.to_sym).count == 1
|
48
|
+
field :_giza_id, type: Integer,
|
49
|
+
default: -> { ID.next(self.class.name.to_sym) }
|
50
|
+
index({_giza_id: 1}, sparse: true, unique: true)
|
48
51
|
@giza_configuration = Configuration.instance
|
49
52
|
@static_sphinx_indexes = {}
|
50
53
|
@generated_sphinx_indexes = {}
|
51
54
|
@dynamic_sphinx_indexes = []
|
52
55
|
end
|
53
56
|
|
54
|
-
# Retrives the sphinx compatible id of the object.
|
55
|
-
# If the id does not exists yet, it will be generated
|
56
|
-
#
|
57
|
-
# @return [Integer] the object's integer id generated by Giza
|
58
|
-
def giza_id
|
59
|
-
set(:giza_id, GizaID.next_id(self.class.name.to_sym)) if self[:giza_id].nil?
|
60
|
-
self[:giza_id]
|
61
|
-
end
|
62
|
-
|
63
57
|
# Generates all the dynamic indexes defined on the class for the object
|
64
58
|
def generate_sphinx_indexes
|
65
59
|
self.class.dynamic_sphinx_indexes.each do |dynamic_index|
|
66
60
|
index = dynamic_index.generate_index(self)
|
67
|
-
self.class.generated_sphinx_indexes.merge!(
|
61
|
+
self.class.generated_sphinx_indexes.merge!(index.name => index)
|
68
62
|
self.class.giza_configuration.add_index(index, true)
|
69
63
|
end
|
70
64
|
end
|
71
65
|
|
66
|
+
# :nodoc:
|
72
67
|
module ClassMethods
|
73
|
-
attr_reader :giza_configuration, :static_sphinx_indexes,
|
68
|
+
attr_reader :giza_configuration, :static_sphinx_indexes,
|
69
|
+
:generated_sphinx_indexes, :dynamic_sphinx_indexes
|
74
70
|
|
75
|
-
# Class method that defines a index relative to the current class
|
76
|
-
# If an argument is given in the block then a dynamic index will be
|
71
|
+
# Class method that defines a index relative to the current class objects.
|
72
|
+
# If an argument is given in the block then a dynamic index will be
|
73
|
+
# created.
|
77
74
|
# Otherwise it will create a static index.
|
78
75
|
#
|
79
76
|
# @param settings [Hash] optional settings for the index and it's source
|
80
|
-
# @param block [Proc] a block that will be evaluated on an
|
77
|
+
# @param block [Proc] a block that will be evaluated on an
|
78
|
+
# {Mongoid::Giza::Index}
|
81
79
|
def sphinx_index(settings = {}, &block)
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
end
|
80
|
+
return unless block_given?
|
81
|
+
if block.arity > 0
|
82
|
+
add_dynamic_sphinx_index(settings, block)
|
83
|
+
else
|
84
|
+
add_static_sphinx_index(settings, block)
|
88
85
|
end
|
89
86
|
end
|
90
87
|
|
91
88
|
# Adds an dynamic index to the class.
|
92
|
-
# Will also automatically generate the dynamic index for each object of
|
89
|
+
# Will also automatically generate the dynamic index for each object of
|
90
|
+
# the class
|
93
91
|
#
|
94
92
|
# @param settings [Hash] settings for the index and it's source
|
95
|
-
# @param block [Proc] a block that will be evaluated on an
|
96
|
-
#
|
93
|
+
# @param block [Proc] a block that will be evaluated on an
|
94
|
+
# {Mongoid::Giza::Index}.
|
95
|
+
# The block receives one argument that is the current object of the
|
96
|
+
# class for which the index will be generated
|
97
97
|
def add_dynamic_sphinx_index(settings, block)
|
98
98
|
dynamic_index = DynamicIndex.new(self, settings, block)
|
99
99
|
dynamic_sphinx_indexes << dynamic_index
|
@@ -103,7 +103,8 @@ module Mongoid
|
|
103
103
|
# Adds an static index to the class
|
104
104
|
#
|
105
105
|
# @param settings [Hash] settings for the index and it's source
|
106
|
-
# @param block [Proc] a block that will be evaluated on an
|
106
|
+
# @param block [Proc] a block that will be evaluated on an
|
107
|
+
# {Mongoid::Giza::Index}.
|
107
108
|
def add_static_sphinx_index(settings, block)
|
108
109
|
index = Index.new(self, settings)
|
109
110
|
Docile.dsl_eval(index, &block)
|
@@ -114,66 +115,104 @@ module Mongoid
|
|
114
115
|
# Generates the indexes from the dynamic index and
|
115
116
|
# registers them on the class and on the configuration
|
116
117
|
#
|
117
|
-
# @param dynamic_index [Mongoid::Giza::DynamicIndex] the dynamic index
|
118
|
+
# @param dynamic_index [Mongoid::Giza::DynamicIndex] the dynamic index
|
119
|
+
# which will generate the static indexes from
|
118
120
|
def process_dynamic_sphinx_index(dynamic_index)
|
119
121
|
generated = dynamic_index.generate!
|
120
122
|
generated_sphinx_indexes.merge!(generated)
|
121
|
-
generated.each { |
|
123
|
+
generated.each { |_, index| giza_configuration.add_index(index, true) }
|
122
124
|
end
|
123
125
|
|
124
|
-
# Class method that implements a search DSL using a
|
125
|
-
#
|
126
|
+
# Class method that implements a search DSL using a
|
127
|
+
# {Mongoid::Giza::Search} object.
|
128
|
+
# The search will run on indexes defined on the class unless it's
|
129
|
+
# overwritten using {Mongoid::Giza::Search#indexes=}
|
126
130
|
#
|
127
|
-
# @param block [Proc] a block that will be evaluated on a
|
131
|
+
# @param block [Proc] a block that will be evaluated on a
|
132
|
+
# {Mongoid::Giza::Search}
|
128
133
|
#
|
129
|
-
# @return [
|
130
|
-
#
|
134
|
+
# @return [Hash] a Riddle result Hash containing an
|
135
|
+
# additional key with the name of the class.
|
136
|
+
# The value of this aditional key is a Mongoid::Criteria that return the
|
137
|
+
# actual objects of the match
|
131
138
|
def search(&block)
|
132
|
-
search =
|
139
|
+
search = Search.new(giza_configuration.searchd.address,
|
140
|
+
giza_configuration.searchd.port,
|
141
|
+
sphinx_indexes_names)
|
133
142
|
Docile.dsl_eval(search, &block)
|
134
|
-
|
135
|
-
results.each { |result| result[name.to_sym] = self.in(giza_id: result[:matches].map { |match| match[:doc] }) }
|
143
|
+
map_to_mongoid(search.run)
|
136
144
|
end
|
137
145
|
|
138
146
|
# Regenerates all dynamic indexes of the class
|
139
147
|
def regenerate_sphinx_indexes
|
140
|
-
giza_configuration
|
148
|
+
giza_configuration
|
149
|
+
.remove_generated_indexes(generated_sphinx_indexes.keys)
|
141
150
|
generated_sphinx_indexes.clear
|
142
|
-
dynamic_sphinx_indexes.each
|
151
|
+
dynamic_sphinx_indexes.each do |dynamic_index|
|
152
|
+
process_dynamic_sphinx_index(dynamic_index)
|
153
|
+
end
|
143
154
|
end
|
144
155
|
|
145
156
|
# Removes the generated indexes.
|
146
157
|
#
|
147
|
-
# @param names [Array] a list of generated index names that should be
|
158
|
+
# @param names [Array] a list of generated index names that should be
|
159
|
+
# removed
|
148
160
|
def remove_generated_sphinx_indexes(*names)
|
149
161
|
names.each { |name| generated_sphinx_indexes.delete(name) }
|
150
162
|
giza_configuration.remove_generated_indexes(names)
|
151
163
|
end
|
152
164
|
|
153
165
|
# Execute the indexing routines of the indexes defined on the class.
|
154
|
-
# This means (re)create the sphinx configuration file and then execute the
|
155
|
-
#
|
156
|
-
# If
|
166
|
+
# This means (re)create the sphinx configuration file and then execute the
|
167
|
+
# indexer program on it.
|
168
|
+
# If no index names are supplied than all indexes defined on the class
|
169
|
+
# will be indexed.
|
170
|
+
# If none of the index names supplied are on this class then nothing is
|
171
|
+
# indexed
|
157
172
|
#
|
158
|
-
# @param names [Array] a list of index names of this class that will be
|
173
|
+
# @param names [Array] a list of index names of this class that will be
|
174
|
+
# indexed
|
159
175
|
def sphinx_indexer!(*names)
|
160
|
-
|
161
|
-
|
176
|
+
if names.length > 0
|
177
|
+
indexes_names =
|
178
|
+
sphinx_indexes_names.select { |name| names.include?(name) }
|
179
|
+
else
|
180
|
+
indexes_names = sphinx_indexes_names
|
181
|
+
end
|
182
|
+
Indexer.instance.index!(*indexes_names) if indexes_names.length > 0
|
162
183
|
end
|
163
184
|
|
164
|
-
# Retrieves all the sphinx indexes defined on this class, static and
|
185
|
+
# Retrieves all the sphinx indexes defined on this class, static and
|
186
|
+
# dynamic
|
165
187
|
#
|
166
|
-
# @return [Hash] a Hash with indexes names as keys and the actual indexes
|
188
|
+
# @return [Hash] a Hash with indexes names as keys and the actual indexes
|
189
|
+
# as the values
|
167
190
|
def sphinx_indexes
|
168
191
|
static_sphinx_indexes.merge(generated_sphinx_indexes)
|
169
192
|
end
|
170
193
|
|
171
|
-
# Retrieves all the names of sphinx indexes defined on this class, static
|
194
|
+
# Retrieves all the names of sphinx indexes defined on this class, static
|
195
|
+
# and dynamic
|
172
196
|
#
|
173
|
-
# @return [Array] an Array of names of indexes from the current class
|
197
|
+
# @return [Array] an Array of names of indexes from the current class
|
198
|
+
# {Mongoid::Giza::Index}
|
174
199
|
def sphinx_indexes_names
|
175
200
|
static_sphinx_indexes.merge(generated_sphinx_indexes).keys
|
176
201
|
end
|
202
|
+
|
203
|
+
private
|
204
|
+
|
205
|
+
# Creates the Mongoid::Criteria that return the objects matched by the
|
206
|
+
# sphinx search
|
207
|
+
#
|
208
|
+
# @param result [Hash] the query result created by Riddle
|
209
|
+
# @return [Hash] the result hash with the Mongoid::Criteria on the indexed
|
210
|
+
# class' name key
|
211
|
+
def map_to_mongoid(result)
|
212
|
+
result[name.to_sym] =
|
213
|
+
self.in(_giza_id: result[:matches].map { |match| match[:doc] })
|
214
|
+
result
|
215
|
+
end
|
177
216
|
end
|
178
217
|
end
|
179
218
|
end
|
@@ -4,7 +4,6 @@ require "yaml"
|
|
4
4
|
|
5
5
|
module Mongoid
|
6
6
|
module Giza
|
7
|
-
|
8
7
|
# Holds the configuration of the module
|
9
8
|
class Configuration < Riddle::Configuration
|
10
9
|
include Singleton
|
@@ -24,16 +23,18 @@ module Mongoid
|
|
24
23
|
# Loads a YAML file with settings defined.
|
25
24
|
# Settings that are not recognized are ignored
|
26
25
|
#
|
27
|
-
# @param path [String] path to the YAML file which contains the settings
|
26
|
+
# @param path [String] path to the YAML file which contains the settings
|
27
|
+
# defined
|
28
28
|
# @param env [String] environment whoose settings will be loaded
|
29
29
|
def load(path, env)
|
30
30
|
YAML.load(File.open(path).read)[env].each do |section_name, settings|
|
31
31
|
section = instance_variable_get("@#{section_name}")
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
next unless section
|
33
|
+
settings.each do |setting, value|
|
34
|
+
unless section == @index || section == @source
|
35
|
+
value = interpolate_string(value, nil)
|
36
36
|
end
|
37
|
+
setter(section, setting, value)
|
37
38
|
end
|
38
39
|
end
|
39
40
|
end
|
@@ -41,21 +42,21 @@ module Mongoid
|
|
41
42
|
# Adds an index to the sphinx configuration,
|
42
43
|
# so this index can be rendered on the configuration file
|
43
44
|
#
|
44
|
-
# @param index [Mongoid::Giza::Index] the index that will be added to the
|
45
|
-
#
|
45
|
+
# @param index [Mongoid::Giza::Index] the index that will be added to the
|
46
|
+
# configuration
|
47
|
+
# @param generated [TrueClass, FalseClass] determines if this index was
|
48
|
+
# generated from a {Mongoid::Giza::DynamicIndex}
|
46
49
|
def add_index(index, generated = false)
|
47
50
|
riddle_index = create_index(index)
|
48
|
-
|
49
|
-
|
50
|
-
else
|
51
|
-
position = register_index(riddle_index, @static_indexes)
|
52
|
-
end
|
51
|
+
indexes = generated ? @generated_indexes : @static_indexes
|
52
|
+
position = register_index(riddle_index, indexes)
|
53
53
|
indices[position] = riddle_index
|
54
54
|
end
|
55
55
|
|
56
56
|
# Creates a new Riddle::Index based on the given {Mongoid::Giza::Index}
|
57
57
|
#
|
58
|
-
# @param index [Mongoid::Giza::Index] the index to generate the
|
58
|
+
# @param index [Mongoid::Giza::Index] the index to generate the
|
59
|
+
# configuration from
|
59
60
|
#
|
60
61
|
# @return [Riddle::Configuration::Index] the created riddle index
|
61
62
|
def create_index(index)
|
@@ -66,39 +67,51 @@ module Mongoid
|
|
66
67
|
apply_user_settings(index, riddle_index)
|
67
68
|
apply_user_settings(index, source)
|
68
69
|
riddle_index.path = File.join(riddle_index.path, index.name.to_s)
|
69
|
-
riddle_index.charset_type = "utf-8"
|
70
70
|
riddle_index
|
71
71
|
end
|
72
72
|
|
73
73
|
# Adds the riddle index to it's respective collection
|
74
74
|
#
|
75
|
-
# @param
|
75
|
+
# @param riddle_index [Riddle::Configuration::Index] the index that will
|
76
|
+
# be registrated
|
76
77
|
# @param indexes [Hash] the collection which will hold this index
|
77
78
|
#
|
78
|
-
# @return [Integer] the position where this index should be inserted on
|
79
|
-
|
80
|
-
|
81
|
-
indexes[
|
79
|
+
# @return [Integer] the position where this index should be inserted on
|
80
|
+
# the configuration indices array
|
81
|
+
def register_index(riddle_index, indexes)
|
82
|
+
position = indices.index(indexes[riddle_index.name]) || indices.length
|
83
|
+
indexes[riddle_index.name] = riddle_index
|
82
84
|
position
|
83
85
|
end
|
84
86
|
|
85
|
-
# Applies the settings defined on an object loaded from the configuration
|
86
|
-
#
|
87
|
+
# Applies the settings defined on an object loaded from the configuration
|
88
|
+
# to a Riddle::Configuration::Index or Riddle::Configuration::XMLSource
|
89
|
+
# instance.
|
90
|
+
# Used internally by {#add_index} so you should never need to call it
|
91
|
+
# directly
|
87
92
|
#
|
88
|
-
# @param default [Riddle::Configuration::Index,
|
89
|
-
#
|
93
|
+
# @param default [Riddle::Configuration::Index,
|
94
|
+
# Riddle::Configuration::XMLSource] the object that holds the global
|
95
|
+
# settings values
|
96
|
+
# @param section [Riddle::Configuration::Index,
|
97
|
+
# Riddle::Configuration::XMLSource] the object that settings are being
|
98
|
+
# set
|
90
99
|
def apply_default_settings(default, section, index)
|
91
100
|
default.class.settings.each do |setting|
|
92
101
|
value = interpolate_string(default.send("#{setting}"), index)
|
93
|
-
setter(section, setting, value)
|
102
|
+
setter(section, setting, value) unless value.nil?
|
94
103
|
end
|
95
104
|
end
|
96
105
|
|
97
|
-
# Applies the settings defined on a {Mongoid::Giza::Index} to the
|
98
|
-
#
|
106
|
+
# Applies the settings defined on a {Mongoid::Giza::Index} to the
|
107
|
+
# Riddle::Configuration::Index or Riddle::Configuration::XMLSource.
|
108
|
+
# Used internally by {#add_index} so you should never need to call it
|
109
|
+
# directly
|
99
110
|
#
|
100
|
-
# @param index [Mongoid::Giza::Index] the index where the settings were
|
101
|
-
#
|
111
|
+
# @param index [Mongoid::Giza::Index] the index where the settings were
|
112
|
+
# defined
|
113
|
+
# @param section [Riddle::Configuration::Index,
|
114
|
+
# Riddle::Configuration::XMLSource] where the settings will be applied
|
102
115
|
def apply_user_settings(index, section)
|
103
116
|
index.settings.each do |setting, value|
|
104
117
|
value = interpolate_string(value, index)
|
@@ -111,15 +124,17 @@ module Mongoid
|
|
111
124
|
File.open(@file.output_path, "w") { |file| file.write(super) }
|
112
125
|
end
|
113
126
|
|
114
|
-
# Removes all Riddle::Index from the indices Array that were created from
|
127
|
+
# Removes all Riddle::Index from the indices Array that were created from
|
128
|
+
# a generated {Mongoid::Giza::Index}
|
115
129
|
def clear_generated_indexes
|
116
|
-
@generated_indexes.each { |
|
130
|
+
@generated_indexes.each { |_, index| indices.delete(index) }
|
117
131
|
@generated_indexes = {}
|
118
132
|
end
|
119
133
|
|
120
134
|
# Removes Riddle::Index's specifieds as params
|
121
135
|
#
|
122
|
-
# @param names [Array<Symbol>] names of generated indexes that should be
|
136
|
+
# @param names [Array<Symbol>] names of generated indexes that should be
|
137
|
+
# removed
|
123
138
|
def remove_generated_indexes(names)
|
124
139
|
names.each do |name|
|
125
140
|
indices.delete(@generated_indexes.delete(name))
|
@@ -128,22 +143,31 @@ module Mongoid
|
|
128
143
|
|
129
144
|
# Interpolates a value if it's a String using ERB.
|
130
145
|
# Useful for defining dynamic settings.
|
131
|
-
# The ERB template may reference to the current {Mongoid::Giza::Index} and
|
146
|
+
# The ERB template may reference to the current {Mongoid::Giza::Index} and
|
147
|
+
# it's methods
|
132
148
|
#
|
133
149
|
# @param value [String] the ERB template that will be interpolated
|
134
|
-
# @param index [Mongoid::Giza::Index] the index that will be accessible
|
150
|
+
# @param index [Mongoid::Giza::Index] the index that will be accessible
|
151
|
+
# from the template
|
135
152
|
#
|
136
|
-
# @return [Object] if value was a String and contains ERB syntax than it
|
153
|
+
# @return [Object] if value was a String and contains ERB syntax than it
|
154
|
+
# will beinterpolated and returned.
|
137
155
|
# Otherwise it will return the original value
|
138
156
|
def interpolate_string(value, index)
|
139
157
|
namespace = index.nil? ? Object.new : OpenStruct.new(index: index)
|
140
|
-
value.is_a?(String)
|
158
|
+
if value.is_a?(String)
|
159
|
+
return ERB.new(value).result(namespace.instance_eval { binding })
|
160
|
+
else
|
161
|
+
return value
|
162
|
+
end
|
141
163
|
end
|
142
164
|
|
143
|
-
# Helper method to set a value to a setting from a section (i.e. indexer,
|
165
|
+
# Helper method to set a value to a setting from a section (i.e. indexer,
|
166
|
+
# source) if the section has this setting.
|
144
167
|
# If the setting is not avaiable on the section, nothing is done
|
145
168
|
#
|
146
|
-
# @param section [Riddle::Configuration::Section] a configuration section
|
169
|
+
# @param section [Riddle::Configuration::Section] a configuration section
|
170
|
+
# to define the setting
|
147
171
|
# @param setting [Symbol] the setting that will be defined on the section
|
148
172
|
# @param value [Object] the value of the setting
|
149
173
|
def setter(section, setting, value)
|