pvdgm-svc-client 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +75 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +21 -0
- data/Rakefile +50 -0
- data/VERSION +1 -0
- data/bin/service_mgr +8 -0
- data/bin/service_mgr_completion +86 -0
- data/bin/valid_commands +16 -0
- data/bin/valid_resources +11 -0
- data/lib/pvdgm-svc-client/base_resource.rb +118 -0
- data/lib/pvdgm-svc-client/prompters/account_mapping_prompter.rb +26 -0
- data/lib/pvdgm-svc-client/prompters/configured_account_prompter.rb +30 -0
- data/lib/pvdgm-svc-client/prompters/configured_facility_prompter.rb +30 -0
- data/lib/pvdgm-svc-client/prompters/facility_mapping_prompter.rb +26 -0
- data/lib/pvdgm-svc-client/prompters/public_key_prompter.rb +27 -0
- data/lib/pvdgm-svc-client/prompters/service_definition_prompter.rb +30 -0
- data/lib/pvdgm-svc-client/prompters/service_prompter.rb +26 -0
- data/lib/pvdgm-svc-client/prompters/sltc_provider_prompter.rb +24 -0
- data/lib/pvdgm-svc-client/prompters/sltc_registration_prompter.rb +26 -0
- data/lib/pvdgm-svc-client/prompters/third_party_prompter.rb +26 -0
- data/lib/pvdgm-svc-client/resources/account_mapping.rb +83 -0
- data/lib/pvdgm-svc-client/resources/assessment_request.rb +61 -0
- data/lib/pvdgm-svc-client/resources/available_file.rb +48 -0
- data/lib/pvdgm-svc-client/resources/configured_account.rb +118 -0
- data/lib/pvdgm-svc-client/resources/configured_facility.rb +118 -0
- data/lib/pvdgm-svc-client/resources/facility_mapping.rb +90 -0
- data/lib/pvdgm-svc-client/resources/mds_pull_account.rb +55 -0
- data/lib/pvdgm-svc-client/resources/provider.rb +28 -0
- data/lib/pvdgm-svc-client/resources/public_key.rb +119 -0
- data/lib/pvdgm-svc-client/resources/service.rb +67 -0
- data/lib/pvdgm-svc-client/resources/service_definition.rb +147 -0
- data/lib/pvdgm-svc-client/resources/sltc_registration.rb +51 -0
- data/lib/pvdgm-svc-client/resources/third_party.rb +61 -0
- data/lib/pvdgm-svc-client/service_mgr_options.rb +157 -0
- data/lib/pvdgm-svc-client.rb +16 -0
- data/spec/base_resource_spec.rb +208 -0
- data/spec/service_mgr_options_spec.rb +266 -0
- data/spec/spec_helper.rb +22 -0
- metadata +202 -0
@@ -0,0 +1,119 @@
|
|
1
|
+
module Resources
|
2
|
+
|
3
|
+
class PublicKey < BaseResource
|
4
|
+
include PublicKeyPrompter
|
5
|
+
|
6
|
+
def list
|
7
|
+
result = get("services/public_keys")
|
8
|
+
puts "\nPublic Keys:"
|
9
|
+
table = Terminal::Table.new headings: [ 'Name', 'Valid Until', 'Created At', 'Updated At' ] do |t|
|
10
|
+
result.each do | pk |
|
11
|
+
t << [ pk['name'],
|
12
|
+
pk['valid_until'],
|
13
|
+
pk['created_at'],
|
14
|
+
pk['updated_at']
|
15
|
+
]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
prompter.say table.to_s
|
20
|
+
puts
|
21
|
+
end
|
22
|
+
|
23
|
+
def show
|
24
|
+
pk_id = public_key_id
|
25
|
+
pk = get("services/public_keys/#{pk_id}")
|
26
|
+
puts "\nPublic Key:"
|
27
|
+
table = Terminal::Table.new headings: [ 'Name', 'Valid Until', 'Created At', 'Updated At' ] do |t|
|
28
|
+
t << [ pk['name'],
|
29
|
+
pk['valid_until'],
|
30
|
+
pk['created_at'],
|
31
|
+
pk['updated_at']
|
32
|
+
]
|
33
|
+
end
|
34
|
+
|
35
|
+
puts table
|
36
|
+
puts
|
37
|
+
end
|
38
|
+
|
39
|
+
def create
|
40
|
+
params = {
|
41
|
+
public_key: {
|
42
|
+
name: prompter.ask("\nName for new public key: "),
|
43
|
+
|
44
|
+
key_file: prompter.ask("\nFile containing public key (PEM format): ", ->(field) { File.new(field) }) do |q|
|
45
|
+
q.glob = "*.pem"
|
46
|
+
q.validate = ->(file_name) { File.exists?(file_name) }
|
47
|
+
q.responses[:ask_on_error] = :question
|
48
|
+
q.responses[:not_valid] = "\nFile does not exist"
|
49
|
+
end,
|
50
|
+
|
51
|
+
valid_until: prompter.ask("\nDate at which key becomes invalid: ") do |q|
|
52
|
+
q.validate = ->(valid_until) {
|
53
|
+
return true if valid_until.nil? || valid_until.length == 0
|
54
|
+
begin
|
55
|
+
Date.parse(valid_until)
|
56
|
+
true
|
57
|
+
rescue ArgumentError
|
58
|
+
false
|
59
|
+
end
|
60
|
+
}
|
61
|
+
q.responses[:ask_on_error] = :question
|
62
|
+
q.responses[:not_valid] = "\nInvalid date"
|
63
|
+
end
|
64
|
+
}
|
65
|
+
}
|
66
|
+
result = post("services/public_keys", params)
|
67
|
+
puts "\nID of new Public Key: #{result['id']}"
|
68
|
+
puts
|
69
|
+
end
|
70
|
+
|
71
|
+
def update
|
72
|
+
pk_id = public_key_id
|
73
|
+
show
|
74
|
+
params = {
|
75
|
+
public_key: {
|
76
|
+
name: prompter.ask("\nName for new public key: "),
|
77
|
+
|
78
|
+
key_file: prompter.ask("\nFile containing public key (PEM format): ", ->(field) { File.new(field) }) do |q|
|
79
|
+
q.validate = ->(file_name) { File.exists?(file_name) }
|
80
|
+
q.responses[:ask_on_error] = :question
|
81
|
+
q.responses[:not_valid] = "\nFile does not exist"
|
82
|
+
end,
|
83
|
+
|
84
|
+
valid_until: prompter.ask("\nDate at which key becomes invalid: ") do |q|
|
85
|
+
q.validate = ->(valid_until) {
|
86
|
+
return true if valid_until.nil? || valid_until.length == 0
|
87
|
+
begin
|
88
|
+
Date.parse(valid_until)
|
89
|
+
true
|
90
|
+
rescue ArgumentError
|
91
|
+
false
|
92
|
+
end
|
93
|
+
}
|
94
|
+
q.responses[:ask_on_error] = :question
|
95
|
+
q.responses[:not_valid] = "\nInvalid date"
|
96
|
+
end
|
97
|
+
}
|
98
|
+
}
|
99
|
+
result = put("services/public_keys/#{pk_id}", params)
|
100
|
+
puts "\nID of updated Public Key: #{result['id']}"
|
101
|
+
puts
|
102
|
+
end
|
103
|
+
|
104
|
+
def destroy
|
105
|
+
pk_id = public_key_id
|
106
|
+
show
|
107
|
+
if prompter.agree("\nAre you sure you want to destroy this public key? (y/n) ", true)
|
108
|
+
puts
|
109
|
+
result = delete("services/public_keys/#{pk_id}")
|
110
|
+
puts "\nID of deleted public key: #{result['id']}"
|
111
|
+
else
|
112
|
+
puts "\nCancelled deletion"
|
113
|
+
end
|
114
|
+
puts
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Resources
|
2
|
+
|
3
|
+
class Service < BaseResource
|
4
|
+
include ServicePrompter
|
5
|
+
|
6
|
+
def list
|
7
|
+
result = get("services/services")
|
8
|
+
puts "\nServices:"
|
9
|
+
table = Terminal::Table.new headings: [ 'Name' ] do |t|
|
10
|
+
result.each do | service |
|
11
|
+
# puts format "(%4d) %s", service['id'], service['name']
|
12
|
+
t << [ service['name'] ]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
prompter.say table.to_s
|
16
|
+
puts
|
17
|
+
end
|
18
|
+
|
19
|
+
def show
|
20
|
+
sv_id = service_id
|
21
|
+
result = get("services/services/#{sv_id}")
|
22
|
+
puts "\nService:"
|
23
|
+
table = Terminal::Table.new headings: [ 'Name' ] do |t|
|
24
|
+
t << [ result['name'] ]
|
25
|
+
end
|
26
|
+
@service_name = result['name']
|
27
|
+
puts table
|
28
|
+
puts
|
29
|
+
end
|
30
|
+
|
31
|
+
def create
|
32
|
+
params = {
|
33
|
+
service: {
|
34
|
+
name: prompter.ask("\nName for new service: ") { |q| q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid service name" }
|
35
|
+
}
|
36
|
+
}
|
37
|
+
result = post("services/services", params)
|
38
|
+
puts "\nID of new service: #{result['id']}"
|
39
|
+
puts
|
40
|
+
end
|
41
|
+
|
42
|
+
def update
|
43
|
+
sv_id = service_id
|
44
|
+
show
|
45
|
+
params = {
|
46
|
+
service: {
|
47
|
+
name: prompter.ask("\nNew name for service: ") { |q| q.default = @service_name; q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid service name" }
|
48
|
+
}
|
49
|
+
}
|
50
|
+
result = put("services/services/#{sv_id}", params)
|
51
|
+
puts "\nID of updated service: #{result['id']}"
|
52
|
+
puts
|
53
|
+
end
|
54
|
+
|
55
|
+
def invoke
|
56
|
+
sv_id = service_id
|
57
|
+
result = put("services/services/#{sv_id}/invoke", {})
|
58
|
+
if result.has_key?('message')
|
59
|
+
puts result['message']
|
60
|
+
else
|
61
|
+
puts result['error']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
module Resources
|
2
|
+
|
3
|
+
class ServiceDefinition < BaseResource
|
4
|
+
include ThirdPartyPrompter
|
5
|
+
include ServicePrompter
|
6
|
+
include ServiceDefinitionPrompter
|
7
|
+
|
8
|
+
VALIDATE_PORT = ->(answer) do
|
9
|
+
return true if answer.is_a?(Fixnum)
|
10
|
+
return true if answer.nil? || (answer.is_a?(String) && (answer.empty? || answer == '^'))
|
11
|
+
answer =~ /\A[0-9]+\z/
|
12
|
+
end
|
13
|
+
|
14
|
+
def list
|
15
|
+
tp_id = third_party_id
|
16
|
+
result = get("services/third_parties/#{tp_id}/service_definitions")
|
17
|
+
puts "\nService definitions for third party: #{tp_id}"
|
18
|
+
table = Terminal::Table.new headings: [ 'Third Party', 'Service', 'Hostname', 'Port', 'Base URI', 'User Name', 'Service Class', 'Password', 'Token' ] do |t|
|
19
|
+
result.each do | service_definition |
|
20
|
+
t << [ "#{service_definition['third_party_name']} (#{service_definition['third_party_id']})",
|
21
|
+
"#{service_definition['service_name']} (#{service_definition['service_id']})",
|
22
|
+
service_definition['hostname'],
|
23
|
+
service_definition['port'],
|
24
|
+
service_definition['base_uri'],
|
25
|
+
service_definition['username'],
|
26
|
+
service_definition['service_class'],
|
27
|
+
service_definition['password'],
|
28
|
+
service_definition['token'] ]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
puts table
|
32
|
+
puts
|
33
|
+
end
|
34
|
+
|
35
|
+
def show
|
36
|
+
tp_id = third_party_id
|
37
|
+
sd_id = service_definition_id
|
38
|
+
service_definition = get("services/third_parties/#{tp_id}/service_definitions/#{sd_id}")
|
39
|
+
@sd_third_party_id = service_definition['third_party_id']
|
40
|
+
@sd_service_id = service_definition['service_id']
|
41
|
+
@sd_hostname = service_definition['hostname']
|
42
|
+
@sd_port = service_definition['port']
|
43
|
+
@sd_base_uri = service_definition['base_uri']
|
44
|
+
@sd_username = service_definition['username']
|
45
|
+
@sd_service_class = service_definition['service_class']
|
46
|
+
@sd_password = service_definition['password']
|
47
|
+
@sd_token = service_definition['token']
|
48
|
+
puts "\nService Definition for third party: #{tp_id}/#{sd_id}"
|
49
|
+
table = Terminal::Table.new headings: [ 'Third Party', 'Service', 'Hostname', 'Port', 'Base URI', 'User Name', 'Service Class', 'Password', 'Token' ] do |t|
|
50
|
+
t << [ "#{service_definition['third_party_name']} (#{service_definition['third_party_id']})",
|
51
|
+
"#{service_definition['service_name']} (#{service_definition['service_id']})",
|
52
|
+
service_definition['hostname'],
|
53
|
+
service_definition['port'],
|
54
|
+
service_definition['base_uri'],
|
55
|
+
service_definition['username'],
|
56
|
+
service_definition['service_class'],
|
57
|
+
service_definition['password'],
|
58
|
+
service_definition['token'] ]
|
59
|
+
end
|
60
|
+
puts table
|
61
|
+
puts
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_port_number(prev_value=nil)
|
65
|
+
clear_default = ->(field) { field == "^" ? nil : field }
|
66
|
+
prompt = "\nPort"
|
67
|
+
prompt << " (^ to clear)" unless prev_value.nil?
|
68
|
+
prompt << ": "
|
69
|
+
v = prompter.ask(prompt, clear_default) do |q|
|
70
|
+
q.default = prev_value.to_s unless prev_value.nil?
|
71
|
+
q.validate = VALIDATE_PORT
|
72
|
+
q.responses[:ask_on_error] = :question
|
73
|
+
q.responses[:not_valid] = "\nNot a valid port number"
|
74
|
+
end
|
75
|
+
v == "0" ? nil : v
|
76
|
+
end
|
77
|
+
|
78
|
+
def create
|
79
|
+
tp_id = third_party_id
|
80
|
+
params = {
|
81
|
+
service_definition: {
|
82
|
+
service_id: service_id,
|
83
|
+
hostname: prompter.ask("\nHost name: ") { |q| q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid host name" },
|
84
|
+
port: get_port_number,
|
85
|
+
base_uri: prompter.ask("\nBase URI: ") { |q| q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid base URI" },
|
86
|
+
username: prompter.ask("\nUser name: ") { |q| q.validate = /\A.{0,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid user name" },
|
87
|
+
service_class: prompter.ask("\nService Class: ") { |q| q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid service class" }
|
88
|
+
}
|
89
|
+
}
|
90
|
+
password = prompter.ask("\nPassword: ")
|
91
|
+
token = prompter.ask("\nToken: ")
|
92
|
+
if (password && password.size > 0) || (token && token.size > 0)
|
93
|
+
params[:credential] = {
|
94
|
+
}
|
95
|
+
params[:credential][:password] = password if password && password.size > 0
|
96
|
+
params[:credential][:token] = token if token && token.size > 0
|
97
|
+
end
|
98
|
+
result = post("services/third_parties/#{tp_id}/service_definitions", params)
|
99
|
+
puts "\nID of new service definition: #{result['id']}"
|
100
|
+
puts
|
101
|
+
end
|
102
|
+
|
103
|
+
def update
|
104
|
+
clear_default = ->(field) { field == "^" ? '' : field }
|
105
|
+
tp_id = third_party_id
|
106
|
+
sd_id = service_definition_id
|
107
|
+
show
|
108
|
+
params = {
|
109
|
+
service_definition: {
|
110
|
+
service_id: service_id,
|
111
|
+
hostname: prompter.ask("\nHost name: ") { |q| q.default = @sd_hostname; q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid host name" },
|
112
|
+
port: get_port_number(@sd_port),
|
113
|
+
base_uri: prompter.ask("\nBase URI: ", String) { |q| q.default = @sd_base_uri.gsub("<%=", "<%%="); q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid base URI" }.gsub("<%%=", "<%="),
|
114
|
+
username: prompter.ask("\nUser name (^ to clear): ", clear_default) { |q| q.default = @sd_username; q.validate = /\A.{0,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid user name" },
|
115
|
+
service_class: prompter.ask("\nService Class: ") { |q| q.default = @sd_service_class; q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid service class" }
|
116
|
+
}
|
117
|
+
}
|
118
|
+
password = prompter.ask("\nPassword (^ to clear): ", clear_default) { |q| q.default = @sd_password }
|
119
|
+
token = prompter.ask("\nToken (^ to clear): ", clear_default) { |q| q.default = @sd_token }
|
120
|
+
if (password && password.size > 0) || (token && token.size > 0)
|
121
|
+
params[:credential] = {
|
122
|
+
}
|
123
|
+
params[:credential][:password] = password if password && password.size > 0
|
124
|
+
params[:credential][:token] = token if token && token.size > 0
|
125
|
+
end
|
126
|
+
result = put("services/third_parties/#{tp_id}/service_definitions/#{sd_id}", params)
|
127
|
+
puts "\nID of updated service definition: #{result['id']}"
|
128
|
+
puts
|
129
|
+
end
|
130
|
+
|
131
|
+
def destroy
|
132
|
+
tp_id = third_party_id
|
133
|
+
sd_id = service_definition_id
|
134
|
+
show
|
135
|
+
if prompter.agree("\nAre you sure you want to destroy this service definition? (y/n) ", true)
|
136
|
+
puts
|
137
|
+
result = delete("services/third_parties/#{tp_id}/service_definitions/#{sd_id}")
|
138
|
+
puts "\nID of deleted service_definition: #{result['id']}"
|
139
|
+
else
|
140
|
+
puts "\nCancelled deletion"
|
141
|
+
end
|
142
|
+
puts
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Resources
|
2
|
+
|
3
|
+
class SltcRegistration < BaseResource
|
4
|
+
include ThirdPartyPrompter
|
5
|
+
include ServiceDefinitionPrompter
|
6
|
+
include SltcRegistrationPrompter
|
7
|
+
|
8
|
+
def list
|
9
|
+
status = prompter.choose do | menu |
|
10
|
+
menu.prompt = "\nSelect the status to filter with: "
|
11
|
+
|
12
|
+
menu.choice('All', 'Specify no status') { -1 }
|
13
|
+
menu.choice('New', 'New registrations') { 0 }
|
14
|
+
menu.choice('Completed', 'Completed registrations') { 1 }
|
15
|
+
end
|
16
|
+
|
17
|
+
filter = status >= 0 ? "?status=#{status}" : ''
|
18
|
+
result = get("services/sltc_registrations#{filter}")
|
19
|
+
|
20
|
+
puts "\nSimpleLTC Registrations"
|
21
|
+
table = Terminal::Table.new headings: [ 'Status', 'Company Name', 'Initiated By', 'Created At' ] do |t|
|
22
|
+
result.each do | registration |
|
23
|
+
t << [ registration['status'],
|
24
|
+
registration['company_name'],
|
25
|
+
registration['initiated_by'],
|
26
|
+
registration['created_at'] ]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
prompter.say table.to_s
|
30
|
+
puts
|
31
|
+
end
|
32
|
+
|
33
|
+
def complete
|
34
|
+
tp_id = third_party_id
|
35
|
+
sd_id = service_definition_id
|
36
|
+
reg_id = sltc_registration_id
|
37
|
+
|
38
|
+
params = {
|
39
|
+
third_party_id: tp_id,
|
40
|
+
service_definition_id: sd_id,
|
41
|
+
account_id: prompter.ask("\nAccount ID: ", Integer) { |q| q.validate = lambda { | a | is_valid_object?('Account', a) }; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid Account ID" },
|
42
|
+
baseline_days: prompter.ask("\nNumber of days for baseline: ", Integer) { |q| q.default = 180; q.responses[:not_valid] = "\nNot a valid number of days" }
|
43
|
+
}
|
44
|
+
result = post("services/sltc_registrations/#{reg_id}/complete", params)
|
45
|
+
puts result.inspect
|
46
|
+
puts
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Resources
|
2
|
+
|
3
|
+
class ThirdParty < BaseResource
|
4
|
+
include ThirdPartyPrompter
|
5
|
+
|
6
|
+
EMAIL_REGEX = /\A[\w\.%\+\-\']+@(?:[A-Z0-9\-]+\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|jobs|museum)\z/i
|
7
|
+
|
8
|
+
def list
|
9
|
+
result = get("services/third_parties")
|
10
|
+
puts "\nThird Parties:"
|
11
|
+
table = Terminal::Table.new headings: [ 'Name', 'Contact Email' ] do |t|
|
12
|
+
result.each do | third_party |
|
13
|
+
t << [ third_party['name'], third_party['contact_email'] ]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
prompter.say table.to_s
|
18
|
+
puts
|
19
|
+
end
|
20
|
+
|
21
|
+
def show
|
22
|
+
tp_id = third_party_id
|
23
|
+
result = get("services/third_parties/#{tp_id}")
|
24
|
+
@third_party_name = result['name']
|
25
|
+
@third_party_contact_email = result['contact_email']
|
26
|
+
puts "\nThird Party"
|
27
|
+
table = Terminal::Table.new headings: [ 'Name', 'Contact Email' ] do |t|
|
28
|
+
t << [ result['name'], result['contact_email'] ]
|
29
|
+
end
|
30
|
+
puts table
|
31
|
+
puts
|
32
|
+
end
|
33
|
+
|
34
|
+
def create
|
35
|
+
params = {
|
36
|
+
third_party: {
|
37
|
+
name: prompter.ask("\nName for new third party: ") { |q| q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid Third Party Name" },
|
38
|
+
contact_email: prompter.ask("\nContact email address for new third party: ") { |q| q.validate = EMAIL_REGEX; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid email address" }
|
39
|
+
}
|
40
|
+
}
|
41
|
+
result = post("services/third_parties", params)
|
42
|
+
puts "\nID of new third party: #{result['id']}"
|
43
|
+
puts
|
44
|
+
end
|
45
|
+
|
46
|
+
def update
|
47
|
+
show
|
48
|
+
params = {
|
49
|
+
third_party: {
|
50
|
+
name: prompter.ask("\nNew name for third party: ") { |q| q.default = @third_party_name; q.validate = /\A.{1,255}\z/; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid Third Party Name" },
|
51
|
+
contact_email: prompter.ask("\nNew contact email address for third party: ") { |q| q.default = @third_party_contact_email; q.validate = EMAIL_REGEX; q.responses[:ask_on_error] = :question; q.responses[:not_valid] = "\nNot a valid email address" }
|
52
|
+
}
|
53
|
+
}
|
54
|
+
result = put("services/third_parties/#{third_party_id}", params)
|
55
|
+
puts "\nID of updated third party: #{result['id']}"
|
56
|
+
puts
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
class ServiceMgrOptions
|
2
|
+
|
3
|
+
DEFAULT_SERVER = 'www.abaqis.com'
|
4
|
+
LOCAL_SERVER = 'localhost:3000'
|
5
|
+
UAT_SERVER = 'uat.abaqis.com'
|
6
|
+
DEFAULT_USE_SSL = true
|
7
|
+
DEFAULT_RESOURCE = 'service'
|
8
|
+
DEFAULT_COMMAND = 'list'
|
9
|
+
DEFAULT_TOKEN = ENV['API_TOKEN']
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@options = {}
|
13
|
+
|
14
|
+
@optparse = OptionParser.new do | opts |
|
15
|
+
# Set a banner, displayed at the top of the help screen
|
16
|
+
opts.banner = "Usage: service_mgr [ options ] [ resource [command] ]"
|
17
|
+
|
18
|
+
opts.on '-h', '--help', 'Display the help message' do
|
19
|
+
puts opts
|
20
|
+
puts
|
21
|
+
print_valid_resources
|
22
|
+
puts
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
|
26
|
+
@options[:server] = DEFAULT_SERVER
|
27
|
+
opts.on '-s', '--server SERVER', "Specify the abaqis server to hit (default #{DEFAULT_SERVER})" do | server |
|
28
|
+
@options[:server] = server
|
29
|
+
end
|
30
|
+
|
31
|
+
@options[:use_ssl] = DEFAULT_USE_SSL
|
32
|
+
opts.on '-n', '--no-ssl', "If specified, SSL will NOT be used for the call to the server" do
|
33
|
+
@options[:use_ssl] = false
|
34
|
+
end
|
35
|
+
|
36
|
+
opts.on '-l', '--list', 'List the valid commands' do
|
37
|
+
print_valid_resources
|
38
|
+
exit
|
39
|
+
end
|
40
|
+
|
41
|
+
@options[:api_token] = DEFAULT_TOKEN
|
42
|
+
opts.on '-t', '--token TOKEN', 'The API security token to use (defaults to ENV["API_TOKEN"])' do | token |
|
43
|
+
@options[:api_token] = token
|
44
|
+
end
|
45
|
+
|
46
|
+
opts.on '--local', 'Set the host to the localhost and non-ssl as a testing convenience' do
|
47
|
+
@options[:server] = LOCAL_SERVER
|
48
|
+
@options[:use_ssl] = false
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on '--uat', 'Set the host to the uat machine and ssl as a testing convenience' do
|
52
|
+
@options[:server] = UAT_SERVER
|
53
|
+
@options[:use_ssl] = true
|
54
|
+
end
|
55
|
+
|
56
|
+
@options[:trace] = false
|
57
|
+
opts.on '--trace', 'Set the output to verbose logging (including stack trace)' do
|
58
|
+
@options[:trace] = true
|
59
|
+
end
|
60
|
+
|
61
|
+
opts.on '--account-mapping-id ID', 'The ID of the account mapping object' do | id |
|
62
|
+
@options[:account_mapping_id] = id
|
63
|
+
end
|
64
|
+
|
65
|
+
opts.on '--configured-account-id ID', 'The ID of the configured account' do | id |
|
66
|
+
@options[:configured_account_id] = id
|
67
|
+
end
|
68
|
+
|
69
|
+
opts.on '--facility-mapping-id ID', 'The ID of the facility mapping' do | id |
|
70
|
+
@options[:facility_mapping_id] = id
|
71
|
+
end
|
72
|
+
|
73
|
+
opts.on '--service-definition-id ID', 'The ID of the service definition' do | id |
|
74
|
+
@options[:service_definition_id] = id
|
75
|
+
end
|
76
|
+
|
77
|
+
opts.on '--service-id ID', 'The ID of the service' do | id |
|
78
|
+
@options[:service_id] = id
|
79
|
+
end
|
80
|
+
|
81
|
+
opts.on '--third-party-id ID', 'The ID of the third party' do | id |
|
82
|
+
@options[:third_party_id] = id
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def parse_options!(argv=ARGV)
|
89
|
+
@optparse.parse!(argv)
|
90
|
+
|
91
|
+
resource = argv.shift || DEFAULT_RESOURCE
|
92
|
+
command = argv.shift || DEFAULT_COMMAND
|
93
|
+
|
94
|
+
# Check to make sure we have a valid resource
|
95
|
+
unless valid_resource?(resource)
|
96
|
+
puts @optparse
|
97
|
+
puts
|
98
|
+
puts "Invalid resource: #{resource}"
|
99
|
+
puts
|
100
|
+
print_valid_resources
|
101
|
+
exit
|
102
|
+
end
|
103
|
+
|
104
|
+
# Must have been a valid resource; do we have a valid command
|
105
|
+
unless valid_command?(resource, command)
|
106
|
+
puts @optparse
|
107
|
+
puts
|
108
|
+
puts "Invalid command (#{command}) for resource (#{resource})"
|
109
|
+
puts
|
110
|
+
print_valid_resources
|
111
|
+
exit
|
112
|
+
end
|
113
|
+
|
114
|
+
# Check the API token
|
115
|
+
if @options[:api_token].nil?
|
116
|
+
puts @optparse
|
117
|
+
puts
|
118
|
+
puts "Must specify an API token either via the environment variable 'API_TOKEN' or via the -t option"
|
119
|
+
puts
|
120
|
+
print_valid_resources
|
121
|
+
exit
|
122
|
+
end
|
123
|
+
|
124
|
+
[ @options, resource, command ]
|
125
|
+
end
|
126
|
+
|
127
|
+
def invoke_command
|
128
|
+
options, resource, command = parse_options!
|
129
|
+
|
130
|
+
eval("Resources::#{ActiveSupport::Inflector.camelize(resource)}").new(options).send(command.to_sym)
|
131
|
+
end
|
132
|
+
|
133
|
+
private
|
134
|
+
|
135
|
+
def valid_command?(resource, command)
|
136
|
+
return false if resource.blank? || command.blank?
|
137
|
+
eval("Resources::#{ActiveSupport::Inflector.camelize(resource)}").instance_methods(false).include?(command.to_sym)
|
138
|
+
end
|
139
|
+
|
140
|
+
def valid_resource?(resource)
|
141
|
+
Resources.constants.map { | const | ActiveSupport::Inflector.underscore(const.to_s) }.include?(resource)
|
142
|
+
end
|
143
|
+
|
144
|
+
def print_valid_resources
|
145
|
+
puts "Valid Resources:"
|
146
|
+
Resources.constants.each do | const |
|
147
|
+
resource_string = ActiveSupport::Inflector.underscore(const.to_s)
|
148
|
+
puts " - #{resource_string}"
|
149
|
+
puts " Commands: #{print_valid_commands(resource_string)} Default: list"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def print_valid_commands(resource)
|
154
|
+
eval("Resources::#{ActiveSupport::Inflector.camelize(resource)}").instance_methods(false).map { | command | command.to_s }.join(", ")
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'active_support/core_ext/object'
|
3
|
+
require 'pvdgm-svc-client/service_mgr_options'
|
4
|
+
require 'pvdgm-svc-client/base_resource'
|
5
|
+
|
6
|
+
# Load all the prompters
|
7
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'pvdgm-svc-client/prompters/*.rb')).each do | prompter_path |
|
8
|
+
require File.join('pvdgm-svc-client/prompters', File.basename(prompter_path))
|
9
|
+
end
|
10
|
+
|
11
|
+
# Load all the resources
|
12
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'pvdgm-svc-client/resources/*.rb')).each do | resource_path |
|
13
|
+
require File.join('pvdgm-svc-client/resources', File.basename(resource_path))
|
14
|
+
end
|
15
|
+
|
16
|
+
|