nobrainer 0.27.0 → 0.28.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/lib/no_brainer/config.rb +36 -8
  3. data/lib/no_brainer/connection.rb +16 -19
  4. data/lib/no_brainer/connection_manager.rb +10 -10
  5. data/lib/no_brainer/criteria.rb +1 -1
  6. data/lib/no_brainer/criteria/eager_load.rb +1 -1
  7. data/lib/no_brainer/criteria/find.rb +1 -1
  8. data/lib/no_brainer/criteria/first.rb +2 -2
  9. data/lib/no_brainer/criteria/first_or_create.rb +32 -19
  10. data/lib/no_brainer/criteria/join.rb +62 -0
  11. data/lib/no_brainer/criteria/where.rb +25 -14
  12. data/lib/no_brainer/document.rb +1 -1
  13. data/lib/no_brainer/document/association/belongs_to.rb +4 -3
  14. data/lib/no_brainer/document/association/eager_loader.rb +26 -25
  15. data/lib/no_brainer/document/association/has_many.rb +3 -2
  16. data/lib/no_brainer/document/association/has_many_through.rb +1 -2
  17. data/lib/no_brainer/document/association/has_one.rb +4 -0
  18. data/lib/no_brainer/document/atomic_ops.rb +31 -4
  19. data/lib/no_brainer/document/attributes.rb +12 -9
  20. data/lib/no_brainer/document/core.rb +18 -18
  21. data/lib/no_brainer/document/criteria.rb +3 -2
  22. data/lib/no_brainer/document/dirty.rb +3 -3
  23. data/lib/no_brainer/document/index.rb +3 -3
  24. data/lib/no_brainer/document/index/index.rb +5 -5
  25. data/lib/no_brainer/document/index/meta_store.rb +1 -1
  26. data/lib/no_brainer/document/index/synchronizer.rb +5 -17
  27. data/lib/no_brainer/document/missing_attributes.rb +7 -2
  28. data/lib/no_brainer/document/primary_key.rb +14 -8
  29. data/lib/no_brainer/document/table_config.rb +118 -0
  30. data/lib/no_brainer/document/table_config/synchronizer.rb +21 -0
  31. data/lib/no_brainer/document/timestamps.rb +4 -0
  32. data/lib/no_brainer/document/validation/core.rb +1 -1
  33. data/lib/no_brainer/document/validation/uniqueness.rb +1 -1
  34. data/lib/no_brainer/lock.rb +4 -4
  35. data/lib/no_brainer/profiler/logger.rb +1 -1
  36. data/lib/no_brainer/query_runner/database_on_demand.rb +1 -1
  37. data/lib/no_brainer/query_runner/reconnect.rb +37 -21
  38. data/lib/no_brainer/query_runner/table_on_demand.rb +12 -5
  39. data/lib/no_brainer/railtie/database.rake +14 -4
  40. data/lib/no_brainer/rql.rb +3 -2
  41. data/lib/no_brainer/symbol_decoration.rb +1 -1
  42. data/lib/no_brainer/system.rb +17 -0
  43. data/lib/no_brainer/system/cluster_config.rb +5 -0
  44. data/lib/no_brainer/system/db_config.rb +5 -0
  45. data/lib/no_brainer/system/document.rb +24 -0
  46. data/lib/no_brainer/system/issue.rb +10 -0
  47. data/lib/no_brainer/system/job.rb +10 -0
  48. data/lib/no_brainer/system/log.rb +11 -0
  49. data/lib/no_brainer/system/server_config.rb +7 -0
  50. data/lib/no_brainer/system/server_status.rb +9 -0
  51. data/lib/no_brainer/system/stat.rb +11 -0
  52. data/lib/no_brainer/system/table_config.rb +10 -0
  53. data/lib/no_brainer/system/table_status.rb +8 -0
  54. data/lib/nobrainer.rb +7 -6
  55. data/lib/rails/generators/templates/nobrainer.rb +11 -2
  56. metadata +17 -3
  57. data/lib/no_brainer/document/store_in.rb +0 -33
@@ -4,7 +4,7 @@ module NoBrainer::Document
4
4
  extend ActiveSupport::Concern
5
5
  extend NoBrainer::Autoload
6
6
 
7
- autoload_and_include :Core, :StoreIn, :InjectionLayer, :Attributes, :Readonly,
7
+ autoload_and_include :Core, :TableConfig, :InjectionLayer, :Attributes, :Readonly,
8
8
  :Persistance, :Callbacks, :Validation, :Types, :Dirty, :PrimaryKey,
9
9
  :Association, :Serialization, :Criteria, :Polymorphic, :Index, :Aliases,
10
10
  :MissingAttributes, :LazyFetch, :AtomicOps
@@ -4,7 +4,7 @@ class NoBrainer::Document::Association::BelongsTo
4
4
  class Metadata
5
5
  VALID_OPTIONS = [:primary_key, :foreign_key, :class_name, :foreign_key_store_as, :index, :validates, :required]
6
6
  include NoBrainer::Document::Association::Core::Metadata
7
- extend NoBrainer::Document::Association::EagerLoader::Generic
7
+ include NoBrainer::Document::Association::EagerLoader::Generic
8
8
 
9
9
  def foreign_key
10
10
  options[:foreign_key].try(:to_sym) || :"#{target_name}_#{primary_key}"
@@ -34,7 +34,7 @@ class NoBrainer::Document::Association::BelongsTo
34
34
  end
35
35
 
36
36
  def base_criteria
37
- target_model.unscoped
37
+ target_model.without_ordering.unscoped
38
38
  end
39
39
 
40
40
  def hook
@@ -68,7 +68,8 @@ class NoBrainer::Document::Association::BelongsTo
68
68
  add_callback_for(:after_validation)
69
69
  end
70
70
 
71
- eager_load_with :owner_key => ->{ foreign_key }, :target_key => ->{ primary_key }
71
+ def eager_load_owner_key; foreign_key; end
72
+ def eager_load_target_key; primary_key; end
72
73
  end
73
74
 
74
75
  # Note:
@@ -1,31 +1,32 @@
1
- class NoBrainer::Document::Association::EagerLoader
1
+ module NoBrainer::Document::Association::EagerLoader
2
+ extend self
3
+
2
4
  module Generic
3
5
  # Used in associations to declare generic eager loading capabilities
4
- # The association should implement loaded? and preload.
5
- def eager_load_with(options={})
6
- define_method(:eager_load) do |docs, additional_criteria=nil|
7
- owner_key = instance_exec(&options[:owner_key])
8
- target_key = instance_exec(&options[:target_key])
9
-
10
- criteria = base_criteria
11
- criteria = criteria.merge(additional_criteria) if additional_criteria
12
-
13
- unloaded_docs = docs.reject { |doc| doc.associations[self].loaded? }
14
-
15
- owner_keys = unloaded_docs.map(&owner_key).compact.uniq
16
- if owner_keys.present?
17
- targets = criteria.where(target_key.in => owner_keys)
18
- .map { |target| [target.read_attribute(target_key), target] }
19
- .each_with_object(Hash.new { |k,v| k[v] = [] }) { |(k,v),h| h[k] << v }
20
-
21
- unloaded_docs.each do |doc|
22
- doc_targets = targets[doc.read_attribute(owner_key)]
23
- doc.associations[self].preload(doc_targets)
24
- end
25
- end
6
+ # The association should implement loaded?, preload,
7
+ # eager_load_owner_key and eager_load_target_key.
8
+ def eager_load(docs, additional_criteria=nil)
9
+ owner_key = eager_load_owner_key
10
+ target_key = eager_load_target_key
11
+
12
+ criteria = base_criteria
13
+ criteria = criteria.merge(additional_criteria) if additional_criteria
14
+
15
+ unloaded_docs = docs.reject { |doc| doc.associations[self].loaded? }
26
16
 
27
- docs.map { |doc| doc.associations[self].read }.flatten.compact.uniq
17
+ owner_keys = unloaded_docs.map(&owner_key).compact.uniq
18
+ if owner_keys.present?
19
+ targets = criteria.where(target_key.in => owner_keys)
20
+ .map { |target| [target.read_attribute(target_key), target] }
21
+ .each_with_object(Hash.new { |k,v| k[v] = [] }) { |(k,v),h| h[k] << v }
22
+
23
+ unloaded_docs.each do |doc|
24
+ doc_targets = targets[doc.read_attribute(owner_key)]
25
+ doc.associations[self].preload(doc_targets)
26
+ end
28
27
  end
28
+
29
+ docs.map { |doc| doc.associations[self].read }.flatten.compact.uniq
29
30
  end
30
31
  end
31
32
 
@@ -40,7 +41,7 @@ class NoBrainer::Document::Association::EagerLoader
40
41
 
41
42
  def eager_load(docs, what)
42
43
  case what
43
- when Hash then what.each do |k,v|
44
+ when Hash then what.each do |k,v|
44
45
  if v.is_a?(NoBrainer::Criteria)
45
46
  v = v.dup
46
47
  nested_preloads, v.options[:eager_load] = v.options[:eager_load], []
@@ -4,7 +4,7 @@ class NoBrainer::Document::Association::HasMany
4
4
  class Metadata
5
5
  VALID_OPTIONS = [:primary_key, :foreign_key, :class_name, :dependent, :scope]
6
6
  include NoBrainer::Document::Association::Core::Metadata
7
- extend NoBrainer::Document::Association::EagerLoader::Generic
7
+ include NoBrainer::Document::Association::EagerLoader::Generic
8
8
 
9
9
  def foreign_key
10
10
  options[:foreign_key].try(:to_sym) || :"#{owner_model.name.split('::').last.underscore}_#{primary_key}"
@@ -53,7 +53,8 @@ class NoBrainer::Document::Association::HasMany
53
53
  end
54
54
  end
55
55
 
56
- eager_load_with :owner_key => ->{ primary_key }, :target_key => ->{ foreign_key }
56
+ def eager_load_owner_key; primary_key; end
57
+ def eager_load_target_key; foreign_key; end
57
58
  end
58
59
 
59
60
  def target_criteria
@@ -17,7 +17,7 @@ class NoBrainer::Document::Association::HasManyThrough
17
17
  def eager_load(docs, additional_criteria=nil)
18
18
  criteria = target_model.instance_exec(&options[:scope]) if options[:scope]
19
19
  criteria = criteria ? criteria.merge(additional_criteria) : additional_criteria if additional_criteria
20
- NoBrainer::Document::Association::EagerLoader.new
20
+ NoBrainer::Document::Association::EagerLoader
21
21
  .eager_load_association(through_association.eager_load(docs), target_name, criteria)
22
22
  end
23
23
 
@@ -29,7 +29,6 @@ class NoBrainer::Document::Association::HasManyThrough
29
29
  end
30
30
 
31
31
  def read
32
- # TODO implement joins
33
32
  @targets ||= metadata.eager_load([owner]).freeze
34
33
  end
35
34
 
@@ -3,6 +3,10 @@ class NoBrainer::Document::Association::HasOne < NoBrainer::Document::Associatio
3
3
  def target_model
4
4
  get_model_by_name(options[:class_name] || target_name.to_s.camelize)
5
5
  end
6
+
7
+ def base_criteria
8
+ super.without_ordering
9
+ end
6
10
  end
7
11
 
8
12
  def read
@@ -42,7 +42,7 @@ module NoBrainer::Document::AtomicOps
42
42
  def to_s
43
43
  "<`#{@field}' with #{@ops.size} pending atomic operations>"
44
44
  end
45
- alias_method :inspect, :to_s
45
+ def inspect; to_s; end
46
46
 
47
47
  def method_missing(method, *a, &b)
48
48
  if method == :<<
@@ -131,6 +131,18 @@ module NoBrainer::Document::AtomicOps
131
131
  end
132
132
  end
133
133
 
134
+ class PendingAtomicUnset < PendingAtomic
135
+ def to_s
136
+ "<unset `#{@field}'>"
137
+ end
138
+
139
+ undef_method(:method_missing)
140
+
141
+ def compile_rql_value(rql_doc)
142
+ RethinkDB::RQL.new.literal()
143
+ end
144
+ end
145
+
134
146
  def clear_dirtiness(options={})
135
147
  super
136
148
  @_touched_attributes = Set.new
@@ -172,13 +184,18 @@ module NoBrainer::Document::AtomicOps
172
184
  end
173
185
 
174
186
  def _read_attribute(name)
187
+ return super if name == self.class.pk_name
188
+
175
189
  ensure_exclusive_atomic!
176
- value = super
177
- return value unless in_atomic?
190
+ return super unless in_atomic?
191
+
192
+ # If we are missing fields, it's okay, we'll assume nil.
193
+ value = missing_field?(name) ? nil : super
178
194
 
179
195
  case value
180
196
  when PendingAtomicContainer then value
181
- when PendingAtomic then value.dup
197
+ when PendingAtomicUnset then raise "Attribute `#{name}' is unset"
198
+ when PendingAtomic then value.dup
182
199
  else PendingAtomic._new(self, name, value, _is_attribute_touched?(name))
183
200
  end
184
201
  end
@@ -199,6 +216,11 @@ module NoBrainer::Document::AtomicOps
199
216
  super
200
217
  end
201
218
 
219
+ def unset(attr)
220
+ return queue_atomic { unset(attr) } unless in_atomic?
221
+ _write_attribute(attr, PendingAtomicUnset.new(self, attr, nil, true, nil))
222
+ end
223
+
202
224
  def save?(options={})
203
225
  # TODO allow reload => true as an option to save+reload in a single op.
204
226
  raise NoBrainer::Error::AtomicBlock.new('You may persist documents only outside of queue_atomic blocks') if in_atomic?
@@ -212,6 +234,11 @@ module NoBrainer::Document::AtomicOps
212
234
  end
213
235
  end
214
236
 
237
+ def reload(*)
238
+ raise NoBrainer::Error::AtomicBlock.new('You may not reload fields within an atomic block') if in_atomic?
239
+ super
240
+ end
241
+
215
242
  module ClassMethods
216
243
  def persistable_value(k, v, options={})
217
244
  v.is_a?(PendingAtomic) ? v.compile_rql_value(options[:rql_doc]) : super
@@ -49,8 +49,10 @@ module NoBrainer::Document::Attributes
49
49
 
50
50
  def assign_defaults(options)
51
51
  self.class.fields.each do |name, field_options|
52
- next unless field_options.has_key?(:default) &&
53
- !@_attributes.has_key?(name)
52
+ # :default => nil will not set the value to nil, but :default => ->{ nil } will.
53
+ # This is useful to unset a default value.
54
+
55
+ next if field_options[:default].nil? || @_attributes.key?(name)
54
56
 
55
57
  if opt = options[:missing_attributes]
56
58
  if (opt[:pluck] && !opt[:pluck][name]) ||
@@ -113,8 +115,14 @@ module NoBrainer::Document::Attributes
113
115
  super
114
116
  end
115
117
 
118
+ # The different between _field and field is that field can set other options
119
+ # (c.f. primary key module). _field always receive an immutable options list.
116
120
  def _field(attr, options={})
117
- # Using a layer so the user can use super when overriding these methods
121
+ options.assert_valid_keys(*VALID_FIELD_OPTIONS)
122
+ if attr.in?(RESERVED_FIELD_NAMES)
123
+ raise "The field name `:#{attr}' is reserved. Please use another one."
124
+ end
125
+
118
126
  attr = attr.to_s
119
127
  inject_in_layer :attributes do
120
128
  define_method("#{attr}=") { |value| _write_attribute(attr, value) }
@@ -125,11 +133,6 @@ module NoBrainer::Document::Attributes
125
133
  def field(attr, options={})
126
134
  attr = attr.to_sym
127
135
 
128
- options.assert_valid_keys(*VALID_FIELD_OPTIONS)
129
- if attr.in?(RESERVED_FIELD_NAMES)
130
- raise "Cannot use a reserved field attr: #{attr}"
131
- end
132
-
133
136
  subclass_tree.each do |subclass|
134
137
  subclass.fields[attr] ||= {}
135
138
  subclass.fields[attr].deep_merge!(options)
@@ -161,7 +164,7 @@ module NoBrainer::Document::Attributes
161
164
 
162
165
  def ensure_valid_key!(key)
163
166
  return if has_field?(key) || has_index?(key)
164
- raise NoBrainer::Error::UnknownAttribute, "`#{key}' is not a declared attribute of #{self}"
167
+ raise NoBrainer::Error::UnknownAttribute, "`#{key}' is not a valid attribute of #{self}"
165
168
  end
166
169
  end
167
170
  end
@@ -1,30 +1,30 @@
1
1
  module NoBrainer::Document::Core
2
2
  extend ActiveSupport::Concern
3
3
 
4
- singleton_class.class_eval do
5
- attr_accessor :_all, :_all_nobrainer
6
-
7
- def all
8
- Rails.application.eager_load! if defined?(Rails.application.eager_load!)
9
- @_all
10
- end
11
- end
4
+ singleton_class.class_eval { attr_accessor :_all }
12
5
  self._all = []
13
- self._all_nobrainer = []
14
-
15
- include ActiveModel::Conversion
16
-
17
- def to_key
18
- # ActiveModel::Conversion stuff
19
- [pk_value]
20
- end
21
6
 
22
7
  included do
23
8
  # TODO test these includes
24
9
  extend ActiveModel::Naming
25
10
  extend ActiveModel::Translation
26
11
 
27
- list_name = self.name =~ /^NoBrainer::/ ? :_all_nobrainer : :_all
28
- NoBrainer::Document::Core.__send__(list_name) << self
12
+ NoBrainer::Document::Core._all << self unless name =~ /^NoBrainer::/
13
+ end
14
+
15
+ def self.all(options={})
16
+ (options[:types] || [:user]).map do |type|
17
+ case type
18
+ when :user
19
+ Rails.application.eager_load! if defined?(Rails.application.eager_load!)
20
+ _all
21
+ when :nobrainer
22
+ [NoBrainer::Document::Index::MetaStore, NoBrainer::Lock]
23
+ when :system
24
+ NoBrainer::System.constants
25
+ .map { |c| NoBrainer::System.const_get(c) }
26
+ .select { |m| m < NoBrainer::Document }
27
+ end
28
+ end.reduce([], &:+)
29
29
  end
30
30
  end
@@ -18,7 +18,7 @@ module NoBrainer::Document::Criteria
18
18
  :limit, :offset, :skip, # Limit
19
19
  :order_by, :reverse_order, :without_ordering, :order_by_indexed?, :order_by_index_name, # OrderBy
20
20
  :unscoped, # Scope
21
- :where, :where_indexed?, :where_index_name, :where_index_type, # Where
21
+ :_where, :where, :where_indexed?, :where_index_name, :where_index_type, # Where
22
22
  :with_index, :without_index, :used_index, # Index
23
23
  :with_cache, :without_cache, # Cache
24
24
  :count, :empty?, :any?, # Count
@@ -26,12 +26,13 @@ module NoBrainer::Document::Criteria
26
26
  :preload, :eager_load, # EagerLoad
27
27
  :each, :to_a, # Enumerable
28
28
  :first, :last, :first!, :last!, :sample, # First
29
- :first_or_create, :first_or_create!, # FirstOrCreate
29
+ :upsert, :upsert!, :first_or_create, :first_or_create!, # FirstOrCreate
30
30
  :min, :max, :sum, :avg, # Aggregate
31
31
  :update_all, :replace_all, # Update
32
32
  :changes, # Changes
33
33
  :pluck, :without, :lazy_fetch, :without_plucking, # Pluck
34
34
  :find_by?, :find_by, :find_by!, :find?, :find, :find!, # Find
35
+ :join, #Join
35
36
  :to => :all
36
37
 
37
38
  def all
@@ -56,7 +56,7 @@ module NoBrainer::Document::Dirty
56
56
  end
57
57
  end
58
58
 
59
- unless @_old_attributes.has_key?(attr)
59
+ unless @_old_attributes.key?(attr)
60
60
  @_old_attributes[attr] = current_value.deep_dup
61
61
  end
62
62
  end
@@ -81,7 +81,7 @@ module NoBrainer::Document::Dirty
81
81
 
82
82
  inject_in_layer :dirty_tracking do
83
83
  define_method("#{attr}_change") do
84
- if @_old_attributes.has_key?(attr)
84
+ if @_old_attributes.key?(attr)
85
85
  result = [@_old_attributes[attr], _read_attribute(attr)]
86
86
  result if result.first != result.last || !@_old_attributes_keys.include?(attr)
87
87
  end
@@ -92,7 +92,7 @@ module NoBrainer::Document::Dirty
92
92
  end
93
93
 
94
94
  define_method("#{attr}_was") do
95
- @_old_attributes.has_key?(attr) ? @_old_attributes[attr] : _read_attribute(attr)
95
+ @_old_attributes.key?(attr) ? @_old_attributes[attr] : _read_attribute(attr)
96
96
  end
97
97
  end
98
98
  end
@@ -26,11 +26,11 @@ module NoBrainer::Document::Index
26
26
  end
27
27
 
28
28
  if name.in?(NoBrainer::Document::Attributes::RESERVED_FIELD_NAMES)
29
- raise "Cannot use a reserved field name: #{name}"
29
+ raise "The index name `:#{name}' is reserved. Please use another one."
30
30
  end
31
31
 
32
32
  if has_field?(name) && kind != :single
33
- raise "Cannot reuse field name #{name}"
33
+ raise "The field `#{name}' is already declared. Please remove its definition first."
34
34
  end
35
35
 
36
36
  if kind == :compound && what.size < 2
@@ -56,7 +56,7 @@ module NoBrainer::Document::Index
56
56
 
57
57
  def _field(attr, options={})
58
58
  if has_index?(attr) && indexes[attr].kind != :single
59
- raise "Cannot reuse index attr #{attr}"
59
+ raise "The index `#{attr}' is already declared. Please remove its definition first."
60
60
  end
61
61
 
62
62
  super
@@ -1,8 +1,6 @@
1
1
  class NoBrainer::Document::Index::Index < Struct.new(
2
2
  :model, :name, :aliased_name, :kind, :what, :external, :geo, :multi, :meta)
3
3
 
4
- MetaStore = NoBrainer::Document::Index::MetaStore
5
-
6
4
  def initialize(*args)
7
5
  super
8
6
 
@@ -59,8 +57,9 @@ class NoBrainer::Document::Index::Index < Struct.new(
59
57
  NoBrainer::RQL.reset_lambda_var_counter
60
58
  NoBrainer.run(model.rql_table.index_create(aliased_name, opt, &rql_proc))
61
59
 
62
- MetaStore.create(:table_name => model.table_name, :index_name => aliased_name,
63
- :rql_function => serialized_rql_proc)
60
+ NoBrainer::Document::Index::MetaStore.create(
61
+ :table_name => model.table_name, :index_name => aliased_name,
62
+ :rql_function => serialized_rql_proc)
64
63
  end
65
64
 
66
65
  def delete(options={})
@@ -68,7 +67,8 @@ class NoBrainer::Document::Index::Index < Struct.new(
68
67
 
69
68
  NoBrainer.run(model.rql_table.index_drop(aliased_name))
70
69
 
71
- MetaStore.where(:table_name => model.table_name, :index_name => aliased_name).delete_all
70
+ NoBrainer::Document::Index::MetaStore.where(
71
+ :table_name => model.table_name, :index_name => aliased_name).delete_all
72
72
  end
73
73
 
74
74
  def update(wanted_index, options={})
@@ -6,7 +6,7 @@ class NoBrainer::Document::Index::MetaStore
6
6
 
7
7
  default_scope ->{ order_by(:created_at) }
8
8
 
9
- store_in :table => 'nobrainer_index_meta'
9
+ table_config :name => 'nobrainer_index_meta'
10
10
 
11
11
  field :table_name, :type => String, :required => true
12
12
  field :index_name, :type => String, :required => true
@@ -1,7 +1,4 @@
1
1
  class NoBrainer::Document::Index::Synchronizer
2
- Index = NoBrainer::Document::Index::Index
3
- MetaStore = NoBrainer::Document::Index::MetaStore
4
-
5
2
  def initialize(models)
6
3
  @models_indexes_map = Hash[models.map do |model|
7
4
  [model, model.indexes.values.reject { |index| index.name == model.pk_name }]
@@ -9,7 +6,7 @@ class NoBrainer::Document::Index::Synchronizer
9
6
  end
10
7
 
11
8
  def meta_store
12
- @meta_store ||= MetaStore.to_a
9
+ @meta_store ||= NoBrainer::Document::Index::MetaStore.to_a
13
10
  end
14
11
 
15
12
  class Op < Struct.new(:index, :op, :args)
@@ -21,7 +18,8 @@ class NoBrainer::Document::Index::Synchronizer
21
18
  def _generate_plan_for(model, wanted_indexes)
22
19
  current_indexes = NoBrainer.run(model.rql_table.index_status).map do |s|
23
20
  meta = meta_store.select { |i| i.table_name == model.table_name && i.index_name == s['index'] }.last
24
- Index.new(model, s['index'], s['index'], nil, nil, nil, s['geo'], s['multi'], meta)
21
+ NoBrainer::Document::Index::Index.new(
22
+ model, s['index'], s['index'], nil, nil, nil, s['geo'], s['multi'], meta)
25
23
  end
26
24
 
27
25
  all_aliased_names = (wanted_indexes + current_indexes).map(&:aliased_name).uniq
@@ -51,13 +49,11 @@ class NoBrainer::Document::Index::Synchronizer
51
49
  lock = NoBrainer::Lock.new('nobrainer:sync_indexes')
52
50
 
53
51
  lock.synchronize do
54
- plan = generate_plan
55
- plan.each { |op| lock.refresh; op.run(options) }
52
+ generate_plan.each { |op| op.run(options) }
56
53
  end
57
54
 
58
55
  unless options[:wait] == false
59
- # Waiting on all models due to possible races when performing concurrent
60
- # sync_indexes()
56
+ # Waiting on all models due to possible races
61
57
  @models_indexes_map.each_key do |model|
62
58
  NoBrainer.run(model.rql_table.index_wait())
63
59
  end
@@ -65,12 +61,4 @@ class NoBrainer::Document::Index::Synchronizer
65
61
 
66
62
  true
67
63
  end
68
-
69
- class << self
70
- def instance
71
- new(NoBrainer::Document.all)
72
- end
73
-
74
- delegate :sync_indexes, :to => :instance
75
- end
76
64
  end