ey_services_api 0.3.14 → 0.3.15

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.
@@ -17,8 +17,9 @@ Gem::Specification.new do |s|
17
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
-
20
+
21
21
  s.add_development_dependency 'rspec'
22
+ s.add_dependency "sinatra"
22
23
  s.add_dependency 'json'
23
24
  s.add_dependency 'ey_api_hmac', ">= 0.3.0"
24
25
  end
@@ -8,6 +8,8 @@ require "ey_services_api/service_account_creation"
8
8
  require "ey_services_api/service_account_response"
9
9
  require "ey_services_api/provisioned_service_creation"
10
10
  require "ey_services_api/provisioned_service_response"
11
+ require "ey_services_api/integration"
12
+ require "ey_services_api/integration/server"
11
13
 
12
14
  module EY
13
15
  module ServicesAPI
@@ -0,0 +1,57 @@
1
+ module EY
2
+ module ServicesAPI
3
+ class Integration
4
+
5
+ def self.register_service(registration_url, service_url)
6
+ create_service(service_registration_params(service_url), registration_url)
7
+ end
8
+
9
+ def self.server
10
+ Server
11
+ end
12
+
13
+ def self.mapper=(mapper)
14
+ @mapper = mapper
15
+ end
16
+
17
+ def self.mapper
18
+ @mapper
19
+ end
20
+
21
+ private
22
+
23
+ def self.service_registration_params(base_url)
24
+ {
25
+ :name => fetch_from_description(:name),
26
+ :label => fetch_from_description(:label),
27
+ :service_accounts_url => "#{base_url + mapper.api_root}/service_accounts",
28
+ :home_url => fetch_from_description(:home_url),
29
+ :terms_and_conditions_url => fetch_from_description(:terms_and_conditions_url),
30
+ }
31
+ end
32
+
33
+ def self.fetch_from_description(thing)
34
+ mapper.description[thing] or raise "Expected 'description' to define a #{thing} for your service"
35
+ end
36
+
37
+ def self.create_service(registration_params, service_registration_url)
38
+ remote_service = connection.register_service(service_registration_url, registration_params)
39
+ mapper.save_service_url(remote_service.url)
40
+ remote_service
41
+ end
42
+
43
+ def self.connection
44
+ unless EY::ServicesAPI.setup?
45
+ EY::ServicesAPI.setup!(mapper.api_creds)
46
+ end
47
+ EY::ServicesAPI.connection
48
+ end
49
+
50
+ def self.test_setup(auth_id, auth_key, tresfiestas_url, tresfiestas_rackapp)
51
+ mapper.save_api_creds(auth_id, auth_key)
52
+ connection.backend = tresfiestas_rackapp
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,78 @@
1
+ require 'sinatra/base'
2
+
3
+ module EY
4
+ module ServicesAPI
5
+ class Integration
6
+ class Server < Sinatra::Base
7
+
8
+ enable :raise_errors
9
+ disable :dump_errors
10
+ disable :show_exceptions
11
+
12
+ use EY::ApiHMAC::ApiAuth::LookupServer do |env, auth_id|
13
+ Integration.mapper.api_creds && (Integration.mapper.api_creds[:auth_id] == auth_id) && Integration.mapper.api_creds[:auth_key]
14
+ end
15
+
16
+ post "/service_accounts" do
17
+ request_body = request.body.read
18
+ service_account = EY::ServicesAPI::ServiceAccountCreation.from_request(request_body)
19
+ created = mapper.service_account_create(service_account)
20
+ response_params = {
21
+ :configuration_required => false,
22
+ :configuration_url => nil,
23
+ :provisioned_services_url => "#{api_base_url}/service_accounts/#{created[:id]}/provisioned_services",
24
+ :url => "#{api_base_url}/service_accounts/#{created[:id]}"
25
+ }
26
+ response = EY::ServicesAPI::ServiceAccountResponse.new(response_params)
27
+ content_type :json
28
+ headers 'Location' => response.url
29
+ response.to_hash.to_json
30
+ end
31
+
32
+ post "/service_accounts/:service_account_id/provisioned_services" do |service_account_id|
33
+ request_body = request.body.read
34
+ provisioned_service = EY::ServicesAPI::ProvisionedServiceCreation.from_request(request_body)
35
+ created = mapper.provisioned_service_create(service_account_id, provisioned_service)
36
+ response_params = {
37
+ :configuration_required => false,
38
+ :configuration_url => "#{true_base_url}#{created[:configuration_url]}",
39
+ :vars => created[:vars],
40
+ :url => "#{api_base_url}/service_accounts/#{service_account_id}/provisioned_services/#{created[:id]}",
41
+ }
42
+ response = EY::ServicesAPI::ProvisionedServiceResponse.new(response_params)
43
+ content_type :json
44
+ headers 'Location' => response.url
45
+ response.to_hash.to_json
46
+ end
47
+
48
+ delete "/service_accounts/:service_account_id" do |service_account_id|
49
+ mapper.service_account_cancel(service_account_id)
50
+ content_type :json
51
+ {}.to_json
52
+ end
53
+
54
+ delete "/service_accounts/:service_account_id/provisioned_services/:provisioned_service_id" do |service_account_id, provisioned_service_id|
55
+ mapper.provisioned_service_cancel(service_account_id, provisioned_service_id)
56
+ content_type :json
57
+ {}.to_json
58
+ end
59
+
60
+ private
61
+
62
+ def mapper
63
+ Integration.mapper
64
+ end
65
+
66
+ def api_base_url
67
+ true_base_url + mapper.api_root
68
+ end
69
+
70
+ def true_base_url
71
+ uri = URI.parse(request.url)
72
+ uri.to_s.gsub(uri.request_uri, '')
73
+ end
74
+
75
+ end
76
+ end
77
+ end
78
+ end
@@ -1,5 +1,5 @@
1
1
  module EY
2
2
  module ServicesAPI
3
- VERSION = "0.3.14"
3
+ VERSION = "0.3.15"
4
4
  end
5
5
  end
data/script/ci CHANGED
@@ -7,6 +7,7 @@ env
7
7
  case "$1" in
8
8
  "internal")
9
9
  echo "running internal tests"
10
+ export REDIS_URL=redis://$REDIS_URL
10
11
  export BUNDLE_GEMFILE=EYIntegratedGemfile
11
12
  ;;
12
13
  "public")
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ey_services_api
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 14
10
- version: 0.3.14
9
+ - 15
10
+ version: 0.3.15
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jacob & Thorben & David & mkb & Josh & Others
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-08-06 00:00:00 Z
18
+ date: 2012-08-07 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rspec
@@ -32,7 +32,7 @@ dependencies:
32
32
  type: :development
33
33
  version_requirements: *id001
34
34
  - !ruby/object:Gem::Dependency
35
- name: json
35
+ name: sinatra
36
36
  prerelease: false
37
37
  requirement: &id002 !ruby/object:Gem::Requirement
38
38
  none: false
@@ -46,9 +46,23 @@ dependencies:
46
46
  type: :runtime
47
47
  version_requirements: *id002
48
48
  - !ruby/object:Gem::Dependency
49
- name: ey_api_hmac
49
+ name: json
50
50
  prerelease: false
51
51
  requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: ey_api_hmac
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
52
66
  none: false
53
67
  requirements:
54
68
  - - ">="
@@ -60,7 +74,7 @@ dependencies:
60
74
  - 0
61
75
  version: 0.3.0
62
76
  type: :runtime
63
- version_requirements: *id003
77
+ version_requirements: *id004
64
78
  description: API for Partner Services (talks to services.engineyard.com)
65
79
  email:
66
80
  - jacob@engineyard.com
@@ -86,6 +100,8 @@ files:
86
100
  - lib/ey_services_api/api_struct.rb
87
101
  - lib/ey_services_api/connection.rb
88
102
  - lib/ey_services_api/external_test_helper.rb
103
+ - lib/ey_services_api/integration.rb
104
+ - lib/ey_services_api/integration/server.rb
89
105
  - lib/ey_services_api/invoice.rb
90
106
  - lib/ey_services_api/message.rb
91
107
  - lib/ey_services_api/provisioned_service_creation.rb