Sha256: c05f22db735e02eb6b60dc8f99f8b46356d06391c353a3c7d4d0d9290e808f56

Contents?: true

Size: 890 Bytes

Versions: 3

Compression:

Stored size: 890 Bytes

Contents

module Kludge
  class Mishmash
    
    def self.parts
      @parts ||= Parts.new
    end

    def self.one(name, options = {})
      parts << One.new(name, options)
      attr_reader name

      define_method "#{name}=" do |value|
        @parts.find { |part| part.name == name }.value = value
        instance_variable_set("@#{name}", value)
      end
    end

    def self.many(name, options = {})
      parts << Many.new(name, options)
      attr_reader name

      define_method "#{name}=" do |value|
        @parts.find { |part| part.name == name }.value = value
        instance_variable_set("@#{name}", value)
      end
    end

    def initialize(attributes = {})
      @parts = self.class.parts.dup
      attributes.each do |key, value|
        send("#{key}=", value)
      end
    end

    def save
      @parts.save
    end

    def valid?
      @parts.valid?
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
kludge-0.0.3 lib/kludge/mishmash.rb
kludge-0.0.2 lib/kludge/mishmash.rb
kludge-0.0.1 lib/kludge/mishmash.rb