- #
- A
- B
- C
- D
- E
- F
- H
- I
- K
- L
- N
- P
- R
- S
-
- save,
- save!,
- schema,
- schema,
- schema=,
- set_prefix,
- site,
- site=,
- ssl_options,
- ssl_options=
- T
- U
- ActiveResource::CustomMethods
- ActiveResource::Observing
- ActiveResource::Validations
- ActiveModel::Conversion
- ActiveModel::Serializers::JSON
- ActiveModel::Serializers::Xml
| [W] | collection_name | |
| [W] | element_name | |
| [W] | primary_key | |
| [W] | set_collection_name | |
| [W] | set_element_name | |
| [W] | set_primary_key |
This is an alias for find(:all). You can pass in all the same arguments to
this method as you can to find(:all)
Builds a new, unsaved record using the default values from the remote server so that it can be used with RESTful forms.
Options
-
attributes- A hash that overrides the default values from the server.
Returns the new resource instance.
Gets the collection path for the REST resources. If the
query_options parameter is omitted, Rails will split from the
prefix_options.
Options
-
prefix_options- A hash to add a prefix to the request for nested URLs (e.g.,:account_id => 19would yield a URL like/accounts/19/purchases.json). -
query_options- A hash to add items to the query string for the request.
Examples
Post.collection_path
# => /posts.json
Comment.collection_path(:post_id => 5)
# => /posts/5/comments.json
Comment.collection_path(:post_id => 5, :active => 1)
# => /posts/5/comments.json?active=1
Comment.collection_path({:post_id => 5}, {:active => 1})
# => /posts/5/comments.json?active=1
# File activeresource/lib/active_resource/base.rb, line 700 def collection_path(prefix_options = {}, query_options = nil) check_prefix_options(prefix_options) prefix_options, query_options = split_options(prefix_options) if query_options.nil? "#{prefix(prefix_options)}#{collection_name}.#{format.extension}#{query_string(query_options)}" end
An instance of ActiveResource::Connection
that is the base connection to the remote service. The refresh
parameter toggles whether or not the connection is refreshed at every
request or not (defaults to false).
# File activeresource/lib/active_resource/base.rb, line 547 def connection(refresh = false) if defined?(@connection) || superclass == Object @connection = Connection.new(site, format) if refresh || @connection.nil? @connection.proxy = proxy if proxy @connection.user = user if user @connection.password = password if password @connection.auth_type = auth_type if auth_type @connection.timeout = timeout if timeout @connection.ssl_options = ssl_options if ssl_options @connection else superclass.connection end end
Creates a new resource instance and makes a request to the remote service that it be saved, making it equivalent to the following simultaneous calls:
ryan = Person.new(:first => 'ryan')
ryan.save
Returns the newly created resource. If a failure has occurred an exception
will be raised (see save). If the resource is invalid and has
not been saved then valid? will return false,
while new? will still return true.
Examples
Person.create(:name => 'Jeremy', :email => 'myname@nospam.com', :enabled => true)
my_person = Person.find(:first)
my_person.email # => myname@nospam.com
dhh = Person.create(:name => 'David', :email => 'dhh@nospam.com', :enabled => true)
dhh.valid? # => true
dhh.new? # => false
# We'll assume that there's a validation that requires the name attribute
that_guy = Person.create(:name => '', :email => 'thatguy@nospam.com', :enabled => true)
that_guy.valid? # => false
that_guy.new? # => true
Deletes the resources with the ID in the id parameter.
Options
All options specify prefix and query parameters.
Examples
Event.delete(2) # sends DELETE /events/2
Event.create(:name => 'Free Concert', :location => 'Community Center')
my_event = Event.find(:first) # let's assume this is event with ID 7
Event.delete(my_event.id) # sends DELETE /events/7
# Let's assume a request to events/5/cancel.json
Event.delete(params[:id]) # sends DELETE /events/5
Gets the element path for the given ID in id. If the
query_options parameter is omitted, Rails will split from the prefix options.
Options
prefix_options - A hash to add a
prefix to the request for nested URLs (e.g., :account_id =>
19
would yield a URL like <tt>/accounts/19/purchases.json</tt>).
query_options - A hash to add items to
the query string for the request.
Examples
Post.element_path(1)
# => /posts/1.json
class Comment < ActiveResource::Base
self.site = "http://37s.sunrise.i/posts/:post_id/"
end
Comment.element_path(1, :post_id => 5)
# => /posts/5/comments/1.json
Comment.element_path(1, :post_id => 5, :active => 1)
# => /posts/5/comments/1.json?active=1
Comment.element_path(1, {:post_id => 5}, {:active => 1})
# => /posts/5/comments/1.json?active=1
# File activeresource/lib/active_resource/base.rb, line 652 def element_path(id, prefix_options = {}, query_options = nil) check_prefix_options(prefix_options) prefix_options, query_options = split_options(prefix_options) if query_options.nil? "#{prefix(prefix_options)}#{collection_name}/#{URI.parser.escape id.to_s}.#{format.extension}#{query_string(query_options)}" end
Asserts the existence of a resource, returning true if the
resource is found.
Examples
Note.create(:title => 'Hello, world.', :body => 'Nothing more for now...')
Note.exists?(1) # => true
Note.exists(1349) # => false
# File activeresource/lib/active_resource/base.rb, line 868 def exists?(id, options = {}) if id prefix_options, query_options = split_options(options[:params]) path = element_path(id, prefix_options, query_options) response = connection.head(path, headers) response.code.to_i == 200 end # id && !find_single(id, options).nil? rescue ActiveResource::ResourceNotFound, ActiveResource::ResourceGone false end
Core method for finding resources. Used similarly to Active Record's
find method.
Arguments
The first argument is considered to be the scope of the query. That is, how many resources are returned from the request. It can be one of the following.
-
:one- Returns a single resource. -
:first- Returns the first resource found. -
:last- Returns the last resource found. -
:all- Returns every resource that matches the request.
Options
-
:from- Sets the path or custom method that resources will be fetched from. -
:params- Sets query and prefix (nested URL) parameters.
Examples
Person.find(1)
# => GET /people/1.json
Person.find(:all)
# => GET /people.json
Person.find(:all, :params => { :title => "CEO" })
# => GET /people.json?title=CEO
Person.find(:first, :from => :managers)
# => GET /people/managers.json
Person.find(:last, :from => :managers)
# => GET /people/managers.json
Person.find(:all, :from => "/companies/1/people.json")
# => GET /companies/1/people.json
Person.find(:one, :from => :leader)
# => GET /people/leader.json
Person.find(:all, :from => :developers, :params => { :language => 'ruby' })
# => GET /people/developers.json?language=ruby
Person.find(:one, :from => "/companies/1/manager.json")
# => GET /companies/1/manager.json
StreetAddress.find(1, :params => { :person_id => 1 })
# => GET /people/1/street_addresses/1.json
Failure or missing data
A failure to find the requested object raises a ResourceNotFound
exception if the find was called with an id.
With any other scope, find returns nil when no data is returned.
Person.find(1)
# => raises ResourceNotFound
Person.find(:all)
Person.find(:first)
Person.find(:last)
# => nil
# File activeresource/lib/active_resource/base.rb, line 808 def find(*arguments) scope = arguments.slice!(0) options = arguments.slice!(0) || {} case scope when :all then find_every(options) when :first then find_every(options).first when :last then find_every(options).last when :one then find_one(options) else find_single(scope, options) end end
A convenience wrapper for find(:first,
*args). You can pass in all the same arguments to this method as you
can to find(:first).
Returns the current format, default is ActiveResource::Formats::JsonFormat.
Sets the format that attributes are sent and received in from a mime type reference:
Person.format = :json
Person.find(1) # => GET /people/1.json
Person.format = ActiveResource::Formats::XmlFormat
Person.find(1) # => GET /people/1.xml
Default format is :json.
# File activeresource/lib/active_resource/base.rb, line 491 def format=(mime_type_reference_or_format) format = mime_type_reference_or_format.is_a?(Symbol) ? ActiveResource::Formats[mime_type_reference_or_format] : mime_type_reference_or_format self._format = format connection.format = format if site end
Returns the list of known attributes for this resource, gathered from the
provided schema Attributes that are known will cause your
resource to return 'true' when respond_to? is called
on them. A known attribute will return nil if not
set (rather than <t>MethodNotFound</tt>); thus known attributes
can be used with validates_presence_of without a
getter-method.
A convenience wrapper for find(:last,
*args). You can pass in all the same arguments to this method as you
can to find(:last).
The logger for diagnosing and tracing Active Resource calls.
Constructor method for new resources; the optional attributes
parameter takes a hash of attributes for the new resource.
Examples
my_course = Course.new
my_course.name = "Western Civilization"
my_course.lecturer = "Don Trotter"
my_course.save
my_other_course = Course.new(:name => "Philosophy: Reason and Being", :lecturer => "Ralph Cling")
my_other_course.save
Gets the new element path for REST resources.
Options
-
prefix_options- A hash to add a prefix to the request for nested URLs (e.g.,:account_id => 19would yield a URL like/accounts/19/purchases/new.json).
Examples
Post.new_element_path
# => /posts/new.json
class Comment < ActiveResource::Base
self.site = "http://37s.sunrise.i/posts/:post_id/"
end
Comment.collection_path(:post_id => 5)
# => /posts/5/comments/new.json
Gets the password for REST HTTP authentication.
Sets the password for REST HTTP authentication.
Gets the prefix for a resource's nested URL (e.g.,
prefix/collectionname/1.json) This method is regenerated at
runtime based on what the prefix is set to.
Sets the prefix for a resource's nested URL (e.g.,
prefix/collectionname/1.json). Default value is site.path.
# File activeresource/lib/active_resource/base.rb, line 603 def prefix=(value = '/') # Replace :placeholders with '#{embedded options[:lookups]}' prefix_call = value.gsub(/:\w+/) { |key| "\#{URI.parser.escape options[#{key}].to_s}" } # Clear prefix parameters in case they have been cached @prefix_parameters = nil silence_warnings do # Redefine the new methods. instance_eval " def prefix_source() "#{value}" end def prefix(options={}) "#{prefix_call}" end ", __FILE__, __LINE__ + 1 end rescue Exception => e logger.error "Couldn't set prefix: #{e}\n #{code}" if logger raise end
An attribute reader for the source string for the resource path prefix. This method is regenerated at runtime based on what the prefix is set to.
Gets the proxy variable if a proxy is required
Creates a schema for this resource - setting the attributes that are known prior to fetching an instance from the remote system.
The schema helps define the set of known_attributes of the
current resource.
There is no need to specify a schema for your Active Resource. If you do
not, the known_attributes will be guessed from the instance
attributes returned when an instance is fetched from the remote system.
example: class Person < ActiveResource::Base
schema do
# define each attribute separately
attribute 'name', :string
# or use the convenience methods and pass >=1 attribute names
string 'eye_color', 'hair_color'
integer 'age'
float 'height', 'weight'
# unsupported types should be left as strings
# overload the accessor methods if you need to convert them
attribute 'created_at', 'string'
end
end
p = Person.new p.respond_to? :name # => true p.respond_to? :age # => true p.name # => nil p.age # => nil
j = Person.find_by_name('John') # <person><name>John</name><age>34</age><num_children>3</num_children></person> j.respond_to? :name # => true j.respond_to? :age # => true j.name # => 'John' j.age # => '34' # note this is a string! j.num_children # => '3' # note this is a string!
p.num_children # => NoMethodError
Attribute-types must be one of:
string, integer, float
Note: at present the attribute-type doesn't do anything, but stay tuned… Shortly it will also cast the value of the returned attribute. ie: j.age # => 34 # cast to an integer j.weight # => '65' # still a string!
# File activeresource/lib/active_resource/base.rb, line 320 def schema(&block) if block_given? schema_definition = Schema.new schema_definition.instance_eval(&block) # skip out if we didn't define anything return unless schema_definition.attrs.present? @schema ||= {}.with_indifferent_access @known_attributes ||= [] schema_definition.attrs.each do |k,v| @schema[k] = v @known_attributes << k end schema else @schema ||= nil end end
Alternative, direct way to specify a schema for this Resource.
schema is more flexible, but this is quick for a very simple
schema.
Pass the schema as a hash with the keys being
the attribute-names and the value being one of the accepted attribute types
(as defined in schema)
example:
class Person < ActiveResource::Base
schema = {'name' => :string, 'age' => :integer }
end
The keys/values can be strings or symbols. They will be converted to strings.
# File activeresource/lib/active_resource/base.rb, line 359 def schema=(the_schema) unless the_schema.present? # purposefully nulling out the schema @schema = nil @known_attributes = [] return end raise ArgumentError, "Expected a hash" unless the_schema.kind_of? Hash schema do the_schema.each {|k,v| attribute(k,v) } end end
Gets the URI of the REST resources to map for this class. The site variable is required for Active Resource's mapping to work.
# File activeresource/lib/active_resource/base.rb, line 387 def site # Not using superclass_delegating_reader because don't want subclasses to modify superclass instance # # With superclass_delegating_reader # # Parent.site = 'http://anonymous@test.com' # Subclass.site # => 'http://anonymous@test.com' # Subclass.site.user = 'david' # Parent.site # => 'http://david@test.com' # # Without superclass_delegating_reader (expected behavior) # # Parent.site = 'http://anonymous@test.com' # Subclass.site # => 'http://anonymous@test.com' # Subclass.site.user = 'david' # => TypeError: can't modify frozen object # if defined?(@site) @site elsif superclass != Object && superclass.site superclass.site.dup.freeze end end
Sets the URI of the REST resources to map for
this class to the value in the site argument. The site
variable is required for Active Resource's mapping to work.
# File activeresource/lib/active_resource/base.rb, line 412 def site=(site) @connection = nil if site.nil? @site = nil else @site = create_site_uri_from(site) @user = URI.parser.unescape(@site.user) if @site.user @password = URI.parser.unescape(@site.password) if @site.password end end
Returns the SSL options hash.
Options that will get applied to an SSL connection.
-
:key- An OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object. -
:cert- An OpenSSL::X509::Certificate object as client certificate -
:ca_file- Path to a CA certification file in PEM format. The file can contain several CA certificates. -
:ca_path- Path of a CA certification directory containing certifications in PEM format. -
:verify_mode- Flags for server the certification verification at beginning of SSL/TLS session. (OpenSSL::SSL::VERIFY_NONE or OpenSSL::SSL::VERIFY_PEER is acceptable) -
:verify_callback- The verify callback for the server certification verification. -
:verify_depth- The maximum depth for the certificate chain verification. -
:cert_store- OpenSSL::X509::Store to verify peer certificate. -
:ssl_timeout-The SSL timeout in seconds.
Gets the number of seconds after which requests to the REST API should time out.
Sets the number of seconds after which requests to the REST API should time out.
Gets the user for REST HTTP authentication.
Sets the user for REST HTTP authentication.
Test for equality. Resource are equal if and
only if other is the same object or is an instance of the same
class, is not new?, and has the same id.
Examples
ryan = Person.create(:name => 'Ryan')
jamie = Person.create(:name => 'Jamie')
ryan == jamie
# => false (Different name attribute and id)
ryan_again = Person.new(:name => 'Ryan')
ryan == ryan_again
# => false (ryan_again is new?)
ryans_clone = Person.create(:name => 'Ryan')
ryan == ryans_clone
# => false (Different id attributes)
ryans_twin = Person.find(ryan.id)
ryan == ryans_twin
# => true
Returns a clone of the resource that hasn't been assigned an
id yet and is treated as a new resource.
ryan = Person.find(1)
not_ryan = ryan.clone
not_ryan.new? # => true
Any active resource member attributes will NOT be cloned, though all other
attributes are. This is to prevent the conflict between any
prefix_options that refer to the original parent resource and
the newly cloned parent resource that does not exist.
ryan = Person.find(1)
ryan.address = StreetAddress.find(1, :person_id => ryan.id)
ryan.hash = {:not => "an ARes instance"}
not_ryan = ryan.clone
not_ryan.new? # => true
not_ryan.address # => NoMethodError
not_ryan.hash # => {:not => "an ARes instance"}
# File activeresource/lib/active_resource/base.rb, line 1029 def clone # Clone all attributes except the pk and any nested ARes cloned = Hash[attributes.reject {|k,v| k == self.class.primary_key || v.is_a?(ActiveResource::Base)}.map { |k, v| [k, v.clone] }] # Form the new resource - bypass initialize of resource with 'new' as that will call 'load' which # attempts to convert hashes into member objects and arrays into collections of objects. We want # the raw objects to be cloned so we bypass load by directly setting the attributes hash. resource = self.class.new({}) resource.prefix_options = self.prefix_options resource.send :instance_variable_set, '@attributes', cloned resource end
Deletes the resource from the remote service.
Examples
my_id = 3
my_person = Person.find(my_id)
my_person.destroy
Person.find(my_id) # 404 (Resource Not Found)
new_person = Person.create(:name => 'James')
new_id = new_person.id # => 7
new_person.destroy
Person.find(new_id) # 404 (Resource Not Found)
Duplicates the current resource without saving it.
Examples
my_invoice = Invoice.create(:customer => 'That Company')
next_invoice = my_invoice.dup
next_invoice.new? # => true
next_invoice.save
next_invoice == my_invoice # => false (different id attributes)
my_invoice.customer # => That Company
next_invoice.customer # => That Company
Returns the serialized string representation of the resource in the configured serialization format specified in ::format. The options applicable depend on the configured encoding format.
Tests for equality (delegates to ==).
Evaluates to true if this resource is not new?
and is found on the remote service. Using this method, you can check for
resources that may have been deleted between the object's instantiation
and actions on it.
Examples
Person.create(:name => 'Theodore Roosevelt')
that_guy = Person.find(:first)
that_guy.exists? # => true
that_lady = Person.new(:name => 'Paul Bean')
that_lady.exists? # => false
guys_id = that_guy.id
Person.delete(guys_id)
that_guy.exists? # => false
Delegates to id in order to allow two resources of the same type and id to work with something like:
[(a = Person.find 1), (b = Person.find 2)] & [(c = Person.find 1), (d = Person.find 4)] # => [a]
Gets the \id attribute of the resource.
Sets the \id attribute of the resource.
This is a list of known attributes for this resource. Either gathered from
the provided schema, or from the attributes set on this
instance after it has been fetched from the remote system.
A method to manually load attributes from a hash.
Recursively loads collections of resources. This method is called in
initialize and create when a hash of attributes
is provided.
Examples
my_attrs = {:name => 'J&J Textiles', :industry => 'Cloth and textiles'}
my_attrs = {:name => 'Marty', :colors => ["red", "green", "blue"]}
the_supplier = Supplier.find(:first)
the_supplier.name # => 'J&M Textiles'
the_supplier.load(my_attrs)
the_supplier.name('J&J Textiles')
# These two calls are the same as Supplier.new(my_attrs)
my_supplier = Supplier.new
my_supplier.load(my_attrs)
# These three calls are the same as Supplier.create(my_attrs)
your_supplier = Supplier.new
your_supplier.load(my_attrs)
your_supplier.save
# File activeresource/lib/active_resource/base.rb, line 1254 def load(attributes, remove_root = false) raise ArgumentError, "expected an attributes Hash, got #{attributes.inspect}" unless attributes.is_a?(Hash) @prefix_options, attributes = split_options(attributes) if attributes.keys.size == 1 remove_root = self.class.element_name == attributes.keys.first.to_s end attributes = Formats.remove_root(attributes) if remove_root attributes.each do |key, value| @attributes[key.to_s] = case value when Array resource = nil value.map do |attrs| if attrs.is_a?(Hash) resource ||= find_or_create_resource_for_collection(key) resource.new(attrs) else attrs.duplicable? ? attrs.dup : attrs end end when Hash resource = find_or_create_resource_for(key) resource.new(value) else value.duplicable? ? value.dup : value end end self end
Returns true if this object hasn't yet been saved,
otherwise, returns false.
Examples
not_new = Computer.create(:brand => 'Apple', :make => 'MacBook', :vendor => 'MacMall')
not_new.new? # => false
is_new = Computer.new(:brand => 'IBM', :make => 'Thinkpad', :vendor => 'IBM')
is_new.new? # => true
is_new.save
is_new.new? # => false
Returns true if this object has been saved, otherwise returns
false.
Examples
persisted = Computer.create(:brand => 'Apple', :make => 'MacBook', :vendor => 'MacMall')
persisted.persisted? # => true
not_persisted = Computer.new(:brand => 'IBM', :make => 'Thinkpad', :vendor => 'IBM')
not_persisted.persisted? # => false
not_persisted.save
not_persisted.persisted? # => true
A method to reload the attributes of this object from the remote web service.
Examples
my_branch = Branch.find(:first)
my_branch.name # => "Wislon Raod"
# Another client fixes the typo...
my_branch.name # => "Wislon Raod"
my_branch.reload
my_branch.name # => "Wilson Road"
A method to determine if an object responds to a
message (e.g., a method call). In Active Resource, a Person object with a name attribute
can answer true to my_person.respond_to?(:name),
my_person.respond_to?(:name=), and
my_person.respond_to?(:name?).
# File activeresource/lib/active_resource/base.rb, line 1323 def respond_to?(method, include_priv = false) method_name = method.to_s if attributes.nil? super elsif known_attributes.include?(method_name) true elsif method_name =~ /(?:=|\?)$/ && attributes.include?($`) true else # super must be called at the end of the method, because the inherited respond_to? # would return true for generated readers, even if the attribute wasn't present super end end
For checking respond_to? without searching the attributes
(which is faster).
Saves (POST) or updates (PUT) a resource.
Delegates to create if the object is new, update
if it exists. If the response to the save includes a body, it will be
assumed that this body is Json for the final object as it looked after the
save (which would include attributes like created_at that
weren't part of the original submit).
Examples
my_company = Company.new(:name => 'RoleModel Software', :owner => 'Ken Auer', :size => 2)
my_company.new? # => true
my_company.save # sends POST /companies/ (create)
my_company.new? # => false
my_company.size = 10
my_company.save # sends PUT /companies/1 (update)
Saves the resource.
If the resource is new, it is created via POST, otherwise the
existing resource is updated via PUT.
With save! validations always run. If any of them fail
ActiveResource::ResourceInvalid gets raised, and nothing is POSTed to the
remote system. See ActiveResource::Validations for more
information.
There's a series of callbacks associated with save!. If
any of the before_* callbacks return false the
action is cancelled and save! raises
ActiveResource::ResourceInvalid.
If no schema has been defined for the class (see
ActiveResource::schema=), the default automatic schema is
generated from the current instance's attributes
Updates a single attribute and then saves the object.
Note: Unlike ActiveRecord::Persistence#update_attribute, this method is subject to normal validation routines as an update sends the whole body of the resource in the request. (See Validations).
As such, this method is equivalent to calling #update_attributes with a single attribute/value pair.
If the saving fails because of a connection or remote service error, an
exception will be raised. If saving fails because the resource is invalid
then false will be returned.
Updates this resource with all the attributes from the passed-in Hash and requests that the record be saved.
If the saving fails because of a connection or remote service error, an
exception will be raised. If saving fails because the resource is invalid
then false will be returned.
Note: Though this request can be made with a partial set of the resource's attributes, the full body of the request will still be sent in the save request to the remote service.
Create (i.e., save to the remote service) the new resource.
Takes a response from a typical create post and pulls the ID out
# File activeresource/lib/active_resource/base.rb, line 1366 def load_attributes_from_response(response) if (response_code_allows_body?(response.code) && (response['Content-Length'].nil? || response['Content-Length'] != "0") && !response.body.nil? && response.body.strip.size > 0) load(self.class.format.decode(response.body), true) @persisted = true end end