api-model 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,57 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api-model-specs.com/needs_auth
6
+ headers:
7
+ User-Agent:
8
+ - Typhoeus - https://github.com/typhoeus/typhoeus
9
+ response:
10
+ status:
11
+ code: 401
12
+ message: OK
13
+ headers:
14
+ Server:
15
+ - nginx/1.4.1
16
+ Date:
17
+ - Thu, 28 Nov 2013 16:02:56 GMT
18
+ Content-Type:
19
+ - text/plain; charset=utf-8
20
+ Content-Length:
21
+ - '248'
22
+ Connection:
23
+ - keep-alive
24
+ body:
25
+ encoding: UTF-8
26
+ string: "{}"
27
+ http_version:
28
+ recorded_at: Thu, 28 Nov 2013 16:02:20 GMT
29
+
30
+ - request:
31
+ method: get
32
+ uri: http://api-model-specs.com/not_found
33
+ headers:
34
+ User-Agent:
35
+ - Typhoeus - https://github.com/typhoeus/typhoeus
36
+ response:
37
+ status:
38
+ code: 404
39
+ message: OK
40
+ headers:
41
+ Server:
42
+ - nginx/1.4.1
43
+ Date:
44
+ - Thu, 28 Nov 2013 16:02:56 GMT
45
+ Content-Type:
46
+ - text/plain; charset=utf-8
47
+ Content-Length:
48
+ - '248'
49
+ Connection:
50
+ - keep-alive
51
+ body:
52
+ encoding: UTF-8
53
+ string: "{}"
54
+ http_version:
55
+ recorded_at: Thu, 28 Nov 2013 16:02:20 GMT
56
+
57
+ recorded_with: VCR 2.8.0
@@ -27,6 +27,33 @@ http_interactions:
27
27
  http_version:
28
28
  recorded_at: Thu, 28 Nov 2013 16:02:20 GMT
29
29
 
30
+ - request:
31
+ method: post
32
+ uri: http://api-model-specs.com/posts
33
+ headers:
34
+ User-Agent:
35
+ - Typhoeus - https://github.com/typhoeus/typhoeus
36
+ response:
37
+ status:
38
+ code: 200
39
+ message: OK
40
+ headers:
41
+ Server:
42
+ - nginx/1.4.1
43
+ Date:
44
+ - Thu, 28 Nov 2013 16:02:56 GMT
45
+ Content-Type:
46
+ - text/plain; charset=utf-8
47
+ Content-Length:
48
+ - '248'
49
+ Connection:
50
+ - keep-alive
51
+ body:
52
+ encoding: UTF-8
53
+ string: "[{\"name\":\"foo\"},{\"name\":\"bar\"}]"
54
+ http_version:
55
+ recorded_at: Thu, 28 Nov 2013 16:02:20 GMT
56
+
30
57
  - request:
31
58
  method: get
32
59
  uri: http://api-model-specs.com/single_post
@@ -54,4 +81,33 @@ http_interactions:
54
81
  http_version:
55
82
  recorded_at: Thu, 28 Nov 2013 16:02:20 GMT
56
83
 
84
+ - request:
85
+ method: post
86
+ uri: http://api-model-specs.com/create_with_json
87
+ headers:
88
+ User-Agent:
89
+ - Typhoeus - https://github.com/typhoeus/typhoeus
90
+ body:
91
+ string: "{\"name\":\"foobarbaz\"}"
92
+ response:
93
+ status:
94
+ code: 200
95
+ message: OK
96
+ headers:
97
+ Server:
98
+ - nginx/1.4.1
99
+ Date:
100
+ - Thu, 28 Nov 2013 16:02:56 GMT
101
+ Content-Type:
102
+ - text/plain; charset=utf-8
103
+ Content-Length:
104
+ - '248'
105
+ Connection:
106
+ - keep-alive
107
+ body:
108
+ encoding: UTF-8
109
+ string: "{\"name\":\"foobarbaz\"}"
110
+ http_version:
111
+ recorded_at: Thu, 28 Nov 2013 16:02:20 GMT
112
+
57
113
  recorded_with: VCR 2.8.0
@@ -0,0 +1,57 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://api-model-specs.com/users
6
+ headers:
7
+ User-Agent:
8
+ - Typhoeus - https://github.com/typhoeus/typhoeus
9
+ response:
10
+ status:
11
+ code: 200
12
+ message: OK
13
+ headers:
14
+ Server:
15
+ - nginx/1.4.1
16
+ Date:
17
+ - Thu, 28 Nov 2013 16:02:56 GMT
18
+ Content-Type:
19
+ - text/plain; charset=utf-8
20
+ Content-Length:
21
+ - '248'
22
+ Connection:
23
+ - keep-alive
24
+ body:
25
+ encoding: UTF-8
26
+ string: "{\"users\":[{\"name\":\"foo\"}, {\"name\":\"bar\"}, {\"name\":\"baz\"}]}"
27
+ http_version:
28
+ recorded_at: Thu, 28 Nov 2013 16:02:20 GMT
29
+
30
+ - request:
31
+ method: get
32
+ uri: http://api-model-specs.com/search
33
+ headers:
34
+ User-Agent:
35
+ - Typhoeus - https://github.com/typhoeus/typhoeus
36
+ response:
37
+ status:
38
+ code: 200
39
+ message: OK
40
+ headers:
41
+ Server:
42
+ - nginx/1.4.1
43
+ Date:
44
+ - Thu, 28 Nov 2013 16:02:56 GMT
45
+ Content-Type:
46
+ - text/plain; charset=utf-8
47
+ Content-Length:
48
+ - '248'
49
+ Connection:
50
+ - keep-alive
51
+ body:
52
+ encoding: UTF-8
53
+ string: "{\"search\":{\"results\":{\"users\":[{\"name\":\"foo\"}, {\"name\":\"bar\"}, {\"name\":\"baz\"}]}}}"
54
+ http_version:
55
+ recorded_at: Thu, 28 Nov 2013 16:02:20 GMT
56
+
57
+ recorded_with: VCR 2.8.0
@@ -1,8 +1,5 @@
1
1
  class Banana < ApiModel::Base
2
- attr_accessor :color, :size, :ripe
3
- after_initialize :set_ripeness
4
-
5
- def set_ripeness
6
- self.ripe = color == "yellow"
7
- end
2
+ property :color
3
+ property :size
4
+ property :ripe
8
5
  end
@@ -1,5 +1,6 @@
1
1
  class BlogPost < ApiModel::Base
2
- attr_accessor :name, :title
2
+ property :name
3
+ property :title
3
4
 
4
5
  class CustomBuilder
5
6
  def build(hash)
@@ -0,0 +1,11 @@
1
+ class Car < ApiModel::Base
2
+
3
+ property :number_of_doors, from: :numberOfDoors
4
+ property :top_speed, transform_with: lambda { |speed| speed * 10 }
5
+ property :name, default: "Ferrari"
6
+
7
+ def is_fast?
8
+ top_speed > 300
9
+ end
10
+
11
+ end
@@ -1,9 +1,13 @@
1
1
  class MultipleHostsFoo < ApiModel::Base
2
- self.api_host = "http://foo.com"
2
+ api_config do |config|
3
+ config.host = "http://foo.com"
4
+ end
3
5
  end
4
6
 
5
7
  class MultipleHostsBar < ApiModel::Base
6
- self.api_host = "http://bar.com"
8
+ api_config do |config|
9
+ config.host = "http://bar.com"
10
+ end
7
11
  end
8
12
 
9
13
  class MultipleHostsNone < ApiModel::Base
@@ -0,0 +1,4 @@
1
+ class User < ApiModel::Base
2
+ property :name
3
+ property :email_address
4
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damien Timewell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-29 00:00:00.000000000 Z
11
+ date: 2013-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: hashie
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -117,24 +131,32 @@ extra_rdoc_files: []
117
131
  files:
118
132
  - .gitignore
119
133
  - .rspec
134
+ - .travis.yml
120
135
  - Gemfile
121
136
  - Gemfile.lock
122
137
  - README.md
123
138
  - api-model.gemspec
124
139
  - lib/api-model.rb
140
+ - lib/api_model/configuration.rb
125
141
  - lib/api_model/http_request.rb
126
142
  - lib/api_model/initializer.rb
127
143
  - lib/api_model/response.rb
128
- - spec/lib/api_host_spec.rb
129
- - spec/lib/api_model_spec.rb
130
- - spec/lib/http_request_spec.rb
131
- - spec/lib/initializer_spec.rb
132
- - spec/lib/response_spec.rb
144
+ - lib/api_model/rest_methods.rb
145
+ - spec/api-model/api_model_spec.rb
146
+ - spec/api-model/configuration_spec.rb
147
+ - spec/api-model/http_request_spec.rb
148
+ - spec/api-model/initializer_spec.rb
149
+ - spec/api-model/response_spec.rb
133
150
  - spec/spec_helper.rb
151
+ - spec/support/fixtures/cars.yml
152
+ - spec/support/fixtures/errors.yml
134
153
  - spec/support/fixtures/posts.yml
154
+ - spec/support/fixtures/users.yml
135
155
  - spec/support/mock_models/banana.rb
136
156
  - spec/support/mock_models/blog_post.rb
157
+ - spec/support/mock_models/car.rb
137
158
  - spec/support/mock_models/multiple_hosts.rb
159
+ - spec/support/mock_models/user.rb
138
160
  homepage: https://github.com/iZettle/api-model
139
161
  licenses: []
140
162
  metadata: {}
@@ -159,14 +181,19 @@ signing_key:
159
181
  specification_version: 4
160
182
  summary: A simple way of interacting with rest APIs
161
183
  test_files:
162
- - spec/lib/api_host_spec.rb
163
- - spec/lib/api_model_spec.rb
164
- - spec/lib/http_request_spec.rb
165
- - spec/lib/initializer_spec.rb
166
- - spec/lib/response_spec.rb
184
+ - spec/api-model/api_model_spec.rb
185
+ - spec/api-model/configuration_spec.rb
186
+ - spec/api-model/http_request_spec.rb
187
+ - spec/api-model/initializer_spec.rb
188
+ - spec/api-model/response_spec.rb
167
189
  - spec/spec_helper.rb
190
+ - spec/support/fixtures/cars.yml
191
+ - spec/support/fixtures/errors.yml
168
192
  - spec/support/fixtures/posts.yml
193
+ - spec/support/fixtures/users.yml
169
194
  - spec/support/mock_models/banana.rb
170
195
  - spec/support/mock_models/blog_post.rb
196
+ - spec/support/mock_models/car.rb
171
197
  - spec/support/mock_models/multiple_hosts.rb
198
+ - spec/support/mock_models/user.rb
172
199
  has_rdoc:
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
- require 'support/mock_models/banana'
3
- require 'support/mock_models/multiple_hosts'
4
-
5
- describe ApiModel do
6
- describe "api_host" do
7
- it "should be possible to set the base api_host" do
8
- Banana.api_host = "http://api-model-specs.com"
9
- Banana.api_host.should eq "http://api-model-specs.com"
10
- end
11
-
12
- describe "with combinations of setting different hosts" do
13
- it "should no override each other" do
14
- MultipleHostsFoo.api_host.should eq("http://foo.com")
15
- MultipleHostsBar.api_host.should eq("http://bar.com")
16
- MultipleHostsNone.api_host.should eq("")
17
- end
18
- end
19
- end
20
- end
@@ -1,34 +0,0 @@
1
- require 'spec_helper'
2
- require 'support/mock_models/blog_post'
3
-
4
- describe ApiModel do
5
-
6
- describe "retrieving a single object" do
7
- describe "with the default builder" do
8
- let(:blog_post) do
9
- VCR.use_cassette('posts') do
10
- BlogPost.get_json "http://api-model-specs.com/single_post"
11
- end
12
- end
13
-
14
- it "should run the request and objectify the response hash" do
15
- blog_post.should be_a(BlogPost)
16
- blog_post.name.should eq "foo"
17
- end
18
- end
19
-
20
- describe "with a custom builder" do
21
- let(:custom_built_blog_post) do
22
- VCR.use_cassette('posts') do
23
- BlogPost.get_json "http://api-model-specs.com/single_post", builder: BlogPost::CustomBuilder.new
24
- end
25
- end
26
-
27
- it "should be possible to use a custom builder class when objectifing" do
28
- custom_built_blog_post.should be_a(BlogPost)
29
- custom_built_blog_post.title.should eq "FOOBAR"
30
- end
31
- end
32
- end
33
-
34
- end
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
- require 'support/mock_models/blog_post'
3
-
4
- describe ApiModel::HttpRequest do
5
-
6
- describe "default attributes" do
7
- subject { ApiModel::HttpRequest.new }
8
-
9
- it "should default #method to :get" do
10
- subject.method.should eq :get
11
- end
12
-
13
- it "should default #options to a blank hash" do
14
- subject.options.should eq Hash.new
15
- end
16
- end
17
-
18
- describe "using api_host" do
19
- let(:blog_post) do
20
- BlogPost.api_host = "http://api-model-specs.com"
21
-
22
- VCR.use_cassette('posts') do
23
- BlogPost.get_json "/single_post"
24
- end
25
- end
26
-
27
- it "should be used with #path to generate a #full_path" do
28
- blog_post.http_response.request.url.should eq "http://api-model-specs.com/single_post"
29
- end
30
- end
31
-
32
- describe "sending a GET request" do
33
- let(:request) { ApiModel::HttpRequest.new path: "http://api-model-specs.com/posts", method: :get }
34
-
35
- it "should use typhoeus to send a request" do
36
- VCR.use_cassette('posts') do
37
- request.run
38
- end
39
-
40
- request.api_call.success?.should eq true
41
- end
42
- end
43
- end
@@ -1,89 +0,0 @@
1
- require 'spec_helper'
2
- require 'support/mock_models/blog_post'
3
-
4
- describe ApiModel::Response do
5
-
6
- let(:valid_response) do
7
- VCR.use_cassette('posts') do
8
- ApiModel::HttpRequest.new(path: "http://api-model-specs.com/single_post", method: :get).run
9
- end
10
- end
11
-
12
- describe "parsing the json body" do
13
- it "should produce a hash given valid json" do
14
- valid_response.json_response_body.should be_a(Hash)
15
- valid_response.json_response_body["name"].should eq "foo"
16
- end
17
-
18
- it "should catch errors from parsing invalid json" do
19
- valid_response.stub_chain(:http_response, :body).and_return "blah"
20
- ApiModel::Log.should_receive(:info).with "Could not parse JSON response: blah"
21
-
22
- expect {
23
- valid_response.json_response_body
24
- }.to_not raise_error
25
- end
26
- end
27
-
28
- describe "#build" do
29
- it "should use the builder.build method if present" do
30
- builder = double
31
- builder.should_receive(:build).with something: "foo"
32
-
33
- valid_response.build builder, something: "foo"
34
- end
35
-
36
- it "should use builder.new if there's no builder.build method" do
37
- builder = double
38
- builder.should_receive(:new).with something_else: "hi"
39
-
40
- valid_response.build builder, something_else: "hi"
41
- end
42
- end
43
-
44
- describe "#build_objects" do
45
- let(:single_object) do
46
- valid_response.stub(:json_response_body).and_return name: "foo"
47
- valid_response.build_objects BlogPost
48
- end
49
-
50
- let(:array_of_objects) do
51
- valid_response.stub(:json_response_body).and_return [{name: "foo"}, {name: "bar"}]
52
- valid_response.build_objects BlogPost
53
- end
54
-
55
- it "should build a single object" do
56
- single_object.should be_a(BlogPost)
57
- single_object.name.should eq "foo"
58
- end
59
-
60
- it "should build an array of objects" do
61
- array_of_objects[0].should be_a(BlogPost)
62
- array_of_objects[0].name.should eq "foo"
63
-
64
- array_of_objects[1].should be_a(BlogPost)
65
- array_of_objects[1].name.should eq "bar"
66
- end
67
-
68
- it "should include the Typhoeus::Response object" do
69
- single_object.http_response.should be_a(Typhoeus::Response)
70
- end
71
-
72
- it "should include the #json_response_body" do
73
- single_object.json_response_body.should eq name: "foo"
74
- end
75
- end
76
-
77
- describe "passing core methods down to the built class" do
78
-
79
- ApiModel::Response::FALL_THROUGH_METHODS.each do |fall_trhough_method|
80
- it "should pass ##{fall_trhough_method} on the built object class" do
81
- allow_message_expectations_on_nil
82
- valid_response.objects.should_receive(fall_trhough_method)
83
- valid_response.send fall_trhough_method
84
- end
85
- end
86
-
87
- end
88
-
89
- end