admin_module 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.rspec +3 -0
- data/Gemfile +14 -0
- data/Guardfile +24 -0
- data/LICENSE +22 -0
- data/README.md +281 -0
- data/Rakefile +98 -0
- data/admin_module.gemspec +34 -0
- data/bin/admin_module +13 -0
- data/lib/admin_module.rb +260 -0
- data/lib/admin_module/cli.rb +54 -0
- data/lib/admin_module/cli/cli_guideline.rb +80 -0
- data/lib/admin_module/cli/cli_lock.rb +149 -0
- data/lib/admin_module/cli/cli_parameter.rb +66 -0
- data/lib/admin_module/cli/cli_task.rb +149 -0
- data/lib/admin_module/cli_old.rb +92 -0
- data/lib/admin_module/client.rb +146 -0
- data/lib/admin_module/command.rb +25 -0
- data/lib/admin_module/command/client_access.rb +43 -0
- data/lib/admin_module/command/config.rb +310 -0
- data/lib/admin_module/command/dc.rb +110 -0
- data/lib/admin_module/command/gdl.rb +71 -0
- data/lib/admin_module/command/lock.rb +110 -0
- data/lib/admin_module/command/ppm.rb +142 -0
- data/lib/admin_module/command/rule.rb +77 -0
- data/lib/admin_module/command/ruleset.rb +56 -0
- data/lib/admin_module/command/snapshot.rb +110 -0
- data/lib/admin_module/command/stage.rb +131 -0
- data/lib/admin_module/command/task.rb +110 -0
- data/lib/admin_module/config_helper.rb +33 -0
- data/lib/admin_module/dc.rb +133 -0
- data/lib/admin_module/guideline.rb +86 -0
- data/lib/admin_module/locks.rb +142 -0
- data/lib/admin_module/page_factory.rb +55 -0
- data/lib/admin_module/pages.rb +120 -0
- data/lib/admin_module/pages/dc_definitions_page.rb +73 -0
- data/lib/admin_module/pages/dc_detail_page.rb +187 -0
- data/lib/admin_module/pages/guideline_page.rb +35 -0
- data/lib/admin_module/pages/guideline_version_page.rb +140 -0
- data/lib/admin_module/pages/guidelines_page.rb +59 -0
- data/lib/admin_module/pages/guidelines_version_all_page.rb +116 -0
- data/lib/admin_module/pages/lock_definition_page.rb +178 -0
- data/lib/admin_module/pages/lock_definitions_page.rb +69 -0
- data/lib/admin_module/pages/login_page.rb +75 -0
- data/lib/admin_module/pages/parameter_page.rb +62 -0
- data/lib/admin_module/pages/parameters_page.rb +46 -0
- data/lib/admin_module/pages/ppms_page.rb +110 -0
- data/lib/admin_module/pages/rule_page.rb +68 -0
- data/lib/admin_module/pages/rules_page.rb +74 -0
- data/lib/admin_module/pages/ruleset_page.rb +64 -0
- data/lib/admin_module/pages/rulesets_page.rb +60 -0
- data/lib/admin_module/pages/select_list_syncable.rb +64 -0
- data/lib/admin_module/pages/snapshot_definitions_page.rb +73 -0
- data/lib/admin_module/pages/snapshot_detail_page.rb +246 -0
- data/lib/admin_module/pages/workflow_detail_page.rb +451 -0
- data/lib/admin_module/pages/workflow_detail_task_addl_detail_page.rb +172 -0
- data/lib/admin_module/pages/workflow_detail_task_mappings_page.rb +163 -0
- data/lib/admin_module/pages/workflow_detail_task_screens_page.rb +75 -0
- data/lib/admin_module/pages/workflow_details_page.rb +67 -0
- data/lib/admin_module/pages/workflow_task_page.rb +107 -0
- data/lib/admin_module/pages/workflow_tasks_page.rb +111 -0
- data/lib/admin_module/ppms.rb +78 -0
- data/lib/admin_module/rake.rb +22 -0
- data/lib/admin_module/rake/dc_tasks.rb +185 -0
- data/lib/admin_module/rake/deploy_task.rb +59 -0
- data/lib/admin_module/rake/gdl_tasks.rb +189 -0
- data/lib/admin_module/rake/lock_tasks.rb +189 -0
- data/lib/admin_module/rake/parameter_task.rb +86 -0
- data/lib/admin_module/rake/ppm_tasks.rb +248 -0
- data/lib/admin_module/rake/rule_tasks.rb +157 -0
- data/lib/admin_module/rake/snapshot_tasks.rb +223 -0
- data/lib/admin_module/rake/stage_tasks.rb +197 -0
- data/lib/admin_module/rake/stages_task.rb +197 -0
- data/lib/admin_module/rake/task_tasks.rb +189 -0
- data/lib/admin_module/rules.rb +50 -0
- data/lib/admin_module/rulesets.rb +42 -0
- data/lib/admin_module/snapshots.rb +133 -0
- data/lib/admin_module/stages.rb +171 -0
- data/lib/admin_module/tasks.rb +147 -0
- data/lib/admin_module/version.rb +3 -0
- data/old_spec/lib/admin_module/cli_configuration_spec.rb +126 -0
- data/old_spec/lib/admin_module/cli_create_stage_spec.rb +89 -0
- data/old_spec/lib/admin_module/cli_delete_rule_spec.rb +57 -0
- data/old_spec/lib/admin_module/cli_deploy_spec.rb +57 -0
- data/old_spec/lib/admin_module/cli_export_locks_spec.rb +62 -0
- data/old_spec/lib/admin_module/cli_export_stages_spec.rb +62 -0
- data/old_spec/lib/admin_module/cli_guidelines_version_all_spec.rb +58 -0
- data/old_spec/lib/admin_module/cli_import_locks_spec.rb +153 -0
- data/old_spec/lib/admin_module/cli_import_stages_spec.rb +173 -0
- data/old_spec/lib/admin_module/cli_modify_locks_spec.rb +128 -0
- data/old_spec/lib/admin_module/cli_modify_stages_spec.rb +88 -0
- data/old_spec/lib/admin_module/cli_rename_rule_spec.rb +53 -0
- data/old_spec/lib/admin_module/cli_rename_ruleset_spec.rb +53 -0
- data/old_spec/lib/admin_module/cli_var_spec.rb +41 -0
- data/old_spec/lib/admin_module/rake/deploy_task_spec.rb +85 -0
- data/old_spec/lib/admin_module/rake/parameter_task_spec.rb +58 -0
- data/old_spec/lib/admin_module/rake/rules_task_spec.rb +75 -0
- data/spec/data/build/test1.xml +0 -0
- data/spec/data/build/test2.xml +1 -0
- data/spec/data/import_dcs.yml +31 -0
- data/spec/data/import_locks.yml +4 -0
- data/spec/data/import_snapshots.yml +35 -0
- data/spec/data/import_stages.yml +4 -0
- data/spec/data/import_tasks.yml +25 -0
- data/spec/data/patch-test.xml +1 -0
- data/spec/data/remove_test_del_rule.xml +1 -0
- data/spec/data/stages.yml +518 -0
- data/spec/data/test_del_rule.xml +1 -0
- data/spec/lib/admin_module/admin_module_spec.rb +175 -0
- data/spec/lib/admin_module/cli_spec.rb +36 -0
- data/spec/lib/admin_module/client_spec.rb +158 -0
- data/spec/lib/admin_module/command/config_spec.rb +477 -0
- data/spec/lib/admin_module/command/dc_spec.rb +202 -0
- data/spec/lib/admin_module/command/gdl_spec.rb +139 -0
- data/spec/lib/admin_module/command/lock_spec.rb +207 -0
- data/spec/lib/admin_module/command/rule_spec.rb +163 -0
- data/spec/lib/admin_module/command/ruleset_spec.rb +124 -0
- data/spec/lib/admin_module/command/snapshot_spec.rb +202 -0
- data/spec/lib/admin_module/command/stage_spec.rb +259 -0
- data/spec/lib/admin_module/command/task_spec.rb +207 -0
- data/spec/lib/admin_module/dc_spec.rb +192 -0
- data/spec/lib/admin_module/guideline_spec.rb +177 -0
- data/spec/lib/admin_module/locks_spec.rb +188 -0
- data/spec/lib/admin_module/rules_spec.rb +110 -0
- data/spec/lib/admin_module/rulesets_spec.rb +85 -0
- data/spec/lib/admin_module/snapshot_spec.rb +192 -0
- data/spec/lib/admin_module/stages_spec.rb +179 -0
- data/spec/lib/admin_module/tasks_spec.rb +196 -0
- data/spec/spec_helper.rb +54 -0
- data/spec/support/asserts.rb +13 -0
- data/spec/support/data_clearing.rb +28 -0
- data/spec/support/dirs.rb +54 -0
- data/spec/support/helpers.rb +83 -0
- data/spec/support/lock.rb +23 -0
- data/spec/support/mocks.rb +213 -0
- data/spec/support/snapshot.rb +28 -0
- data/spec/support/stage.rb +22 -0
- data/spec/support/stage_factory.rb +138 -0
- data/spec/support/task.rb +23 -0
- metadata +381 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'admin_module/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "admin_module"
|
8
|
+
spec.version = AdminModule::VERSION
|
9
|
+
spec.authors = ["Jeff McAffee"]
|
10
|
+
spec.email = ["jeff@ktechsystems.com"]
|
11
|
+
spec.description = %q{Command line interface for Admin Module}
|
12
|
+
spec.summary = %q{Admin Module CLI}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "cucumber", "~> 1.3.9"
|
24
|
+
spec.add_development_dependency "rspec", "~> 3.2.0"
|
25
|
+
spec.add_development_dependency "guard"
|
26
|
+
spec.add_development_dependency "guard-rspec"
|
27
|
+
#spec.add_development_dependency "pry-byebug", "~> 1.3.3"
|
28
|
+
spec.add_development_dependency "pry", "~> 0.10"
|
29
|
+
|
30
|
+
spec.add_runtime_dependency "nokogiri"
|
31
|
+
spec.add_runtime_dependency "page-object"
|
32
|
+
spec.add_runtime_dependency "thor"
|
33
|
+
spec.add_runtime_dependency "ktutils"
|
34
|
+
end
|
data/bin/admin_module
ADDED
data/lib/admin_module.rb
ADDED
@@ -0,0 +1,260 @@
|
|
1
|
+
require "admin_module/version"
|
2
|
+
require 'admin_module/config_helper'
|
3
|
+
require "admin_module/cli"
|
4
|
+
require 'admin_module/page_factory'
|
5
|
+
require 'admin_module/pages'
|
6
|
+
require 'admin_module/guideline'
|
7
|
+
require 'admin_module/rulesets'
|
8
|
+
require 'admin_module/rules'
|
9
|
+
require 'admin_module/stages'
|
10
|
+
require 'admin_module/locks'
|
11
|
+
require 'admin_module/dc'
|
12
|
+
require 'admin_module/snapshots'
|
13
|
+
require 'admin_module/tasks'
|
14
|
+
require 'admin_module/ppms'
|
15
|
+
require 'admin_module/client'
|
16
|
+
|
17
|
+
if ENV['DEBUG'].nil?
|
18
|
+
$debug = false
|
19
|
+
else
|
20
|
+
$debug = true
|
21
|
+
end
|
22
|
+
|
23
|
+
class AuthenticationRequired < StandardError
|
24
|
+
end
|
25
|
+
|
26
|
+
module AdminModule
|
27
|
+
CONFIG_FILE_NAME = '.admin_module'
|
28
|
+
|
29
|
+
class << self
|
30
|
+
attr_accessor :configuration
|
31
|
+
attr_accessor :client
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Setup admin_module configuration
|
36
|
+
#
|
37
|
+
# Attempts to find and load a configuration file the first time
|
38
|
+
# it's requested. If a config file cannot be found on in the current
|
39
|
+
# directory tree (moving towards trunk, not the leaves), a default
|
40
|
+
# configuration object is created.
|
41
|
+
#
|
42
|
+
# If a block is provided, the configuration object is yielded to the block
|
43
|
+
# after the configuration is loaded/created.
|
44
|
+
#
|
45
|
+
|
46
|
+
def self.configure
|
47
|
+
if self.configuration.nil?
|
48
|
+
unless self.load_configuration
|
49
|
+
self.configuration = Configuration.new
|
50
|
+
end
|
51
|
+
end
|
52
|
+
yield(configuration) if block_given?
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Walk up the directory tree from current working dir (pwd) till a file
|
57
|
+
# named .admin_module is found
|
58
|
+
#
|
59
|
+
# Returns file path if found, nil if not.
|
60
|
+
#
|
61
|
+
|
62
|
+
def self.find_config_path
|
63
|
+
path = Pathname(Pathname.pwd).ascend{|d| h=d+CONFIG_FILE_NAME; break h if h.file?}
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# Write configuration to disk
|
68
|
+
#
|
69
|
+
# Writes to current working dir (pwd) if path is nil
|
70
|
+
#
|
71
|
+
# Returns path of emitted file
|
72
|
+
#
|
73
|
+
|
74
|
+
def self.save_configuration(path = nil)
|
75
|
+
# If no path provided, see if we can find one in the dir tree.
|
76
|
+
if path.nil?
|
77
|
+
path = find_config_path
|
78
|
+
end
|
79
|
+
|
80
|
+
# Still no path? Use the current working dir.
|
81
|
+
if path.nil?
|
82
|
+
path = Pathname.pwd
|
83
|
+
end
|
84
|
+
|
85
|
+
unless path.to_s.end_with?('/' + CONFIG_FILE_NAME)
|
86
|
+
path = Pathname(path) + CONFIG_FILE_NAME
|
87
|
+
end
|
88
|
+
|
89
|
+
path = Pathname(path).expand_path
|
90
|
+
File.write(path, YAML.dump(configuration))
|
91
|
+
|
92
|
+
path
|
93
|
+
end
|
94
|
+
|
95
|
+
##
|
96
|
+
# Load the configuration from disk
|
97
|
+
#
|
98
|
+
# Returns true if config file found and loaded, false otherwise.
|
99
|
+
#
|
100
|
+
|
101
|
+
def self.load_configuration(path = nil)
|
102
|
+
# If no path provided, see if we can find one in the dir tree.
|
103
|
+
if path.nil?
|
104
|
+
path = find_config_path
|
105
|
+
end
|
106
|
+
|
107
|
+
return false if path.nil?
|
108
|
+
return false unless Pathname(path).exist?
|
109
|
+
|
110
|
+
File.open(path, 'r') do |f|
|
111
|
+
self.configuration = YAML.load(f)
|
112
|
+
puts "configuration loaded from #{path}" if $debug
|
113
|
+
end
|
114
|
+
|
115
|
+
true
|
116
|
+
end
|
117
|
+
|
118
|
+
class Configuration
|
119
|
+
attr_accessor :default_environment
|
120
|
+
attr_accessor :default_comment
|
121
|
+
attr_accessor :credentials
|
122
|
+
attr_accessor :base_urls
|
123
|
+
attr_accessor :xmlmaps
|
124
|
+
attr_accessor :aliases
|
125
|
+
attr_accessor :page_urls
|
126
|
+
|
127
|
+
# Browser timeout in seconds. Default: 360 (6 mins).
|
128
|
+
attr_accessor :browser_timeout
|
129
|
+
|
130
|
+
|
131
|
+
def initialize
|
132
|
+
reset
|
133
|
+
end
|
134
|
+
|
135
|
+
def reset
|
136
|
+
@default_environment = :dev
|
137
|
+
@current_env = nil
|
138
|
+
|
139
|
+
@default_comment = 'no comment'
|
140
|
+
|
141
|
+
@credentials = {}
|
142
|
+
#@credentials = { dev: [ ENV['HSBC_DEV_USER'], ENV['HSBC_DEV_PASSWORD'] ],
|
143
|
+
# dev2: [ ENV['HSBC_DEV2_USER'], ENV['HSBC_DEV2_PASSWORD'] ],
|
144
|
+
# sit: [ ENV['HSBC_SIT_USER'], ENV['HSBC_SIT_PASSWORD'] ],
|
145
|
+
# uat: [ ENV['HSBC_UAT_USER'], ENV['HSBC_UAT_PASSWORD'] ] }
|
146
|
+
|
147
|
+
@base_urls = { dev: "http://207.38.119.211/fap2Dev/Admin",
|
148
|
+
dev2: "http://207.38.119.211/fap2Dev2/Admin",
|
149
|
+
sit: "http://207.38.119.211/fap2SIT/Admin",
|
150
|
+
uat: "http://207.38.119.211/fap2UAT/Admin" }
|
151
|
+
|
152
|
+
@xmlmaps = {}
|
153
|
+
|
154
|
+
@aliases = {}
|
155
|
+
|
156
|
+
@page_urls = {
|
157
|
+
'ParametersPage' => "/admin/decision/parameters.aspx",
|
158
|
+
'ParameterPage' => "/admin/decision/parameter.aspx",
|
159
|
+
}
|
160
|
+
|
161
|
+
@browser_timeout = 360
|
162
|
+
end
|
163
|
+
|
164
|
+
##
|
165
|
+
# Set the current environment.
|
166
|
+
#
|
167
|
+
|
168
|
+
def current_env=(env)
|
169
|
+
env = env.to_sym
|
170
|
+
|
171
|
+
fail "Cannot set current_env to un-configured environment: #{env}" unless @base_urls.key? env
|
172
|
+
|
173
|
+
# This value is NOT included when dumping to YAML.
|
174
|
+
# See Configurtion#encode_with
|
175
|
+
@current_env = env.to_sym
|
176
|
+
end
|
177
|
+
|
178
|
+
##
|
179
|
+
# Return the current environment.
|
180
|
+
# Will return the default environment if current environment is not set.
|
181
|
+
#
|
182
|
+
|
183
|
+
def current_env
|
184
|
+
return @default_environment if @current_env.nil?
|
185
|
+
@current_env
|
186
|
+
end
|
187
|
+
|
188
|
+
def base_url
|
189
|
+
@base_urls[current_env]
|
190
|
+
end
|
191
|
+
|
192
|
+
def url page_class
|
193
|
+
suffix = @page_urls[page_class.to_s.split('::').last]
|
194
|
+
raise "Unkown page [#{page_class.to_s}]" if suffix.nil?
|
195
|
+
base_url + suffix
|
196
|
+
end
|
197
|
+
|
198
|
+
def xmlmap xmlfile
|
199
|
+
gdlname = xmlmaps[File.basename(xmlfile, '.xml')]
|
200
|
+
if gdlname.nil?
|
201
|
+
errmsg = "No guideline has been mapped for #{File.basename(xmlfile)}"
|
202
|
+
trymsg = "Have you configured your gdl mappings?"
|
203
|
+
trymsg2= " Try: admin_module config add xmlmap <xmlfile> <gdlname>"
|
204
|
+
fail("#{errmsg}\n\n#{trymsg}\n#{trymsg2}") if gdlname.nil?
|
205
|
+
end
|
206
|
+
gdlname
|
207
|
+
end
|
208
|
+
|
209
|
+
def user_credentials
|
210
|
+
@credentials[current_env]
|
211
|
+
end
|
212
|
+
|
213
|
+
##
|
214
|
+
# Control which instance vars are emitted when dumped to YAML.
|
215
|
+
#
|
216
|
+
|
217
|
+
def encode_with(coder)
|
218
|
+
vars = instance_variables.map { |x| x.to_s }
|
219
|
+
vars = vars - ["@current_env"]
|
220
|
+
|
221
|
+
vars.each do |var|
|
222
|
+
var_val = eval(var)
|
223
|
+
coder[var.gsub('@', '')] = var_val
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end # Configuration
|
227
|
+
|
228
|
+
|
229
|
+
class Runner
|
230
|
+
def initialize(argv, client = AdminModule::Client.new, exit_code = true)
|
231
|
+
@argv = argv
|
232
|
+
AdminModule.client = client
|
233
|
+
@exit_code = exit_code
|
234
|
+
end
|
235
|
+
|
236
|
+
def execute!
|
237
|
+
exit_code = begin
|
238
|
+
|
239
|
+
# Run the Thor app
|
240
|
+
AdminModule::CLI.start(@argv)
|
241
|
+
|
242
|
+
# Thor::Base#start does not have a return value,
|
243
|
+
# assume success if no exception is thrown.
|
244
|
+
0
|
245
|
+
rescue StandardError => e
|
246
|
+
b = e.backtrace
|
247
|
+
b.unshift("#{b.shift}: #{e.message} (#{e.class})")
|
248
|
+
puts(b.map { |s| "\tfrom #{s}"}.join("\n"))
|
249
|
+
1
|
250
|
+
end
|
251
|
+
|
252
|
+
# Return the exit code
|
253
|
+
exit(exit_code) if @exit_code
|
254
|
+
end
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
# Call configure to force creation of the configuration object.
|
259
|
+
AdminModule.configure
|
260
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
##############################################################################
|
2
|
+
# File:: cli.rb
|
3
|
+
# Purpose:: Admin Module command line interface
|
4
|
+
#
|
5
|
+
# Author:: Jeff McAffee 06/28/2014
|
6
|
+
#
|
7
|
+
##############################################################################
|
8
|
+
|
9
|
+
require 'thor'
|
10
|
+
require 'admin_module/command'
|
11
|
+
|
12
|
+
|
13
|
+
module AdminModule
|
14
|
+
class CLI < Thor
|
15
|
+
|
16
|
+
def self.start(*)
|
17
|
+
super
|
18
|
+
rescue Exception => e
|
19
|
+
raise e
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(*args)
|
23
|
+
super
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "gdl [COMMAND]", "run a guideline command"
|
27
|
+
subcommand "gdl", AdminModule::Command::Gdl
|
28
|
+
|
29
|
+
desc "config [COMMAND]", "modify configuration values"
|
30
|
+
subcommand "config", AdminModule::Command::Config
|
31
|
+
|
32
|
+
desc "ruleset [COMMAND]", "run a ruleset command"
|
33
|
+
subcommand "ruleset", AdminModule::Command::Ruleset
|
34
|
+
|
35
|
+
desc "rule [COMMAND]", "run a rule command"
|
36
|
+
subcommand "rule", AdminModule::Command::Rule
|
37
|
+
|
38
|
+
desc "lock [COMMAND]", "run a lock command"
|
39
|
+
subcommand "lock", AdminModule::Command::Lock
|
40
|
+
|
41
|
+
desc "stage [COMMAND]", "run a stage command"
|
42
|
+
subcommand "stage", AdminModule::Command::Stage
|
43
|
+
|
44
|
+
desc "dc [COMMAND]", "run a data clearing command"
|
45
|
+
subcommand "dc", AdminModule::Command::Dc
|
46
|
+
|
47
|
+
desc "snapshot [COMMAND]", "run a snapshot command"
|
48
|
+
subcommand "snapshot", AdminModule::Command::Snapshot
|
49
|
+
|
50
|
+
desc "task [COMMAND]", "run a task command"
|
51
|
+
subcommand "task", AdminModule::Command::Task
|
52
|
+
end # CLI
|
53
|
+
end # AdminModule
|
54
|
+
|
@@ -0,0 +1,80 @@
|
|
1
|
+
##############################################################################
|
2
|
+
# File:: cli.rb
|
3
|
+
# Purpose:: filedescription
|
4
|
+
#
|
5
|
+
# Author:: Jeff McAffee 11/15/2013
|
6
|
+
# Copyright:: Copyright (c) 2013, kTech Systems LLC. All rights reserved.
|
7
|
+
# Website:: http://ktechsystems.com
|
8
|
+
##############################################################################
|
9
|
+
|
10
|
+
require 'admin_module/pages'
|
11
|
+
|
12
|
+
|
13
|
+
class AdminModule::CLI
|
14
|
+
include AdminModule::Pages
|
15
|
+
|
16
|
+
|
17
|
+
##
|
18
|
+
# Deploy an array of source files to the current environment.
|
19
|
+
#
|
20
|
+
# +source_files+ array of files, each file's basename must be in the configured aliases.
|
21
|
+
# +comments+ to be added to Version Notes area. Defaults to 'auto upload'
|
22
|
+
|
23
|
+
def deploy_files source_files, comments = nil
|
24
|
+
source_files.each do |src|
|
25
|
+
deploy src, File.basename(src, '.xml'), comments
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Deploy a source file to a guideline in the current environment.
|
31
|
+
#
|
32
|
+
# +source_file+ full path to xml file to upload
|
33
|
+
# +gdl_name_or_alias+ guideline name (or alias) to version
|
34
|
+
# +comments+ to be added to Version Notes area. Defaults to 'auto upload'
|
35
|
+
|
36
|
+
def deploy source_file, gdl_name_or_alias, comments = nil
|
37
|
+
source_file = Array(source_file)[0]
|
38
|
+
raise IOError.new("Missing source file [#{source_file}]") unless File.exists? source_file
|
39
|
+
source_file = File.expand_path(source_file)
|
40
|
+
|
41
|
+
gdl_name_or_alias = File.basename(source_file, '.xml') if gdl_name_or_alias.nil?
|
42
|
+
|
43
|
+
login
|
44
|
+
|
45
|
+
gdl_name = alias_to_name(gdl_name_or_alias)
|
46
|
+
|
47
|
+
gdl_page_url = GuidelinesPage.new(browser, base_url).
|
48
|
+
open_guideline(gdl_name)
|
49
|
+
|
50
|
+
version_gdl_url = GuidelinePage.new(browser, gdl_page_url).
|
51
|
+
add_version()
|
52
|
+
|
53
|
+
GuidelineVersionPage.new(browser, version_gdl_url).
|
54
|
+
upload(source_file, comments)
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# Retrieve a guideline name from the configured aliases
|
59
|
+
|
60
|
+
def alias_to_name gdl_name_or_alias
|
61
|
+
aliases = AdminModule.configuration.aliases
|
62
|
+
|
63
|
+
gdl_name = aliases[gdl_name_or_alias]
|
64
|
+
gdl_name = gdl_name_or_alias if gdl_name.nil?
|
65
|
+
|
66
|
+
gdl_name
|
67
|
+
end
|
68
|
+
|
69
|
+
###
|
70
|
+
# Version all guidelines
|
71
|
+
|
72
|
+
def version_all gdl_names, comments = nil
|
73
|
+
login
|
74
|
+
|
75
|
+
version_all_page_url = GuidelinesPage.new(browser, base_url).version_all
|
76
|
+
page = GuidelinesVersionAllPage.new(browser, version_all_page_url)
|
77
|
+
|
78
|
+
page.version gdl_names, comments
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
##############################################################################
|
2
|
+
# File:: cli_lock.rb
|
3
|
+
# Purpose:: filedescription
|
4
|
+
#
|
5
|
+
# Author:: Jeff McAffee 11/15/2013
|
6
|
+
# Copyright:: Copyright (c) 2013, kTech Systems LLC. All rights reserved.
|
7
|
+
# Website:: http://ktechsystems.com
|
8
|
+
##############################################################################
|
9
|
+
|
10
|
+
require 'admin_module/pages'
|
11
|
+
|
12
|
+
|
13
|
+
class AdminModule::CLI
|
14
|
+
include AdminModule::Pages
|
15
|
+
|
16
|
+
|
17
|
+
##
|
18
|
+
# Retrieve lock configuration data from the current environment
|
19
|
+
|
20
|
+
def get_lock lock_name
|
21
|
+
login
|
22
|
+
|
23
|
+
begin
|
24
|
+
lock_def_url = LockDefinitionsPage.new(browser, base_url).
|
25
|
+
modify_lock(lock_name)
|
26
|
+
rescue Watir::Exception::NoValueFoundException => e
|
27
|
+
raise ArgumentError, "Lock [#{lock_name}] not found.\n\n#{e.message}"
|
28
|
+
end
|
29
|
+
|
30
|
+
lock_data = LockDefinitionPage.new(browser, lock_def_url).get_lock_data
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# Return a list of lock names in the current environment
|
35
|
+
|
36
|
+
def current_lock_names
|
37
|
+
login
|
38
|
+
LockDefinitionsPage.new(browser, base_url).locks_options
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# Return configuration data for all locks in the current environment
|
43
|
+
|
44
|
+
def all_locks
|
45
|
+
locks = {}
|
46
|
+
|
47
|
+
current_lock_names.each do |name|
|
48
|
+
locks[name] = get_lock(name)
|
49
|
+
end
|
50
|
+
|
51
|
+
locks
|
52
|
+
end
|
53
|
+
|
54
|
+
##
|
55
|
+
# Test lock data structure for validity
|
56
|
+
#
|
57
|
+
# Required:
|
58
|
+
# at least 1 parameter OR dts
|
59
|
+
|
60
|
+
def valid_lock_data? lock_data
|
61
|
+
if !lock_data.key?(:parameters) || lock_data[:parameters].empty?
|
62
|
+
if !lock_data.key?(:dts) || lock_data[:dts].empty?
|
63
|
+
return false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
true
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Test lock data structure for valid name
|
71
|
+
#
|
72
|
+
|
73
|
+
def lock_data_has_name? lock_data
|
74
|
+
return false unless lock_data.key?(:name)
|
75
|
+
return false if lock_data[:name].empty?
|
76
|
+
true
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# Create a lock in the current environment
|
81
|
+
|
82
|
+
def create_lock lock_data
|
83
|
+
raise ArgumentError, "Invalid lock data: #{lock_data.inspect}" unless valid_lock_data?(lock_data)
|
84
|
+
raise ArgumentError, "Missing lock name: #{lock_data.inspect}" unless lock_data_has_name?(lock_data)
|
85
|
+
|
86
|
+
login
|
87
|
+
|
88
|
+
lock_def_url = LockDefinitionsPage.new(browser, base_url).
|
89
|
+
create_lock(lock_data)
|
90
|
+
|
91
|
+
LockDefinitionPage.new(browser, lock_def_url).set_lock_data lock_data
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
# Modify an existing lock in the current environment
|
96
|
+
|
97
|
+
def modify_lock lock_data, lock_name = nil
|
98
|
+
lock_name ||= lock_data[:name]
|
99
|
+
raise ArgumentError, "Invalid lock data: #{lock_data.inspect}" unless valid_lock_data?(lock_data)
|
100
|
+
raise ArgumentError, "Missing lock name" if (lock_name.nil? || lock_name.empty?)
|
101
|
+
|
102
|
+
# Make sure we populate the data's name param if empty so we don't try to write
|
103
|
+
# and save an empty name.
|
104
|
+
if lock_data[:name].nil? || lock_data[:name].empty?
|
105
|
+
lock_data[:name] = lock_name
|
106
|
+
end
|
107
|
+
|
108
|
+
login
|
109
|
+
|
110
|
+
lock_def_url = LockDefinitionsPage.new(browser, base_url).
|
111
|
+
modify_lock(lock_name)
|
112
|
+
|
113
|
+
LockDefinitionPage.new(browser, lock_def_url).set_lock_data lock_data
|
114
|
+
end
|
115
|
+
|
116
|
+
##
|
117
|
+
# Export all lock configurations in the current environment to a file.
|
118
|
+
|
119
|
+
def export_locks file_name
|
120
|
+
FileUtils.mkdir_p File.dirname(file_name)
|
121
|
+
File.open(file_name, 'w') do |f|
|
122
|
+
# Write array of lock hashes.
|
123
|
+
f << YAML.dump(all_locks)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
##
|
128
|
+
# Import lock configurations into the current environment from a file.
|
129
|
+
|
130
|
+
def import_locks file_name
|
131
|
+
raise IOError, "File not found: #{file_name}" unless File.exists?(file_name)
|
132
|
+
|
133
|
+
locks = {}
|
134
|
+
File.open(file_name, 'r') do |f|
|
135
|
+
# Write array of lock hashes.
|
136
|
+
locks = YAML.load(f)
|
137
|
+
end
|
138
|
+
|
139
|
+
existing_locks = current_lock_names
|
140
|
+
|
141
|
+
locks.each do |name, data|
|
142
|
+
if existing_locks.include?(name)
|
143
|
+
modify_lock(data, name)
|
144
|
+
else
|
145
|
+
create_lock(data)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|