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