dorian-arguments 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/lib/dorian/arguments.rb +33 -28
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3842736e3a26ecd94df067996bdc259b7538ea017c7e4779789f31e6a49adf70
4
- data.tar.gz: c1f363f50efb215e6b209b445c178872178dc5b93aae96cf07bd0547f8c938c0
3
+ metadata.gz: '09d9d32b127d6c1fa25991cc9cff847085177dc3172aaa819899922c6e959cba'
4
+ data.tar.gz: 8de0feb1f2b38a19e5c03de71f4b9d8327cb8dee3f156a2bb2430fe19910331e
5
5
  SHA512:
6
- metadata.gz: 0bf3bf93d7445af8e4d53fc1b4d22e08fe6d9ce3d7bf57088ee367abcef21f87b305d30d13fa8dae787fe81abd4e8e3583fcdc1565d94b06ca9bcd382a6d756f
7
- data.tar.gz: a65fb51190305fd70ccaf392c2967ce9fffc28cd6071d1d4efb709b57182351771d253aa823b9f94064862d5ee97850a39073acd91bbfd3ae221f3b5948e9961
6
+ metadata.gz: 30b7aea21028ceed58ae95be8ddee8d47f39e6bd3266c54aa7950307cd603ada2a26ba788d14d05e190d643113e269b5b09f3bd00a12428d8de9c527fa9107ad
7
+ data.tar.gz: dbbc563bd0387c247dba669edfbccc72775fdd19f8e2962dfdb759dd0c3c57cf5e9366f35d38c2c9473a4a8f5ec2effe4759cc14b9429d34ec2a51928cc8e37b
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.1
@@ -1,8 +1,10 @@
1
1
  require "dorian/to_struct"
2
2
  require "bigdecimal"
3
+ require "bigdecimal/util"
3
4
  require "active_support"
4
5
  require "active_support/core_ext/string/inflections"
5
6
  require "active_support/core_ext/array/wrap"
7
+ require "active_support/core_ext/enumerable"
6
8
 
7
9
  class Dorian
8
10
  class Arguments
@@ -29,14 +31,14 @@ class Dorian
29
31
  }
30
32
 
31
33
  MATCHES = {
32
- BOOLEAN => /^(0|1|true|false)$/i,
34
+ BOOLEAN => /^(true|false)$/i,
33
35
  STRING => /^.+$/i,
34
36
  NUMBER => /^[0-9.]+$/i,
35
37
  INTEGER => /^[0-9]+$/i,
36
38
  DECIMAL => /^[0-9.]+$/i
37
39
  }
38
40
 
39
- BOOLEANS = { "0" => false, "1" => true, "true" => true, "false" => false }
41
+ BOOLEANS = { "true" => true, "false" => false }
40
42
 
41
43
  def initialize(**definition)
42
44
  @definition = definition
@@ -81,21 +83,11 @@ class Dorian
81
83
  end
82
84
  .reject(&:nil?)
83
85
 
84
- if type == BOOLEAN
85
- values = values.map { |value| BOOLEANS.fetch(value.downcase) }
86
- end
87
-
88
- values = values.map { |value| value.to_i } if type == INTEGER
89
-
90
- if type == DECIMAL || type == NUMBER
91
- values = values.map { |value| BigDecimal(value) }
92
- end
93
-
94
- values = values.first if values.size < 2
95
- values || BOOLEANS.fetch(DEFAULTS.fetch(type)) if type == BOOLEAN
96
-
97
86
  indexes.sort.reverse.uniq.each { |index| arguments.delete_at(index) }
98
87
 
88
+ values = [DEFAULTS.fetch(type)] if values.empty?
89
+ values = values.map { |value| cast(type, value) }
90
+ values = values.first unless values.many?
99
91
  options[key] = values
100
92
  end
101
93
 
@@ -103,12 +95,19 @@ class Dorian
103
95
 
104
96
  arguments -= files
105
97
 
106
- {
107
- arguments:,
108
- options:,
109
- files:,
110
- help:
111
- }.to_deep_struct
98
+ { arguments:, options:, files:, help: }.to_deep_struct
99
+ end
100
+
101
+ def cast(type, value)
102
+ if type == BOOLEAN
103
+ BOOLEANS.fetch(value.downcase)
104
+ elsif type == INTEGER
105
+ value.to_i
106
+ elsif type == DECIMAL || type == NUMBER
107
+ value.to_d
108
+ else
109
+ value
110
+ end
112
111
  end
113
112
 
114
113
  def help
@@ -119,11 +118,15 @@ class Dorian
119
118
  definition.each do |key, value|
120
119
  type, default, aliases = normalize(value)
121
120
 
122
- keys_message = ([key] + aliases).map(&:to_s).map(&:parameterize).map do |key|
123
- key.size == 1 ? "-#{key}" : "--#{key}"
124
- end.join("|")
121
+ keys_message =
122
+ ([key] + aliases)
123
+ .map(&:to_s)
124
+ .map(&:parameterize)
125
+ .map { |key| key.size == 1 ? "-#{key}" : "--#{key}" }
126
+ .join("|")
125
127
 
126
- message += " #{keys_message} #{type.upcase}, default: #{default}\n"
128
+ message +=
129
+ " #{keys_message} #{type.upcase}, default: #{cast(type, default).inspect}\n"
127
130
  end
128
131
 
129
132
  message
@@ -133,9 +136,11 @@ class Dorian
133
136
  if value.is_a?(Hash)
134
137
  type = value[:type]&.to_s || DEFAULT_TYPE
135
138
  default = value[:default]&.to_s || DEFAULTS.fetch(type)
136
- aliases = Array.wrap(
137
- value[:alias]&.to_s || value[:aliases]&.map(&:to_s) || DEFAULT_ALIASES
138
- )
139
+ aliases =
140
+ Array.wrap(
141
+ value[:alias]&.to_s || value[:aliases]&.map(&:to_s) ||
142
+ DEFAULT_ALIASES
143
+ )
139
144
  else
140
145
  type = value.to_s
141
146
  default = DEFAULTS.fetch(type)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorian-arguments
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.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-20 00:00:00.000000000 Z
11
+ date: 2024-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport