Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 5767

Show
Ignore:
Timestamp:
12/21/06 22:12:21 (3 years ago)
Author:
bitsweat
Message:

Subclasses share superclass site until explicitly set. This way you can set Superclass.site = ... after subclasses have been defined.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activeresource/CHANGELOG

    r5717 r5767  
    11*SVN* 
    22 
    3 * Allow subclassed resources to share the site info [Rick
     3* Allow subclassed resources to share the site info [Rick, Jeremy Kemper
    44 
    55    class BeastResource < ActiveResource::Base 
    66      self.site = 'http://beast.caboo.se' 
    77    end 
    8      
     8 
    99    class Forum < BeastResource 
    1010      # taken from BeastResource 
    1111      # self.site = 'http://beast.caboo.se' 
    1212    end 
    13      
     13 
    1414    class Topic < BeastResource 
    15       site << '/forums/:forum_id' 
     15      self.site += '/forums/:forum_id' 
    1616    end 
    1717 
  • trunk/activeresource/lib/active_resource/base.rb

    r5717 r5767  
    77    cattr_accessor :logger 
    88 
    9     def self.inherited(base) 
    10       base.site = site.to_s if site 
    11       super 
    12     end 
    13  
    149    class << self 
    15       attr_reader :site 
     10      def site 
     11        if defined?(@site) 
     12          @site 
     13        elsif superclass != Object and superclass.site 
     14          superclass.site.dup.freeze 
     15        end 
     16      end 
    1617 
    1718      def site=(site) 
     
    8485          new(connection.get(element_path(scope, options)), options) 
    8586        end 
    86        
     87 
    8788        def create_site_uri_from(site) 
    88           returning site.is_a?(URI) ? site : URI.parse(site) do |uri| 
    89             def uri.<<(extra) 
    90               path << extra 
    91             end unless uri.respond_to?(:<<) 
    92           end 
     89          site.is_a?(URI) ? site.dup : URI.parse(site) 
    9390        end 
    9491    end 
  • trunk/activeresource/test/base_test.rb

    r5717 r5767  
    4444  end 
    4545 
     46  def test_site_reader_uses_superclass_site_until_written 
     47    # Superclass is Object so returns nil. 
     48    assert_nil ActiveResource::Base.site 
     49    assert_nil Class.new(ActiveResource::Base).site 
     50 
     51    # Subclass uses superclass site. 
     52    actor = Class.new(Person) 
     53    assert_equal Person.site, actor.site 
     54 
     55    # Subclass returns frozen superclass copy. 
     56    assert !Person.site.frozen? 
     57    assert actor.site.frozen? 
     58 
     59    # Changing subclass site doesn't change superclass site. 
     60    actor.site = 'http://localhost:31337' 
     61    assert_not_equal Person.site, actor.site 
     62 
     63    # Changed subclass site is not frozen. 
     64    assert !actor.site.frozen? 
     65 
     66    # Changing superclass site doesn't overwrite subclass site. 
     67    Person.site = 'http://somewhere.else' 
     68    assert_not_equal Person.site, actor.site 
     69 
     70    # Changing superclass site after subclassing changes subclass site. 
     71    jester = Class.new(actor) 
     72    actor.site = 'http://nomad' 
     73    assert_equal actor.site, jester.site 
     74    assert jester.site.frozen? 
     75  end 
    4676 
    4777  def test_collection_name 
  • trunk/activeresource/test/fixtures/beast.rb

    r5717 r5767  
    1111 
    1212class Topic < BeastResource 
    13   site << '/forums/:forum_id' 
     13  self.site += '/forums/:forum_id' 
    1414end