class StatefulFieldFor::Definition
Attributes
attr_name[R]
logic[R]
prefix[R]
scope[R]
suffix[R]
Public Class Methods
included(klass)
click to toggle source
# File lib/stateful_field_for/definition.rb, line 15 def self.included(klass) __define_scope_for_activate(klass) if respond_to?(:__define_scope_for_activate) __define_scope_for_deactivate(klass) if respond_to?(:__define_scope_for_deactivate) __define_after_initialize(klass) if respond_to?(:__define_after_initialize) end
new(attr_name, options = {})
click to toggle source
# File lib/stateful_field_for/definition.rb, line 5 def initialize(attr_name, options = {}) @attr_name = attr_name @prefix = options[:prefix] @suffix = options[:suffix] @scope = options[:scope] || false @logic = (options[:type] == :date) ? "Date.today" : "Time.current" end
Public Instance Methods
_module()
click to toggle source
# File lib/stateful_field_for/definition.rb, line 13 def _module @_module ||= Module.new do def self.included(klass) __define_scope_for_activate(klass) if respond_to?(:__define_scope_for_activate) __define_scope_for_deactivate(klass) if respond_to?(:__define_scope_for_deactivate) __define_after_initialize(klass) if respond_to?(:__define_after_initialize) end end end
module_name()
click to toggle source
# File lib/stateful_field_for/definition.rb, line 23 def module_name "generated_#{attr_name}_stateful_methods".split("_").map(&:camelize).join end
Private Instance Methods
disable(event_basename, to: nil, initial: false)
click to toggle source
# File lib/stateful_field_for/definition.rb, line 61 def disable(event_basename, to: nil, initial: false) event = format_name(event_basename) state = to.nil? ? event : format_name(to) _module.module_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{state}? #{attr_name}.nil? end def #{event} self.#{attr_name} = nil end def #{event}!(options = {}) #{event} save!(options) end RUBY _module.module_eval <<-RUBY, __FILE__, __LINE__ + 1 if scope def self.__define_scope_for_deactivate(klass) klass.scope :#{state}, -> { where(#{attr_name}: nil) } end RUBY _module.module_eval <<-RUBY, __FILE__, __LINE__ + 1 if initial def self.__define_after_initialize(klass) klass.after_initialize :#{event} end RUBY end
enable(event_basename, to: nil, initial: false)
click to toggle source
# File lib/stateful_field_for/definition.rb, line 29 def enable(event_basename, to: nil, initial: false) event = format_name(event_basename) state = to.nil? ? event : format_name(to) _module.module_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{state}? !#{attr_name}.nil? end def #{event} self.#{attr_name} = #{logic} end def #{event}!(options = {}) #{event} save!(options) end RUBY _module.module_eval <<-RUBY, __FILE__, __LINE__ + 1 if scope def self.__define_scope_for_activate(klass) klass.scope :#{state}, -> { where.not(#{attr_name}: nil) } end RUBY _module.module_eval <<-RUBY, __FILE__, __LINE__ + 1 if initial def self.__define_after_initialize(klass) klass.after_initialize :#{event} end RUBY end
format_name(basename)
click to toggle source
# File lib/stateful_field_for/definition.rb, line 93 def format_name(basename) [prefix, basename, suffix].compact.join("_") end