her 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,51 +1,7 @@
1
1
  module Her
2
2
  module Model
3
3
  module Paths
4
- # Defines a custom collection path for the resource
5
- #
6
- # @example
7
- # class User
8
- # include Her::Model
9
- # collection_path "/users"
10
- # end
11
- def collection_path(path=nil) # {{{
12
- return @her_collection_path unless path
13
- @her_resource_path = "#{path}/:id"
14
- @her_collection_path = path
15
- end # }}}
16
-
17
- # Defines a custom resource path for the resource
18
- #
19
- # @example
20
- # class User
21
- # include Her::Model
22
- # resource_path "/users/:id"
23
- # end
24
- def resource_path(path=nil) # {{{
25
- return @her_resource_path unless path
26
- @her_resource_path = path
27
- end # }}}
28
-
29
- # Return a custom path based on the collection path and variable parameters
30
- #
31
- # @example
32
- # class User
33
- # include Her::Model
34
- # collection_path "/utilisateurs"
35
- # end
36
- #
37
- # User.all # Fetched via GET /utilisateurs
38
- def build_request_path(path=nil, parameters={}) # {{{
39
- unless path.is_a?(String)
40
- parameters = path || {}
41
- path = parameters.include?(:id) ? @her_resource_path : @her_collection_path
42
- end
43
- path.gsub(/:([\w_]+)/) do
44
- # Look for :key or :_key, otherwise raise an exception
45
- parameters[$1.to_sym] || parameters["_#{$1}".to_sym] || raise(Her::Errors::PathError.new("Missing :_#{$1} parameter to build the request path (#{path})."))
46
- end
47
- end # }}}
48
-
4
+ extend ActiveSupport::Concern
49
5
  # Return a path based on the collection path and a resource data
50
6
  #
51
7
  # @example
@@ -56,8 +12,64 @@ module Her
56
12
  #
57
13
  # User.find(1) # Fetched via GET /utilisateurs/1
58
14
  def request_path # {{{
59
- self.class.build_request_path(@data)
15
+ self.class.build_request_path(@data.dup)
60
16
  end # }}}
17
+
18
+ module ClassMethods
19
+ # Defines a custom collection path for the resource
20
+ #
21
+ # @example
22
+ # class User
23
+ # include Her::Model
24
+ # collection_path "/users"
25
+ # end
26
+ def collection_path(path=nil) # {{{
27
+ @her_collection_path ||= begin
28
+ superclass.collection_path.dup if superclass.respond_to?(:collection_path)
29
+ end
30
+
31
+ return @her_collection_path unless path
32
+ @her_resource_path = "#{path}/:id"
33
+ @her_collection_path = path
34
+ end # }}}
35
+
36
+ # Defines a custom resource path for the resource
37
+ #
38
+ # @example
39
+ # class User
40
+ # include Her::Model
41
+ # resource_path "/users/:id"
42
+ # end
43
+ def resource_path(path=nil) # {{{
44
+ @her_resource_path ||= begin
45
+ superclass.resource_path.dup if superclass.respond_to?(:resource_path)
46
+ end
47
+
48
+ return @her_resource_path unless path
49
+ @her_resource_path = path
50
+ end # }}}
51
+
52
+ # Return a custom path based on the collection path and variable parameters
53
+ #
54
+ # @example
55
+ # class User
56
+ # include Her::Model
57
+ # collection_path "/utilisateurs"
58
+ # end
59
+ #
60
+ # User.all # Fetched via GET /utilisateurs
61
+ def build_request_path(path=nil, parameters={}) # {{{
62
+ unless path.is_a?(String)
63
+ parameters = path || {}
64
+ path = parameters.include?(:id) ? resource_path : collection_path
65
+ end
66
+
67
+ path.gsub(/:([\w_]+)/) do
68
+ # Look for :key or :_key, otherwise raise an exception
69
+ parameters.delete($1.to_sym) || parameters.delete("_#{$1}".to_sym) || raise(Her::Errors::PathError.new("Missing :_#{$1} parameter to build the request path (#{path})."))
70
+ end
71
+ end # }}}
72
+ end
61
73
  end
62
74
  end
63
75
  end
@@ -2,18 +2,24 @@ module Her
2
2
  module Model
3
3
  # This module adds relationships to models
4
4
  module Relationships
5
- # Return relationships
5
+ # Return @her_relationships, lazily initialized with copy of the
6
+ # superclass' her_relationships, or an empty hash.
6
7
  # @private
7
8
  def relationships # {{{
8
- @her_relationships
9
+ @her_relationships ||= begin
10
+ if superclass.respond_to?(:relationships)
11
+ superclass.relationships.dup
12
+ else
13
+ {}
14
+ end
15
+ end
9
16
  end # }}}
10
17
 
11
18
  # Parse relationships data after initializing a new object
12
19
  # @private
13
20
  def parse_relationships(data) # {{{
14
- @her_relationships ||= {}
15
- @her_relationships.each_pair do |type, relationships|
16
- relationships.each do |relationship|
21
+ relationships.each_pair do |type, definitions|
22
+ definitions.each do |relationship|
17
23
  name = relationship[:name]
18
24
  klass = self.nearby_class(relationship[:class_name])
19
25
  next if !data.include?(name) or data[name].nil?
@@ -49,17 +55,21 @@ module Her
49
55
  # @user.articles # => [#<Article(articles/2) id=2 title="Hello world.">]
50
56
  # # Fetched via GET "/users/1/articles"
51
57
  def has_many(name, attrs={}) # {{{
52
- @her_relationships ||= {}
53
58
  attrs = {
54
59
  :class_name => name.to_s.classify,
55
60
  :name => name,
56
61
  :path => "/#{name}"
57
62
  }.merge(attrs)
58
- (@her_relationships[:has_many] ||= []) << attrs
63
+ (relationships[:has_many] ||= []) << attrs
59
64
 
60
- define_method(name) do
65
+ define_method(name) do |*method_attrs|
66
+ method_attrs = method_attrs[0] || {}
61
67
  klass = self.class.nearby_class(attrs[:class_name])
62
- @data[name] ||= klass.get_collection("#{self.class.build_request_path(:id => id)}#{attrs[:path]}")
68
+ if method_attrs.any?
69
+ klass.get_collection("#{self.class.build_request_path(method_attrs.merge(:id => id))}#{attrs[:path]}")
70
+ else
71
+ @data[name] ||= klass.get_collection("#{self.class.build_request_path(:id => id)}#{attrs[:path]}")
72
+ end
63
73
  end
64
74
  end # }}}
65
75
 
@@ -82,17 +92,21 @@ module Her
82
92
  # @user.organization # => #<Organization(organizations/2) id=2 name="Foobar Inc.">
83
93
  # # Fetched via GET "/users/1/organization"
84
94
  def has_one(name, attrs={}) # {{{
85
- @her_relationships ||= {}
86
95
  attrs = {
87
96
  :class_name => name.to_s.classify,
88
97
  :name => name,
89
98
  :path => "/#{name}"
90
99
  }.merge(attrs)
91
- (@her_relationships[:has_one] ||= []) << attrs
100
+ (relationships[:has_one] ||= []) << attrs
92
101
 
93
- define_method(name) do
102
+ define_method(name) do |*method_attrs|
103
+ method_attrs = method_attrs[0] || {}
94
104
  klass = self.class.nearby_class(attrs[:class_name])
95
- @data[name] ||= klass.get_resource("#{self.class.build_request_path(:id => id)}#{attrs[:path]}")
105
+ if method_attrs.any?
106
+ klass.get_resource("#{self.class.build_request_path(method_attrs.merge(:id => id))}#{attrs[:path]}")
107
+ else
108
+ @data[name] ||= klass.get_resource("#{self.class.build_request_path(:id => id)}#{attrs[:path]}")
109
+ end
96
110
  end
97
111
  end # }}}
98
112
 
@@ -115,20 +129,24 @@ module Her
115
129
  # @user.team # => #<Team(teams/2) id=2 name="Developers">
116
130
  # # Fetched via GET "/teams/2"
117
131
  def belongs_to(name, attrs={}) # {{{
118
- @her_relationships ||= {}
119
132
  attrs = {
120
133
  :class_name => name.to_s.classify,
121
134
  :name => name,
122
135
  :foreign_key => "#{name}_id",
123
136
  :path => "/#{name.to_s.pluralize}/:id"
124
137
  }.merge(attrs)
125
- (@her_relationships[:belongs_to] ||= []) << attrs
138
+ (relationships[:belongs_to] ||= []) << attrs
126
139
 
127
- define_method(name) do
140
+ define_method(name) do |*method_attrs|
141
+ method_attrs = method_attrs[0] || {}
128
142
  klass = self.class.nearby_class(attrs[:class_name])
129
- @data[name] ||= klass.get_resource("#{klass.build_request_path(:id => @data[attrs[:foreign_key].to_sym])}")
143
+ if method_attrs.any?
144
+ klass.get_resource("#{klass.build_request_path(method_attrs.merge(:id => @data[attrs[:foreign_key].to_sym]))}")
145
+ else
146
+ @data[name] ||= klass.get_resource("#{klass.build_request_path(:id => @data[attrs[:foreign_key].to_sym])}")
147
+ end
130
148
  end
131
- end
149
+ end # }}}
132
150
 
133
151
  # @private
134
152
  def relationship_accessor(type, attrs) # {{{
@@ -1,3 +1,3 @@
1
1
  module Her
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
@@ -2,9 +2,9 @@
2
2
  require "spec_helper"
3
3
 
4
4
  describe Her::Middleware::AcceptJSON do
5
- it "adds an Accept header" do
5
+ it "adds an Accept header" do # {{{
6
6
  described_class.new.add_header({}).tap do |headers|
7
7
  headers["Accept"].should == "application/json"
8
8
  end
9
- end
9
+ end # }}}
10
10
  end
@@ -5,15 +5,15 @@ describe Her::Middleware::FirstLevelParseJSON do
5
5
  subject { described_class.new }
6
6
  let(:body) { "{\"id\": 1, \"name\": \"Tobias Fünke\", \"errors\": 2, \"metadata\": 3}" }
7
7
 
8
- it "parses body as json" do
8
+ it "parses body as json" do # {{{
9
9
  subject.parse(body).tap do |json|
10
10
  json[:data].should == { :id => 1, :name => "Tobias Fünke" }
11
11
  json[:errors].should == 2
12
12
  json[:metadata].should == 3
13
13
  end
14
- end
14
+ end # }}}
15
15
 
16
- it "parses :body key as json in the env hash" do
16
+ it "parses :body key as json in the env hash" do # {{{
17
17
  env = { :body => body }
18
18
  subject.on_complete(env)
19
19
  env[:body].tap do |json|
@@ -21,5 +21,5 @@ describe Her::Middleware::FirstLevelParseJSON do
21
21
  json[:errors].should == 2
22
22
  json[:metadata].should == 3
23
23
  end
24
- end
24
+ end # }}}
25
25
  end
@@ -5,15 +5,15 @@ describe Her::Middleware::SecondLevelParseJSON do
5
5
  subject { described_class.new }
6
6
  let(:body) { "{\"data\": 1, \"errors\": 2, \"metadata\": 3}" }
7
7
 
8
- it "parses body as json" do
8
+ it "parses body as json" do # {{{
9
9
  subject.parse(body).tap do |json|
10
10
  json[:data].should == 1
11
11
  json[:errors].should == 2
12
12
  json[:metadata].should == 3
13
13
  end
14
- end
14
+ end # }}}
15
15
 
16
- it "parses :body key as json in the env hash" do
16
+ it "parses :body key as json in the env hash" do # {{{
17
17
  env = { :body => body }
18
18
  subject.on_complete(env)
19
19
  env[:body].tap do |json|
@@ -21,5 +21,5 @@ describe Her::Middleware::SecondLevelParseJSON do
21
21
  json[:errors].should == 2
22
22
  json[:metadata].should == 3
23
23
  end
24
- end
24
+ end # }}}
25
25
  end
@@ -10,100 +10,111 @@ describe Her::Model::Hooks do
10
10
  describe "method hooks" do
11
11
  it "handles “before save” method hooks" do # {{{
12
12
  Foo::User.before_save :set_internal_id
13
- Foo::User.send(:hooks)[:before_save].length.should == 1
14
- Foo::User.send(:hooks)[:before_save].first.class.should == Symbol
13
+ Foo::User.hooks[:before_save].length.should == 1
14
+ Foo::User.hooks[:before_save].first.class.should == Symbol
15
15
  end # }}}
16
16
 
17
17
  it "handles “before create” method hooks" do # {{{
18
18
  Foo::User.before_create :set_internal_id
19
- Foo::User.send(:hooks)[:before_create].length.should == 1
20
- Foo::User.send(:hooks)[:before_create].first.class.should == Symbol
19
+ Foo::User.hooks[:before_create].length.should == 1
20
+ Foo::User.hooks[:before_create].first.class.should == Symbol
21
21
  end # }}}
22
22
 
23
23
  it "handles “before update” method hooks" do # {{{
24
24
  Foo::User.before_update :set_internal_id
25
- Foo::User.send(:hooks)[:before_update].length.should == 1
26
- Foo::User.send(:hooks)[:before_update].first.class.should == Symbol
25
+ Foo::User.hooks[:before_update].length.should == 1
26
+ Foo::User.hooks[:before_update].first.class.should == Symbol
27
27
  end # }}}
28
28
 
29
29
  it "handles “before destroy” method hooks" do # {{{
30
30
  Foo::User.before_destroy :set_internal_id
31
- Foo::User.send(:hooks)[:before_destroy].length.should == 1
32
- Foo::User.send(:hooks)[:before_destroy].first.class.should == Symbol
31
+ Foo::User.hooks[:before_destroy].length.should == 1
32
+ Foo::User.hooks[:before_destroy].first.class.should == Symbol
33
33
  end # }}}
34
34
 
35
35
  it "handles “after save” method hooks" do # {{{
36
36
  Foo::User.after_save :set_internal_id
37
- Foo::User.send(:hooks)[:after_save].length.should == 1
38
- Foo::User.send(:hooks)[:after_save].first.class.should == Symbol
37
+ Foo::User.hooks[:after_save].length.should == 1
38
+ Foo::User.hooks[:after_save].first.class.should == Symbol
39
39
  end # }}}
40
40
 
41
41
  it "handles “after create” method hooks" do # {{{
42
42
  Foo::User.after_create :set_internal_id
43
- Foo::User.send(:hooks)[:after_create].length.should == 1
44
- Foo::User.send(:hooks)[:after_create].first.class.should == Symbol
43
+ Foo::User.hooks[:after_create].length.should == 1
44
+ Foo::User.hooks[:after_create].first.class.should == Symbol
45
45
  end # }}}
46
46
 
47
47
  it "handles “after update” method hooks" do # {{{
48
48
  Foo::User.after_update :set_internal_id
49
- Foo::User.send(:hooks)[:after_update].length.should == 1
50
- Foo::User.send(:hooks)[:after_update].first.class.should == Symbol
49
+ Foo::User.hooks[:after_update].length.should == 1
50
+ Foo::User.hooks[:after_update].first.class.should == Symbol
51
51
  end # }}}
52
52
 
53
53
  it "handles “after destroy” method hooks" do # {{{
54
54
  Foo::User.after_destroy :set_internal_id
55
- Foo::User.send(:hooks)[:after_destroy].length.should == 1
56
- Foo::User.send(:hooks)[:after_destroy].first.class.should == Symbol
55
+ Foo::User.hooks[:after_destroy].length.should == 1
56
+ Foo::User.hooks[:after_destroy].first.class.should == Symbol
57
57
  end # }}}
58
58
  end
59
59
 
60
60
  describe "block hooks" do
61
61
  it "handles “before save” block hooks" do # {{{
62
62
  Foo::User.before_save { |record| record.internal_id = 42 }
63
- Foo::User.send(:hooks)[:before_save].length.should == 1
64
- Foo::User.send(:hooks)[:before_save].first.class.should == Proc
63
+ Foo::User.hooks[:before_save].length.should == 1
64
+ Foo::User.hooks[:before_save].first.class.should == Proc
65
65
  end # }}}
66
66
 
67
67
  it "handles “before create” block hooks" do # {{{
68
68
  Foo::User.before_create { |record| record.internal_id = 42 }
69
- Foo::User.send(:hooks)[:before_create].length.should == 1
70
- Foo::User.send(:hooks)[:before_create].first.class.should == Proc
69
+ Foo::User.hooks[:before_create].length.should == 1
70
+ Foo::User.hooks[:before_create].first.class.should == Proc
71
71
  end # }}}
72
72
 
73
73
  it "handles “before update” block hooks" do # {{{
74
74
  Foo::User.before_update { |record| record.internal_id = 42 }
75
- Foo::User.send(:hooks)[:before_update].length.should == 1
76
- Foo::User.send(:hooks)[:before_update].first.class.should == Proc
75
+ Foo::User.hooks[:before_update].length.should == 1
76
+ Foo::User.hooks[:before_update].first.class.should == Proc
77
77
  end # }}}
78
78
 
79
79
  it "handles “before destroy” block hooks" do # {{{
80
80
  Foo::User.before_destroy { |record| record.internal_id = 42 }
81
- Foo::User.send(:hooks)[:before_destroy].length.should == 1
82
- Foo::User.send(:hooks)[:before_destroy].first.class.should == Proc
81
+ Foo::User.hooks[:before_destroy].length.should == 1
82
+ Foo::User.hooks[:before_destroy].first.class.should == Proc
83
83
  end # }}}
84
84
 
85
85
  it "handles “after save” block hooks" do # {{{
86
86
  Foo::User.after_save { |record| record.internal_id = 42 }
87
- Foo::User.send(:hooks)[:after_save].length.should == 1
88
- Foo::User.send(:hooks)[:after_save].first.class.should == Proc
87
+ Foo::User.hooks[:after_save].length.should == 1
88
+ Foo::User.hooks[:after_save].first.class.should == Proc
89
89
  end # }}}
90
90
 
91
91
  it "handles “after create” block hooks" do # {{{
92
92
  Foo::User.after_create { |record| record.internal_id = 42 }
93
- Foo::User.send(:hooks)[:after_create].length.should == 1
94
- Foo::User.send(:hooks)[:after_create].first.class.should == Proc
93
+ Foo::User.hooks[:after_create].length.should == 1
94
+ Foo::User.hooks[:after_create].first.class.should == Proc
95
95
  end # }}}
96
96
 
97
97
  it "handles “after update” block hooks" do # {{{
98
98
  Foo::User.after_update { |record| record.internal_id = 42 }
99
- Foo::User.send(:hooks)[:after_update].length.should == 1
100
- Foo::User.send(:hooks)[:after_update].first.class.should == Proc
99
+ Foo::User.hooks[:after_update].length.should == 1
100
+ Foo::User.hooks[:after_update].first.class.should == Proc
101
101
  end # }}}
102
102
 
103
103
  it "handles “after destroy” block hooks" do # {{{
104
104
  Foo::User.after_destroy { |record| record.internal_id = 42 }
105
- Foo::User.send(:hooks)[:after_destroy].length.should == 1
106
- Foo::User.send(:hooks)[:after_destroy].first.class.should == Proc
105
+ Foo::User.hooks[:after_destroy].length.should == 1
106
+ Foo::User.hooks[:after_destroy].first.class.should == Proc
107
+ end # }}}
108
+ end
109
+
110
+ context "inheriting hooks from a superclass" do
111
+ it "copies hooks to the subclass" do # {{{
112
+ Foo::User.before_save :set_internal_id
113
+ Foo::User.after_create { |record| record.internal_id = 42 }
114
+ subclass = Class.new(Foo::User)
115
+ subclass.hooks.object_id.should_not == Foo::User.hooks.object_id
116
+ subclass.hooks[:before_save].should == [:set_internal_id]
117
+ subclass.hooks[:after_create].length.should == 1
107
118
  end # }}}
108
119
  end
109
120
  end
@@ -9,11 +9,8 @@ describe Her::Model::HTTP do
9
9
 
10
10
  spawn_model "Foo::User"
11
11
  Foo::User.uses_api api
12
-
13
- Foo::User.class_eval do
14
- @her_api.should_not == nil
15
- @her_api.base_uri.should == "https://api.example.com"
16
- end
12
+ Foo::User.her_api.should_not == nil
13
+ Foo::User.her_api.base_uri.should == "https://api.example.com"
17
14
  end # }}}
18
15
 
19
16
  it "binds a model directly to Her::API" do # {{{
@@ -21,10 +18,8 @@ describe Her::Model::HTTP do
21
18
 
22
19
  spawn_model "Foo::User"
23
20
 
24
- Foo::User.class_eval do
25
- @her_api.should_not == nil
26
- @her_api.base_uri.should == "https://api.example.com"
27
- end
21
+ Foo::User.her_api.should_not == nil
22
+ Foo::User.her_api.base_uri.should == "https://api.example.com"
28
23
  end # }}}
29
24
 
30
25
  it "binds two models to two different instances of Her::API" do # {{{
@@ -36,10 +31,7 @@ describe Her::Model::HTTP do
36
31
 
37
32
  spawn_model "Foo::User"
38
33
  Foo::User.uses_api api1
39
-
40
- Foo::User.class_eval do
41
- @her_api.base_uri.should == "https://api1.example.com"
42
- end
34
+ Foo::User.her_api.base_uri.should == "https://api1.example.com"
43
35
 
44
36
  api2 = Her::API.new
45
37
  api2.setup :url => "https://api2.example.com" do |builder|
@@ -49,10 +41,7 @@ describe Her::Model::HTTP do
49
41
 
50
42
  spawn_model "Foo::Comment"
51
43
  Foo::Comment.uses_api api2
52
-
53
- Foo::Comment.class_eval do
54
- @her_api.base_uri.should == "https://api2.example.com"
55
- end
44
+ Foo::Comment.her_api.base_uri.should == "https://api2.example.com"
56
45
  end # }}}
57
46
 
58
47
  it "binds one model to Her::API and another one to an instance of Her::API" do # {{{
@@ -63,9 +52,7 @@ describe Her::Model::HTTP do
63
52
 
64
53
  spawn_model "Foo::User"
65
54
 
66
- Foo::User.class_eval do
67
- @her_api.base_uri.should == "https://api1.example.com"
68
- end
55
+ Foo::User.her_api.base_uri.should == "https://api1.example.com"
69
56
 
70
57
  api = Her::API.new
71
58
  api.setup :url => "https://api2.example.com" do |builder|
@@ -75,10 +62,46 @@ describe Her::Model::HTTP do
75
62
 
76
63
  spawn_model "Foo::Comment"
77
64
  Foo::Comment.uses_api api
65
+ Foo::Comment.her_api.base_uri.should == "https://api2.example.com"
66
+ end # }}}
78
67
 
79
- Foo::Comment.class_eval do
80
- @her_api.base_uri.should == "https://api2.example.com"
68
+ it "binds a a model to it's superclass' her_api" do # {{{
69
+ api = Her::API.new
70
+ api.setup :url => "http://api.example.com" do |builder|
71
+ builder.use Her::Middleware::FirstLevelParseJSON
72
+ builder.use Faraday::Request::UrlEncoded
73
+ end
74
+
75
+ spawn_model "Foo::Superclass" do
76
+ uses_api api
81
77
  end
78
+
79
+ Foo::Subclass = Class.new(Foo::Superclass)
80
+ Foo::Subclass.her_api.should == Foo::Superclass.her_api
81
+ end # }}}
82
+
83
+ it "allows subclasses to change her_api without changing the parent class' her_api" do # {{{
84
+ api1 = Her::API.new
85
+ api1.setup :url => "http://api.example.com" do |builder|
86
+ builder.use Her::Middleware::FirstLevelParseJSON
87
+ builder.use Faraday::Request::UrlEncoded
88
+ end
89
+
90
+ spawn_model "Foo::Superclass" do
91
+ uses_api api1
92
+ end
93
+
94
+ api2 = Her::API.new
95
+ api2.setup :url => "http://api.example.com" do |builder|
96
+ builder.use Her::Middleware::FirstLevelParseJSON
97
+ builder.use Faraday::Request::UrlEncoded
98
+ end
99
+
100
+ Foo::Subclass = Class.new(Foo::Superclass) do
101
+ uses_api api2
102
+ end
103
+
104
+ Foo::Subclass.her_api.should_not == Foo::Superclass.her_api
82
105
  end # }}}
83
106
  end
84
107
 
@@ -107,7 +130,7 @@ describe Her::Model::HTTP do
107
130
  spawn_model "Foo::User"
108
131
  end # }}}
109
132
 
110
- it "handle GET wrapper method" do # {{{
133
+ it "handles GET wrapper method" do # {{{
111
134
  @users = Foo::User.get(:popular)
112
135
  @users.length.should == 2
113
136
  @users.first.id.should == 1
@@ -116,65 +139,90 @@ describe Her::Model::HTTP do
116
139
  @user.id.should == 1
117
140
  end # }}}
118
141
 
119
- it "handle raw GET" do # {{{
142
+ it "handles raw GET with a block" do # {{{
120
143
  Foo::User.get_raw("/users") do |parsed_data|
121
144
  parsed_data[:data].should == [{ :id => 1 }]
122
145
  end
123
146
  end # }}}
124
147
 
125
- it "handle raw POST" do # {{{
148
+ it "handles raw GET with return value" do # {{{
149
+ parsed_data = Foo::User.get_raw("/users")
150
+ parsed_data[:data].should == [{ :id => 1 }]
151
+ end # }}}
152
+
153
+ it "handles raw POST with a block" do # {{{
126
154
  Foo::User.post_raw("/users") do |parsed_data|
127
155
  parsed_data[:data].should == [{ :id => 3 }]
128
156
  end
129
157
  end # }}}
130
158
 
131
- it "handle raw PUT" do # {{{
159
+ it "handles raw POST with return value" do # {{{
160
+ parsed_data = Foo::User.post_raw("/users")
161
+ parsed_data[:data].should == [{ :id => 3 }]
162
+ end # }}}
163
+
164
+ it "handles raw PUT with a block" do # {{{
132
165
  Foo::User.put_raw("/users/4") do |parsed_data|
133
166
  parsed_data[:data].should == [{ :id => 4 }]
134
167
  end
135
168
  end # }}}
136
169
 
137
- it "handle raw PATCH" do # {{{
170
+ it "handles raw PUT with return value" do # {{{
171
+ parsed_data = Foo::User.put_raw("/users/4")
172
+ parsed_data[:data].should == [{ :id => 4 }]
173
+ end # }}}
174
+
175
+ it "handles raw PATCH with a block" do # {{{
138
176
  Foo::User.patch_raw("/users/6") do |parsed_data|
139
177
  parsed_data[:data].should == [{ :id => 6 }]
140
178
  end
141
179
  end # }}}
142
180
 
143
- it "handle raw DELETE" do # {{{
181
+ it "handles raw PATCH with return value" do # {{{
182
+ parsed_data = Foo::User.patch_raw("/users/6")
183
+ parsed_data[:data].should == [{ :id => 6 }]
184
+ end # }}}
185
+
186
+ it "handles raw DELETE with a block" do # {{{
144
187
  Foo::User.delete_raw("/users/5") do |parsed_data|
145
188
  parsed_data[:data].should == [{ :id => 5 }]
146
189
  end
147
190
  end # }}}
148
191
 
149
- it "handle querystring parameters" do # {{{
192
+ it "handles raw DELETE with return value" do # {{{
193
+ parsed_data = Foo::User.delete_raw("/users/5")
194
+ parsed_data[:data].should == [{ :id => 5 }]
195
+ end # }}}
196
+
197
+ it "handles querystring parameters" do # {{{
150
198
  Foo::User.get_raw("/users", :page => 2) do |parsed_data|
151
199
  parsed_data[:data].should == [{ :id => 2 }]
152
200
  end
153
201
  end # }}}
154
202
 
155
- it "handle GET collection" do # {{{
203
+ it "handles GET collection" do # {{{
156
204
  @users = Foo::User.get_collection("/users/popular")
157
205
  @users.length.should == 2
158
206
  @users.first.id.should == 1
159
207
  end # }}}
160
208
 
161
- it "handle GET resource" do # {{{
209
+ it "handles GET resource" do # {{{
162
210
  @user = Foo::User.get_resource("/users/1")
163
211
  @user.id.should == 1
164
212
  end # }}}
165
213
 
166
- it "handle GET collection through a symbol" do # {{{
214
+ it "handles GET collection through a symbol" do # {{{
167
215
  @users = Foo::User.get_collection(:popular)
168
216
  @users.length.should == 2
169
217
  @users.first.id.should == 1
170
218
  end # }}}
171
219
 
172
- it "handle GET resource through a symbol" do # {{{
220
+ it "handles GET resource through a symbol" do # {{{
173
221
  @user = Foo::User.get_resource(:"1")
174
222
  @user.id.should == 1
175
223
  end # }}}
176
224
 
177
- it "handle raw GET through a symbol" do # {{{
225
+ it "handles raw GET through a symbol" do # {{{
178
226
  Foo::User.get_raw(:popular) do |parsed_data|
179
227
  parsed_data[:data].should == [{ :id => 1 }, { :id => 2 }]
180
228
  end