class RgGen::Core::InputBase::Property
Attributes
name[R]
Public Class Methods
define(feature, name, **options, &body)
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 7 def self.define(feature, name, **options, &body) new(name, options, &body).define(feature) end
new(name, options, &body)
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 11 def initialize(name, options, &body) @name = name @options = options @costom_property = if options[:body] create_costom_property(&options[:body]) elsif block_given? create_costom_property(&body) end end
Public Instance Methods
define(feature)
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 24 def define(feature) feature.class_exec(self) do |property| define_method(property.name) do |*args, &block| property.evaluate(self, args, &block) end end end
evaluate(feature, args, &block)
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 32 def evaluate(feature, args, &block) feature.verify(@options[:verify]) if @options.key?(:verify) if proxy_property? proxy_property(feature, args, &block) else default_property(feature) end end
Private Instance Methods
create_costom_property(&body)
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 43 def create_costom_property(&body) body && Module.new.module_eval do define_method(:__costom_property__, &body) instance_method(:__costom_property__) end end
default_property(feature)
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 70 def default_property(feature) varible_name = "@#{@name.to_s.delete_suffix('?')}" if feature.instance_variable_defined?(varible_name) feature.instance_variable_get(varible_name) elsif @options.key?(:initial) set_initial_value(feature, varible_name) else evaluate_default_initial_value(feature, @options[:default]) end end
evaluate_default_initial_value(feature, value)
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 87 def evaluate_default_initial_value(feature, value) value.is_a?(Proc) ? feature.instance_exec(&value) : value end
proxy_property(feature, args, &block)
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 58 def proxy_property(feature, args, &block) receiver, method = if @costom_property [@costom_property.bind(feature), :call] elsif @options[:forward_to_helper] [feature.class, @name] else [feature, @options[:forward_to]] end receiver.__send__(method, *args, &block) end
proxy_property?()
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 50 def proxy_property? [ @costom_property, @options[:forward_to_helper], @options[:forward_to] ].any? end
set_initial_value(feature, varible_name)
click to toggle source
# File lib/rggen/core/input_base/property.rb, line 81 def set_initial_value(feature, varible_name) @options[:initial] .yield_self { |v| evaluate_default_initial_value(feature, v) } .yield_self { |v| feature.instance_variable_set(varible_name, v) } end