simple_scripting 0.9.0 → 0.9.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b48ec9aa43f6c12c254cb2fbee5a3edc83ec0163
4
- data.tar.gz: eb52ce4f6ead68bf0a862212dd85fda7494fd0c8
3
+ metadata.gz: 59993d0d200b77aa1deb2aadda05560b427cee00
4
+ data.tar.gz: 1baeb57678e05f4fac32cf8d34afb42b175d5b08
5
5
  SHA512:
6
- metadata.gz: 82969adc5d00c028c8a378342df4bd02bc384dfee01c9c73efae1199ec469f6e4334f17e6fd14544a3a8ead295cec5f0fcdb2bdf41737ce427bb4e47ed7bb2b9
7
- data.tar.gz: 74e6fcd47cbca2d77304a35d2d005dde2ec408e6e6fb1eb8fec5690765283970bc5c759b3a4654b541db08924f86d3842ee7ae147dfd906d0e74ca26e2a1cf44
6
+ metadata.gz: a06e70451f2b78d8833edaa7649c7ac9130920aca97b2cd9ec171ca3db30a370a65fd15a120a05256f29289bc3e66cad8202c8a8e0f4ea3c04c47ce7ba09d0a3
7
+ data.tar.gz: 52cf1615fa2ca5b6f8c1147176ba3859cccc856b613fba1a178d21185bd826f9005cd1d6d88d6fd602e3d8646c267dab4d2a7321357a3c7fe8563c0869821363
data/README.md CHANGED
@@ -15,6 +15,8 @@
15
15
 
16
16
  This is a definition example:
17
17
 
18
+ require 'simple_scripting/argv'
19
+
18
20
  result = SimpleOptParse::Argv.decode(
19
21
  ['-s', '--only-scheduled-days', 'Only print scheduled days' ],
20
22
  ['-d', '--print-defaults TEMPLATE', 'Print the default activities from the named template'],
@@ -61,6 +63,7 @@ Say one writes a script (`foo_my_bar.rb`), with a corresponding (`$HOME/.foo_my_
61
63
 
62
64
  some_relative_file_path=foo
63
65
  some_absolute_file_path=/path/to/bar
66
+ multiple_paths=foo:/path/to/bar
64
67
  my_password=uTxllKRD2S+IH92oi30luwu0JIqp7kKA
65
68
 
66
69
  [a_group]
@@ -68,6 +71,8 @@ Say one writes a script (`foo_my_bar.rb`), with a corresponding (`$HOME/.foo_my_
68
71
 
69
72
  This is the workflow and functionality offered by `SS::C`:
70
73
 
74
+ require 'simple_scripting/configuration'
75
+
71
76
  # Picks up automatically the configuration file name, based on the calling program
72
77
  #
73
78
  configuration = SimpleScripting::Configuration.load(passwords_key: 'encryption_key')
@@ -75,6 +80,7 @@ This is the workflow and functionality offered by `SS::C`:
75
80
  configuration.some_relative_file_path.full_path # '$HOME/foo'
76
81
  configuration.some_absolute_file_path # '/path/to/bar'
77
82
  configuration.some_absolute_file_path.full_path # '/path/to/bar' (recognized as absolute)
83
+ configuration.multiple_paths.full_paths # ['$HOME/foo', '/path/to/bar']
78
84
 
79
85
  configuration.my_password.decrypted # 'encrypted_value'
80
86
 
@@ -85,3 +91,7 @@ This is the workflow and functionality offered by `SS::C`:
85
91
  The purpose of encryption in this library is just to avoid displaying passwords in plaintext; it's not considered safe against attacks.
86
92
 
87
93
  [BS img]: https://travis-ci.org/saveriomiroddi/simple_scripting.svg?branch=master
94
+
95
+ ## Help
96
+
97
+ See the [wiki](https://github.com/saveriomiroddi/simple_scripting/wiki) for additional help.
@@ -6,7 +6,7 @@ module SimpleScripting
6
6
 
7
7
  extend self
8
8
 
9
- def decode(*params_definition, arguments: ARGV, long_help: nil, output: $stdout)
9
+ def decode(*params_definition, arguments: ARGV, long_help: nil, output: $stdout, command: nil)
10
10
  # If the param is a Hash, we have multiple commands. We check and if the command is correct,
11
11
  # recursively call the function with the specific parameters.
12
12
  #
@@ -25,7 +25,7 @@ module SimpleScripting
25
25
  print_optparse_commands_help(commands_definition, output, true)
26
26
  output == $stdout ? exit : return
27
27
  else
28
- return [command, decode(*command_params_definition, arguments: arguments, output: output)]
28
+ return [command, decode(*command_params_definition, arguments: arguments, output: output, command: command)]
29
29
  end
30
30
  end
31
31
 
@@ -33,8 +33,8 @@ module SimpleScripting
33
33
  parser_opts_ref = nil # not available outside the block
34
34
  args = {} # { 'name' => mandatory? }
35
35
 
36
- OptionParser.new do | parser_opts |
37
- params_definition.each do | param_definition |
36
+ OptionParser.new do |parser_opts|
37
+ params_definition.each do |param_definition|
38
38
  case param_definition
39
39
  when Array
40
40
  if param_definition[1] && param_definition[1].start_with?('--')
@@ -61,8 +61,8 @@ module SimpleScripting
61
61
  end
62
62
  end
63
63
 
64
- parser_opts.on( '-h', '--help', 'Help' ) do
65
- print_optparse_help( parser_opts, args, long_help, output )
64
+ parser_opts.on('-h', '--help', 'Help') do
65
+ print_optparse_help(parser_opts, args, long_help, output, command: command)
66
66
  output == $stdout ? exit : return
67
67
  end
68
68
 
@@ -76,29 +76,29 @@ module SimpleScripting
76
76
  # Mandatory?
77
77
  if args.fetch(first_arg_name.to_sym)
78
78
  if arguments.empty?
79
- print_optparse_help( parser_opts_ref, args, long_help, output )
79
+ print_optparse_help(parser_opts_ref, args, long_help, output, command: command)
80
80
  output == $stdout ? exit : return
81
81
  else
82
- name = args.keys.first[ 1 .. - 1 ].to_sym
82
+ name = args.keys.first[1..-1].to_sym
83
83
 
84
- result[ name ] = arguments
84
+ result[name] = arguments
85
85
  end
86
86
  # Optional
87
87
  else
88
- name = args.keys.first[ 1 .. - 1 ].to_sym
88
+ name = args.keys.first[1..-1].to_sym
89
89
 
90
- result[ name ] = arguments
90
+ result[name] = arguments
91
91
  end
92
92
  else
93
- min_args_size = args.count { | name, mandatory | mandatory }
93
+ min_args_size = args.count { |name, mandatory| mandatory }
94
94
 
95
95
  case arguments.size
96
96
  when (min_args_size .. args.size)
97
- arguments.zip(args) do | value, (name, mandatory) |
97
+ arguments.zip(args) do |value, (name, mandatory)|
98
98
  result[name] = value
99
99
  end
100
100
  else
101
- print_optparse_help(parser_opts_ref, args, long_help, output)
101
+ print_optparse_help(parser_opts_ref, args, long_help, output, command: command)
102
102
  output == $stdout ? exit : return
103
103
  end
104
104
  end
@@ -113,9 +113,17 @@ module SimpleScripting
113
113
  output.puts "Valid commands:", "", " " + commands_definition.keys.join(', ')
114
114
  end
115
115
 
116
- def print_optparse_help(parser_opts, args, long_help, output)
117
- args_display = args.map { | name, mandatory | mandatory ? "<#{ name }>" : "[<#{ name }>]" }.join(' ')
118
- parser_opts_help = parser_opts.to_s.sub!(/^(Usage: .*)/, "\\1 #{args_display}")
116
+ def print_optparse_help(parser_opts, args, long_help, output, command: nil)
117
+ parser_opts_help = parser_opts.to_s
118
+
119
+ if command
120
+ parser_opts_help = parser_opts_help.sub!(/(\[options\])/, "#{command} \\1")
121
+ end
122
+
123
+ if args.size > 0
124
+ args_display = args.map { |name, mandatory| mandatory ? "<#{ name }>" : "[<#{ name }>]" }.join(' ')
125
+ parser_opts_help = parser_opts_help.sub!(/^(Usage: .*)/, "\\1 #{args_display}")
126
+ end
119
127
 
120
128
  output.puts parser_opts_help
121
129
  output.puts "", long_help if long_help
@@ -24,6 +24,10 @@ module SimpleScripting
24
24
  start_with?('/') ? self : File.expand_path(self, '~')
25
25
  end
26
26
 
27
+ def full_paths
28
+ split(':').map { |value| self.class.new(value).full_path }
29
+ end
30
+
27
31
  def decrypted
28
32
  raise "Encryption key not provided!" if @encryption_key.nil?
29
33
 
@@ -1,5 +1,5 @@
1
1
  module SimpleScripting
2
2
 
3
- VERSION = "0.9.0"
3
+ VERSION = "0.9.1"
4
4
 
5
5
  end
@@ -183,7 +183,7 @@ Invalid command. Valid commands:
183
183
  expect(output_buffer.string).to eql(expected_output)
184
184
  end
185
185
 
186
- it 'should implement the help' do
186
+ it 'should implement the commands help' do
187
187
  decoder_params[:arguments] = ['-h']
188
188
 
189
189
  described_class.decode(decoder_params)
@@ -197,17 +197,28 @@ Valid commands:
197
197
  expect(output_buffer.string).to eql(expected_output)
198
198
  end
199
199
 
200
+ it "should display the command given command's help" do
201
+ decoder_params[:arguments] = ['command1', '-h']
202
+ $a = true
203
+ described_class.decode(decoder_params)
204
+
205
+ expected_output = %Q{\
206
+ Usage: rspec command1 [options] <arg1>
207
+ -h, --help Help
208
+ }
209
+
210
+ expect(output_buffer.string).to eql(expected_output)
211
+ end
212
+
200
213
  end
201
214
 
202
- describe 'pitfall' do
215
+ describe 'No argv case' do
203
216
 
204
217
  let(:decoder_params) {{
205
218
  output: output_buffer,
206
219
  }}
207
220
 
208
- # Make sure that the options (in this case, :output) are not interpreted as commands definition.
209
- #
210
- it 'should be avoided' do
221
+ it 'should avoided options being interpreted as definitions' do
211
222
  decoder_params[:arguments] = ['pizza']
212
223
 
213
224
  actual_result = described_class.decode(decoder_params)
@@ -23,6 +23,7 @@ describe SimpleScripting::Configuration do
23
23
  let(:configuration_text) {"
24
24
  abspath_key=/tmp/bar
25
25
  relpath_key=foo
26
+ mixed_multiple_paths_key=/tmp/bar:foo
26
27
  encr_key=uTxllKRD2S+IH92oi30luwu0JIqp7kKA
27
28
 
28
29
  [group1]
@@ -40,6 +41,8 @@ g2_key=bang
40
41
 
41
42
  expect(configuration.relpath_key.full_path).to eql(File.expand_path('foo', '~'))
42
43
 
44
+ expect(configuration.mixed_multiple_paths_key.full_paths).to eql(['/tmp/bar', File.expand_path('foo', '~')])
45
+
43
46
  expect(configuration.encr_key.decrypted).to eql('encrypted_value')
44
47
 
45
48
  expect(configuration.group1.g_key).to eql('baz')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_scripting
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Saverio Miroddi