sfn-parameters 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fa98393dbb5772d3b8058e38d07d604ad0bd14e4
4
- data.tar.gz: 4eb0b9d98743d33e4cab470c4e0034fc6f38baa3
3
+ metadata.gz: a5dff19c967089f79139776c3e592a178614fb79
4
+ data.tar.gz: 0ba68820d8c71adc5cc6ab9fad5afaadd4e820b8
5
5
  SHA512:
6
- metadata.gz: 0ab1532d9ed57477fe43dd480c91fa1cbdf047c12216be462f341b5db45265b58dc4570acb4c5b4b745df6e6f55dfb79af47ef0f76128bba51436ae5fdc1c786
7
- data.tar.gz: dd16da459bc56af432aa2fa0528032f64b9210f16684ce409c21e5e32f1698f0a03a940127673ee03707a580606d41ecccc6eb9df97822211a1d849e869a0c6a
6
+ metadata.gz: 44869723132b17dda13a221830edda6d355efa95930f5ff54b24a78d0a2b851798b84bf47214af65862442533f341ba92885d887e00074af5b645c0f4c08002f
7
+ data.tar.gz: 4a1b69b524e8f040acb78365746d4c137ff36b4871608ea1654a1ed6a6873879d7b6fe50ef808ad1fa41cecb34cd3df3862760c481b28318418c7dc280417f43
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ # v0.2.2
2
+ * Provide better UI feedback (#3)
3
+
1
4
  # v0.2.0
2
5
  * Add support for single stack workflow (#1)
3
6
  * Add encryption foundation with initial OpenSSL implementation (#2)
@@ -8,87 +8,127 @@ module Sfn
8
8
  include SfnParameters::Utils
9
9
  include Sfn::CommandModule::Base
10
10
 
11
+ # Default contents for new item creation
12
+ NEW_ITEM_DEFAULT = Smash.new(
13
+ :parameters => {},
14
+ :compile_parameters => {},
15
+ :apply_stacks => [],
16
+ :stacks => {}
17
+ )
18
+
11
19
  # Execute parameters action request
12
20
  def execute!
13
- action, item = arguments[0,2]
21
+ action, item = arguments[0].to_s, arguments[1].to_s
14
22
  ui.info "Running parameters action #{ui.color(action.to_s, :bold)}"
15
- case action.to_sym
16
- when :lock
17
- item = validate_item(item)
18
- ui.print " Locking #{ui.color(item, :bold)}... "
19
- content = load_json(File.read(item)).to_smash
20
- if(content[:sfn_parameters_lock])
21
- ui.puts ui.color('no-op', :yellow)
22
- ui.warn "Item is already locked! (#{item})"
23
- else
24
- thing = lock_content(content)
25
- val = format_json(thing)
26
- File.write(item, val)
27
- ui.puts ui.color('locked', :blue)
28
- end
29
- when :unlock
30
- item = validate_item(item)
31
- ui.print " Unlocking #{ui.color(item, :bold)}... "
32
- content = load_json(File.read(item)).to_smash
33
- if(content[:sfn_parameters_lock])
34
- content = unlock_content(content)
35
- content.delete(:sfn_lock_enabled)
36
- File.write(item, format_json(content))
37
- ui.puts ui.color('unlocked', :green)
38
- else
39
- ui.puts ui.color('no-op', :yellow)
40
- ui.warn "Item is already unlocked! (#{item})"
23
+ if(respond_to?("run_action_#{action}"))
24
+ send("run_action_#{action}", item)
25
+ else
26
+ allowed_actions = public_methods.grep(/^run_action/).sort.map do |item|
27
+ item.to_s.sub('run_action_', '')
41
28
  end
42
- when :show
29
+ raise ArgumentError.new "Unsupported action received `#{action}`. " \
30
+ "Allowed: #{allowed_actions.join(', ')}"
31
+ end
32
+ end
33
+
34
+ # Perform locking on item
35
+ #
36
+ # @param item [String] item to lock
37
+ def run_action_lock(item)
38
+ item = validate_item(item)
39
+ ui.print " Locking #{ui.color(item, :bold)}... "
40
+ content = load_json(File.read(item)).to_smash
41
+ if(content[:sfn_parameters_lock])
42
+ ui.puts ui.color('no-op', :yellow)
43
+ ui.warn "Item is already locked! (#{item})"
44
+ else
45
+ thing = lock_content(content)
46
+ val = format_json(thing)
47
+ File.write(item, val)
48
+ ui.puts ui.color('locked', :blue)
49
+ end
50
+ end
51
+
52
+ # Perform unlocking on item
53
+ #
54
+ # @param item [String] item to lock
55
+ def run_action_unlock(item)
56
+ item = validate_item(item)
57
+ ui.print " Unlocking #{ui.color(item, :bold)}... "
58
+ content = load_json(File.read(item)).to_smash
59
+ if(content[:sfn_parameters_lock])
60
+ content = unlock_content(content)
61
+ content.delete(:sfn_lock_enabled)
62
+ File.write(item, format_json(content))
63
+ ui.puts ui.color('unlocked', :green)
64
+ else
65
+ ui.puts ui.color('no-op', :yellow)
66
+ ui.warn "Item is already unlocked! (#{item})"
67
+ end
68
+ end
69
+
70
+ # Perform show on item
71
+ #
72
+ # @param item [String] item to lock
73
+ def run_action_show(item)
74
+ item = validate_item(item)
75
+ content = load_json(File.read(item)).to_smash
76
+ if(content[:sfn_parameters_lock])
77
+ ui.print ui.color(' *', :bold)
78
+ ui.print " Unlocking #{ui.color(item, :bold)} for display... "
79
+ content = unlock_content(content)
80
+ content.delete(:sfn_lock_enabled)
81
+ ui.puts ui.color('unlocked', :green)
82
+ end
83
+ ui.puts format_json(content)
84
+ end
85
+
86
+ # Perform create on item
87
+ #
88
+ # @param item [String] item to lock
89
+ def run_action_create(item)
90
+ unless(ENV['EDITOR'])
91
+ raise ArgumentError.new '$EDITOR must be set for create/edit commands!'
92
+ end
93
+ begin
43
94
  item = validate_item(item)
44
- content = load_json(File.read(item)).to_smash
45
- if(content[:sfn_parameters_lock])
46
- ui.print ui.color(' *', :bold)
47
- ui.print " Unlocking #{ui.color(item, :bold)} for display... "
48
- content = unlock_content(content)
49
- content.delete(:sfn_lock_enabled)
50
- ui.puts ui.color('unlocked', :green)
51
- end
52
- ui.puts format_json(content)
53
- when :create, :edit
54
- unless(ENV['EDITOR'])
55
- raise ArgumentError.new '$EDITOR must be set for create/edit commands!'
56
- end
57
- begin
58
- item = validate_item(item)
59
- rescue ArgumentError
60
- new_item = true
61
- item = new_item(item)
62
- end
63
- FileUtils.mkdir_p(File.dirname(item))
64
- tmp = Bogo::EphemeralFile.new('sfn-parameters')
65
- content = new_item ? Smash.new : load_json(File.read(item)).to_smash
66
- if(content[:sfn_parameters_lock])
67
- ui.print ui.color(' *', :bold)
68
- ui.print " Unlocking #{ui.color(item, :bold)} for edit... "
69
- content = unlock_content(content)
70
- ui.puts ui.color('unlocked', :green)
71
- end
72
- lock_enabled = content.delete(:sfn_lock_enabled) || new_item
73
- tmp.write(format_json(content))
74
- tmp.flush
75
- system("#{ENV['EDITOR']} #{tmp.path}")
76
- tmp.rewind
77
- content = load_json(tmp.read).to_smash
95
+ rescue ArgumentError
96
+ new_item = true
97
+ item = new_item(item)
98
+ end
99
+ FileUtils.mkdir_p(File.dirname(item))
100
+ tmp = Bogo::EphemeralFile.new('sfn-parameters')
101
+ content = new_item ? NEW_ITEM_DEFAULT : load_json(File.read(item)).to_smash
102
+ if(content[:sfn_parameters_lock])
78
103
  ui.print ui.color(' *', :bold)
79
- if(lock_enabled)
80
- ui.print " Locking #{ui.color(item, :bold)} for storage... "
81
- content = lock_content(content)
82
- ui.puts ui.color('locked', :blue)
83
- else
84
- ui.puts " Storing #{ui.color(item, :bold)} for storage... #{ui.color('unlocked', :yellow)}"
85
- end
86
- File.write(item, format_json(content))
87
- tmp.close
104
+ ui.print " Unlocking #{ui.color(item, :bold)} for edit... "
105
+ content = unlock_content(content)
106
+ ui.puts ui.color('unlocked', :green)
107
+ end
108
+ lock_enabled = content.delete(:sfn_lock_enabled) || new_item
109
+ tmp.write(format_json(content))
110
+ tmp.flush
111
+ system("#{ENV['EDITOR']} #{tmp.path}")
112
+ tmp.rewind
113
+ content = load_json(tmp.read).to_smash
114
+ ui.print ui.color(' *', :bold)
115
+ if(lock_enabled)
116
+ ui.print " Locking #{ui.color(item, :bold)} for storage... "
117
+ content = lock_content(content)
118
+ ui.puts ui.color('locked', :blue)
88
119
  else
89
- ArgumentError.new "Unsupported action received `#{action}`. " \
90
- "Allowed: lock, unlock, show, create, edit"
120
+ ui.puts " Storing #{ui.color(item, :bold)} for storage... #{ui.color('unlocked', :yellow)}"
91
121
  end
122
+ File.write(item, format_json(content))
123
+ tmp.close
124
+ end
125
+
126
+ # Perform edit on item
127
+ #
128
+ # @param item [String] item to lock
129
+ def run_action_edit(item)
130
+ validate_item(item)
131
+ run_action_create(item)
92
132
  end
93
133
 
94
134
  # Expand path for new item if required
@@ -122,6 +162,9 @@ module Sfn
122
162
  # @param item [String]
123
163
  # @return [String]
124
164
  def validate_item(item)
165
+ if(item.to_s.empty?)
166
+ raise NameError.new 'Item name is required. No item name provided.'
167
+ end
125
168
  items = [
126
169
  item,
127
170
  File.join(
@@ -1,3 +1,3 @@
1
1
  module SfnParameters
2
- VERSION = Gem::Version.new('0.2.0')
2
+ VERSION = Gem::Version.new('0.2.2')
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sfn-parameters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-16 00:00:00.000000000 Z
11
+ date: 2016-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sfn