module AutoViewModel::Attributes

Public Class Methods

new(locals) click to toggle source
# File lib/auto_view_model/attributes.rb, line 32
def initialize(locals)
  _construct_attributes(locals)
end

Public Instance Methods

accepts(parameter, default: nil) click to toggle source
# File lib/auto_view_model/attributes.rb, line 19
def accepts(parameter, default: nil)
  _optional_attributes[parameter] = default

  attr_reader parameter
end
inherited(subclass) click to toggle source
Calls superclass method
# File lib/auto_view_model/attributes.rb, line 25
def inherited(subclass)
  subclass._optional_attributes = _optional_attributes.dup
  subclass._required_attributes = _required_attributes.dup
  super
end
requires(parameter) click to toggle source
# File lib/auto_view_model/attributes.rb, line 13
def requires(parameter)
  _required_attributes << parameter

  attr_reader parameter
end

Private Instance Methods

_construct_attributes(args) click to toggle source
# File lib/auto_view_model/attributes.rb, line 38
def _construct_attributes(args)
  _required_attributes.each do |attr|
    if !args.has_key?(attr)
      raise ArgumentError.new("Missing view keyword argument :#{attr}") # Simulate required kwargs
    end

    instance_variable_set("@#{attr}", args[attr])
  end

  _optional_attributes.each do |attr, default|
    if args.has_key?(attr)
      value = args[attr]
      instance_variable_set("@#{attr}", value)
    else
      value = args[attr]
      instance_variable_set("@#{attr}", default)
    end
  end
end