opto 1.5.2 → 1.5.3

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: 469818920f19b0aa498df43ef2a9bb9efe13aa34
4
- data.tar.gz: 78c94e65c48b602d14346252c015061fe78a3881
3
+ metadata.gz: a9f0ef7542d31a0ad7e239c0cb806b8043fbf180
4
+ data.tar.gz: 7c8f9cce7e8f4e72ab1e5e5a02e2b7db6ce1e2ad
5
5
  SHA512:
6
- metadata.gz: ce178466bf44aa9d757db6753ff1b9976aaaafa303c31af143008281e06b8496ae9841d6af19b81d28f6f789df1b4d585d7ceb4accd1145a103b82c8ae1f403b
7
- data.tar.gz: 34273a61230708482fc5067b8d985be327e1fa90fbe8d6c40c29e8112971bcca11bbc3f278ee6446461019aa49c703c286c09cf6a0db21058aba5593df4d57a5
6
+ metadata.gz: 9308afe78c8546a80374aa50001cb6c2db6b16844a0fbf34bc13965da43dce0348a6cec1ba8c383021ae84f4f7e99f7786c692d396c249fd661b4bbb0eeda9e9
7
+ data.tar.gz: 99d48baecaea59a3d1cffad818fc3799c9d2c36eef1df0a6b311448cca96fc3d409220f3cf687b0d542f732311ce40e878590712faa5f986cd20d8087c03387b
data/README.md CHANGED
@@ -393,6 +393,45 @@ Ignores hint completely.
393
393
 
394
394
  Output is a 'random' UUID generated by `SecureRandom.uuid`, such as `78b6decf-e312-45a1-ac8c-d562270036ba`
395
395
 
396
+ ### evaluate
397
+ Hint is a calculation. Uses values of other options to perform simple calculations.
398
+
399
+ Example:
400
+
401
+ ```yaml
402
+ apples:
403
+ type: integer
404
+ value: 2
405
+
406
+ bananas:
407
+ type: integer
408
+ value: 1
409
+
410
+ fruits:
411
+ type: integer
412
+ from:
413
+ evaluate: ${apples} + ${bananas}
414
+
415
+ # group.value_of('fruits') => 3
416
+
417
+ ### interpolate
418
+ Hint is a template. Uses values from other options to build a string.
419
+
420
+ Example:
421
+
422
+ ```yaml
423
+ place:
424
+ type: string
425
+ value: world
426
+
427
+ greeting:
428
+ type: string
429
+ from:
430
+ interpolate: Hello, ${place}!
431
+
432
+ # group.value_of('greeting') => "Hello, world!"
433
+ ```
434
+
396
435
  ## Default setters
397
436
 
398
437
  ### env
@@ -157,6 +157,7 @@ module Opto
157
157
  # Get a value of another Opto::Group member
158
158
  # @param [String] option_name
159
159
  def value_of(option_name)
160
+ return value if option_name == self.name
160
161
  group.nil? ? nil : group.value_of(option_name)
161
162
  end
162
163
 
@@ -0,0 +1,38 @@
1
+ require 'opto/extensions/snake_case'
2
+ require 'opto/extensions/hash_string_or_symbol_key'
3
+
4
+ if RUBY_VERSION < '2.1'
5
+ using Opto::Extension::SnakeCase
6
+ using Opto::Extension::HashStringOrSymbolKey
7
+ end
8
+
9
+ module Opto
10
+ module Resolvers
11
+ # Geneerate a new random number. Requires :min and :max in hint to define range.
12
+ class Evaluate < Opto::Resolver
13
+
14
+ using Opto::Extension::HashStringOrSymbolKey unless RUBY_VERSION < '2.1'
15
+
16
+ def resolve
17
+ raise TypeError, "String required" unless hint.kind_of?(String)
18
+ interpolated_hint = hint.gsub(/(?<!\$)\$(?!\$)\{?\w+\}?/) do |v|
19
+ var = v.tr('${}', '')
20
+ if option.group.nil? || option.group.option(var).nil?
21
+ raise RuntimeError, "Variable #{var} not declared"
22
+ end
23
+ if option.value_of(var).nil?
24
+ raise RuntimeError, "No value for #{var}, note that the order is meaningful"
25
+ end
26
+ option.value_of(var)
27
+ end.gsub(/\s+/, "")
28
+
29
+ if interpolated_hint =~ /\A[\(\)\-\+\/\*0-9\.]+\z/
30
+ eval(interpolated_hint)
31
+ else
32
+ raise TypeError, "Syntax error: '#{interpolated_hint}' does not look like a number or a calculation"
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
@@ -0,0 +1,35 @@
1
+ require 'opto/extensions/snake_case'
2
+ require 'opto/extensions/hash_string_or_symbol_key'
3
+
4
+ if RUBY_VERSION < '2.1'
5
+ using Opto::Extension::SnakeCase
6
+ using Opto::Extension::HashStringOrSymbolKey
7
+ end
8
+
9
+ module Opto
10
+ module Resolvers
11
+ # Interpolates values from other options into a template string.
12
+ #
13
+ # Example:
14
+ # from:
15
+ # interpolate: mysql://admin:$mysql_admin_pass@mysql:1234/$mysql_db_name
16
+ class Interpolate < Opto::Resolver
17
+
18
+ using Opto::Extension::HashStringOrSymbolKey unless RUBY_VERSION < '2.1'
19
+
20
+ def resolve
21
+ raise TypeError, "String expected" unless hint.kind_of?(String)
22
+ hint.gsub(/(?<!\$)\$(?!\$)\{?\w+\}?/) do |v|
23
+ var = v.tr('${}', '')
24
+ if option.group.nil? || option.group.option(var).nil?
25
+ raise RuntimeError, "Variable #{var} not declared"
26
+ end
27
+ if option.value_of(var).nil?
28
+ raise RuntimeError, "No value for #{var}, note that the order is meaningful"
29
+ end
30
+ option.value_of(var)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,3 +1,3 @@
1
1
  module Opto
2
- VERSION = "1.5.2"
2
+ VERSION = "1.5.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opto
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kimmo Lehto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-08 00:00:00.000000000 Z
11
+ date: 2016-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -74,7 +74,9 @@ files:
74
74
  - lib/opto/resolver.rb
75
75
  - lib/opto/resolvers/default.rb
76
76
  - lib/opto/resolvers/environment_variable.rb
77
+ - lib/opto/resolvers/evaluate.rb
77
78
  - lib/opto/resolvers/file_content.rb
79
+ - lib/opto/resolvers/interpolate.rb
78
80
  - lib/opto/resolvers/random_number.rb
79
81
  - lib/opto/resolvers/random_string.rb
80
82
  - lib/opto/resolvers/random_uuid.rb