Sha256: 0634808bfa568fdf7e0a3095798271bf3fc9bed850ec5a9d865b81212f09acbc

Contents?: true

Size: 777 Bytes

Versions: 1

Compression:

Stored size: 777 Bytes

Contents

require 'liner/version'
require 'liner/base'
require 'liner/hashable'
require 'liner/equalizable'
require 'liner/inspectable'
require 'liner/serializable'
require 'ext/class'

module Liner
  def self.included(base)
    [Base, Hashable, Equalizable, Inspectable, Serializable].each do |mod|
      base.send :include, mod
    end
  end
end

def Liner.new(*keys)
  apply Class.new, *keys
end

def Liner.apply(base, *keys)
  keys = keys.map(&:to_sym).uniq.freeze
  base.class_eval do
    define_method :liner_keys do
      begin
        (super() + keys).uniq
      rescue NoMethodError
        keys
      end
    end
    include Liner
    keys.each do |key|
      define_method(key){ self[key] }
      define_method("#{key}="){ |value| self[key] = value }
    end
  end
  base
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
liner-0.1.2 lib/liner.rb