Sha256: fb5a5f9d743ab463c85f4e77d846a37ac1f5c4b03022f482c0dcc77055a8b91a
Contents?: true
Size: 1.6 KB
Versions: 2
Compression:
Stored size: 1.6 KB
Contents
require 'set' module CurrencyCloud class Resource def self.resource(resource=nil) @resource ||= resource end def self.actions(*actions) @actions ||= actions @actions.each do |action| self.class_eval do action_module = CurrencyCloud::Actions.const_get(action.to_s.capitalize) self.extend(action_module) end self.send(:include, CurrencyCloud::Actions::Save) if action == :update self.send(:include, CurrencyCloud::Actions::InstanceDelete) if action == :delete end end attr_reader :changed_attributes def initialize(object) @object = object @changed_attributes = Set.new set_accessors(keys) end def keys @object.keys end def inspect "#<#{self.class}:0x#{self.object_id.to_s(16)} #{@object.inspect}>" end private def changed? !@changed_attributes.empty? end def metaclass class << self; self; end end def set_accessors(keys) metaclass.instance_eval do keys.each do |key| define_method(key) { @object[key] } define_method("#{key}=".to_sym) do |value| @object[key] = value @changed_attributes << key end end end end def self.get(url, params={}) new(request.get(build_url(url), params)) end def self.post(url, params={}) new(request.post(build_url(url), params)) end def self.build_url(url) "#{self.resource}/#{url}" end def self.request RequestHandler.new end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
currency_cloud-0.7.1 | lib/currency_cloud/resource.rb |
currency_cloud-0.7 | lib/currency_cloud/resource.rb |