Module: Sinja::Sequel::Resource

Defined in:
lib/sinja/sequel.rb

Instance Method Summary collapse

Instance Method Details

#has_many(rel, try_convert = :to_i, &block) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/sinja/sequel.rb', line 78

def has_many(rel, try_convert=:to_i, &block)
  super(rel) do
    fetch do
      resource.send("#{rel}_dataset")
    end

    clear(:sideload_on=>:update) do
      resource.send("remove_all_#{rel}")
    end

    replace(:sideload_on=>:update) do |rios|
      add_remove(rel, rios, try_convert)
    end

    merge(:sideload_on=>:create) do |rios|
      add_missing(rel, rios, try_convert)
    end

    subtract do |rios|
      remove_present(rel, rios, try_convert)
    end

    instance_eval(&block) if block
  end
end

#has_one(rel, try_convert = :to_i, &block) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/sinja/sequel.rb', line 57

def has_one(rel, try_convert=:to_i, &block)
  super(rel) do
    pluck do
      resource.send(rel)
    end

    prune(:sideload_on=>:update) do
      resource.send("#{rel}=", nil)
      resource.save_changes(:validate=>!sideloaded?)
    end

    graft(:sideload_on=>%i[create update]) do |rio|
      klass = resource.class.association_reflection(rel).associated_class
      resource.send("#{rel}=", klass.with_pk!(proc(&try_convert).(rio[:id])))
      resource.save_changes(:validate=>!sideloaded?)
    end

    instance_eval(&block) if block
  end
end