module MemoAttr::ClassMethods
Public Instance Methods
memo_attr(name, &block)
click to toggle source
# File lib/jobshop/support/memo_attr.rb, line 12 def memo_attr(name, &block) raise LocalJumpError.new('no block given') unless block_given? instance_eval { define_memoized_method(name, &block) } class_eval { define_validation_block(name) } end
Private Instance Methods
define_memoized_method(name, &block)
click to toggle source
# File lib/jobshop/support/memo_attr.rb, line 20 def define_memoized_method(name, &block) define_method(name) do __memoized.fetch(name) { |k| __memoized[k] = instance_eval(&block) } end end
define_validation_block(name)
click to toggle source
# File lib/jobshop/support/memo_attr.rb, line 26 def define_validation_block(name) validate do send(name).errors.each do |key, value| errors.add("#{send(name).class.name.underscore}_#{key}", value) end unless send(name).valid? end end