Sha256: 162cefd016cb0bd0af6c060db4f34469117b3f0af424af6f86f030650f184bcb

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

module Loquor
  module ResourceMock

    def self.extended(x)
      x.class_eval do
        def method_missing(name, *args)
          if name[-1] == "="
            if self.class.attributes.keys.map{ |k| :"#{k}=" }.include?(name)
              attr = name.to_s[0..-2].to_sym
              @data[attr] = args[0]
            else
              raise NameError.new("undefined local variable or method '#{name}' for #{self.class.name}")
            end
          else
            super(name, *args)
          end
        end
      end
    end

    def attributes
      @attributes
    end

    def attributes=(attrs)
      @attributes = attrs
    end

    def sample(overrides = {})
      arbitary_attributes = (overrides.keys - attributes.keys)
      unless arbitary_attributes.empty?
        raise NameError.new("undefined local variable or method '#{arbitary_attributes.first}' for #{self.name}")
      end
      self.new(attributes.merge(overrides))
    end

    def find(id)
      self.new(attributes.merge(id: id))
    end

    def where(*args)
      [ find(1), find(2) ]
    end

    def create(attrs)
      self.new(attrs)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
loquor-0.6.0 lib/loquor/resource_mock.rb