consoler 1.0.1 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,6 @@
3
3
  require_relative 'option'
4
4
 
5
5
  module Consoler
6
-
7
6
  # List of options
8
7
  #
9
8
  # @attr_reader [String] description Description of the options
@@ -13,13 +12,15 @@ module Consoler
13
12
  # Create a list of option based on a string definition
14
13
  #
15
14
  # @param options_def [String] A string definition of the desired options
15
+ # @raise [RuntimeError] if you try to use a duplicate name
16
16
  def initialize(options_def)
17
17
  @options = []
18
18
  @description = nil
19
19
 
20
20
  return if options_def.nil?
21
21
 
22
- if match = /(^|\s+)-- (?<description>.*)$/.match(options_def) then
22
+ # strip the description
23
+ if (match = /(^|\s+)-- (?<description>.*)$/.match(options_def))
23
24
  @description = match[:description]
24
25
  options_def = options_def[0...-match[0].size]
25
26
  end
@@ -29,28 +30,50 @@ module Consoler
29
30
 
30
31
  option_names = []
31
32
 
32
- while option_def = options.shift do
33
+ while (option_def = options.shift)
33
34
  Consoler::Option.create option_def, tracker do |option|
34
35
  raise "Duplicate option name: #{option.name}" if option_names.include? option.name
35
36
 
36
- @options.push option
37
37
  option_names.push option.name
38
+
39
+ option.aliases.each do |alias_|
40
+ raise "Duplicate alias name: #{alias_.name}" if option_names.include? alias_.name
41
+
42
+ option_names.push alias_.name
43
+ end
44
+
45
+ @options.push option
38
46
  end
39
47
  end
40
48
  end
41
49
 
42
- # Get a options by its name
50
+ # Get a option by its name
51
+ #
52
+ # May be matched by one of its aliases
43
53
  #
44
54
  # @param name [String] Name of the option
45
55
  # @return [Consoler::Option, nil]
46
56
  def get(name)
47
- each do |option|
48
- if option.name == name then
49
- return option
57
+ option, = get_with_alias name
58
+ option
59
+ end
60
+
61
+ # Get a option by its name, with matched alias
62
+ #
63
+ # @param name [String] Name of the option
64
+ # @return [[(Consoler::Option, nil), (Consoler::Option, nil)]]
65
+ def get_with_alias(name)
66
+ each do |option, _|
67
+ if option.name == name
68
+ return option, option
69
+ end
70
+
71
+ option.aliases.each do |alias_|
72
+ return option, alias_ if alias_.name == name
50
73
  end
51
74
  end
52
75
 
53
- return nil
76
+ [nil, nil]
54
77
  end
55
78
 
56
79
  # Loop through all options
@@ -72,6 +95,9 @@ module Consoler
72
95
  @options.size
73
96
  end
74
97
 
98
+ # Get the definition for these options
99
+ #
100
+ # @return [String] Options definition
75
101
  def to_definition
76
102
  definition = ''
77
103
  optional = nil
@@ -79,18 +105,17 @@ module Consoler
79
105
  each do |option, i|
80
106
  definition += ' '
81
107
 
82
- if optional.nil? and option.is_optional then
108
+ if optional.nil? && option.is_optional
83
109
  definition += '['
84
110
  optional = option.is_optional
85
111
  end
86
112
 
87
113
  definition += option.to_definition
88
114
 
89
- if option.is_optional then
90
- if @options[i + 1].nil? or optional != @options[i + 1].is_optional then
91
- definition += ']'
92
- optional = nil
93
- end
115
+ # only close when the next option is not optional, or another optional group
116
+ if option.is_optional && (@options[i + 1].nil? || optional != @options[i + 1].is_optional)
117
+ definition += ']'
118
+ optional = nil
94
119
  end
95
120
  end
96
121
 
@@ -98,8 +123,6 @@ module Consoler
98
123
  end
99
124
  end
100
125
 
101
- private
102
-
103
126
  # Optionals tracker
104
127
  #
105
128
  # @attr [Boolean] is_tracking Is inside optional options
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Consoler
4
-
5
4
  # Current version number
6
- VERSION = '1.0.1'
5
+ VERSION = '1.2.1'.freeze
7
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: consoler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-13 00:00:00.000000000 Z
11
+ date: 2020-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.15'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.15'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 12.3.0
33
+ version: 5.11.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 12.3.0
40
+ version: 5.11.3
41
41
  - !ruby/object:Gem::Dependency
42
- name: minitest
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 5.11.3
47
+ version: 12.3.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 5.11.3
54
+ version: 12.3.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: yard
56
+ name: simplecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.9.12
61
+ version: 0.16.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.9.12
68
+ version: 0.16.1
69
69
  - !ruby/object:Gem::Dependency
70
- name: simplecov
70
+ name: yard
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.15.1
75
+ version: 0.9.12
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.15.1
82
+ version: 0.9.12
83
83
  description: Sinatra-like application builder for the console
84
84
  email: me@justim.net
85
85
  executables: []
@@ -87,8 +87,10 @@ extensions: []
87
87
  extra_rdoc_files: []
88
88
  files:
89
89
  - ".editorconfig"
90
+ - ".github/workflows/tests.yml"
90
91
  - ".gitignore"
91
- - ".travis.yml"
92
+ - ".rubocop.yml"
93
+ - ".yardopts"
92
94
  - Gemfile
93
95
  - LICENSE.txt
94
96
  - README.md
@@ -115,15 +117,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
117
  requirements:
116
118
  - - ">="
117
119
  - !ruby/object:Gem::Version
118
- version: '0'
120
+ version: '2.4'
119
121
  required_rubygems_version: !ruby/object:Gem::Requirement
120
122
  requirements:
121
123
  - - ">="
122
124
  - !ruby/object:Gem::Version
123
125
  version: '0'
124
126
  requirements: []
125
- rubyforge_project:
126
- rubygems_version: 2.6.11
127
+ rubygems_version: 3.1.2
127
128
  signing_key:
128
129
  specification_version: 4
129
130
  summary: Consoler
@@ -1,11 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.2.9
5
- - 2.3.6
6
- - 2.4.3
7
- - 2.5.0
8
- cache:
9
- - bundler
10
- script:
11
- - bundle exec rake