class Patterns::Form
Constants
- Error
- Invalid
- NoParamKey
Attributes
form_owner[R]
resource[R]
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
# File lib/patterns/form.rb, line 13 def initialize(*args) attributes = args.extract_options! if attributes.blank? && args.last.is_a?(ActionController::Parameters) attributes = args.pop.to_unsafe_h end @resource = args.first super(build_original_attributes.merge(attributes)) end
param_key(key = nil)
click to toggle source
# File lib/patterns/form.rb, line 72 def self.param_key(key = nil) if key.nil? @param_key else @param_key = key end end
Public Instance Methods
as(form_owner)
click to toggle source
# File lib/patterns/form.rb, line 35 def as(form_owner) @form_owner = form_owner self end
model_name()
click to toggle source
# File lib/patterns/form.rb, line 68 def model_name @model_name ||= OpenStruct.new(model_name_attributes) end
persisted?()
click to toggle source
# File lib/patterns/form.rb, line 60 def persisted? if resource.present? && resource.respond_to?(:persisted?) resource.persisted? else false end end
save()
click to toggle source
# File lib/patterns/form.rb, line 25 def save valid? ? persist : false end
save!()
click to toggle source
# File lib/patterns/form.rb, line 29 def save! save.tap do |saved| raise Invalid unless saved end end
to_key()
click to toggle source
# File lib/patterns/form.rb, line 40 def to_key nil end
to_model()
click to toggle source
# File lib/patterns/form.rb, line 48 def to_model self end
to_param()
click to toggle source
# File lib/patterns/form.rb, line 52 def to_param if resource.present? && resource.respond_to?(:to_param) resource.to_param else nil end end
to_partial_path()
click to toggle source
# File lib/patterns/form.rb, line 44 def to_partial_path nil end
Private Instance Methods
build_original_attributes()
click to toggle source
# File lib/patterns/form.rb, line 102 def build_original_attributes return {} if resource.nil? base_attributes = resource.respond_to?(:attributes) && resource.attributes.symbolize_keys self.class.attribute_set.each_with_object(base_attributes || {}) do |attribute, result| if result[attribute.name].blank? && resource.respond_to?(attribute.name) result[attribute.name] = resource.public_send(attribute.name) end end end
model_name_attributes()
click to toggle source
# File lib/patterns/form.rb, line 84 def model_name_attributes if self.class.param_key.present? { param_key: self.class.param_key, route_key: self.class.param_key.pluralize, singular_route_key: self.class.param_key } elsif resource.present? && resource.respond_to?(:model_name) { param_key: resource.model_name.param_key, route_key: resource.model_name.route_key, singular_route_key: resource.model_name.singular_route_key } else raise NoParamKey end end
persist()
click to toggle source
# File lib/patterns/form.rb, line 113 def persist raise NotImplementedError, "#persist has to be implemented" end