leadlight 0.0.2

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.
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: []