leadlight 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.
Files changed (52) hide show
  1. data/Gemfile.lock +5 -7
  2. data/README.md +82 -0
  3. data/default.gems +1 -0
  4. data/leadlight.gemspec +16 -7
  5. data/lib/leadlight.rb +18 -62
  6. data/lib/leadlight/basic_converter.rb +18 -0
  7. data/lib/leadlight/codec.rb +2 -0
  8. data/lib/leadlight/entity.rb +1 -0
  9. data/lib/leadlight/errors.rb +10 -2
  10. data/lib/leadlight/header_helpers.rb +11 -0
  11. data/lib/leadlight/hyperlinkable.rb +1 -1
  12. data/lib/leadlight/representation.rb +19 -1
  13. data/lib/leadlight/request.rb +44 -11
  14. data/lib/leadlight/service.rb +4 -9
  15. data/lib/leadlight/service_class_methods.rb +69 -0
  16. data/lib/leadlight/service_middleware.rb +2 -14
  17. data/lib/leadlight/tint.rb +6 -2
  18. data/lib/leadlight/tint_helper.rb +27 -4
  19. data/lib/leadlight/type_map.rb +101 -0
  20. data/spec/cassettes/Leadlight/authorized_GitHub_example/_user/has_the_expected_content.yml +8 -8
  21. data/spec/cassettes/Leadlight/authorized_GitHub_example/_user/indicates_the_expected_oath_scopes.yml +8 -8
  22. data/spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_team_members.yml +273 -284
  23. data/spec/cassettes/Leadlight/authorized_GitHub_example/{adding_and_removing_team_members/.yml → adding_and_removing_teams.yml} +57 -84
  24. data/spec/cassettes/Leadlight/authorized_GitHub_example/test_team/.yml +111 -117
  25. data/spec/cassettes/Leadlight/basic_GitHub_example/_root/.yml +58 -25
  26. data/spec/cassettes/Leadlight/basic_GitHub_example/_root/__location__/.yml +58 -25
  27. data/spec/cassettes/Leadlight/basic_GitHub_example/_root/should_be_a_204_no_content.yml +58 -25
  28. data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/.yml +58 -25
  29. data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/__location__/.yml +58 -25
  30. data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/should_be_a_204_no_content.yml +58 -25
  31. data/spec/cassettes/Leadlight/tinted_GitHub_example/_user/has_the_expected_content.yml +122 -50
  32. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/.yml +190 -77
  33. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_able_to_follow_next_link.yml +260 -104
  34. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable.yml +616 -212
  35. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable_over_page_boundaries.yml +331 -131
  36. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_have_next_and_last_links.yml +190 -77
  37. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_link/exists.yml +58 -25
  38. data/spec/cassettes/Leadlight/tinted_GitHub_example/user_link/links_to_the_expected_URL.yml +58 -25
  39. data/spec/leadlight/hyperlinkable_spec.rb +3 -1
  40. data/spec/leadlight/link_template_spec.rb +2 -1
  41. data/spec/leadlight/request_spec.rb +44 -21
  42. data/spec/leadlight/service_middleware_spec.rb +9 -46
  43. data/spec/leadlight/service_spec.rb +30 -24
  44. data/spec/leadlight/tint_helper_spec.rb +67 -1
  45. data/spec/leadlight/tint_spec.rb +69 -0
  46. data/spec/leadlight/type_map_spec.rb +127 -0
  47. data/spec/leadlight_spec.rb +102 -51
  48. data/spec/support/credentials.rb +10 -2
  49. data/spec/support/vcr.rb +1 -1
  50. metadata +61 -32
  51. data/lib/leadlight/type.rb +0 -71
  52. data/spec/leadlight/type_spec.rb +0 -137
@@ -0,0 +1,69 @@
1
+ require 'spec_helper_lite'
2
+ require 'leadlight/tint'
3
+
4
+ module Leadlight
5
+ describe Tint do
6
+ subject { target.extend(Tint.new(:test_tint, options, &definition)) }
7
+ let(:definition) {
8
+ ->(*args) do
9
+ self.tint_applied!
10
+ end
11
+ }
12
+ let(:target) { Target.new }
13
+ let(:status) { 200 }
14
+ let(:response) { stub(:status => status) }
15
+ let(:options) { {} }
16
+
17
+ class Target
18
+ def __apply_tint__
19
+ end
20
+ end
21
+
22
+ def apply
23
+ subject.__apply_tint__
24
+ end
25
+
26
+ before do
27
+ target.stub(:__response__ => response)
28
+ end
29
+
30
+ context "with a successful status" do
31
+ it "is applied" do
32
+ target.should_receive(:tint_applied!)
33
+ apply
34
+ end
35
+ end
36
+
37
+ context "with an unsuccessful status" do
38
+ let(:status) { 401 }
39
+
40
+ it "is not applied" do
41
+ target.should_not_receive(:tint_applied!)
42
+ apply
43
+ end
44
+ end
45
+
46
+ context "with a custom status guard" do
47
+ before do
48
+ options[:status] = 401
49
+ end
50
+
51
+ context "with a non-matching status" do
52
+ it "is not applied" do
53
+ target.should_not_receive(:tint_applied!)
54
+ apply
55
+ end
56
+ end
57
+
58
+ context "with an matching status" do
59
+ let(:status) { 401 }
60
+
61
+ it "is applied" do
62
+ target.should_receive(:tint_applied!)
63
+ apply
64
+ end
65
+ end
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,127 @@
1
+ require 'spec_helper_lite'
2
+ require 'leadlight/type_map'
3
+
4
+ module Leadlight
5
+ describe TypeMap do
6
+ subject { TypeMap.new(codec: codec) }
7
+ let(:codec) { stub(:codec) }
8
+ let(:options) { {foo: 23} }
9
+ let(:native_object) { stub(:native_object) }
10
+ let(:body) { stub(:body, size: 2) }
11
+
12
+ matcher :encode do |object|
13
+ define_method :expected_options do
14
+ @expected_options ||= anything
15
+ end
16
+
17
+ match{ |typemap|
18
+ result = stub(:encode_result)
19
+ @expected_type.should_receive(:encode).with(object, expected_options).
20
+ and_return(result)
21
+ typemap.to_entity_body(object).should equal(result)
22
+ }
23
+
24
+ chain :using do |expected_type|
25
+ @expected_type = expected_type
26
+ end
27
+
28
+ chain :with_options do |expected_options|
29
+ @expected_options = expected_options
30
+ end
31
+ end
32
+
33
+ matcher :decode do |enctype|
34
+ define_method :expected_options do
35
+ @expected_options ||= anything
36
+ end
37
+
38
+ match{ |typemap|
39
+ result = stub(:decode_result)
40
+ @expected_type.should_receive(:decode).with(enctype, body, expected_options).
41
+ and_return(result)
42
+ typemap.to_native(enctype, body, options).should equal(result)
43
+ }
44
+
45
+ chain :using do |expected_type|
46
+ @expected_type = expected_type
47
+ end
48
+
49
+ chain :with_options do |expected_options|
50
+ @expected_options = expected_options
51
+ end
52
+ end
53
+
54
+ describe "defaults" do
55
+ it "encodes arbitrary objects to JSON" do
56
+ codec.should_receive(:encode).
57
+ with("application/json", native_object, options).
58
+ and_return(body)
59
+ result = subject.to_entity_body(native_object, options)
60
+ result.content_type.should eq("application/json")
61
+ result.body.should equal(body)
62
+ end
63
+
64
+ it "encodes nils as nil body, nil content type" do
65
+ result = subject.to_entity_body(nil, options)
66
+ result.content_type.should be_nil
67
+ result.body.should be_nil
68
+ end
69
+
70
+ it "permits encode type to be overridden" do
71
+ codec.should_receive(:encode).
72
+ with("application/xml", native_object, {}).
73
+ and_return(body)
74
+ result = subject.to_entity_body(native_object, {content_type: 'application/xml'})
75
+ result.content_type.should eq("application/xml")
76
+ result.body.should equal(body)
77
+ end
78
+
79
+ it "decodes entity bodies using the codec" do
80
+ codec.should_receive(:decode).
81
+ with("application/foobaz", body, options).
82
+ and_return(native_object)
83
+ subject.to_native("application/foobaz", body, options)
84
+ end
85
+
86
+ it "decodes empty entity bodies as a Blank object" do
87
+ subject.to_native("application/json", "", options).should be_a(Blank)
88
+ end
89
+
90
+ it "handles missing content type" do
91
+ subject.to_native(nil, "", options).should be_a(Blank)
92
+ end
93
+
94
+ end
95
+
96
+ describe "with some types defined" do
97
+ let(:numeric_type) { stub(:numeric_type) }
98
+ let(:custom_json_type) { stub(:custom_json_type) }
99
+
100
+ before do
101
+ subject.add "application/vnd.numeric", [Integer, Float], numeric_type
102
+ subject.add ["application/json", /\+json/], Hash, custom_json_type
103
+ end
104
+
105
+ it "encodes unmatched objects to JSON" do
106
+ codec.should_receive(:encode).
107
+ with("application/json", native_object, options).
108
+ and_return(body)
109
+ subject.to_entity_body(native_object, options)
110
+ end
111
+
112
+ it "decodes unmatched content types entity bodies using the codec" do
113
+ codec.should_receive(:decode).
114
+ with("application/foobaz", body, options).
115
+ and_return(native_object)
116
+ subject.to_native("application/foobaz", body,options)
117
+ end
118
+
119
+ it { should encode(123).using(numeric_type) }
120
+ it { should encode(12.5).using(numeric_type) }
121
+ it { should decode("application/vnd.numeric").using(numeric_type) }
122
+ it { should encode({}).using(custom_json_type) }
123
+ it { should decode("application/json").using(custom_json_type) }
124
+ it { should decode("application/xyzzy+json").using(custom_json_type) }
125
+ end
126
+ end
127
+ end
@@ -116,7 +116,7 @@ describe Leadlight, vcr: true do
116
116
  subject.each do |f|
117
117
  followers << f
118
118
  end
119
- followers.should have(178).items
119
+ followers.size.should be > 150
120
120
  end
121
121
 
122
122
  it 'should be enumerable over page boundaries' do
@@ -127,74 +127,114 @@ describe Leadlight, vcr: true do
127
127
  end
128
128
 
129
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'
130
+ AuthorizedGithubService ||= Leadlight.build_service do
131
+ url 'https://api.github.com'
132
+
133
+ # Tints will skip error responses by default
134
+ tint 'errors', :status => :error do
135
+ extend do
136
+ def exception_message
137
+ self['message'] || super
138
+ end
138
139
  end
140
+ end
139
141
 
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
142
+ tint 'root' do
143
+ match_path('/')
144
+ add_link_template '/users/{login}', 'user', 'Find user by login'
145
+ add_link_template '/orgs/{name}', 'organization'
146
+ end
147
+
148
+ tint 'auth_scopes' do
149
+ extend do
150
+ def oauth_scopes
151
+ __response__.headers['X-OAuth-Scopes'].to_s.strip.split(/\W+/)
145
152
  end
146
153
  end
154
+ end
147
155
 
148
- tint 'organization' do
149
- match_path(%r{^/orgs/\w+$})
150
- type :organization
151
- add_link "#{__location__}/teams", 'teams'
156
+ tint 'organization' do
157
+ match_path(%r{^/orgs/\w+$})
158
+ add_link "#{__location__}/teams", 'teams'
152
159
 
153
- extend do
154
- def team_for_name(name)
155
- teams.get(name)
156
- end
160
+ extend do
161
+ def team_for_name(name)
162
+ teams.get(name)
157
163
  end
164
+
165
+ def add_team(name, permission)
166
+ link('teams').post({},
167
+ { 'name' => name,
168
+ 'permission' => permission}).
169
+ raise_on_error.
170
+ submit_and_wait do |new_team|
171
+ return new_team
172
+ end
173
+ end
174
+
158
175
  end
176
+ end
159
177
 
160
- tint 'teamlist' do
161
- match_path(%r{^/orgs/\w+/teams$})
178
+ tint 'teamlist' do
179
+ match_path(%r{^/orgs/\w+/teams$})
162
180
 
163
- add_link_set('child', :get) do
164
- map{|team|
165
- {href: team['url'], title: team['name']}
166
- }
167
- end
181
+ add_link_set('child', :get) do
182
+ map{|team|
183
+ {href: team['url'], title: team['name']}
184
+ }
168
185
  end
186
+ end
187
+
188
+ tint 'team' do
189
+ match_template('/teams/{id}')
190
+
191
+ add_link "#{__location__}/members", 'members'
192
+ add_link_template "#{__location__}/members/{id}", 'member'
193
+
194
+ extend do
195
+ def add_member(member_name)
196
+ link('member').put(member_name).submit_and_wait.raise_on_error
197
+ end
198
+
199
+ def remove_member(member_name)
200
+ link('member').delete(member_name).submit_and_wait.raise_on_error
201
+ end
169
202
 
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
203
+ def destroy
204
+ link('self').delete.raise_on_error.submit_and_wait
185
205
  end
186
206
  end
207
+ end
208
+
209
+ class GithubRepresentation < SimpleDelegator
210
+ def github_type
211
+ self['type']
212
+ end
213
+ end
187
214
 
188
- type :organization do
215
+ # Define a type-mapping which will override the default handling
216
+ # of application/json and instantiate GithubRepresentation
217
+ # objects
218
+ type_mapping "application/json", GithubRepresentation do
219
+ def encode(object, options={})
220
+ encode_with_type("application/json", object.__getobj__, options)
189
221
  end
190
222
 
191
- type :team do
223
+ def decode(content_type, entity_body, options={})
224
+ object = decode_with_type(content_type, entity_body, options)
225
+ GithubRepresentation.new(object)
192
226
  end
193
227
  end
194
228
 
195
- def prepare_request(request)
196
- request.headers['Authorization'] = "Bearer #{service_options[:oauth2_token]}"
229
+ on_prepare_request do |event, request|
230
+ # 'request' is the Faraday request being prepared
231
+ #
232
+ # 'event.source' is the Leadlight request, which delegates
233
+ # #service_options to the service
234
+ request.headers['Authorization'] =
235
+ "Bearer #{event.source.service_options[:oauth2_token]}"
197
236
  end
237
+
198
238
  end
199
239
 
200
240
  subject { session }
@@ -222,14 +262,25 @@ describe Leadlight, vcr: true do
222
262
  it { should be }
223
263
  end
224
264
 
265
+ specify "adding and removing teams" do
266
+ org = session.root.organization('shiprise')
267
+ team = org.add_team("Leadlight Ephemeral Team", "pull")
268
+ team["permission"].should eq("pull")
269
+ team.destroy
270
+ end
271
+
225
272
  specify "adding and removing team members" do
226
273
  user = session.root.user("leadlight-test")
227
274
  user.should_not be_empty
228
- team = session.root.organization('shiprise').
229
- teams.get('Leadlight Test Team')
275
+ org = session.root.organization('shiprise')
276
+ org.should be_a(GithubRepresentation)
277
+ org.github_type.should eq("Organization")
278
+ teams = org.teams
279
+ team = teams.get('Leadlight Test Team')
280
+ team.should be_a(GithubRepresentation)
230
281
  team.should_not be_empty
231
282
  team.add_member('leadlight-test')
232
- team.members.map{|m| m['login']}.should include('leadlight-test')
283
+ team.members.map{|m| m['login']}.should include('leadlight-test')
233
284
  team.remove_member('leadlight-test')
234
285
  team.members.map{|m| m['login']}.should_not include('leadlight-test')
235
286
  end
@@ -3,9 +3,17 @@ require 'yaml'
3
3
  module CredentialsTestHelpers
4
4
  def credentials
5
5
  credentials_path = Pathname('../../credentials.yml').expand_path(__FILE__)
6
+ @loaded_credentials ||= if credentials_path.readable?
7
+ YAML.load_file(credentials_path) || {}
8
+ else
9
+ {}
10
+ end
6
11
  @credentials ||= Hash.new do |h,k|
7
- pending "Missing key #{k.inspect} from #{credentials_path}"
8
- end.merge!(YAML.load_file(credentials_path) || {})
12
+ h[k] = "MISSING_CREDENTIAL_KEY_#{k}"
13
+ unless ENV['TRAVIS']
14
+ warn "Missing key #{k.inspect} from #{credentials_path}"
15
+ end
16
+ end.merge!(@loaded_credentials)
9
17
  rescue LoadError, SystemCallError, KeyError => e
10
18
  pending e.message
11
19
  end
data/spec/support/vcr.rb CHANGED
@@ -12,7 +12,7 @@ VCR.configure do |c|
12
12
  }
13
13
  c.default_cassette_options = {
14
14
  match_requests_on: [:method, :uri, :headers],
15
- record: :new_episodes
15
+ record: ENV.fetch('VCR_RECORD'){ :new_episodes }.to_sym
16
16
  }
17
17
  end
18
18
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leadlight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-09 00:00:00.000000000Z
12
+ date: 2012-02-05 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: addressable
16
+ requirement: &70280979493900 !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: *70280979493900
14
25
  - !ruby/object:Gem::Dependency
15
26
  name: faraday
16
- requirement: &70279914738300 !ruby/object:Gem::Requirement
27
+ requirement: &70280979493420 !ruby/object:Gem::Requirement
17
28
  none: false
18
29
  requirements:
19
30
  - - ! '>='
@@ -21,10 +32,10 @@ dependencies:
21
32
  version: '0'
22
33
  type: :runtime
23
34
  prerelease: false
24
- version_requirements: *70279914738300
35
+ version_requirements: *70280979493420
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: fattr
27
- requirement: &70279914737840 !ruby/object:Gem::Requirement
38
+ requirement: &70280979493000 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '0'
33
44
  type: :runtime
34
45
  prerelease: false
35
- version_requirements: *70279914737840
46
+ version_requirements: *70280979493000
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: link_header
38
- requirement: &70279914737420 !ruby/object:Gem::Requirement
49
+ requirement: &70280979492560 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: '0'
44
55
  type: :runtime
45
56
  prerelease: false
46
- version_requirements: *70279914737420
57
+ version_requirements: *70280979492560
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: multi_json
49
- requirement: &70279914737000 !ruby/object:Gem::Requirement
60
+ requirement: &70280979492100 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '0'
55
66
  type: :runtime
56
67
  prerelease: false
57
- version_requirements: *70279914737000
68
+ version_requirements: *70280979492100
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: mime-types
60
- requirement: &70279914736540 !ruby/object:Gem::Requirement
71
+ requirement: &70280979491460 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: '0'
66
77
  type: :runtime
67
78
  prerelease: false
68
- version_requirements: *70279914736540
79
+ version_requirements: *70280979491460
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: hookr
71
- requirement: &70279914736100 !ruby/object:Gem::Requirement
82
+ requirement: &70280979490720 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,10 +87,21 @@ dependencies:
76
87
  version: '0'
77
88
  type: :runtime
78
89
  prerelease: false
79
- version_requirements: *70279914736100
90
+ version_requirements: *70280979490720
91
+ - !ruby/object:Gem::Dependency
92
+ name: rake
93
+ requirement: &70280979489560 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70280979489560
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: rspec
82
- requirement: &70279914735580 !ruby/object:Gem::Requirement
104
+ requirement: &70280979488680 !ruby/object:Gem::Requirement
83
105
  none: false
84
106
  requirements:
85
107
  - - ! '>='
@@ -87,10 +109,10 @@ dependencies:
87
109
  version: '0'
88
110
  type: :development
89
111
  prerelease: false
90
- version_requirements: *70279914735580
112
+ version_requirements: *70280979488680
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: vcr
93
- requirement: &70279914735040 !ruby/object:Gem::Requirement
115
+ requirement: &70280979487900 !ruby/object:Gem::Requirement
94
116
  none: false
95
117
  requirements:
96
118
  - - ~>
@@ -98,10 +120,10 @@ dependencies:
98
120
  version: 2.0.0.rc1
99
121
  type: :development
100
122
  prerelease: false
101
- version_requirements: *70279914735040
123
+ version_requirements: *70280979487900
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: guard
104
- requirement: &70279914734400 !ruby/object:Gem::Requirement
126
+ requirement: &70280979487220 !ruby/object:Gem::Requirement
105
127
  none: false
106
128
  requirements:
107
129
  - - ! '>='
@@ -109,10 +131,10 @@ dependencies:
109
131
  version: '0'
110
132
  type: :development
111
133
  prerelease: false
112
- version_requirements: *70279914734400
134
+ version_requirements: *70280979487220
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: guard-rspec
115
- requirement: &70279914733320 !ruby/object:Gem::Requirement
137
+ requirement: &70280979486440 !ruby/object:Gem::Requirement
116
138
  none: false
117
139
  requirements:
118
140
  - - ! '>='
@@ -120,10 +142,10 @@ dependencies:
120
142
  version: '0'
121
143
  type: :development
122
144
  prerelease: false
123
- version_requirements: *70279914733320
145
+ version_requirements: *70280979486440
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: guard-bundler
126
- requirement: &70279914732860 !ruby/object:Gem::Requirement
148
+ requirement: &70280979485820 !ruby/object:Gem::Requirement
127
149
  none: false
128
150
  requirements:
129
151
  - - ! '>='
@@ -131,10 +153,10 @@ dependencies:
131
153
  version: '0'
132
154
  type: :development
133
155
  prerelease: false
134
- version_requirements: *70279914732860
156
+ version_requirements: *70280979485820
135
157
  - !ruby/object:Gem::Dependency
136
158
  name: ruby-debug19
137
- requirement: &70279914732440 !ruby/object:Gem::Requirement
159
+ requirement: &70280979485080 !ruby/object:Gem::Requirement
138
160
  none: false
139
161
  requirements:
140
162
  - - ! '>='
@@ -142,8 +164,8 @@ dependencies:
142
164
  version: '0'
143
165
  type: :development
144
166
  prerelease: false
145
- version_requirements: *70279914732440
146
- description: Long description. Maybe copied from the README.
167
+ version_requirements: *70280979485080
168
+ description: Rose colored stained glass windows for HTTP.
147
169
  email: avdi@avdi.org
148
170
  executables: []
149
171
  extensions: []
@@ -152,27 +174,33 @@ files:
152
174
  - Gemfile
153
175
  - Gemfile.lock
154
176
  - Guardfile
177
+ - README.md
155
178
  - Rakefile
179
+ - default.gems
156
180
  - leadlight.gemspec
157
181
  - lib/leadlight.rb
182
+ - lib/leadlight/basic_converter.rb
158
183
  - lib/leadlight/blank.rb
159
184
  - lib/leadlight/codec.rb
185
+ - lib/leadlight/entity.rb
160
186
  - lib/leadlight/enumerable_representation.rb
161
187
  - lib/leadlight/errors.rb
188
+ - lib/leadlight/header_helpers.rb
162
189
  - lib/leadlight/hyperlinkable.rb
163
190
  - lib/leadlight/link.rb
164
191
  - lib/leadlight/link_template.rb
165
192
  - lib/leadlight/representation.rb
166
193
  - lib/leadlight/request.rb
167
194
  - lib/leadlight/service.rb
195
+ - lib/leadlight/service_class_methods.rb
168
196
  - lib/leadlight/service_middleware.rb
169
197
  - lib/leadlight/tint.rb
170
198
  - lib/leadlight/tint_helper.rb
171
- - lib/leadlight/type.rb
199
+ - lib/leadlight/type_map.rb
172
200
  - spec/cassettes/Leadlight/authorized_GitHub_example/_user/has_the_expected_content.yml
173
201
  - spec/cassettes/Leadlight/authorized_GitHub_example/_user/indicates_the_expected_oath_scopes.yml
174
202
  - 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
203
+ - spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_teams.yml
176
204
  - spec/cassettes/Leadlight/authorized_GitHub_example/test_team/.yml
177
205
  - spec/cassettes/Leadlight/basic_GitHub_example/_root/.yml
178
206
  - spec/cassettes/Leadlight/basic_GitHub_example/_root/__location__/.yml
@@ -197,7 +225,8 @@ files:
197
225
  - spec/leadlight/service_middleware_spec.rb
198
226
  - spec/leadlight/service_spec.rb
199
227
  - spec/leadlight/tint_helper_spec.rb
200
- - spec/leadlight/type_spec.rb
228
+ - spec/leadlight/tint_spec.rb
229
+ - spec/leadlight/type_map_spec.rb
201
230
  - spec/leadlight_spec.rb
202
231
  - spec/spec_helper_lite.rb
203
232
  - spec/support/credentials.rb
@@ -222,8 +251,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
251
  version: '0'
223
252
  requirements: []
224
253
  rubyforge_project: leadlight
225
- rubygems_version: 1.8.10
254
+ rubygems_version: 1.8.15
226
255
  signing_key:
227
256
  specification_version: 2
228
- summary: Short description used in Gem listings.
257
+ summary: Rose colored stained glass windows for HTTP.
229
258
  test_files: []