ey_services_api 0.0.5 → 0.1.0
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.
- data/CHANGELOG +5 -0
- data/{InternalGemfile → EYIntegratedGemfile} +5 -5
- data/EYIntegratedGemfile.lock +192 -0
- data/Gemfile +2 -1
- data/README.md +2 -2
- data/Rakefile +1 -1
- data/lib/ey_services_api.rb +10 -7
- data/lib/ey_services_api/provisioned_service_creation.rb +0 -11
- data/lib/ey_services_api/provisioned_service_response.rb +1 -1
- data/lib/ey_services_api/service_account_creation.rb +0 -6
- data/lib/ey_services_api/service_account_response.rb +1 -1
- data/lib/ey_services_api/version.rb +1 -1
- data/spec/provisioned_service_creation_spec.rb +18 -28
- data/spec/service_account_creation_spec.rb +20 -39
- data/spec/service_spec.rb +2 -16
- data/spec/spec_helper.rb +7 -3
- metadata +51 -79
- data/lib/ey_services_api/test/tresfiestas_fake.rb +0 -288
data/CHANGELOG
ADDED
@@ -4,17 +4,17 @@ source "http://rubygems.org"
|
|
4
4
|
gemspec
|
5
5
|
|
6
6
|
group :test, :development do
|
7
|
+
gem 'ey_services_fake'
|
7
8
|
gem 'rake'
|
9
|
+
|
8
10
|
gem 'ey_sso', :git => "git@github.com:engineyard/ey_sso.git"
|
9
11
|
|
10
12
|
# gem 'tresfiestas', :git => "git@github.com:engineyard/tresfiestas.git"
|
11
13
|
gem 'tresfiestas', :path => "../tresfiestas"
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
gem 'ey_services_api', :path => "../ey_services_api"
|
15
|
+
gem 'fake_awsm', :path => "../tresfiestas/spike/fake_awsm"
|
16
|
+
#TODO: this should just be a dep of fakeawsm
|
17
|
+
gem 'ey_services_api_internal', :path => "../ey_services_api_internal"
|
17
18
|
|
18
|
-
gem 'sinatra'
|
19
19
|
gem 'guard-rspec'
|
20
20
|
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git@github.com:engineyard/ey_sso.git
|
3
|
+
revision: ff38d25dd74174d284f469058d63918877304b5d
|
4
|
+
specs:
|
5
|
+
ey_sso (0.9.17.pre)
|
6
|
+
ZenTest (~> 4.5.0)
|
7
|
+
addressable (~> 2.2.2)
|
8
|
+
artifice (~> 0.6)
|
9
|
+
halorgium-auth-hmac (~> 1.1.0)
|
10
|
+
json (~> 1.1)
|
11
|
+
mechanize (~> 0.9.3)
|
12
|
+
rack (~> 1.1)
|
13
|
+
randexp (~> 0.1.4)
|
14
|
+
rest-client (~> 1.6.0)
|
15
|
+
ruby-openid (~> 2.1.7)
|
16
|
+
sinatra (~> 1.0)
|
17
|
+
uuid (~> 2.3.1)
|
18
|
+
|
19
|
+
PATH
|
20
|
+
remote: ../ey_services_api
|
21
|
+
specs:
|
22
|
+
ey_services_api (0.0.5)
|
23
|
+
ey_api_hmac
|
24
|
+
json
|
25
|
+
|
26
|
+
PATH
|
27
|
+
remote: ../ey_services_api_internal
|
28
|
+
specs:
|
29
|
+
ey_services_api_internal (0.0.4.pre)
|
30
|
+
ey_api_hmac
|
31
|
+
|
32
|
+
PATH
|
33
|
+
remote: ../tresfiestas
|
34
|
+
specs:
|
35
|
+
tresfiestas (0.1.TODO)
|
36
|
+
RedCloth
|
37
|
+
airbrake
|
38
|
+
ey_api_hmac
|
39
|
+
ey_sso
|
40
|
+
haml
|
41
|
+
rails (= 3.0.9)
|
42
|
+
sqlite3
|
43
|
+
|
44
|
+
PATH
|
45
|
+
remote: ../tresfiestas/spike/fake_awsm
|
46
|
+
specs:
|
47
|
+
fake_awsm (0.1.TODO)
|
48
|
+
activerecord (= 3.0.9)
|
49
|
+
ey_sso
|
50
|
+
haml
|
51
|
+
sinatra
|
52
|
+
sqlite3
|
53
|
+
|
54
|
+
GEM
|
55
|
+
remote: http://rubygems.org/
|
56
|
+
specs:
|
57
|
+
ParseTree (3.0.8)
|
58
|
+
RubyInline (>= 3.7.0)
|
59
|
+
sexp_processor (>= 3.0.0)
|
60
|
+
RedCloth (4.2.8)
|
61
|
+
RubyInline (3.11.0)
|
62
|
+
ZenTest (~> 4.3)
|
63
|
+
ZenTest (4.5.0)
|
64
|
+
abstract (1.0.0)
|
65
|
+
actionmailer (3.0.9)
|
66
|
+
actionpack (= 3.0.9)
|
67
|
+
mail (~> 2.2.19)
|
68
|
+
actionpack (3.0.9)
|
69
|
+
activemodel (= 3.0.9)
|
70
|
+
activesupport (= 3.0.9)
|
71
|
+
builder (~> 2.1.2)
|
72
|
+
erubis (~> 2.6.6)
|
73
|
+
i18n (~> 0.5.0)
|
74
|
+
rack (~> 1.2.1)
|
75
|
+
rack-mount (~> 0.6.14)
|
76
|
+
rack-test (~> 0.5.7)
|
77
|
+
tzinfo (~> 0.3.23)
|
78
|
+
activemodel (3.0.9)
|
79
|
+
activesupport (= 3.0.9)
|
80
|
+
builder (~> 2.1.2)
|
81
|
+
i18n (~> 0.5.0)
|
82
|
+
activerecord (3.0.9)
|
83
|
+
activemodel (= 3.0.9)
|
84
|
+
activesupport (= 3.0.9)
|
85
|
+
arel (~> 2.0.10)
|
86
|
+
tzinfo (~> 0.3.23)
|
87
|
+
activeresource (3.0.9)
|
88
|
+
activemodel (= 3.0.9)
|
89
|
+
activesupport (= 3.0.9)
|
90
|
+
activesupport (3.0.9)
|
91
|
+
addressable (2.2.6)
|
92
|
+
airbrake (3.0.4)
|
93
|
+
activesupport
|
94
|
+
builder
|
95
|
+
arel (2.0.10)
|
96
|
+
artifice (0.6)
|
97
|
+
rack-test
|
98
|
+
builder (2.1.2)
|
99
|
+
cubbyhole (0.2.0)
|
100
|
+
diff-lcs (1.1.3)
|
101
|
+
erubis (2.6.6)
|
102
|
+
abstract (>= 1.0.0)
|
103
|
+
ey_api_hmac (0.0.15)
|
104
|
+
json
|
105
|
+
rack-client
|
106
|
+
ey_services_fake (0.0.1)
|
107
|
+
cubbyhole (>= 0.2.0)
|
108
|
+
sinatra
|
109
|
+
guard (0.8.4)
|
110
|
+
thor (~> 0.14.6)
|
111
|
+
guard-rspec (0.4.5)
|
112
|
+
guard (>= 0.4.0)
|
113
|
+
halorgium-auth-hmac (1.1.1.2010100601)
|
114
|
+
haml (3.1.3)
|
115
|
+
i18n (0.5.0)
|
116
|
+
json (1.6.1)
|
117
|
+
macaddr (1.4.0)
|
118
|
+
systemu (~> 2.2.0)
|
119
|
+
mail (2.2.19)
|
120
|
+
activesupport (>= 2.3.6)
|
121
|
+
i18n (>= 0.4.0)
|
122
|
+
mime-types (~> 1.16)
|
123
|
+
treetop (~> 1.4.8)
|
124
|
+
mechanize (0.9.3)
|
125
|
+
nokogiri (>= 1.2.1)
|
126
|
+
mime-types (1.16)
|
127
|
+
nokogiri (1.5.0)
|
128
|
+
polyglot (0.3.2)
|
129
|
+
rack (1.2.4)
|
130
|
+
rack-client (0.4.0)
|
131
|
+
rack (>= 1.0.0)
|
132
|
+
rack-mount (0.6.14)
|
133
|
+
rack (>= 1.0.0)
|
134
|
+
rack-test (0.5.7)
|
135
|
+
rack (>= 1.0)
|
136
|
+
rails (3.0.9)
|
137
|
+
actionmailer (= 3.0.9)
|
138
|
+
actionpack (= 3.0.9)
|
139
|
+
activerecord (= 3.0.9)
|
140
|
+
activeresource (= 3.0.9)
|
141
|
+
activesupport (= 3.0.9)
|
142
|
+
bundler (~> 1.0)
|
143
|
+
railties (= 3.0.9)
|
144
|
+
railties (3.0.9)
|
145
|
+
actionpack (= 3.0.9)
|
146
|
+
activesupport (= 3.0.9)
|
147
|
+
rake (>= 0.8.7)
|
148
|
+
rdoc (~> 3.4)
|
149
|
+
thor (~> 0.14.4)
|
150
|
+
rake (0.9.2)
|
151
|
+
randexp (0.1.5)
|
152
|
+
ParseTree
|
153
|
+
rdoc (3.9.4)
|
154
|
+
rest-client (1.6.7)
|
155
|
+
mime-types (>= 1.16)
|
156
|
+
rspec (2.6.0)
|
157
|
+
rspec-core (~> 2.6.0)
|
158
|
+
rspec-expectations (~> 2.6.0)
|
159
|
+
rspec-mocks (~> 2.6.0)
|
160
|
+
rspec-core (2.6.4)
|
161
|
+
rspec-expectations (2.6.0)
|
162
|
+
diff-lcs (~> 1.1.2)
|
163
|
+
rspec-mocks (2.6.0)
|
164
|
+
ruby-openid (2.1.8)
|
165
|
+
sexp_processor (3.0.7)
|
166
|
+
sinatra (1.2.7)
|
167
|
+
rack (~> 1.1)
|
168
|
+
tilt (< 2.0, >= 1.2.2)
|
169
|
+
sqlite3 (1.3.4)
|
170
|
+
systemu (2.2.0)
|
171
|
+
thor (0.14.6)
|
172
|
+
tilt (1.3.3)
|
173
|
+
treetop (1.4.10)
|
174
|
+
polyglot
|
175
|
+
polyglot (>= 0.3.1)
|
176
|
+
tzinfo (0.3.30)
|
177
|
+
uuid (2.3.4)
|
178
|
+
macaddr (~> 1.0)
|
179
|
+
|
180
|
+
PLATFORMS
|
181
|
+
ruby
|
182
|
+
|
183
|
+
DEPENDENCIES
|
184
|
+
ey_services_api!
|
185
|
+
ey_services_api_internal!
|
186
|
+
ey_services_fake
|
187
|
+
ey_sso!
|
188
|
+
fake_awsm!
|
189
|
+
guard-rspec
|
190
|
+
rake
|
191
|
+
rspec
|
192
|
+
tresfiestas!
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -31,5 +31,5 @@ To run specs mocked:
|
|
31
31
|
To run against tresfiestas codebase: (internal only)
|
32
32
|
|
33
33
|
* rvm use 1.9.2
|
34
|
-
* BUNDLE_GEMFILE=
|
35
|
-
* BUNDLE_GEMFILE=
|
34
|
+
* BUNDLE_GEMFILE=EYIntegratedGemfile bundle
|
35
|
+
* BUNDLE_GEMFILE=EYIntegratedGemfile bundle exec rake
|
data/Rakefile
CHANGED
data/lib/ey_services_api.rb
CHANGED
@@ -16,20 +16,23 @@ module EY
|
|
16
16
|
@connection = Connection.new(opts[:auth_id], opts[:auth_key])
|
17
17
|
end
|
18
18
|
|
19
|
+
def self.setup?
|
20
|
+
@connection
|
21
|
+
end
|
22
|
+
|
19
23
|
def self.connection
|
20
24
|
@connection or raise "Not setup!"
|
21
25
|
end
|
22
26
|
|
23
|
-
def self.enable_mock!(
|
27
|
+
def self.enable_mock!(service_provider, tresfiestas = nil, awsm = nil)
|
24
28
|
unless @mock_backend
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
29
|
+
require "ey_services_fake/mock_backend"
|
30
|
+
@mock_backend = EyServicesFake::MockBackend.setup!(
|
31
|
+
:awsm => awsm,
|
32
|
+
:tresfiestas => tresfiestas,
|
33
|
+
:service_provider => service_provider)
|
30
34
|
end
|
31
35
|
@mock_backend.reset!
|
32
|
-
@mock_backend.initialize_api_connection
|
33
36
|
end
|
34
37
|
|
35
38
|
def self.mock_backend
|
@@ -19,17 +19,6 @@ module EY
|
|
19
19
|
class Environment < APIStruct.new(:id, :name, :framework_env)
|
20
20
|
end
|
21
21
|
|
22
|
-
# def environment
|
23
|
-
# debugger
|
24
|
-
# Environment.new(@environment)
|
25
|
-
# end
|
26
|
-
|
27
|
-
def creation_response_hash
|
28
|
-
response_presenter = ProvisionedServiceResponse.new
|
29
|
-
yield response_presenter
|
30
|
-
response_presenter.to_hash
|
31
|
-
end
|
32
|
-
|
33
22
|
end
|
34
23
|
end
|
35
24
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module EY
|
2
2
|
module ServicesAPI
|
3
|
-
class ProvisionedServiceResponse <
|
3
|
+
class ProvisionedServiceResponse < APIStruct.new(:configuration_required, :configuration_url, :message, :vars, :url)
|
4
4
|
def to_hash
|
5
5
|
{
|
6
6
|
:provisioned_service => {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module EY
|
2
2
|
module ServicesAPI
|
3
|
-
class ServiceAccountResponse <
|
3
|
+
class ServiceAccountResponse < APIStruct.new(:configuration_required, :configuration_url, :message, :provisioned_services_url, :url)
|
4
4
|
def to_hash
|
5
5
|
{
|
6
6
|
:service_account => {
|
@@ -2,39 +2,29 @@ require 'spec_helper'
|
|
2
2
|
require 'sinatra'
|
3
3
|
|
4
4
|
describe EY::ServicesAPI::ProvisionedServiceCreation do
|
5
|
-
|
5
|
+
|
6
|
+
describe "with a service account created" do
|
6
7
|
before do
|
7
|
-
@service_account_hash = @tresfiestas.service_account
|
8
|
-
@creation_request = @tresfiestas.provisioned_service_creation_request(@service_account_hash)
|
9
|
-
@provisioned_service = EY::ServicesAPI::ProvisionedServiceCreation.from_request(@creation_request.to_json)
|
8
|
+
@service_account_hash = @tresfiestas.service_account[:pushed_service_account]
|
10
9
|
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@provisioned_service.environment.name.should eq @creation_request[:environment][:name]
|
17
|
-
@provisioned_service.environment.framework_env.should eq @creation_request[:environment][:framework_env]
|
18
|
-
@provisioned_service.app.id.should eq @creation_request[:app][:id]
|
19
|
-
@provisioned_service.app.name.should eq @creation_request[:app][:name]
|
20
|
-
end
|
11
|
+
describe "with a provisioned service" do
|
12
|
+
before do
|
13
|
+
@pushed_provisioned_service = @tresfiestas.provisioned_service[:pushed_provisioned_service]
|
14
|
+
end
|
21
15
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
16
|
+
it "should have been provisioned correctly" do
|
17
|
+
standard_response_params = @tresfiestas.actor(:service_provider).service_provisioned_params
|
18
|
+
@pushed_provisioned_service[:configuration_required].should eq standard_response_params[:configuration_required]
|
19
|
+
@pushed_provisioned_service[:configuration_url].should eq standard_response_params[:configuration_url]
|
20
|
+
@pushed_provisioned_service[:provisioned_services_url].should eq standard_response_params[:provisioned_services_url]
|
21
|
+
@pushed_provisioned_service[:url].should eq standard_response_params[:url]
|
22
|
+
status_message = @tresfiestas.latest_status_message
|
23
|
+
status_message.should_not be_nil
|
24
|
+
status_message[:subject].should eq "some provisioned service messages"
|
30
25
|
end
|
31
|
-
|
32
|
-
|
33
|
-
provisioned_service_response[:configuration_required].should be true
|
34
|
-
provisioned_service_response[:configuration_url].should eq "some config url"
|
35
|
-
provisioned_service_response[:vars].should eq({"SOME_ENV_VAR" => "value", "OTHER_VAR" => "blah"})
|
36
|
-
provisioned_service_response[:url].should eq "some resource url"
|
37
|
-
response_hash[:message].should eq({:message_type => 'status', :subject => "some messages", :body => nil})
|
26
|
+
|
27
|
+
#Note: updating a provisioned service is not possible!
|
38
28
|
end
|
39
29
|
end
|
40
30
|
|
@@ -2,55 +2,36 @@ require 'spec_helper'
|
|
2
2
|
require 'sinatra'
|
3
3
|
|
4
4
|
describe EY::ServicesAPI::ServiceAccountCreation do
|
5
|
-
|
5
|
+
|
6
|
+
describe "with a service account created" do
|
6
7
|
before do
|
7
|
-
@service_account_hash = @tresfiestas.service_account
|
8
|
-
@creation_request = @tresfiestas.service_account_creation_request(@service_account_hash)
|
9
|
-
@service_account = EY::ServicesAPI::ServiceAccountCreation.from_request(@creation_request.to_json)
|
8
|
+
@service_account_hash = @tresfiestas.service_account[:pushed_service_account]
|
10
9
|
end
|
11
10
|
|
12
|
-
it "
|
13
|
-
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@
|
11
|
+
it "got the right attributes" do
|
12
|
+
standard_response_params = @tresfiestas.actor(:service_provider).service_account_creation_params
|
13
|
+
@service_account_hash[:configuration_required].should eq standard_response_params[:configuration_required]
|
14
|
+
@service_account_hash[:configuration_url].should eq standard_response_params[:configuration_url]
|
15
|
+
@service_account_hash[:provisioned_services_url].should eq standard_response_params[:provisioned_services_url]
|
16
|
+
@service_account_hash[:url].should eq standard_response_params[:url]
|
17
|
+
status_message = @tresfiestas.latest_status_message
|
18
|
+
status_message.should_not be_nil
|
19
|
+
status_message[:subject].should eq "some messages"
|
17
20
|
end
|
18
21
|
|
19
|
-
describe "
|
22
|
+
describe "updating a service account" do
|
20
23
|
before do
|
21
|
-
@
|
24
|
+
@connection = EY::ServicesAPI.connection
|
25
|
+
service_account = @tresfiestas.service_account
|
26
|
+
@connection.update_service_account(service_account[:url], {:configuration_required => true, :configuration_url => "a different url"})
|
22
27
|
end
|
23
28
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
it "should work" do
|
31
|
-
pushed_service = @tresfiestas.pushed_service_account
|
32
|
-
pushed_service[:configuration_url].should eq "a different url"
|
33
|
-
pushed_service[:configuration_required].should eq true
|
34
|
-
end
|
29
|
+
it "works" do
|
30
|
+
pushed_service = @tresfiestas.service_account[:pushed_service_account]
|
31
|
+
pushed_service[:configuration_url].should eq "a different url"
|
32
|
+
pushed_service[:configuration_required].should eq true
|
35
33
|
end
|
36
34
|
end
|
37
35
|
|
38
|
-
it "can produce a response body hash for service account creation requests" do
|
39
|
-
response_hash = @service_account.creation_response_hash do |presenter|
|
40
|
-
presenter.provisioned_services_url = "some provision url"
|
41
|
-
presenter.url = "some resource url"
|
42
|
-
presenter.configuration_required = true
|
43
|
-
presenter.configuration_url = "some config url" #doesn't even have to be valid here!
|
44
|
-
presenter.message = EY::ServicesAPI::Message.new(:message_type => "status", :subject => "some messages")
|
45
|
-
end
|
46
|
-
|
47
|
-
service_account_response = response_hash[:service_account]
|
48
|
-
service_account_response[:configuration_required].should be true
|
49
|
-
service_account_response[:configuration_url].should eq "some config url"
|
50
|
-
service_account_response[:provisioned_services_url].should eq "some provision url"
|
51
|
-
service_account_response[:url].should eq "some resource url"
|
52
|
-
response_hash[:message].should eq({:message_type => 'status', :subject => "some messages", :body => nil})
|
53
|
-
end
|
54
36
|
end
|
55
|
-
|
56
37
|
end
|
data/spec/service_spec.rb
CHANGED
@@ -2,20 +2,6 @@ require 'spec_helper'
|
|
2
2
|
require 'sinatra'
|
3
3
|
|
4
4
|
describe EY::ServicesAPI::Service do
|
5
|
-
before do
|
6
|
-
@valid_params = @tresfiestas.service_registration_params
|
7
|
-
@service = EY::ServicesAPI::Service.new(@valid_params)
|
8
|
-
end
|
9
|
-
|
10
|
-
it "can be initialized with a hash" do
|
11
|
-
@service.should be_a EY::ServicesAPI::Service
|
12
|
-
@service.name.should eq @valid_params[:name]
|
13
|
-
@service.description.should eq @valid_params[:description]
|
14
|
-
@service.service_accounts_url.should eq @valid_params[:service_accounts_url]
|
15
|
-
@service.home_url.should eq @valid_params[:home_url]
|
16
|
-
@service.terms_and_conditions_url.should eq @valid_params[:terms_and_conditions_url]
|
17
|
-
@service.vars.should eq @valid_params[:vars]
|
18
|
-
end
|
19
5
|
|
20
6
|
describe "#register_service" do
|
21
7
|
|
@@ -23,7 +9,7 @@ describe EY::ServicesAPI::Service do
|
|
23
9
|
before do
|
24
10
|
partner = @tresfiestas.partner
|
25
11
|
@registration_url = partner[:registration_url]
|
26
|
-
@registration_params = @tresfiestas.
|
12
|
+
@registration_params = @tresfiestas.actor(:service_provider).registration_params
|
27
13
|
@connection = EY::ServicesAPI.connection
|
28
14
|
end
|
29
15
|
|
@@ -51,7 +37,7 @@ describe EY::ServicesAPI::Service do
|
|
51
37
|
|
52
38
|
it "can list services" do
|
53
39
|
services = @connection.list_services(@registration_url)
|
54
|
-
services.
|
40
|
+
services.index(@service).should_not be_nil
|
55
41
|
end
|
56
42
|
|
57
43
|
it "can fetch your service" do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
require 'ey_services_api'
|
2
2
|
require 'rspec'
|
3
|
+
require 'sinatra/base'
|
3
4
|
|
4
5
|
RSpec.configure do |config|
|
5
6
|
config.before(:each) do
|
6
|
-
if ENV["BUNDLE_GEMFILE"] == "
|
7
|
+
if ENV["BUNDLE_GEMFILE"] == "EYIntegratedGemfile"
|
8
|
+
require 'ey_services_fake/mocking_bird_service'
|
7
9
|
require 'tresfiestas/gem_integration_test'
|
8
|
-
|
10
|
+
require 'fake_awsm/test_helper'
|
11
|
+
EY::ServicesAPI.enable_mock!(EyServicesFake::MockingBirdService.new, Tresfiestas::GemIntegrationTest.new, FakeAWSM::TestHelper.new)
|
9
12
|
else
|
10
|
-
|
13
|
+
require 'ey_services_fake/mocking_bird_service'
|
14
|
+
EY::ServicesAPI.enable_mock!(EyServicesFake::MockingBirdService.new)
|
11
15
|
end
|
12
16
|
@tresfiestas = EY::ServicesAPI.mock_backend
|
13
17
|
end
|
metadata
CHANGED
@@ -1,80 +1,63 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ey_services_api
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 5
|
10
|
-
version: 0.0.5
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
13
|
-
-
|
7
|
+
authors:
|
8
|
+
- Jacob Burkhart & Thorben Schröder & David Calavera & Michael Brodhead & Others
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-10-06 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rspec
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &2154007720 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
33
22
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: json
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *2154007720
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: json
|
27
|
+
requirement: &2156101880 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 0
|
46
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
47
33
|
type: :runtime
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: ey_api_hmac
|
51
34
|
prerelease: false
|
52
|
-
|
35
|
+
version_requirements: *2156101880
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: ey_api_hmac
|
38
|
+
requirement: &2156101460 !ruby/object:Gem::Requirement
|
53
39
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
segments:
|
59
|
-
- 0
|
60
|
-
version: "0"
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
61
44
|
type: :runtime
|
62
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2156101460
|
63
47
|
description: API for Partner Services (talks to services.engineyard.com)
|
64
|
-
email:
|
48
|
+
email:
|
65
49
|
- jacob@engineyard.com
|
66
50
|
executables: []
|
67
|
-
|
68
51
|
extensions: []
|
69
|
-
|
70
52
|
extra_rdoc_files: []
|
71
|
-
|
72
|
-
files:
|
53
|
+
files:
|
73
54
|
- .gitignore
|
74
55
|
- .rspec
|
56
|
+
- CHANGELOG
|
57
|
+
- EYIntegratedGemfile
|
58
|
+
- EYIntegratedGemfile.lock
|
75
59
|
- Gemfile
|
76
60
|
- Guardfile
|
77
|
-
- InternalGemfile
|
78
61
|
- README.md
|
79
62
|
- Rakefile
|
80
63
|
- ey_services_api.gemspec
|
@@ -88,7 +71,6 @@ files:
|
|
88
71
|
- lib/ey_services_api/service.rb
|
89
72
|
- lib/ey_services_api/service_account_creation.rb
|
90
73
|
- lib/ey_services_api/service_account_response.rb
|
91
|
-
- lib/ey_services_api/test/tresfiestas_fake.rb
|
92
74
|
- lib/ey_services_api/version.rb
|
93
75
|
- spec/invoice_spec.rb
|
94
76
|
- spec/message_spec.rb
|
@@ -96,41 +78,31 @@ files:
|
|
96
78
|
- spec/service_account_creation_spec.rb
|
97
79
|
- spec/service_spec.rb
|
98
80
|
- spec/spec_helper.rb
|
99
|
-
|
100
|
-
homepage: ""
|
81
|
+
homepage: ''
|
101
82
|
licenses: []
|
102
|
-
|
103
83
|
post_install_message:
|
104
84
|
rdoc_options: []
|
105
|
-
|
106
|
-
require_paths:
|
85
|
+
require_paths:
|
107
86
|
- lib
|
108
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
88
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
|
114
|
-
|
115
|
-
- 0
|
116
|
-
version: "0"
|
117
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
94
|
none: false
|
119
|
-
requirements:
|
120
|
-
- -
|
121
|
-
- !ruby/object:Gem::Version
|
122
|
-
|
123
|
-
segments:
|
124
|
-
- 0
|
125
|
-
version: "0"
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
126
99
|
requirements: []
|
127
|
-
|
128
100
|
rubyforge_project: ey_services_api
|
129
|
-
rubygems_version: 1.
|
101
|
+
rubygems_version: 1.8.10
|
130
102
|
signing_key:
|
131
103
|
specification_version: 3
|
132
104
|
summary: API for Partner Services (talks to services.engineyard.com)
|
133
|
-
test_files:
|
105
|
+
test_files:
|
134
106
|
- spec/invoice_spec.rb
|
135
107
|
- spec/message_spec.rb
|
136
108
|
- spec/provisioned_service_creation_spec.rb
|
@@ -1,288 +0,0 @@
|
|
1
|
-
class TresfiestasFake
|
2
|
-
BASE_URL = "http://mockservice.test"
|
3
|
-
|
4
|
-
def self.setup!
|
5
|
-
@mock_helper = MockHelper.new
|
6
|
-
end
|
7
|
-
def self.reset!
|
8
|
-
@services = {}
|
9
|
-
@invoices = []
|
10
|
-
@status_messages = []
|
11
|
-
@service_accounts = {}
|
12
|
-
end
|
13
|
-
def self.services
|
14
|
-
@services ||= {}
|
15
|
-
end
|
16
|
-
def self.invoices
|
17
|
-
@invoices ||= []
|
18
|
-
end
|
19
|
-
def self.service_accounts
|
20
|
-
@service_accounts ||= {}
|
21
|
-
end
|
22
|
-
def self.status_messages
|
23
|
-
@status_messages ||= []
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.mock_helper
|
27
|
-
MockHelper.new
|
28
|
-
end
|
29
|
-
|
30
|
-
class MockHelper
|
31
|
-
def reset!
|
32
|
-
TresfiestasFake.reset!
|
33
|
-
end
|
34
|
-
def initialize_api_connection
|
35
|
-
EY::ServicesAPI.setup!(:auth_id => "123", :auth_key => "456")
|
36
|
-
EY::ServicesAPI.connection.backend = TresfiestasFake::RackApp
|
37
|
-
end
|
38
|
-
|
39
|
-
def partner
|
40
|
-
{
|
41
|
-
:registration_url => "#{BASE_URL}/api/1/register_a_new_service",
|
42
|
-
:auth_id => "123",
|
43
|
-
:auth_key => "456",
|
44
|
-
}
|
45
|
-
end
|
46
|
-
|
47
|
-
#TODO: make an equivalent in tresfiestas!
|
48
|
-
def connection_to_partner
|
49
|
-
@connection_to_partner ||= EY::ApiHMAC::BaseConnection.new(partner[:auth_id], partner[:auth_key])
|
50
|
-
end
|
51
|
-
|
52
|
-
def service_registration_params
|
53
|
-
{
|
54
|
-
:name => "Mocking Bird",
|
55
|
-
:description => "a mock service",
|
56
|
-
:service_accounts_url => "#{BASE_URL}/api/1/customers/regular",
|
57
|
-
:home_url => "#{BASE_URL}/",
|
58
|
-
:terms_and_conditions_url => "#{BASE_URL}/terms",
|
59
|
-
:vars => [
|
60
|
-
"MOCK_API_KEY"
|
61
|
-
]
|
62
|
-
}
|
63
|
-
end
|
64
|
-
|
65
|
-
def service_account
|
66
|
-
{:invoices_url => "#{BASE_URL}/api/1/invoices/12",
|
67
|
-
:messages_url => "#{BASE_URL}/api/1/messages/12",
|
68
|
-
:url => "#{BASE_URL}/api/1/serviceaccounts/12",
|
69
|
-
:id => 12}
|
70
|
-
end
|
71
|
-
|
72
|
-
def pushed_service_account
|
73
|
-
pushed = TresfiestasFake.service_accounts[12] || {}
|
74
|
-
service_account.merge({
|
75
|
-
:provisioned_services_url => pushed['provisioned_services_url'],
|
76
|
-
:configuration_url => pushed['configuration_url'],
|
77
|
-
:url => pushed['url'],
|
78
|
-
:configuration_required => pushed['configuration_required'],
|
79
|
-
})
|
80
|
-
end
|
81
|
-
|
82
|
-
#TODO: test this!, put in tresfiestas too!
|
83
|
-
def create_service_account
|
84
|
-
service = TresfiestasFake.services.values.first
|
85
|
-
service_accounts_url = service['service_accounts_url']
|
86
|
-
post_params = {
|
87
|
-
:name => "my-account",
|
88
|
-
# :url => "TODO url",
|
89
|
-
:messages_url => "#{BASE_URL}/api/1/messages/???service_account_id???",
|
90
|
-
:invoices_url => "#{BASE_URL}/api/1/invoices/???service_account_id???",
|
91
|
-
}
|
92
|
-
connection_to_partner.post(service_accounts_url, post_params) do |json_body, location|
|
93
|
-
service["service_accounts"] ||= {}
|
94
|
-
service["service_accounts"][location] = json_body
|
95
|
-
end
|
96
|
-
end
|
97
|
-
#TODO: test this!, put in tresfiestas too!
|
98
|
-
def destroy_service_account
|
99
|
-
service = TresfiestasFake.services.values.first
|
100
|
-
service_account_url = service["service_accounts"].keys.first
|
101
|
-
connection_to_partner.delete(service_account_url)
|
102
|
-
end
|
103
|
-
#TODO: test this!, put in tresfiestas too!
|
104
|
-
def create_provisioned_service
|
105
|
-
service = TresfiestasFake.services.values.first
|
106
|
-
service_account = service["service_accounts"].values.first["service_account"]
|
107
|
-
provisioned_services_url = service_account["provisioned_services_url"]
|
108
|
-
post_params = {
|
109
|
-
# :url => "TODO: url",
|
110
|
-
:messages_url => "#{BASE_URL}/api/1/provisioned_service_messages/???provisioned_service_id???",
|
111
|
-
:environment => {:id => 5, :name => 'myenv'},
|
112
|
-
:app => {:id => 6, :name => "myapp"},
|
113
|
-
}
|
114
|
-
connection_to_partner.post(provisioned_services_url, post_params) do |json_body, location|
|
115
|
-
service_account["provisioned_services"] ||= {}
|
116
|
-
service_account["provisioned_services"][location] = json_body
|
117
|
-
end
|
118
|
-
end
|
119
|
-
#TODO: test this!, put in tresfiestas too!
|
120
|
-
def destroy_provisioned_service
|
121
|
-
service = TresfiestasFake.services.values.first
|
122
|
-
service_account = service["service_accounts"].values.first["service_account"]
|
123
|
-
provisioned_service_url = service_account["provisioned_services"].keys.first
|
124
|
-
connection_to_partner.delete(provisioned_service_url)
|
125
|
-
end
|
126
|
-
#TODO: tests this, put in tresfiestas too???!
|
127
|
-
def created_provisioned_service
|
128
|
-
service = TresfiestasFake.services.values.first
|
129
|
-
service_account = service["service_accounts"].values.first["service_account"]
|
130
|
-
service_account["provisioned_services"].values.first["provisioned_service"]
|
131
|
-
end
|
132
|
-
|
133
|
-
def service_account_creation_request(service_account_hash)
|
134
|
-
{
|
135
|
-
:url => service_account_hash[:url],
|
136
|
-
:name => service_account_hash[:name],
|
137
|
-
:messages_url => service_account_hash[:messages_url],
|
138
|
-
:invoices_url => service_account_hash[:invoices_url]
|
139
|
-
}
|
140
|
-
end
|
141
|
-
|
142
|
-
def provisioned_service_creation_request(service_account_hash)
|
143
|
-
{:environment => {}, :app => {}}
|
144
|
-
end
|
145
|
-
|
146
|
-
def latest_invoice
|
147
|
-
invoice = TresfiestasFake.invoices.last
|
148
|
-
{
|
149
|
-
:total_amount_cents => invoice['total_amount_cents'],
|
150
|
-
:line_item_description => invoice['line_item_description'],
|
151
|
-
:service_account_id => invoice['service_account_id'],
|
152
|
-
}
|
153
|
-
end
|
154
|
-
|
155
|
-
def latest_status_message
|
156
|
-
message = TresfiestasFake.status_messages.last
|
157
|
-
to_return = {
|
158
|
-
:subject => message["subject"],
|
159
|
-
:body => message["body"],
|
160
|
-
}
|
161
|
-
if message['provisioned_service_id']
|
162
|
-
to_return.merge!(:provisioned_service_id => message['provisioned_service_id'])
|
163
|
-
end
|
164
|
-
to_return
|
165
|
-
end
|
166
|
-
|
167
|
-
def provisioned_service
|
168
|
-
{:messages_url => "#{BASE_URL}/api/1/provisioned_service_messages/64",
|
169
|
-
:id => 64}
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
class RackApp < Sinatra::Base
|
174
|
-
enable :raise_errors
|
175
|
-
disable :dump_errors
|
176
|
-
disable :show_exceptions
|
177
|
-
|
178
|
-
get '/api/1/register_a_new_service' do
|
179
|
-
to_return = []
|
180
|
-
TresfiestasFake.services.each do |k, v|
|
181
|
-
to_return << {"service" => v.merge('url' => "#{BASE_URL}/api/1/services/#{k}") }
|
182
|
-
end
|
183
|
-
to_return.to_json
|
184
|
-
end
|
185
|
-
|
186
|
-
#TODO: auth!
|
187
|
-
post '/api/1/register_a_new_service' do
|
188
|
-
service_id = TresfiestasFake.services.size + 100
|
189
|
-
service = JSON.parse(request.body.read)["service"]
|
190
|
-
if service["name"].to_s.empty?
|
191
|
-
status 400
|
192
|
-
{:error_messages => ["Name can't be blank"]}.to_json
|
193
|
-
else
|
194
|
-
TresfiestasFake.services[service_id.to_s] = service
|
195
|
-
status 201
|
196
|
-
headers 'Location' => "#{BASE_URL}/api/1/services/#{service_id}"
|
197
|
-
{}.to_json
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
|
-
get '/api/1/services/:service_id' do |service_id|
|
202
|
-
if service = TresfiestasFake.services[service_id.to_s]
|
203
|
-
{"service" => service}.to_json
|
204
|
-
else
|
205
|
-
status 404
|
206
|
-
{}.to_json
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
put '/api/1/services/:service_id' do |service_id|
|
211
|
-
service = TresfiestasFake.services[service_id.to_s]
|
212
|
-
update_params = JSON.parse(request.body.read)["service"]
|
213
|
-
if update_params.key?("name") && update_params["name"].to_s.empty?
|
214
|
-
status 400
|
215
|
-
{:error_messages => ["Name can't be blank"]}.to_json
|
216
|
-
else
|
217
|
-
service.merge!(update_params)
|
218
|
-
{}.to_json
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
delete '/api/1/services/:service_id' do |service_id|
|
223
|
-
TresfiestasFake.services.delete(service_id.to_s)
|
224
|
-
{}.to_json
|
225
|
-
end
|
226
|
-
|
227
|
-
put '/api/1/serviceaccounts/12' do
|
228
|
-
TresfiestasFake.service_accounts ||= {}
|
229
|
-
TresfiestasFake.service_accounts[12] = JSON.parse(request.body.read)["service_account"]
|
230
|
-
{}.to_json
|
231
|
-
end
|
232
|
-
|
233
|
-
post '/api/1/invoices/:service_account_id' do |service_account_id|
|
234
|
-
invoice_params = JSON.parse(request.body.read)["invoice"]
|
235
|
-
unless invoice_params['total_amount_cents'].is_a?(Fixnum)
|
236
|
-
status 400
|
237
|
-
return {:error_messages => ["Total Amount Cents must be an integer"]}.to_json
|
238
|
-
end
|
239
|
-
if invoice_params["line_item_description"].to_s.empty?
|
240
|
-
status 400
|
241
|
-
return {:error_messages => ["Line item description can't be blank"]}.to_json
|
242
|
-
end
|
243
|
-
if invoice_params['total_amount_cents'] < 0
|
244
|
-
status 400
|
245
|
-
return {:error_messages => ["Total amount cents must be greater than or equal to 0"]}.to_json
|
246
|
-
end
|
247
|
-
TresfiestasFake.invoices << invoice_params.merge('service_account_id' => service_account_id.to_i)
|
248
|
-
{}.to_json
|
249
|
-
end
|
250
|
-
|
251
|
-
post '/api/1/messages/:service_account_id' do |service_account_id|
|
252
|
-
message_params = JSON.parse(request.body.read)["message"]
|
253
|
-
|
254
|
-
if message_params['subject'].to_s.empty?
|
255
|
-
status 400
|
256
|
-
return {:error_messages => ["Subject can't be blank."]}.to_json
|
257
|
-
end
|
258
|
-
|
259
|
-
unless ['status', 'notification', 'alert'].include? message_params['message_type']
|
260
|
-
status 400
|
261
|
-
return {:error_messages => ['Message type must be one of: status, notification or alert']}.to_json
|
262
|
-
end
|
263
|
-
|
264
|
-
TresfiestasFake.status_messages << message_params
|
265
|
-
{}.to_json
|
266
|
-
end
|
267
|
-
|
268
|
-
|
269
|
-
post '/api/1/provisioned_service_messages/:provisioned_service_id' do |provisioned_service_id|
|
270
|
-
message_params = JSON.parse(request.body.read)["message"]
|
271
|
-
|
272
|
-
if message_params['subject'].to_s.empty?
|
273
|
-
status 400
|
274
|
-
return {:error_messages => ["Subject can't be blank."]}.to_json
|
275
|
-
end
|
276
|
-
|
277
|
-
unless ['status', 'notification', 'alert'].include? message_params['message_type']
|
278
|
-
status 400
|
279
|
-
return {:error_messages => ['Message type must be one of: status, notification or alert']}.to_json
|
280
|
-
end
|
281
|
-
|
282
|
-
TresfiestasFake.status_messages << message_params.merge('provisioned_service_id' => provisioned_service_id.to_i)
|
283
|
-
{}.to_json
|
284
|
-
end
|
285
|
-
|
286
|
-
end
|
287
|
-
|
288
|
-
end
|