leadlight 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +9 -0
- data/Gemfile.lock +79 -0
- data/Guardfile +19 -0
- data/Rakefile +133 -0
- data/leadlight.gemspec +125 -0
- data/lib/leadlight.rb +92 -0
- data/lib/leadlight/blank.rb +15 -0
- data/lib/leadlight/codec.rb +63 -0
- data/lib/leadlight/enumerable_representation.rb +24 -0
- data/lib/leadlight/errors.rb +14 -0
- data/lib/leadlight/hyperlinkable.rb +126 -0
- data/lib/leadlight/link.rb +35 -0
- data/lib/leadlight/link_template.rb +47 -0
- data/lib/leadlight/representation.rb +30 -0
- data/lib/leadlight/request.rb +91 -0
- data/lib/leadlight/service.rb +73 -0
- data/lib/leadlight/service_middleware.rb +50 -0
- data/lib/leadlight/tint.rb +26 -0
- data/lib/leadlight/tint_helper.rb +67 -0
- data/lib/leadlight/type.rb +71 -0
- data/spec/cassettes/Leadlight/authorized_GitHub_example/_user/has_the_expected_content.yml +75 -0
- data/spec/cassettes/Leadlight/authorized_GitHub_example/_user/indicates_the_expected_oath_scopes.yml +75 -0
- data/spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_team_members.yml +384 -0
- data/spec/cassettes/Leadlight/authorized_GitHub_example/adding_and_removing_team_members/.yml +309 -0
- data/spec/cassettes/Leadlight/authorized_GitHub_example/test_team/.yml +159 -0
- data/spec/cassettes/Leadlight/basic_GitHub_example/_root/.yml +32 -0
- data/spec/cassettes/Leadlight/basic_GitHub_example/_root/__location__/.yml +32 -0
- data/spec/cassettes/Leadlight/basic_GitHub_example/_root/should_be_a_204_no_content.yml +32 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/.yml +32 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/__location__/.yml +32 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/_root/should_be_a_204_no_content.yml +32 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/_user/has_the_expected_content.yml +65 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/.yml +100 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_able_to_follow_next_link.yml +135 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable.yml +275 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_be_enumerable_over_page_boundaries.yml +170 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_followers/should_have_next_and_last_links.yml +100 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_link/exists.yml +32 -0
- data/spec/cassettes/Leadlight/tinted_GitHub_example/user_link/links_to_the_expected_URL.yml +32 -0
- data/spec/leadlight/codec_spec.rb +93 -0
- data/spec/leadlight/hyperlinkable_spec.rb +136 -0
- data/spec/leadlight/link_spec.rb +53 -0
- data/spec/leadlight/link_template_spec.rb +45 -0
- data/spec/leadlight/representation_spec.rb +62 -0
- data/spec/leadlight/request_spec.rb +236 -0
- data/spec/leadlight/service_middleware_spec.rb +81 -0
- data/spec/leadlight/service_spec.rb +127 -0
- data/spec/leadlight/tint_helper_spec.rb +132 -0
- data/spec/leadlight/type_spec.rb +137 -0
- data/spec/leadlight_spec.rb +237 -0
- data/spec/spec_helper_lite.rb +6 -0
- data/spec/support/credentials.rb +16 -0
- data/spec/support/vcr.rb +18 -0
- 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,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
|
data/spec/support/vcr.rb
ADDED
@@ -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: []
|