module AtomicCms::HasComponents::ClassMethods

Public Instance Methods

component_attr(name) click to toggle source
# File lib/atomic_cms/has_components.rb, line 10
def component_attr(name)
  define_method("set_default_#{name}") do
    write_attribute(name, ArrayComponent.new.to_yaml) unless send(name)
  end

  after_initialize "set_default_#{name}"

  define_method("#{name}_object") do
    AtomicAssets::Component.from_yaml(send(name))
  end

  define_method("#{name}_object=") do |params|
    object = AtomicAssets::Component.from_hash(params)
    write_attribute(name, object.to_yaml)
  end

  define_method("#{name}_render") do
    send("#{name}_object").render
  end

  define_method("#{name}_edit") do
    send("#{name}_object").edit
  end
end