lib/spaceship/base.rb in spaceship-0.0.7 vs lib/spaceship/base.rb in spaceship-0.0.8
- old
+ new
@@ -1,30 +1,74 @@
module Spaceship
+ ##
+ # Spaceship::Base is the superclass for models in Apple Developer Portal.
+ # It's mainly responsible for mapping responses to objects.
+ #
+ # A class-level attribute `client` is used to maintain the which spaceship we
+ # are using to talk to ADP.
+ #
+ # Example of creating a new ADP model:
+ #
+ # class Widget < Spaceship::Base
+ # attr_accessor :id, :name, :foo_bar, :wiz_baz
+ # attr_mapping({
+ # 'name' => :name,
+ # 'fooBar' => :foo_bar,
+ # 'wizBaz' => :wiz_baz
+ # })
+ # end
+ #
+ # When you want to instantiate a model pass in the parsed response: `Widget.new(widget_json)`
class Base
class << self
attr_accessor :client
+ ##
+ # The client used to make requests.
+ # @return (Spaceship::Client) Defaults to the singleton `Spaceship.client`
def client
@client || Spaceship.client
end
- #set client and return self for chaining
+ ##
+ # Sets client and returns self for chaining.
+ # @return (Spaceship::Base)
def set_client(client)
self.client = client
self
end
##
- # bang method since it changes the parameter in-place
+ # Remaps the attributes passed into the initializer to the model
+ # attributes using the map defined by `attr_map`.
+ #
+ # This method consumes the input parameter meaning attributes that were
+ # remapped are deleted.
+ #
+ # @return (Hash) the attribute mapping used by `remap_keys!`
def remap_keys!(attrs)
return if attr_mapping.nil?
attr_mapping.each do |from, to|
attrs[to] = attrs.delete(from)
end
end
+ ##
+ # Defines the attribute mapping between the response from Apple and our model objects.
+ # Keys are to match keys in the response and the values are to match attributes on the model.
+ #
+ # Example of using `attr_mapping`
+ #
+ # class Widget < Spaceship::Base
+ # attr_accessor :id, :name, :foo_bar, :wiz_baz
+ # attr_mapping({
+ # 'name' => :name,
+ # 'fooBar' => :foo_bar,
+ # 'wizBaz' => :wiz_baz
+ # })
+ # end
def attr_mapping(attr_map = nil)
if attr_map
@attr_mapping = attr_map
else
@attr_mapping ||= ancestors[1].attr_mapping rescue nil
@@ -59,17 +103,24 @@
super
end
end
end
+ ##
+ # The initialize method accepts a parsed response from Apple and sets all
+ # attributes that are defined by `attr_mapping`
+ #
+ # Do not override `initialize` in your own models.
def initialize(attrs = {})
self.class.remap_keys!(attrs)
attrs.each do |key, val|
self.send("#{key}=", val) if respond_to?("#{key}=")
end
@client = self.class.client
end
+ ##
+ # @return (Spaceship::Client) The current spaceship client used by the model to make requests.
def client
@client
end
def inspect