ruby-satisfaction 0.6.7 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-satisfaction (0.6.5)
4
+ ruby-satisfaction (0.7.0)
5
5
  activesupport (~> 2.3)
6
6
  json (>= 1.4.6)
7
7
  memcache-client (>= 1.5.0)
data/README.markdown CHANGED
@@ -11,6 +11,28 @@ For questions, please visit the [Get Satisfaction API community][3]
11
11
 
12
12
  Changelog
13
13
  =========
14
+ 0.7.0
15
+
16
+ * Revised Sfn::Resource so that it supports calls to API endpoints for nested resources
17
+ (e.g. /companies/cid/products/pid/topics).
18
+
19
+ IMPORTANT NOTE: This version changes the gem behavior in a way that may introduce backwards incompatibility. In
20
+ particular, with prior versions, the following code:
21
+
22
+ Satisfaction.new.companies['company_domain'].products['p_slug'].topics['t_slug'].tags
23
+
24
+ ignores the chained context of the final method call and simply sends a GET request to the following API endpoint:
25
+
26
+ /topics/t_slug/tags
27
+
28
+ With this version, however, the gem will make API calls for nested resources in the API that correspond to the chained
29
+ method calls. In particular, the above code will instead attempt to send a GET request to the following endpoint:
30
+
31
+ /companies/company_domain/products/p_slug/topics/t_slug/tags
32
+
33
+ In this particular case, the endpoint does not exist in the Get Satisfaction REST API, so API calls made to it will
34
+ yield a 404 Not Found response error.
35
+
14
36
  0.6.7
15
37
 
16
38
  * Fixed Sfn::Loader#get so it uses cached content when a 304 Not Modified is received.
data/lib/satisfaction.rb CHANGED
@@ -102,7 +102,13 @@ class Satisfaction
102
102
  end
103
103
 
104
104
  def authorize_url(token)
105
- "#{options[:authorize_url]}?oauth_token=#{token.token}"
105
+ uri = URI.parse(options[:authorize_url])
106
+ if uri.query.present?
107
+ uri.query += "&oauth_token=#{token.token}"
108
+ else
109
+ uri.query = "oauth_token=#{token.token}"
110
+ end
111
+ uri.to_s
106
112
  end
107
113
 
108
114
  def access_token(token)
@@ -2,10 +2,6 @@ class Sfn::Company < Sfn::Resource
2
2
 
3
3
  attributes :domain, :name, :logo, :description
4
4
 
5
- def path
6
- "/companies/#{@id}"
7
- end
8
-
9
5
  def setup_associations
10
6
  has_many :people, :url => "#{path}/people"
11
7
  has_many :topics, :url => "#{path}/topics"
@@ -15,4 +11,4 @@ class Sfn::Company < Sfn::Resource
15
11
 
16
12
  end
17
13
 
18
- end
14
+ end
@@ -6,16 +6,16 @@ class Sfn::IdentityMap
6
6
  @pages = {}
7
7
  end
8
8
 
9
- def get_record(klass, id, &block)
10
- result = @records[[klass, id]]
9
+ def get_record(klass, id, path='', &block)
10
+ result = @records[[klass, id, path]]
11
11
  result ||= begin
12
- obj = yield(klass, id)
13
- @records[[klass, id]] = obj
12
+ obj = yield(klass, id, path)
13
+ @records[[klass, id, path]] = obj
14
14
  end
15
15
  result
16
16
  end
17
17
 
18
- def expire_record(klass, id)
19
- @records[[klass, id]] = nil
18
+ def expire_record(klass, id, path='')
19
+ @records[[klass, id, path]] = nil
20
20
  end
21
- end
21
+ end
@@ -1,10 +1,6 @@
1
1
  class Sfn::Person < Sfn::Resource
2
2
  attributes :name, :id, :photo, :tagline
3
3
 
4
- def path
5
- "/people/#{@id}"
6
- end
7
-
8
4
  def setup_associations
9
5
  has_many :replies, :url => "#{path}/replies"
10
6
  has_many :topics, :url => "#{path}/topics"
@@ -21,4 +17,4 @@ class Me < Sfn::Person
21
17
  @id = self.attributes["id"]
22
18
  setup_associations
23
19
  end
24
- end
20
+ end
@@ -3,10 +3,6 @@ class Sfn::Product < Sfn::Resource
3
3
  attribute :last_active_at, :type => Time
4
4
  attribute :created_at, :type => Time
5
5
 
6
- def path
7
- "/products/#{@id}"
8
- end
9
-
10
6
  def setup_associations
11
7
  has_many :topics, :url => "#{path}/topics"
12
8
  has_many :people, :url => "#{path}/people"
@@ -14,4 +10,4 @@ class Sfn::Product < Sfn::Resource
14
10
  has_many :tags, :url => "#{path}/tags"
15
11
  end
16
12
 
17
- end
13
+ end
@@ -3,11 +3,7 @@ class Sfn::Reply < Sfn::Resource
3
3
  attribute :created_at, :type => Time
4
4
  attribute :author, :type => Sfn::Person
5
5
 
6
- def path
7
- "/replies/#{id}"
8
- end
9
-
10
6
  def setup_associations
11
7
  belongs_to :topic
12
8
  end
13
- end
9
+ end
@@ -4,18 +4,19 @@ class Sfn::Resource < Sfn::HasSatisfaction
4
4
  require 'satisfaction/resource/attributes'
5
5
  include ::Associations
6
6
  include Attributes
7
- attr_reader :id
7
+ attr_reader :id, :prefix
8
8
  include Sfn::Util
9
9
 
10
10
 
11
- def initialize(id, satisfaction)
11
+ def initialize(id, satisfaction, prefix='')
12
12
  super satisfaction
13
13
  @id = id
14
+ @prefix = prefix
14
15
  setup_associations if respond_to?(:setup_associations)
15
16
  end
16
17
 
17
18
  def path
18
- raise "path not implemented in Resource base class"
19
+ "#{prefix}/#{@id}"
19
20
  end
20
21
 
21
22
  def load
@@ -82,8 +83,8 @@ class Sfn::ResourceCollection < Sfn::HasSatisfaction
82
83
 
83
84
  def get(id, options={})
84
85
  #options currently ignored
85
- satisfaction.identity_map.get_record(klass, id) do
86
- klass.new(id, satisfaction)
86
+ satisfaction.identity_map.get_record(klass, id, path) do
87
+ klass.new(id, satisfaction, path)
87
88
  end
88
89
  end
89
90
 
@@ -206,4 +207,4 @@ class Sfn::Page < Sfn::HasSatisfaction
206
207
  result
207
208
  end
208
209
  end
209
- end
210
+ end
@@ -61,7 +61,7 @@ class Sfn::Resource
61
61
  case value
62
62
  when Hash
63
63
  id = value['id']
64
- returning(new(id, satisfaction)){|r| r.attributes = value}
64
+ new(id, satisfaction).tap {|r| r.attributes = value}
65
65
  else
66
66
  new(value, satisfaction)
67
67
  end
@@ -1,14 +1,10 @@
1
1
  class Sfn::Tag < Sfn::Resource
2
2
  attributes :name
3
3
 
4
- def path
5
- "/tags/#{@id}"
6
- end
7
-
8
4
  def setup_associations
9
5
  has_many :topics, :url => "#{path}/topics"
10
6
  has_many :companies, :url => "#{path}/companies"
11
7
  has_many :products, :url => "#{path}/products"
12
8
  end
13
9
 
14
- end
10
+ end
@@ -4,10 +4,6 @@ class Sfn::Topic < Sfn::Resource
4
4
  attribute :created_at, :type => Time
5
5
  attribute :author, :type => Sfn::Person
6
6
 
7
- def path
8
- "/topics/#{@id}"
9
- end
10
-
11
7
  def setup_associations
12
8
  has_many :replies, :url => "#{path}/replies"
13
9
  has_many :people, :url => "#{path}/people"
@@ -17,4 +13,4 @@ class Sfn::Topic < Sfn::Resource
17
13
  belongs_to :company
18
14
  end
19
15
 
20
- end
16
+ end
@@ -1,8 +1,8 @@
1
1
  module Satisfaction
2
2
  module VERSION
3
3
  MAJOR = 0
4
- MINOR = 6
5
- PATCH = 7
4
+ MINOR = 7
5
+ PATCH = 0
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
@@ -38,7 +38,7 @@ describe "Identity Map" do
38
38
  end
39
39
 
40
40
  it "should work with pages too" do
41
- c1 = @sfn.companies.get(4)
41
+ c1 = @sfn.companies.page(1, :q => 'satisfaction').first
42
42
  c2 = @sfn.companies.page(1, :q => 'satisfaction').first
43
43
 
44
44
  c1.object_id.should == c2.object_id
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-satisfaction
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
5
- prerelease:
4
+ hash: 3
5
+ prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 6
9
8
  - 7
10
- version: 0.6.7
9
+ - 0
10
+ version: 0.7.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Get Satisfaction
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-08 00:00:00 -07:00
18
+ date: 2011-09-12 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -280,7 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
280
  requirements: []
281
281
 
282
282
  rubyforge_project: ruby-satisfaction
283
- rubygems_version: 1.4.2
283
+ rubygems_version: 1.3.7
284
284
  signing_key:
285
285
  specification_version: 3
286
286
  summary: Get Satisfaction ruby client