2006-06-25 10:44:22 -04:00
|
|
|
require 'active_resource/connection'
|
|
|
|
|
|
|
|
module ActiveResource
|
|
|
|
class Base
|
|
|
|
class << self
|
|
|
|
def site=(site)
|
2006-08-31 03:55:31 -04:00
|
|
|
@@site = site.is_a?(URI) ? site : URI.parse(site)
|
2006-06-25 10:44:22 -04:00
|
|
|
end
|
2006-08-31 03:55:31 -04:00
|
|
|
|
2006-06-25 10:44:22 -04:00
|
|
|
def site
|
|
|
|
@@site
|
|
|
|
end
|
|
|
|
|
|
|
|
def connection(refresh = false)
|
|
|
|
@connection = Connection.new(site) if refresh || @connection.nil?
|
|
|
|
@connection
|
|
|
|
end
|
|
|
|
|
|
|
|
def element_name
|
|
|
|
self.to_s.underscore
|
|
|
|
end
|
|
|
|
|
|
|
|
def collection_name
|
|
|
|
element_name.pluralize
|
|
|
|
end
|
|
|
|
|
|
|
|
def element_path(id)
|
|
|
|
"/#{collection_name}/#{id}.xml"
|
|
|
|
end
|
|
|
|
|
|
|
|
def collection_path
|
|
|
|
"/#{collection_name}.xml"
|
|
|
|
end
|
|
|
|
|
|
|
|
def find(*arguments)
|
|
|
|
scope = arguments.slice!(0)
|
|
|
|
|
|
|
|
case scope
|
|
|
|
when Fixnum
|
|
|
|
# { :person => person1 }
|
|
|
|
new(connection.get(element_path(scope)).values.first)
|
|
|
|
when :all
|
|
|
|
# { :people => { :person => [ person1, person2 ] } }
|
|
|
|
connection.get(collection_path).values.first.values.first.collect { |element| new(element) }
|
|
|
|
when :first
|
|
|
|
find(:all, *arguments).first
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
attr_accessor :attributes
|
|
|
|
|
|
|
|
def initialize(attributes = {})
|
|
|
|
@attributes = attributes
|
|
|
|
end
|
|
|
|
|
|
|
|
def id
|
|
|
|
attributes["id"]
|
|
|
|
end
|
|
|
|
|
|
|
|
def id=(id)
|
|
|
|
attributes["id"] = id
|
|
|
|
end
|
|
|
|
|
|
|
|
def save
|
|
|
|
update
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
|
|
|
connection.delete(self.class.element_path(id))
|
|
|
|
end
|
|
|
|
|
|
|
|
def to_xml
|
|
|
|
attributes.to_xml(:root => self.class.element_name)
|
|
|
|
end
|
|
|
|
|
|
|
|
protected
|
|
|
|
def connection(refresh = false)
|
|
|
|
self.class.connection(refresh)
|
|
|
|
end
|
|
|
|
|
|
|
|
def update
|
|
|
|
connection.put(self.class.element_path(id), to_xml)
|
|
|
|
end
|
|
|
|
|
|
|
|
def method_missing(method_symbol, *arguments)
|
|
|
|
method_name = method_symbol.to_s
|
|
|
|
|
|
|
|
case method_name.last
|
|
|
|
when "="
|
|
|
|
attributes[method_name.first(-1)] = arguments.first
|
|
|
|
when "?"
|
|
|
|
# TODO
|
|
|
|
else
|
|
|
|
attributes[method_name] || super
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2006-08-31 03:55:31 -04:00
|
|
|
end
|