Module: Tessa::Model::ClassMethods

Defined in:
lib/tessa/model.rb

Instance Method Summary collapse

Instance Method Details

#asset(name, args = {}) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/tessa/model.rb', line 39

def asset(name, args={})
  field = tessa_fields[name] = Field.new(args.merge(name: name))

  define_method(name) do
    if instance_variable_defined?(ivar = "@#{name}")
      instance_variable_get(ivar)
    else
      instance_variable_set(
        ivar,
        Tessa::Asset.find(field.id(on: self))
      )
    end
  end

  define_method("#{name}=") do |value|
    change_set = field.change_set_for(value)

    if !(field.multiple? && value.is_a?(AssetChangeSet))
      new_ids = change_set.scoped_changes.select(&:add?).map(&:id)
      change_set += field.difference_change_set(new_ids, on: self)
    end

    pending_tessa_change_sets[name] += change_set

    field.apply(change_set, on: self)
  end
end

#inherited(subclass) ⇒ Object



71
72
73
# File 'lib/tessa/model.rb', line 71

def inherited(subclass)
  subclass.instance_variable_set(:@tessa_fields, @tessa_fields.dup)
end

#tessa_fieldsObject



67
68
69
# File 'lib/tessa/model.rb', line 67

def tessa_fields
  @tessa_fields ||= {}
end