Sha256: ea6f1f900d23985b3d7e8a25e8b405ee2ffb4b6fe26a60e02dff98672a6e99c2

Contents?: true

Size: 895 Bytes

Versions: 2

Compression:

Stored size: 895 Bytes

Contents

class Array

  def to_object(subject = nil)
    subject = Object.new if subject.nil?
    self.each { |item| add_reader_for(subject, item, nil) }
    subject
  end

  def to_objects(&blk)
    records = blk.call
    return [] if records.empty?
    records.map { |record| create_object_for_this_record(record) }
  end

  private

  def create_object_for_this_record(record)
    result = Object.new
    self.each_with_index do |property_name, index|
      value = get_the_value(record, index)
      add_reader_for(result, property_name, value)
    end
    result
  end

  def get_the_value(value, index)
    return value unless value.kind_of?(Array)
    value[index]
  end

  def add_reader_for(result, property_name, this_value)
    result.instance_variable_set("@#{property_name}", this_value)
    result.instance_eval("
    class << self
      attr_accessor :#{property_name}
    end")
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
subtle-0.3.8 lib/subtle/array_to_objects.rb
subtle-0.3.6 lib/subtle/array_to_objects.rb