dorian-arguments 1.0.1 → 1.1.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 +4 -4
- data/VERSION +1 -1
- data/bin/arguments +1 -1
- data/lib/dorian/arguments.rb +36 -20
- metadata +4 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 78900d0ea10eeae177661f62aa4449052393785c8bc7a8c45581626a5d7dc594
|
4
|
+
data.tar.gz: a6964ff2d943a71b9abcd50c6975e5c07cd5fd42052f3da9ad75f2ce0c3504b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4930286f6f79b4755900c977e038dc2bdd39fbc2bcc17f5f80c864fd09db763756bdd725ebf3ac63a974d8dcb2fd43e4b84d52b535eb5757c3715adebe255634
|
7
|
+
data.tar.gz: 25ac436b8a6cfead0a03c1e1235d755bd7fe137e4987814de909c69e0f9fb155a3726d1d4e7a955eb8914a76b3cdf80d027412d45807e23e89419033e9380863
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.1
|
data/bin/arguments
CHANGED
@@ -6,7 +6,7 @@ require "dorian/arguments"
|
|
6
6
|
parsed = Dorian::Arguments.parse(version: { alias: :v }, help: { alias: :h })
|
7
7
|
|
8
8
|
if parsed.options.version
|
9
|
-
abort File.read(File.expand_path("
|
9
|
+
abort File.read(File.expand_path("../VERSION", __dir__))
|
10
10
|
else
|
11
11
|
abort parsed.help
|
12
12
|
end
|
data/lib/dorian/arguments.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require "bigdecimal"
|
3
4
|
require "bigdecimal/util"
|
4
|
-
require "active_support"
|
5
|
-
require "active_support/core_ext/string/inflections"
|
6
|
-
require "active_support/core_ext/array/wrap"
|
7
|
-
require "active_support/core_ext/enumerable"
|
8
5
|
|
9
6
|
class Dorian
|
10
7
|
class Arguments
|
@@ -17,10 +14,10 @@ class Dorian
|
|
17
14
|
DECIMAL = "decimal"
|
18
15
|
|
19
16
|
DEFAULT_MULTIPLE = false
|
20
|
-
DEFAULT_ALIASES = []
|
17
|
+
DEFAULT_ALIASES = [].freeze
|
21
18
|
DEFAULT_TYPE = BOOLEAN
|
22
19
|
|
23
|
-
TYPES = [BOOLEAN, STRING, NUMBER, INTEGER, DECIMAL]
|
20
|
+
TYPES = [BOOLEAN, STRING, NUMBER, INTEGER, DECIMAL].freeze
|
24
21
|
|
25
22
|
DEFAULT = nil
|
26
23
|
|
@@ -30,9 +27,9 @@ class Dorian
|
|
30
27
|
NUMBER => /^[0-9.]+$/i,
|
31
28
|
INTEGER => /^[0-9]+$/i,
|
32
29
|
DECIMAL => /^[0-9.]+$/i
|
33
|
-
}
|
30
|
+
}.freeze
|
34
31
|
|
35
|
-
BOOLEANS = { "true" => true, "false" => false }
|
32
|
+
BOOLEANS = { "true" => true, "false" => false }.freeze
|
36
33
|
|
37
34
|
def initialize(**definition)
|
38
35
|
@definition = definition
|
@@ -45,12 +42,11 @@ class Dorian
|
|
45
42
|
def parse
|
46
43
|
arguments = ARGV
|
47
44
|
options = {}
|
48
|
-
files = []
|
49
45
|
|
50
46
|
definition.each do |key, value|
|
51
47
|
type, default, aliases = normalize(value)
|
52
48
|
|
53
|
-
keys = ([key] + aliases).map(&:to_s).map(
|
49
|
+
keys = ([key] + aliases).map(&:to_s).map { |key| parameterize(key) }
|
54
50
|
keys = keys.map { |key| ["--#{key}", "-#{key}"] }.flatten
|
55
51
|
|
56
52
|
indexes = []
|
@@ -64,8 +60,8 @@ class Dorian
|
|
64
60
|
|
65
61
|
if argument.include?("=")
|
66
62
|
argument.split("=", 2).last
|
67
|
-
elsif arguments[index + 1].to_s
|
68
|
-
indexes << index + 1
|
63
|
+
elsif arguments[index + 1].to_s&.match?(MATCHES.fetch(type))
|
64
|
+
indexes << (index + 1)
|
69
65
|
|
70
66
|
arguments[index + 1]
|
71
67
|
elsif type == BOOLEAN
|
@@ -75,13 +71,13 @@ class Dorian
|
|
75
71
|
end
|
76
72
|
end
|
77
73
|
end
|
78
|
-
.
|
74
|
+
.compact
|
79
75
|
|
80
76
|
indexes.sort.reverse.uniq.each { |index| arguments.delete_at(index) }
|
81
77
|
|
82
78
|
values = [default] if values.empty?
|
83
79
|
values = values.map { |value| cast(type, value) }
|
84
|
-
values = values.first unless
|
80
|
+
values = values.first unless many?(values)
|
85
81
|
options[key] = values
|
86
82
|
end
|
87
83
|
|
@@ -89,7 +85,14 @@ class Dorian
|
|
89
85
|
|
90
86
|
arguments -= files
|
91
87
|
|
92
|
-
|
88
|
+
options = Struct.new(*options.keys).new(*options.values)
|
89
|
+
|
90
|
+
Struct.new(:arguments, :options, :files, :help).new(
|
91
|
+
arguments,
|
92
|
+
options,
|
93
|
+
files,
|
94
|
+
help
|
95
|
+
)
|
93
96
|
end
|
94
97
|
|
95
98
|
def cast(type, value)
|
@@ -99,7 +102,7 @@ class Dorian
|
|
99
102
|
BOOLEANS.fetch(value.downcase)
|
100
103
|
elsif type == INTEGER
|
101
104
|
value.to_i
|
102
|
-
elsif
|
105
|
+
elsif [DECIMAL, NUMBER].include?(type)
|
103
106
|
value.to_d
|
104
107
|
else
|
105
108
|
value
|
@@ -107,7 +110,7 @@ class Dorian
|
|
107
110
|
end
|
108
111
|
|
109
112
|
def help
|
110
|
-
message = "USAGE: #{$PROGRAM_NAME}\n"
|
113
|
+
message = "USAGE: #{File.basename($PROGRAM_NAME)}\n"
|
111
114
|
|
112
115
|
message += "\n" if definition.any?
|
113
116
|
|
@@ -117,7 +120,7 @@ class Dorian
|
|
117
120
|
keys_message =
|
118
121
|
([key] + aliases)
|
119
122
|
.map(&:to_s)
|
120
|
-
.map(
|
123
|
+
.map { |key| parameterize(key) }
|
121
124
|
.map { |key| key.size == 1 ? "-#{key}" : "--#{key}" }
|
122
125
|
.join("|")
|
123
126
|
|
@@ -128,12 +131,25 @@ class Dorian
|
|
128
131
|
message
|
129
132
|
end
|
130
133
|
|
134
|
+
def many?(array)
|
135
|
+
array.size > 1
|
136
|
+
end
|
137
|
+
|
138
|
+
def parameterize(string, separator: "-")
|
139
|
+
string
|
140
|
+
.to_s
|
141
|
+
.encode("ASCII", invalid: :replace, undef: :replace, replace: "")
|
142
|
+
.downcase
|
143
|
+
.gsub(/[^a-z0-9]+/, separator)
|
144
|
+
.gsub(/^#{separator}+|#{separator}+$/, "")
|
145
|
+
end
|
146
|
+
|
131
147
|
def normalize(value)
|
132
148
|
if value.is_a?(Hash)
|
133
149
|
type = value[:type]&.to_s || DEFAULT_TYPE
|
134
150
|
default = value[:default]&.to_s || DEFAULT
|
135
151
|
aliases =
|
136
|
-
Array
|
152
|
+
Array(
|
137
153
|
value[:alias]&.to_s || value[:aliases]&.map(&:to_s) ||
|
138
154
|
DEFAULT_ALIASES
|
139
155
|
)
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dorian-arguments
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dorian Marié
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: activesupport
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: bigdecimal
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,20 +24,6 @@ dependencies:
|
|
38
24
|
- - ">="
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: dorian-to_struct
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
27
|
description: parses arguments
|
56
28
|
email: dorian@dorianmarie.com
|
57
29
|
executables:
|
@@ -74,9 +46,9 @@ require_paths:
|
|
74
46
|
- lib
|
75
47
|
required_ruby_version: !ruby/object:Gem::Requirement
|
76
48
|
requirements:
|
77
|
-
- -
|
49
|
+
- - '='
|
78
50
|
- !ruby/object:Gem::Version
|
79
|
-
version:
|
51
|
+
version: 3.3.4
|
80
52
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
53
|
requirements:
|
82
54
|
- - ">="
|