class FluentAccessors::Runner
Attributes
fields[R]
klass[R]
setter_enabled[R]
writer_enabled[R]
Public Class Methods
new(klass, fields, setter_enabled, writer_enabled)
click to toggle source
# File lib/fluent_accessors.rb, line 11 def initialize(klass, fields, setter_enabled, writer_enabled) @klass = klass @fields = fields @setter_enabled = setter_enabled @writer_enabled = writer_enabled end
Public Instance Methods
call()
click to toggle source
# File lib/fluent_accessors.rb, line 18 def call create_writer fields.each do |field| deal_with_field(field) end end
Private Instance Methods
create_fluent(fluent_setter, getter, instance_var, normal_setter)
click to toggle source
# File lib/fluent_accessors.rb, line 42 def create_fluent(fluent_setter, getter, instance_var, normal_setter) klass.send :define_method, getter do |*args, &block| if args.empty? instance_variable_get instance_var else if respond_to? fluent_setter send fluent_setter, *args, &block elsif respond_to? normal_setter send normal_setter, *args, &block else instance_variable_set instance_var, args.first end self end end end
create_setter(fluent_setter, normal_setter)
click to toggle source
# File lib/fluent_accessors.rb, line 60 def create_setter(fluent_setter, normal_setter) if setter_enabled # fluent setter that calls the normal setter and returns self klass.send :define_method, fluent_setter do |value, &block| send normal_setter, value, &block self end end end
create_writer()
click to toggle source
# File lib/fluent_accessors.rb, line 26 def create_writer if writer_enabled klass.send :attr_writer, *fields end end
deal_with_field(field)
click to toggle source
# File lib/fluent_accessors.rb, line 32 def deal_with_field(field) getter = field normal_setter = "#{field}=" fluent_setter = "set_#{field}" instance_var = "@#{field}" create_setter(fluent_setter, normal_setter) create_fluent(fluent_setter, getter, instance_var, normal_setter) end