lib/sync_machine.rb in sync_machine-0.1.0 vs lib/sync_machine.rb in sync_machine-0.2.0
- old
+ new
@@ -1,22 +1,49 @@
require "active_support/core_ext/class"
require "active_support/core_ext/string"
-require "mongoid"
require "sync_machine/change_listener"
require "sync_machine/ensure_publication"
require "sync_machine/ensure_publication/deduper"
require "sync_machine/ensure_publication/publication_history"
require "sync_machine/ensure_publication_worker"
require "sync_machine/find_subjects_worker"
+require "sync_machine/orm_adapter/active_record"
+require "sync_machine/orm_adapter/mongoid"
require "sync_machine/version"
-require "wisper/mongoid"
# A mini-framework for intelligently publishing complex model changes to an
# external API..
module SyncMachine
+ mattr_accessor :orm_adapter
+
+ def self.use_active_record
+ setup_orm_adapter(OrmAdapter::ActiveRecord)
+ end
+
+ def self.use_mongoid
+ setup_orm_adapter(OrmAdapter::Mongoid)
+ end
+
+ def self.setup_orm_adapter(orm_adapter)
+ self.orm_adapter = orm_adapter
+ orm_adapter.setup
+ end
+
def self.extended(base)
base.mattr_accessor :subject_sym
+
+ # Force loading of all relevant classes. Should only be necessary when
+ # running your application in a way that it defers loading constants, i.e.,
+ # Rails' development or test mode.
+ def base.eager_load
+ const_names = %w(
+ Payload FindSubjectsWorker EnsurePublicationWorker ChangeListener
+ )
+ const_names.each do |const_name|
+ const_get(const_name)
+ end
+ end
end
def self.sync_module(child_const)
child_const.name.split(/::/).first.constantize
end
@@ -26,31 +53,6 @@
end
def subject_class
subject_sym.to_s.camelize.constantize
end
-
- def setup
- define_payload_class unless const_defined?('Payload')
- const_get('ChangeListener').subscribe
- end
-
- # :reek:TooManyStatements is unavoidable with this sort of dynamic class
- # definition
- def define_payload_class
- collection_name = name.underscore + '_payloads'
- payload_class = Class.new do
- include Mongoid::Document
- store_in collection: collection_name
-
- field :body, type: Hash
- field :generated_at, type: Time
- field :subject_id, type: String
-
- validates :generated_at, presence: true
- validates :subject_id, presence: true, uniqueness: true
- end
- const_set('Payload', payload_class)
- end
end
-
-Wisper::Mongoid.extend_all