dorian-arguments 1.0.0 → 1.1.0
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/lib/dorian/arguments.rb +28 -20
- metadata +1 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9954bfae6d2589acc531515399fd72719c17e59850945789eda577bbdbf76a1
|
4
|
+
data.tar.gz: a515bd1890f8bb0f69f7851b17a3e2e7c81a347ff3bdd0043d9de6f5978b375d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f162d7069cce665ddafef2c864e4cfb97e367303624bcfa9fedd9539c0f1776292bb5b52073b0cd202e2a713b27ff18c3db53950f38008a4b54f81640db57cdf
|
7
|
+
data.tar.gz: e45aaa64ba83d4c43e7b1cc08115556ded6942de9a2d85b16d1bf2b106870703347922558d5e99afdedbe65d89c1c2dcb26890d9552a645d5e136fc32bb21f1e
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.0
|
data/lib/dorian/arguments.rb
CHANGED
@@ -1,10 +1,5 @@
|
|
1
|
-
require "dorian/to_struct"
|
2
1
|
require "bigdecimal"
|
3
2
|
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
3
|
|
9
4
|
class Dorian
|
10
5
|
class Arguments
|
@@ -22,13 +17,7 @@ class Dorian
|
|
22
17
|
|
23
18
|
TYPES = [BOOLEAN, STRING, NUMBER, INTEGER, DECIMAL]
|
24
19
|
|
25
|
-
|
26
|
-
BOOLEAN => "false",
|
27
|
-
STRING => "",
|
28
|
-
NUMBER => "0",
|
29
|
-
INTEGER => "0",
|
30
|
-
DECIMAL => "0"
|
31
|
-
}
|
20
|
+
DEFAULT = nil
|
32
21
|
|
33
22
|
MATCHES = {
|
34
23
|
BOOLEAN => /^(true|false)$/i,
|
@@ -56,7 +45,7 @@ class Dorian
|
|
56
45
|
definition.each do |key, value|
|
57
46
|
type, default, aliases = normalize(value)
|
58
47
|
|
59
|
-
keys = ([key] + aliases).map(&:to_s).map(
|
48
|
+
keys = ([key] + aliases).map(&:to_s).map { |key| parameterize(key) }
|
60
49
|
keys = keys.map { |key| ["--#{key}", "-#{key}"] }.flatten
|
61
50
|
|
62
51
|
indexes = []
|
@@ -87,7 +76,7 @@ class Dorian
|
|
87
76
|
|
88
77
|
values = [default] if values.empty?
|
89
78
|
values = values.map { |value| cast(type, value) }
|
90
|
-
values = values.first unless
|
79
|
+
values = values.first unless many?(values)
|
91
80
|
options[key] = values
|
92
81
|
end
|
93
82
|
|
@@ -95,11 +84,17 @@ class Dorian
|
|
95
84
|
|
96
85
|
arguments -= files
|
97
86
|
|
98
|
-
|
87
|
+
options = Struct.new(*options.keys).new(*options.values)
|
88
|
+
|
89
|
+
Struct.new(:arguments, :options, :files, :help).new(
|
90
|
+
arguments, options, files, help
|
91
|
+
)
|
99
92
|
end
|
100
93
|
|
101
94
|
def cast(type, value)
|
102
|
-
if
|
95
|
+
if value.nil?
|
96
|
+
nil
|
97
|
+
elsif type == BOOLEAN
|
103
98
|
BOOLEANS.fetch(value.downcase)
|
104
99
|
elsif type == INTEGER
|
105
100
|
value.to_i
|
@@ -121,7 +116,7 @@ class Dorian
|
|
121
116
|
keys_message =
|
122
117
|
([key] + aliases)
|
123
118
|
.map(&:to_s)
|
124
|
-
.map(
|
119
|
+
.map { |key| parameterize(key) }
|
125
120
|
.map { |key| key.size == 1 ? "-#{key}" : "--#{key}" }
|
126
121
|
.join("|")
|
127
122
|
|
@@ -132,18 +127,31 @@ class Dorian
|
|
132
127
|
message
|
133
128
|
end
|
134
129
|
|
130
|
+
def many?(array)
|
131
|
+
array.size > 1
|
132
|
+
end
|
133
|
+
|
134
|
+
def parameterize(string, separator: "-")
|
135
|
+
string
|
136
|
+
.to_s
|
137
|
+
.encode("ASCII", invalid: :replace, undef: :replace, replace: "")
|
138
|
+
.downcase
|
139
|
+
.gsub(/[^a-z0-9]+/, separator)
|
140
|
+
.gsub(/^#{separator}+|#{separator}+$/, "")
|
141
|
+
end
|
142
|
+
|
135
143
|
def normalize(value)
|
136
144
|
if value.is_a?(Hash)
|
137
145
|
type = value[:type]&.to_s || DEFAULT_TYPE
|
138
|
-
default = value[:default]&.to_s ||
|
146
|
+
default = value[:default]&.to_s || DEFAULT
|
139
147
|
aliases =
|
140
|
-
Array
|
148
|
+
Array(
|
141
149
|
value[:alias]&.to_s || value[:aliases]&.map(&:to_s) ||
|
142
150
|
DEFAULT_ALIASES
|
143
151
|
)
|
144
152
|
else
|
145
153
|
type = value.to_s
|
146
|
-
default =
|
154
|
+
default = DEFAULT
|
147
155
|
aliases = DEFAULT_ALIASES
|
148
156
|
end
|
149
157
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dorian Marié
|
@@ -10,20 +10,6 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2024-08-24 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:
|