Sha256: 61b8627d23b3ed7da1499d253192785b1a2d0aea32ad6c01ae02e731401e362c

Contents?: true

Size: 1.69 KB

Versions: 1

Compression:

Stored size: 1.69 KB

Contents

module Sham
  class Base
    attr_accessor :klass, :options

    def initialize klass, options = {}
      @klass = klass
      @options = options
    end

    def sham!
      @klass.sham! @options
    end
  end

  class Config
    def self.activate!
      Dir["#{Rails.root}/sham/*_sham.rb"].each do |f|
        load f
        (File.basename(f).match(/(.*)_sham.rb/)[1]).classify.constantize.send :include, Sham::Methods
      end
    end
  end

  def self.string!
    ActiveSupport::SecureRandom.hex(5)
  end

  def self.parse! value
    if value.is_a?(Array)
      value.map{ |k| parse! k }
    elsif value.is_a?(Hash)
      Hash.new value.map{ |k,v| [k, parse!(v)] }
    elsif value.is_a?(Sham::Base)
      value.sham!
    else
      value
    end
  end

  def self.add_options! klass, options = {}, options_string = "options"
    eval("#{klass}::Sham.#{options_string}").each do |key, value|
      options[key] = self.parse!(value) unless options.has_key?(key)
    end
  end

  module Methods
    def self.included klass
      klass.class_eval do
        def self.sham! *args
          options = (args.extract_options! || {})
          ::Sham.add_options! self.name, options
          klass = (options.delete(:type) || self.name).constantize
          return klass.create(options) unless args[0] == :build
          return klass.new(options)
        end

        def self.sham_alternate! type, *args
          options = (args.extract_options! || {})
          ::Sham.add_options! self.name, options, "#{type}_options"
          klass = (options.delete(:type) || self.name).constantize
          return klass.create(options) unless args[0] == :build
          return klass.new(options)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sham-0.5.0 lib/sham.rb