Module: StorageRoom::Accessors::ClassMethods
- Defined in:
- lib/storage_room/accessors.rb
Instance Method Summary collapse
- #attribute_options ⇒ Object
- #attribute_options_including_superclasses ⇒ Object
-
#define_attribute_methods(name, options) ⇒ Object
Creates getter and setter for an attribute.
-
#key(name, options = {}) ⇒ Object
Defines a basic key for a Resource.
-
#load(url, parameters = {}) ⇒ Object
Load an object with the specified URL from the API.
-
#many(name, options = {}) ⇒ Object
Defines a to-many association for a Resource (embedded or association).
-
#new_from_json_file(path) ⇒ Object
Build an object out of a local file.
-
#new_from_json_string(json_string) ⇒ Object
Build an object out of the POST body.
-
#new_from_response_data(response_data) ⇒ Object
Creates a new object of the correct class and initializes it from the response data.
-
#one(name, options = {}) ⇒ Object
Defines a to-one association for a Resource (embedded or association).
-
#response_data_is_association?(hash) ⇒ Boolean
Is the passed hash of response data a real object or only an association with a URL but no actual data.
Instance Method Details
#attribute_options ⇒ Object
84 85 86 |
# File 'lib/storage_room/accessors.rb', line 84 def @attribute_options ||= {} end |
#attribute_options_including_superclasses ⇒ Object
88 89 90 91 92 93 |
# File 'lib/storage_room/accessors.rb', line 88 def hash = .dup hash.merge!(superclass.) if superclass.respond_to?(:attribute_options_including_superclasses) hash end |
#define_attribute_methods(name, options) ⇒ Object
Creates getter and setter for an attribute
72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/storage_room/accessors.rb', line 72 def define_attribute_methods(name, ) # :nodoc: define_method name do attributes[name] || [:default] end define_method "#{name}=" do |object| attributes[name] = object end self.[name] = end |
#key(name, options = {}) ⇒ Object
Defines a basic key for a Resource
54 55 56 57 |
# File 'lib/storage_room/accessors.rb', line 54 def key(name, = {}) .merge!(:type => :key, :default => nil) define_attribute_methods(name, ) end |
#load(url, parameters = {}) ⇒ Object
Load an object with the specified URL from the API
19 20 21 22 23 24 25 26 27 |
# File 'lib/storage_room/accessors.rb', line 19 def load(url, parameters = {}) return nil if url.blank? StorageRoom.log("Loading #{url}") httparty = get(url, parameters) handle_critical_response_errors(httparty) new_from_response_data(httparty.parsed_response.first[1]) end |
#many(name, options = {}) ⇒ Object
Defines a to-many association for a Resource (embedded or association)
66 67 68 69 |
# File 'lib/storage_room/accessors.rb', line 66 def many(name, = {}) .merge!(:type => :many, :default => []) define_attribute_methods(name, ) end |
#new_from_json_file(path) ⇒ Object
Build an object out of a local file
30 31 32 33 |
# File 'lib/storage_room/accessors.rb', line 30 def new_from_json_file(path) json = ::File.read(path) new_from_json_string(json) end |
#new_from_json_string(json_string) ⇒ Object
Build an object out of the POST body
36 37 38 39 |
# File 'lib/storage_room/accessors.rb', line 36 def new_from_json_string(json_string) hash = JSON.parse(json_string) new_from_response_data(hash.first[1]) end |
#new_from_response_data(response_data) ⇒ Object
Creates a new object of the correct class and initializes it from the response data
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/storage_room/accessors.rb', line 42 def new_from_response_data(response_data) object = StorageRoom.class_for_name(response_data['@type']).new.set_from_response_data(response_data) if object.is_a?(Entry) && !object.loaded? && !object.proxy? StorageRoom.log("Return #{response_data['url']} proxied") Proxy.new(object) else object end end |
#one(name, options = {}) ⇒ Object
Defines a to-one association for a Resource (embedded or association)
60 61 62 63 |
# File 'lib/storage_room/accessors.rb', line 60 def one(name, = {}) .merge!(:type => :one, :default => nil) define_attribute_methods(name, ) end |
#response_data_is_association?(hash) ⇒ Boolean
Is the passed hash of response data a real object or only an association with a URL but no actual data
14 15 16 |
# File 'lib/storage_room/accessors.rb', line 14 def response_data_is_association?(hash) hash.size == 2 && hash.include?('@type') && hash.include?('url') end |