leadlight 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/Gemfile +9 -0
  2. data/Gemfile.lock +79 -0
  3. data/Guardfile +19 -0
  4. data/Rakefile +133 -0
  5. data/leadlight.gemspec +125 -0
  6. data/lib/leadlight.rb +92 -0
  7. data/lib/leadlight/blank.rb +15 -0
  8. data/lib/leadlight/codec.rb +63 -0
  9. data/lib/leadlight/enumerable_representation.rb +24 -0
  10. data/lib/leadlight/errors.rb +14 -0
  11. data/lib/leadlight/hyperlinkable.rb +126 -0
  12. data/lib/leadlight/link.rb +35 -0
  13. data/lib/leadlight/link_template.rb +47 -0
  14. data/lib/leadlight/representation.rb +30 -0
  15. data/lib/leadlight/request.rb +91 -0
  16. data/lib/leadlight/service.rb +73 -0
  17. data/lib/leadlight/service_middleware.rb +50 -0
  18. data/lib/leadlight/tint.rb +26 -0
  19. data/lib/leadlight/tint_helper.rb +67 -0
  20. data/lib/leadlight/type.rb +71 -0
  21. data/spec/cassettes/Leadlight/authorized_GitHub_example/_user/has_the_expected_content.yml +75 -0
  22. data/spec/cassettes/Leadlight/authorized_GitHub_example/_user/indicates_the_expected_oath_scopes.yml +75 -0
  23. data/spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_team_members.yml +384 -0
  24. data/spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_team_members/.yml +309 -0
  25. data/spec/cassettes/Leadlight/authorized_GitHub_example/test_team/.yml +159 -0
  26. data/spec/cassettes/Leadlight/basic_GitHub_example/_root/.yml +32 -0
  27. data/spec/cassettes/Leadlight/basic_GitHub_example/_root/__location__/.yml +32 -0
  28. data/spec/cassettes/Leadlight/basic_GitHub_example/_root/should_be_a_204_no_content.yml +32 -0
  29. data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/.yml +32 -0
  30. data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/__location__/.yml +32 -0
  31. data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/should_be_a_204_no_content.yml +32 -0
  32. data/spec/cassettes/Leadlight/tinted_GitHub_example/_user/has_the_expected_content.yml +65 -0
  33. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/.yml +100 -0
  34. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_able_to_follow_next_link.yml +135 -0
  35. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable.yml +275 -0
  36. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable_over_page_boundaries.yml +170 -0
  37. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_have_next_and_last_links.yml +100 -0
  38. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_link/exists.yml +32 -0
  39. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_link/links_to_the_expected_URL.yml +32 -0
  40. data/spec/leadlight/codec_spec.rb +93 -0
  41. data/spec/leadlight/hyperlinkable_spec.rb +136 -0
  42. data/spec/leadlight/link_spec.rb +53 -0
  43. data/spec/leadlight/link_template_spec.rb +45 -0
  44. data/spec/leadlight/representation_spec.rb +62 -0
  45. data/spec/leadlight/request_spec.rb +236 -0
  46. data/spec/leadlight/service_middleware_spec.rb +81 -0
  47. data/spec/leadlight/service_spec.rb +127 -0
  48. data/spec/leadlight/tint_helper_spec.rb +132 -0
  49. data/spec/leadlight/type_spec.rb +137 -0
  50. data/spec/leadlight_spec.rb +237 -0
  51. data/spec/spec_helper_lite.rb +6 -0
  52. data/spec/support/credentials.rb +16 -0
  53. data/spec/support/vcr.rb +18 -0
  54. metadata +229 -0
@@ -0,0 +1,137 @@
1
+ require 'spec_helper_lite'
2
+ require 'leadlight/type'
3
+
4
+ module Leadlight
5
+ describe Type do
6
+ let(:service) { stub(:service) }
7
+ let(:name) { "test_type" }
8
+ let(:type) { Type.new(name, service, &body) }
9
+ let(:body) { Proc.new{} }
10
+ let(:instance){ stub(:instance) }
11
+ let(:object) { instance.extend(type) }
12
+ let(:encoder) { stub(:encoder) }
13
+
14
+ subject { type }
15
+
16
+ its(:name) { should eq(name) }
17
+ its(:service) { should equal(service) }
18
+ its(:inspect) { should eq("#<Leadlight::Type:#{name}>") }
19
+ its(:to_s) { should eq("Type(#{name})") }
20
+
21
+ describe '#build' do
22
+ let(:body) {
23
+ my_builder = stub_builder
24
+ proc do |*args|
25
+ builder &my_builder
26
+ end
27
+ }
28
+ let(:stub_builder) { proc{|*args| instance} }
29
+ it 'uses the specified builder block' do
30
+ type.build.should eq(instance)
31
+ end
32
+
33
+ it 'passes params to the builder' do
34
+ stub_builder.should_receive(:call).with(1,2,3)
35
+ type.build(1,2,3)
36
+ end
37
+
38
+ it 'yields the built object' do
39
+ yielded = :not_set
40
+ type.build do |obj|
41
+ yielded = obj
42
+ end
43
+ yielded.should equal(instance)
44
+ end
45
+
46
+ it 'includes itself into the built object' do
47
+ type.build.should be_a(type)
48
+ end
49
+
50
+ context 'with no builder specified' do
51
+ let(:body) { proc{} }
52
+ it 'defaults to Object.new' do
53
+ type.build.class.should == Object
54
+ end
55
+ end
56
+ end
57
+
58
+ describe 'when included' do
59
+ subject { object }
60
+ it 'adds a __type__ to the extended object, referencing itself' do
61
+ subject.__type__.should equal(type)
62
+ end
63
+ end
64
+
65
+ describe '#enctype' do
66
+ context 'when unspecified' do
67
+ its(:enctype) { should eq('application/json') }
68
+
69
+ it 'is used when encoding' do
70
+ body = stub
71
+ entity_body = stub
72
+ options = {encoder: encoder}
73
+ encoder.should_receive(:encode).
74
+ with('application/json', body, options).
75
+ and_return(entity_body)
76
+ type.encode(body, options).should equal(entity_body)
77
+ end
78
+ end
79
+
80
+ context 'when explicitly specified' do
81
+ let(:body) { proc{ enctype 'text/plain' } }
82
+
83
+ it 'is changed' do
84
+ type.enctype.should eq('text/plain')
85
+ end
86
+
87
+ it 'is used when encoding' do
88
+ body = stub
89
+ entity_body = stub
90
+ options = {encoder: encoder}
91
+ encoder.should_receive(:encode).
92
+ with('text/plain', body, options).
93
+ and_return(entity_body)
94
+ type.encode(body, options).should equal(entity_body)
95
+ end
96
+ end
97
+ end
98
+
99
+ describe 'link_to_create' do
100
+ let(:body) {
101
+ the_link = link
102
+ proc {
103
+ link_to_create(the_link)
104
+ }
105
+ }
106
+ let(:link) { '/foo/{x}/bar' }
107
+
108
+ it 'is saved' do
109
+ type.link_to_create.should eq(link)
110
+ end
111
+
112
+ it 'adds a link to the representation' do
113
+ instance.should_receive(:add_link).with(link, 'create', "Create a new #{name}")
114
+ object
115
+ end
116
+
117
+ end
118
+
119
+ describe '#tint' do
120
+ subject { type.tint }
121
+
122
+ it { should be_a(Tint) }
123
+ its(:name) { should eq("type:#{name}") }
124
+ end
125
+
126
+ describe '#encode' do
127
+ it 'defaults to using the representation service as encoder' do
128
+ representation = stub(__service__: service)
129
+ entity = stub
130
+ service.should_receive(:encode).
131
+ with('application/json', representation, {}).
132
+ and_return(entity)
133
+ type.encode(representation).should equal(entity)
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,237 @@
1
+ require 'spec_helper_lite'
2
+ require 'leadlight'
3
+
4
+ describe Leadlight, vcr: true do
5
+ def uri(uri_string)
6
+ Addressable::URI.parse(uri_string)
7
+ end
8
+
9
+ def urit(pattern)
10
+ Addressable::Template.new(pattern)
11
+ end
12
+
13
+ let(:logger) {
14
+ logfile = Pathname('../../log/test.log').expand_path(__FILE__)
15
+ logfile.dirname.mkpath
16
+ Logger.new(logfile)
17
+ }
18
+
19
+ describe 'basic GitHub example' do
20
+ class BasicGithubService
21
+ Leadlight.build_service(self) do
22
+ url 'https://api.github.com'
23
+ end
24
+ end
25
+
26
+ subject { session }
27
+ let(:session) { BasicGithubService.session(options) }
28
+ let(:options) { {logger: logger} }
29
+
30
+ describe '.root' do
31
+ subject{ session.root }
32
+
33
+ it { should be_blank }
34
+
35
+ its(:__location__) { should eq(uri('https://api.github.com')) }
36
+
37
+ it "should be a 204 no content" do
38
+ subject.__response__.status.should eq(204)
39
+ end
40
+
41
+ end
42
+ end
43
+
44
+ describe 'tinted GitHub example' do
45
+ class TintedGithubService
46
+ Leadlight.build_service(self) do
47
+ url 'https://api.github.com'
48
+
49
+ tint 'root' do
50
+ match_path('/')
51
+ add_link_template '/users/{login}', 'user', 'Find user by login'
52
+ end
53
+
54
+ tint 'user' do
55
+ match_content_type('application/json')
56
+ match_class(Hash)
57
+ match{self['type'] == 'User'}
58
+ add_link "#{__location__}/followers", 'followers', 'List followers'
59
+ end
60
+ end
61
+ end
62
+
63
+ subject { session }
64
+ let(:session) { TintedGithubService.session(options) }
65
+ let(:options) { {logger: logger} }
66
+
67
+ describe '.root' do
68
+ subject{ session.root }
69
+
70
+ it { should be_blank }
71
+
72
+ its(:__location__) { should eq(uri('https://api.github.com')) }
73
+
74
+ it "should be a 204 no content" do
75
+ subject.__response__.status.should eq(204)
76
+ end
77
+ end
78
+
79
+ describe 'user link' do
80
+ it 'exists' do
81
+ subject.root.link('user').should be_a(Leadlight::Link)
82
+ end
83
+
84
+ it 'links to the expected URL' do
85
+ subject.root.link('user').href.should eq(uri('/users/{login}'))
86
+ end
87
+ end
88
+
89
+ describe '#user' do
90
+ it 'has the expected content' do
91
+ user = subject.root.user('avdi')
92
+ user['type'].should eq('User')
93
+ user['location'].should eq('Pennsylvania, USA')
94
+ user['company'].should eq('ShipRise')
95
+ user['name'].should eq('Avdi Grimm')
96
+ end
97
+ end
98
+
99
+ describe 'user followers' do
100
+ subject { session.root.user('avdi').followers }
101
+
102
+ it { should_not be_empty }
103
+
104
+ it 'should have "next" and "last" links' do
105
+ subject.link('next').should be_a(Leadlight::Link)
106
+ subject.link('last').should be_a(Leadlight::Link)
107
+ end
108
+
109
+ it 'should be able to follow "next" link' do
110
+ page2 = subject.next
111
+ page2.link('prev').href.path.should eq(subject.__location__.path)
112
+ end
113
+
114
+ it 'should be enumerable' do
115
+ followers = []
116
+ subject.each do |f|
117
+ followers << f
118
+ end
119
+ followers.should have(178).items
120
+ end
121
+
122
+ it 'should be enumerable over page boundaries' do
123
+ followers = subject.to_enum.take(61)
124
+ followers.should have(61).items
125
+ end
126
+ end
127
+ end
128
+
129
+ describe 'authorized GitHub example', vcr: { match_requests_on: [:method, :uri]}do
130
+ class AuthorizedGithubService
131
+ Leadlight.build_service(self) do
132
+ url 'https://api.github.com'
133
+
134
+ tint 'root' do
135
+ match_path('/')
136
+ add_link_template '/users/{login}', 'user', 'Find user by login'
137
+ add_link_template '/orgs/{name}', 'organization'
138
+ end
139
+
140
+ tint 'auth_scopes' do
141
+ extend do
142
+ def oauth_scopes
143
+ __response__.headers['X-OAuth-Scopes'].to_s.strip.split(/\W+/)
144
+ end
145
+ end
146
+ end
147
+
148
+ tint 'organization' do
149
+ match_path(%r{^/orgs/\w+$})
150
+ type :organization
151
+ add_link "#{__location__}/teams", 'teams'
152
+
153
+ extend do
154
+ def team_for_name(name)
155
+ teams.get(name)
156
+ end
157
+ end
158
+ end
159
+
160
+ tint 'teamlist' do
161
+ match_path(%r{^/orgs/\w+/teams$})
162
+
163
+ add_link_set('child', :get) do
164
+ map{|team|
165
+ {href: team['url'], title: team['name']}
166
+ }
167
+ end
168
+ end
169
+
170
+ tint 'team' do
171
+ match_template('/teams/{id}')
172
+ type :team
173
+
174
+ add_link "#{__location__}/members", 'members'
175
+ add_link_template "#{__location__}/members/{id}", 'member'
176
+
177
+ extend do
178
+ def add_member(member_name)
179
+ link('member').put(member_name).submit_and_wait.raise_on_error
180
+ end
181
+
182
+ def remove_member(member_name)
183
+ link('member').delete(member_name).submit_and_wait.raise_on_error
184
+ end
185
+ end
186
+ end
187
+
188
+ type :organization do
189
+ end
190
+
191
+ type :team do
192
+ end
193
+ end
194
+
195
+ def prepare_request(request)
196
+ request.headers['Authorization'] = "Bearer #{service_options[:oauth2_token]}"
197
+ end
198
+ end
199
+
200
+ subject { session }
201
+ let(:session) { AuthorizedGithubService.session(service_options) }
202
+ let(:service_options) { {logger: logger, oauth2_token: test_user_token} }
203
+ let(:test_user_token) { credentials[:github_test_user_token] }
204
+
205
+ describe '#user' do
206
+ it 'has the expected content' do
207
+ user = subject.root.user('avdi')
208
+ user['type'].should eq('User')
209
+ user['location'].should eq('Pennsylvania, USA')
210
+ user['company'].should eq('ShipRise')
211
+ user['name'].should eq('Avdi Grimm')
212
+ end
213
+
214
+ it 'indicates the expected oath scopes' do
215
+ subject.root.user('avdi').oauth_scopes.should eq(['repo'])
216
+ end
217
+ end
218
+
219
+ describe 'test team' do
220
+ subject { session.root.organization('shiprise').team_for_name('Leadlight Test Team') }
221
+
222
+ it { should be }
223
+ end
224
+
225
+ specify "adding and removing team members" do
226
+ user = session.root.user("leadlight-test")
227
+ user.should_not be_empty
228
+ team = session.root.organization('shiprise').
229
+ teams.get('Leadlight Test Team')
230
+ team.should_not be_empty
231
+ team.add_member('leadlight-test')
232
+ team.members.map{|m| m['login']}.should include('leadlight-test')
233
+ team.remove_member('leadlight-test')
234
+ team.members.map{|m| m['login']}.should_not include('leadlight-test')
235
+ end
236
+ end
237
+ end
@@ -0,0 +1,6 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+ require 'rspec/autorun'
3
+ require 'English'
4
+ ROOT = File.expand_path('../..', __FILE__)
5
+ Dir[File.join(ROOT, "spec/support/**/*.rb")].each {|f| require f}
6
+ $LOAD_PATH.unshift(File.expand_path('lib', ROOT))
@@ -0,0 +1,16 @@
1
+ require 'yaml'
2
+
3
+ module CredentialsTestHelpers
4
+ def credentials
5
+ credentials_path = Pathname('../../credentials.yml').expand_path(__FILE__)
6
+ @credentials ||= Hash.new do |h,k|
7
+ pending "Missing key #{k.inspect} from #{credentials_path}"
8
+ end.merge!(YAML.load_file(credentials_path) || {})
9
+ rescue LoadError, SystemCallError, KeyError => e
10
+ pending e.message
11
+ end
12
+ end
13
+
14
+ RSpec.configure do |config|
15
+ config.include(CredentialsTestHelpers)
16
+ end
@@ -0,0 +1,18 @@
1
+ require 'vcr'
2
+
3
+ VCR.configure do |c|
4
+ c.hook_into :faraday
5
+ c.cassette_library_dir = 'spec/cassettes'
6
+ c.filter_sensitive_data('<AUTH FILTERED>') {|interaction|
7
+ Array(interaction.request.headers['Authorization']).first
8
+ }
9
+ c.configure_rspec_metadata!
10
+ c.ignore_request {|req|
11
+ Addressable::URI.parse(req.uri).host == 'example.com'
12
+ }
13
+ c.default_cassette_options = {
14
+ match_requests_on: [:method, :uri, :headers],
15
+ record: :new_episodes
16
+ }
17
+ end
18
+
metadata ADDED
@@ -0,0 +1,229 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: leadlight
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Avdi Grimm
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-09 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: faraday
16
+ requirement: &70279914738300 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70279914738300
25
+ - !ruby/object:Gem::Dependency
26
+ name: fattr
27
+ requirement: &70279914737840 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70279914737840
36
+ - !ruby/object:Gem::Dependency
37
+ name: link_header
38
+ requirement: &70279914737420 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70279914737420
47
+ - !ruby/object:Gem::Dependency
48
+ name: multi_json
49
+ requirement: &70279914737000 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70279914737000
58
+ - !ruby/object:Gem::Dependency
59
+ name: mime-types
60
+ requirement: &70279914736540 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70279914736540
69
+ - !ruby/object:Gem::Dependency
70
+ name: hookr
71
+ requirement: &70279914736100 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70279914736100
80
+ - !ruby/object:Gem::Dependency
81
+ name: rspec
82
+ requirement: &70279914735580 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70279914735580
91
+ - !ruby/object:Gem::Dependency
92
+ name: vcr
93
+ requirement: &70279914735040 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: 2.0.0.rc1
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70279914735040
102
+ - !ruby/object:Gem::Dependency
103
+ name: guard
104
+ requirement: &70279914734400 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *70279914734400
113
+ - !ruby/object:Gem::Dependency
114
+ name: guard-rspec
115
+ requirement: &70279914733320 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *70279914733320
124
+ - !ruby/object:Gem::Dependency
125
+ name: guard-bundler
126
+ requirement: &70279914732860 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *70279914732860
135
+ - !ruby/object:Gem::Dependency
136
+ name: ruby-debug19
137
+ requirement: &70279914732440 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *70279914732440
146
+ description: Long description. Maybe copied from the README.
147
+ email: avdi@avdi.org
148
+ executables: []
149
+ extensions: []
150
+ extra_rdoc_files: []
151
+ files:
152
+ - Gemfile
153
+ - Gemfile.lock
154
+ - Guardfile
155
+ - Rakefile
156
+ - leadlight.gemspec
157
+ - lib/leadlight.rb
158
+ - lib/leadlight/blank.rb
159
+ - lib/leadlight/codec.rb
160
+ - lib/leadlight/enumerable_representation.rb
161
+ - lib/leadlight/errors.rb
162
+ - lib/leadlight/hyperlinkable.rb
163
+ - lib/leadlight/link.rb
164
+ - lib/leadlight/link_template.rb
165
+ - lib/leadlight/representation.rb
166
+ - lib/leadlight/request.rb
167
+ - lib/leadlight/service.rb
168
+ - lib/leadlight/service_middleware.rb
169
+ - lib/leadlight/tint.rb
170
+ - lib/leadlight/tint_helper.rb
171
+ - lib/leadlight/type.rb
172
+ - spec/cassettes/Leadlight/authorized_GitHub_example/_user/has_the_expected_content.yml
173
+ - spec/cassettes/Leadlight/authorized_GitHub_example/_user/indicates_the_expected_oath_scopes.yml
174
+ - spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_team_members.yml
175
+ - spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_team_members/.yml
176
+ - spec/cassettes/Leadlight/authorized_GitHub_example/test_team/.yml
177
+ - spec/cassettes/Leadlight/basic_GitHub_example/_root/.yml
178
+ - spec/cassettes/Leadlight/basic_GitHub_example/_root/__location__/.yml
179
+ - spec/cassettes/Leadlight/basic_GitHub_example/_root/should_be_a_204_no_content.yml
180
+ - spec/cassettes/Leadlight/tinted_GitHub_example/_root/.yml
181
+ - spec/cassettes/Leadlight/tinted_GitHub_example/_root/__location__/.yml
182
+ - spec/cassettes/Leadlight/tinted_GitHub_example/_root/should_be_a_204_no_content.yml
183
+ - spec/cassettes/Leadlight/tinted_GitHub_example/_user/has_the_expected_content.yml
184
+ - spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/.yml
185
+ - spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_able_to_follow_next_link.yml
186
+ - spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable.yml
187
+ - spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable_over_page_boundaries.yml
188
+ - spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_have_next_and_last_links.yml
189
+ - spec/cassettes/Leadlight/tinted_GitHub_example/user_link/exists.yml
190
+ - spec/cassettes/Leadlight/tinted_GitHub_example/user_link/links_to_the_expected_URL.yml
191
+ - spec/leadlight/codec_spec.rb
192
+ - spec/leadlight/hyperlinkable_spec.rb
193
+ - spec/leadlight/link_spec.rb
194
+ - spec/leadlight/link_template_spec.rb
195
+ - spec/leadlight/representation_spec.rb
196
+ - spec/leadlight/request_spec.rb
197
+ - spec/leadlight/service_middleware_spec.rb
198
+ - spec/leadlight/service_spec.rb
199
+ - spec/leadlight/tint_helper_spec.rb
200
+ - spec/leadlight/type_spec.rb
201
+ - spec/leadlight_spec.rb
202
+ - spec/spec_helper_lite.rb
203
+ - spec/support/credentials.rb
204
+ - spec/support/vcr.rb
205
+ homepage: https://github.com/avdi/leadlight
206
+ licenses: []
207
+ post_install_message:
208
+ rdoc_options: []
209
+ require_paths:
210
+ - lib
211
+ required_ruby_version: !ruby/object:Gem::Requirement
212
+ none: false
213
+ requirements:
214
+ - - ! '>='
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ required_rubygems_version: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ requirements: []
224
+ rubyforge_project: leadlight
225
+ rubygems_version: 1.8.10
226
+ signing_key:
227
+ specification_version: 2
228
+ summary: Short description used in Gem listings.
229
+ test_files: []