module Restfulie module Client #:nodoc: # Use this class to configure the entry point and other relevant behaviors related to accessing or interacting with resources # # The available options are: # # * :entry_point - The URI for an entry point, such as http://resource.entrypoint.com/post # * :representations - Representations. # # You can also store any other custom configuration. # # ==== Example # # configuration = Configuration.new # configuration[:entry_point] = 'http://resource.entrypoint.com/post' # configuration[:entry_point] # => 'http://resource.entrypoint.com/post' # # or you can use: # # configuration.entry_point = 'http://resource.entrypoint.com/post' # configuration.entry_point # => 'http://resource.entrypoint.com/post' class Configuration < ::Hash # the current environment attr_reader :environment @@default_configuration = { :entry_point => '', :representations => {} } def initialize super self.environment = :development end # this will store a new configuration (based on the default) for the environment passed by value. def environment=(value) @environment = value unless has_key?(@environment) dee_clone = Marshal::load(Marshal::dump(@@default_configuration)) store(@environment,dee_clone) end @environment end # access (key) configuration value def [](key) fetch(@environment)[key] end # store on (key) configuration the value def []=(key,value) fetch(@environment)[key] = value end def method_missing(name, *args, &block) method_name = name.to_s if method_name.last == '=' fetch(environment)[method_name.chop.to_sym] = args[0] else value = fetch(environment)[name] value ? value : super end end end end end