admin_module 0.1.4
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.
- 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,133 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: dc.rb
|
|
3
|
+
# Purpose:: Interface to DataClearing functionality in admin module1
|
|
4
|
+
#
|
|
5
|
+
# Author:: Jeff McAffee 04/01/2015
|
|
6
|
+
##############################################################################
|
|
7
|
+
|
|
8
|
+
require 'admin_module/pages'
|
|
9
|
+
|
|
10
|
+
module AdminModule
|
|
11
|
+
|
|
12
|
+
class Snapshots
|
|
13
|
+
attr_reader :page_factory
|
|
14
|
+
|
|
15
|
+
def initialize page_factory
|
|
16
|
+
@page_factory = page_factory
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def list
|
|
20
|
+
snapshot_page.get_definitions
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def rename src, dest
|
|
24
|
+
src = assert_definition_exists src
|
|
25
|
+
dest = assert_definition_does_not_exist dest
|
|
26
|
+
|
|
27
|
+
snapshot_page
|
|
28
|
+
.modify(src)
|
|
29
|
+
.set_name(dest)
|
|
30
|
+
.save
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def import file_path
|
|
34
|
+
assert_file_exists file_path
|
|
35
|
+
|
|
36
|
+
defns = {}
|
|
37
|
+
File.open(file_path, 'r') do |f|
|
|
38
|
+
# Read array of definition hashes
|
|
39
|
+
defns = YAML.load(f)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
existing_defns = list
|
|
43
|
+
|
|
44
|
+
defns.each do |name, data|
|
|
45
|
+
if existing_defns.include?(name)
|
|
46
|
+
update(data)
|
|
47
|
+
else
|
|
48
|
+
create(data)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def export file_path
|
|
54
|
+
defns = list
|
|
55
|
+
export_data = {}
|
|
56
|
+
|
|
57
|
+
defns.each do |defn|
|
|
58
|
+
export_data[defn] = read defn
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
File.open(file_path, 'w') do |f|
|
|
62
|
+
f.write export_data.to_yaml
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
rescue Exception => e
|
|
66
|
+
if e.message.include? 'No such file or directory'
|
|
67
|
+
raise IOError, "No such directory - #{file_path}"
|
|
68
|
+
else
|
|
69
|
+
raise e
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def read name
|
|
74
|
+
name = assert_definition_exists name
|
|
75
|
+
|
|
76
|
+
snapshot_page
|
|
77
|
+
.modify(name)
|
|
78
|
+
.get_definition_data
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
private
|
|
82
|
+
|
|
83
|
+
def snapshot_page
|
|
84
|
+
page_factory.snapshot_definitions_page
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def assert_definition_exists name
|
|
88
|
+
unless list.include? name
|
|
89
|
+
fail ArgumentError.new("A data clearing definition named '#{name}' does not exist")
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
name
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def assert_definition_does_not_exist name
|
|
96
|
+
if list.include? name
|
|
97
|
+
fail ArgumentError.new("A data clearing definition named '#{name}' already exists")
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
name
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def assert_file_exists file_path
|
|
104
|
+
raise IOError, "File not found: #{file_path}" unless File.exists?(file_path)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def update data
|
|
108
|
+
name = assert_definition_exists( extract_defn_name(data) )
|
|
109
|
+
|
|
110
|
+
snapshot_page
|
|
111
|
+
.modify(name)
|
|
112
|
+
.set_definition_data(data)
|
|
113
|
+
.save
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def create data
|
|
117
|
+
name = assert_definition_does_not_exist( extract_defn_name(data) )
|
|
118
|
+
|
|
119
|
+
snapshot_page
|
|
120
|
+
.add
|
|
121
|
+
.set_definition_data(data)
|
|
122
|
+
.save
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def extract_defn_name data
|
|
126
|
+
name = if data.is_a? Hash
|
|
127
|
+
data[:name]
|
|
128
|
+
else
|
|
129
|
+
String(data)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end # module
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: stages.rb
|
|
3
|
+
# Purpose:: filedescription
|
|
4
|
+
#
|
|
5
|
+
# Author:: Jeff McAffee 2015-03-09
|
|
6
|
+
# Copyright:: Copyright (c) 2015, kTech Systems LLC. All rights reserved.
|
|
7
|
+
# Website:: http://ktechsystems.com
|
|
8
|
+
##############################################################################
|
|
9
|
+
|
|
10
|
+
require 'admin_module/pages'
|
|
11
|
+
|
|
12
|
+
module AdminModule
|
|
13
|
+
|
|
14
|
+
class Stages
|
|
15
|
+
attr_reader :page_factory
|
|
16
|
+
|
|
17
|
+
def initialize page_factory
|
|
18
|
+
@page_factory = page_factory
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
##
|
|
22
|
+
# Return a list of stage names
|
|
23
|
+
|
|
24
|
+
def list
|
|
25
|
+
stages_page.get_stages
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# Retrieve stage configuration data for an existing stage
|
|
30
|
+
|
|
31
|
+
def read name
|
|
32
|
+
stages_page
|
|
33
|
+
.modify(name)
|
|
34
|
+
.get_stage_data
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
##
|
|
38
|
+
# Update stage configuration data for an existing stage
|
|
39
|
+
|
|
40
|
+
def update name, data
|
|
41
|
+
stages_page
|
|
42
|
+
.modify(name)
|
|
43
|
+
.set_stage_data(data)
|
|
44
|
+
.save
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
##
|
|
48
|
+
# Create stage configuration data for a new stage
|
|
49
|
+
|
|
50
|
+
def create data
|
|
51
|
+
# When creating a stage, we need to set its name and save it so
|
|
52
|
+
# an ID is created in the database to tie the tasks to.
|
|
53
|
+
#
|
|
54
|
+
# Foreign key errors will result otherwise.
|
|
55
|
+
name = data[:name]
|
|
56
|
+
|
|
57
|
+
stages_page
|
|
58
|
+
.add
|
|
59
|
+
.set_name(name)
|
|
60
|
+
.save
|
|
61
|
+
|
|
62
|
+
# Now, populate the rest of the data.
|
|
63
|
+
stages_page
|
|
64
|
+
.modify(name)
|
|
65
|
+
.set_stage_data(data)
|
|
66
|
+
.save
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
##
|
|
70
|
+
# Delete a stage
|
|
71
|
+
|
|
72
|
+
def delete name
|
|
73
|
+
assert_stage_exists name
|
|
74
|
+
|
|
75
|
+
stages_page
|
|
76
|
+
.delete name
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def rename src, dest
|
|
80
|
+
assert_stage_exists src
|
|
81
|
+
assert_stage_does_not_exist dest
|
|
82
|
+
|
|
83
|
+
stages_page
|
|
84
|
+
.modify(src)
|
|
85
|
+
.set_name(dest)
|
|
86
|
+
.save
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
##
|
|
90
|
+
# Export data for all stages to a file
|
|
91
|
+
|
|
92
|
+
def export file_path
|
|
93
|
+
stages = list
|
|
94
|
+
export_data = {}
|
|
95
|
+
|
|
96
|
+
stages.each do |stage|
|
|
97
|
+
export_data[stage] = read stage
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
File.open(file_path, 'w') do |f|
|
|
101
|
+
f.write export_data.to_yaml
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
rescue Exception => e
|
|
105
|
+
if e.message.include? 'No such file or directory'
|
|
106
|
+
raise IOError, "No such directory - #{file_path}"
|
|
107
|
+
else
|
|
108
|
+
raise e
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
##
|
|
113
|
+
# Import stage data from a file
|
|
114
|
+
#
|
|
115
|
+
# If the stage name doesn't currently exist, a new stage will be created.
|
|
116
|
+
# If the stage name exists, it will be updated.
|
|
117
|
+
# If allow_creation is false (default) a stage will NOT be created if it
|
|
118
|
+
# doesn't exist, existing stages will be updated.
|
|
119
|
+
|
|
120
|
+
def import file_path, allow_creation = false
|
|
121
|
+
raise IOError, "File not found: #{file_path}" unless File.exist? file_path
|
|
122
|
+
|
|
123
|
+
import_data = {}
|
|
124
|
+
File.open(file_path, 'r') do |f|
|
|
125
|
+
# Read array of stage hashes
|
|
126
|
+
# FIXME is this REALLY an array?
|
|
127
|
+
import_data = YAML.load(f)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
existing_stages = list
|
|
131
|
+
|
|
132
|
+
import_data.each do |name, data|
|
|
133
|
+
if existing_stages.include? name
|
|
134
|
+
update name, data
|
|
135
|
+
else
|
|
136
|
+
if allow_creation
|
|
137
|
+
create data
|
|
138
|
+
else
|
|
139
|
+
puts "Stage '#{name}' does not exist. Skipping import."
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
private
|
|
146
|
+
|
|
147
|
+
def stages_page
|
|
148
|
+
page_factory.stages_page
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def assert_stage_exists name
|
|
152
|
+
fail ArgumentError.new("A stage named '#{name}' does not exist") unless list.include? name
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def assert_stage_does_not_exist name
|
|
156
|
+
fail ArgumentError.new("A stage named '#{name}' already exists") if list.include? name
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
##
|
|
160
|
+
# Test stage data structure for validity
|
|
161
|
+
#
|
|
162
|
+
# Required: name
|
|
163
|
+
|
|
164
|
+
def valid_stage_data? data
|
|
165
|
+
if !data.key?(:name) || data[:name].nil? || data[:name].empty?
|
|
166
|
+
return false
|
|
167
|
+
end
|
|
168
|
+
true
|
|
169
|
+
end
|
|
170
|
+
end # class
|
|
171
|
+
end # module
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: tasks.rb
|
|
3
|
+
# Purpose:: Interface to tasks functionality in admin module
|
|
4
|
+
#
|
|
5
|
+
# Author:: Jeff McAffee 2015-04-19
|
|
6
|
+
#
|
|
7
|
+
##############################################################################
|
|
8
|
+
|
|
9
|
+
require 'admin_module/pages'
|
|
10
|
+
|
|
11
|
+
module AdminModule
|
|
12
|
+
|
|
13
|
+
class Tasks
|
|
14
|
+
attr_reader :page_factory
|
|
15
|
+
|
|
16
|
+
def initialize(page_factory)
|
|
17
|
+
@page_factory = page_factory
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def rename src, dest
|
|
21
|
+
src = assert_task_exists( extract_task_name(src) )
|
|
22
|
+
dest = assert_task_does_not_exist( extract_task_name(dest) )
|
|
23
|
+
|
|
24
|
+
tasks_page
|
|
25
|
+
.modify(src)
|
|
26
|
+
.set_name(dest)
|
|
27
|
+
.save
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def list
|
|
31
|
+
tasks_page.get_tasks
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def create task
|
|
35
|
+
task_name = assert_task_does_not_exist( extract_task_name(task) )
|
|
36
|
+
|
|
37
|
+
tasks_page
|
|
38
|
+
.add
|
|
39
|
+
.set_task_data(task)
|
|
40
|
+
.save
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def read task
|
|
44
|
+
task_name = assert_task_exists( extract_task_name(task) )
|
|
45
|
+
|
|
46
|
+
tasks_page
|
|
47
|
+
.modify( task_name )
|
|
48
|
+
.get_task_data
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def update task
|
|
52
|
+
task_name = assert_task_exists( extract_task_name(task) )
|
|
53
|
+
|
|
54
|
+
tasks_page
|
|
55
|
+
.modify( task_name )
|
|
56
|
+
.set_task_data(task)
|
|
57
|
+
.save
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
#
|
|
61
|
+
# No functionality exists to DELETE tasks.
|
|
62
|
+
#
|
|
63
|
+
|
|
64
|
+
def export file_path
|
|
65
|
+
tasks = list
|
|
66
|
+
export_data = {}
|
|
67
|
+
|
|
68
|
+
tasks.each do |task|
|
|
69
|
+
export_data[task] = read task
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
File.open(file_path, 'w') do |f|
|
|
73
|
+
f.write export_data.to_yaml
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Explicitly return (nothing) to avoid polluting stdout (in rake task).
|
|
77
|
+
return
|
|
78
|
+
|
|
79
|
+
rescue Exception => e
|
|
80
|
+
if e.message.include? 'No such file or directory'
|
|
81
|
+
raise IOError, "No such directory - #{file_path}"
|
|
82
|
+
else
|
|
83
|
+
raise e
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
##
|
|
88
|
+
# Import task configurations into the current environment from a file.
|
|
89
|
+
|
|
90
|
+
def import file_path, allow_create = false
|
|
91
|
+
raise IOError, "File not found: #{file_path}" unless File.exists?(file_path)
|
|
92
|
+
|
|
93
|
+
tasks = {}
|
|
94
|
+
File.open(file_path, 'r') do |f|
|
|
95
|
+
# Read array of task hashes.
|
|
96
|
+
tasks = YAML.load(f)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
existing_tasks = list
|
|
100
|
+
|
|
101
|
+
tasks.each do |name, data|
|
|
102
|
+
if existing_tasks.include?(name)
|
|
103
|
+
update(data)
|
|
104
|
+
else
|
|
105
|
+
if allow_create
|
|
106
|
+
create(data)
|
|
107
|
+
else
|
|
108
|
+
puts "Unable to create #{name}. allow_create = false"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Explicitly return (nothing) to avoid polluting stdout (in rake task).
|
|
114
|
+
return
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
private
|
|
118
|
+
|
|
119
|
+
def tasks_page
|
|
120
|
+
page_factory.tasks_page
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def extract_task_name task
|
|
124
|
+
task_name = if task.is_a? Hash
|
|
125
|
+
task[:name]
|
|
126
|
+
else
|
|
127
|
+
String(task)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def assert_task_exists task_name
|
|
132
|
+
unless list.include? task_name
|
|
133
|
+
fail ArgumentError.new("A task named '#{task_name}' does not exist")
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
task_name
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def assert_task_does_not_exist task_name
|
|
140
|
+
if list.include? task_name
|
|
141
|
+
fail ArgumentError.new("A task named '#{task_name}' already exists")
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
task_name
|
|
145
|
+
end
|
|
146
|
+
end # class Tasks
|
|
147
|
+
end # module
|