Module: ArSync::TreeSync::ClassMethods
- Includes:
- ClassMethodsBase
- Defined in:
- lib/ar_sync/class_methods.rb
Instance Method Summary collapse
- #_initialize_sync_callbacks ⇒ Object
- #_sync_define(info, **option, &data_block) ⇒ Object
- #sync_collection(name) ⇒ Object
- #sync_define_collection(name, limit: nil, order: :asc) ⇒ Object
- #sync_has_data(*names, **option, &original_data_block) ⇒ Object
- #sync_has_many(name, order: :asc, propagate_when: nil, params_type: nil, limit: nil, preload: nil, association: nil, **option, &data_block) ⇒ Object
- #sync_has_one(name, **option, &data_block) ⇒ Object
Methods included from ClassMethodsBase
#_each_sync_child, #_each_sync_parent, #_sync_child_info, #_sync_children_info, #_sync_parents_info, #_sync_self?, #sync_parent
Instance Method Details
#_initialize_sync_callbacks ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/ar_sync/class_methods.rb', line 99 def _initialize_sync_callbacks return if instance_variable_defined? '@_sync_callbacks_initialized' @_sync_callbacks_initialized = true _sync_define ArSync::DataField.new(:id) %i[create update destroy].each do |action| after_commit on: action do next if ArSync.skip_notification? self.class.default_scoped.scoping { _sync_notify action } end end end |
#_sync_define(info, **option, &data_block) ⇒ Object
86 87 88 89 90 91 |
# File 'lib/ar_sync/class_methods.rb', line 86 def _sync_define(info, **option, &data_block) _initialize_sync_callbacks _sync_children_info[info.name] = info serializer_field info.name, **option, &data_block unless _serializer_field_info info.name serializer_field info.name, **option, namespace: :sync, &data_block end |
#sync_collection(name) ⇒ Object
44 45 46 |
# File 'lib/ar_sync/class_methods.rb', line 44 def sync_collection(name) ArSync::Collection::Tree.find self, name end |
#sync_define_collection(name, limit: nil, order: :asc) ⇒ Object
93 94 95 96 97 |
# File 'lib/ar_sync/class_methods.rb', line 93 def sync_define_collection(name, limit: nil, order: :asc) _initialize_sync_callbacks collection = ArSync::Collection::Tree.new self, name, limit: limit, order: order sync_parent collection, inverse_of: [self, name] end |
#sync_has_data(*names, **option, &original_data_block) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/ar_sync/class_methods.rb', line 48 def sync_has_data(*names, **option, &original_data_block) @_sync_self = true option = option.dup if original_data_block data_block = ->(*args) { instance_exec(*args, &original_data_block).as_json } end option[:params_type] = {} names.each do |name| type_override = data_block.nil? && reflect_on_association(name.to_s.underscore) ? { type: :any } : {} _sync_define ArSync::DataField.new(name), option.merge(type_override), &data_block end end |
#sync_has_many(name, order: :asc, propagate_when: nil, params_type: nil, limit: nil, preload: nil, association: nil, **option, &data_block) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/ar_sync/class_methods.rb', line 65 def sync_has_many(name, order: :asc, propagate_when: nil, params_type: nil, limit: nil, preload: nil, association: nil, **option, &data_block) if data_block.nil? && preload.nil? underscore_name = name.to_s.underscore.to_sym preload = lambda do |records, _context, params| ArSerializer::Field.preload_association( self, records, association || underscore_name, order: (!limit && params && params[:order]) || order, limit: [params && params[:limit]&.to_i, limit].compact.min ) end data_block = lambda do |preloaded, _context, _params| preloaded ? preloaded[id] || [] : send(name) end params_type = { limit?: :int, order?: [{ :* => %w[asc desc] }, 'asc', 'desc'] } else params_type = {} end field = ArSync::HasManyField.new name, association: association, order: order, limit: limit, propagate_when: propagate_when _sync_define field, preload: preload, association: association, params_type: params_type, **option, &data_block end |
#sync_has_one(name, **option, &data_block) ⇒ Object
61 62 63 |
# File 'lib/ar_sync/class_methods.rb', line 61 def sync_has_one(name, **option, &data_block) _sync_define ArSync::HasOneField.new(name), option, &data_block end |