Module: TableSync::Publishing::ORMAdapter::Sequel

Defined in:
lib/table_sync/publishing/orm_adapter/sequel.rb

Class Method Summary collapse

Class Method Details

.attributes(object) ⇒ Object



15
16
17
# File 'lib/table_sync/publishing/orm_adapter/sequel.rb', line 15

def attributes(object)
  object.values
end

.find(dataset, conditions) ⇒ Object



11
12
13
# File 'lib/table_sync/publishing/orm_adapter/sequel.rb', line 11

def find(dataset, conditions)
  dataset.find(conditions)
end

.model_naming(object) ⇒ Object



7
8
9
# File 'lib/table_sync/publishing/orm_adapter/sequel.rb', line 7

def model_naming(object)
  ::TableSync::NamingResolver::Sequel.new(table_name: object.table_name, db: object.db)
end

.register_callbacks(klass, if_predicate, unless_predicate, debounce_time) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/table_sync/publishing/orm_adapter/sequel.rb', line 38

def register_callbacks(klass, if_predicate, unless_predicate, debounce_time)
  { create: :created, update: :updated, destroy: :destroyed }.each do |event, state|
    klass.send(:define_method, :"after_#{event}") do
      if instance_eval(&if_predicate) && !instance_eval(&unless_predicate)
        db.after_commit do
          TableSync::Publishing::Publisher.new(
            self.class.name,
            values,
            state: state,
            debounce_time: debounce_time,
          ).publish
        end
      end

      super()
    end
  end
end

.setup_sync(klass, opts) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/table_sync/publishing/orm_adapter/sequel.rb', line 19

def setup_sync(klass, opts)
  if_predicate     = to_predicate(opts.delete(:if), true)
  unless_predicate = to_predicate(opts.delete(:unless), false)
  debounce_time    = opts.delete(:debounce_time)

  if opts.any?
    raise "Only :if, :skip_debounce and :unless options are currently " \
          "supported for Sequel hooks"
  end

  register_callbacks(klass, if_predicate, unless_predicate, debounce_time)
end

.to_predicate(val, default) ⇒ Object



32
33
34
35
36
# File 'lib/table_sync/publishing/orm_adapter/sequel.rb', line 32

def to_predicate(val, default)
  return val.to_proc if val.respond_to?(:to_proc)

  -> (*) { default }
end