ruby-dagger 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b4815548df0f3403101f979e8ac7be3af0cca871d6d800cd01186c958d2c112f
4
- data.tar.gz: aeb7536387b287e3e7ea9be20c982d90efb022dc5d7487c435a814a8ed3f124f
3
+ metadata.gz: 0e0b2aac30db4d1b00f0c2142f9f67f3cbc7bf2c48c21c6769f488428e605f1e
4
+ data.tar.gz: 6a03b80f550cc179fff40d582ba960011f57dda457fc728e130678e0697a00eb
5
5
  SHA512:
6
- metadata.gz: 59d586af2dd28e3a94412b7d160e95eb4de34bbac6864f58231fe82560b5201bbc73b38c57c4596685316f5b1ae66645edddb7a78e8cfea8323d88d3ea9ce047
7
- data.tar.gz: c8c5e006cd4002ea99edd40e81767418333ec0681c9aea39510e41f8cc06a4a070e30d21ffb54e23d069f991fc7c1bcd3d9c493d17de4e45a25a876596e2d61b
6
+ metadata.gz: 363469d20a35b20b81087b5c197f99a9175e02a2ea6b4ebae9d4f2fc3ce348710cd1f1e15bc5ff4c07579d5f6b3e8e5aa98ea5a2a8c7c38c2924decb8af55314
7
+ data.tar.gz: 7745518212caef8a211a8d2750f177a1cfd092a4bf5161fa75826180ae478da90816e5c0afc748f2ad6a5294887e557a966551784e9cf393a1abeebae5f968ec
@@ -0,0 +1,37 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.3.0] - 2019-07-05
10
+
11
+ ### Added
12
+ - Numeric default values
13
+ - integer: for rounded integer values
14
+ - float: for floating point values
15
+ - both types also support summarizing functions
16
+ - sum: arithmetic sum of the values
17
+ - product: arithmetic product of the values
18
+ - arithmetic_mean: the [arithmetic mean] of the values
19
+ - geometric_mean: the [geometric mean] of the values
20
+ - harmonic_mean: the [harmonic mean] of the values
21
+
22
+ [arithmethic mean]: https://en.wikipedia.org/wiki/Mean#Arithmetic_mean_(AM)
23
+ [geometric mean]: https://en.wikipedia.org/wiki/Mean#Geometric_mean_(GM)
24
+ [harmonic mean]: https://en.wikipedia.org/wiki/Mean#Harmonic_mean_(HM)
25
+
26
+ ### Changed
27
+ - Default value arguments used to be wrapped in arrays based on responding
28
+ to `#enum`, but are now based on `#to_ary`, to ensure that hashes are also
29
+ wrapped.
30
+
31
+ ## [Older]
32
+ These releases have no change logs.
33
+
34
+
35
+ [Unreleased]: https://github.com/notCalle/ruby-dagger/compare/v0.3.0..HEAD
36
+ [0.3.0]: https://github.com/notCalle/ruby-dagger/compare/v0.2.1..v0.3.0
37
+ [Older]: https://github.com/notCalle/ruby-dagger/releases/tag/v0.2.1
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../numeric_generator'
4
+
5
+ module Dagger
6
+ module Generate
7
+ # Generate a floating point value from a format string
8
+ #
9
+ # _default.key:
10
+ # - float: "#{key}"
11
+ # - float:
12
+ # - "#{key}"
13
+ # - ...
14
+ class Float < NumericGenerator
15
+ private
16
+
17
+ def from_s(string)
18
+ string.to_f
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../numeric_generator'
4
+
5
+ module Dagger
6
+ module Generate
7
+ # Generate an integer value from a format string
8
+ #
9
+ # _default.key:
10
+ # - integer: "#{key}"
11
+ # - integer:
12
+ # - "#{key}"
13
+ # - ...
14
+ # - integer:
15
+ # accumulate:
16
+ class Integer < NumericGenerator
17
+ private
18
+
19
+ def from_s(string)
20
+ string.to_f.round
21
+ end
22
+ end
23
+ end
24
+ end
@@ -35,7 +35,7 @@ module Dagger
35
35
  def match_regexps(key, regexps)
36
36
  string = dictionary[key]
37
37
 
38
- enumerable(regexps).each_with_object({}) do |regexp, matches|
38
+ array(regexps).each_with_object({}) do |regexp, matches|
39
39
  matchdata = ::Regexp.new(regexp).match(string)
40
40
  next if matchdata.nil?
41
41
 
@@ -14,7 +14,7 @@ module Dagger
14
14
  def process(keys)
15
15
  stop unless keys.any? do |key, regexps|
16
16
  string = dictionary[key]
17
- enumerable(regexps).any? do |regexp|
17
+ array(regexps).any? do |regexp|
18
18
  ::Regexp.new(regexp).match?(string)
19
19
  end
20
20
  end
@@ -11,7 +11,7 @@ module Dagger
11
11
  # - ...
12
12
  class RequireName < Dagger::Generator
13
13
  def process(regexps)
14
- stop unless enumerable(regexps).any? do |regexp|
14
+ stop unless array(regexps).any? do |regexp|
15
15
  ::Regexp.new(regexp).match?(vertex.name)
16
16
  end
17
17
  end
@@ -13,7 +13,7 @@ module Dagger
13
13
  # - ...
14
14
  class String < Dagger::Generator
15
15
  def process(strings)
16
- enumerable(strings).each do |fmtstr|
16
+ array(strings).each do |fmtstr|
17
17
  result = format_string(fmtstr)
18
18
  yield result unless result.nil?
19
19
  end
@@ -60,12 +60,12 @@ module Dagger
60
60
  kwargs.each { |key, value| @context[key] = value }
61
61
  end
62
62
 
63
- # Make an array of a value unless it is already enumerable
63
+ # Make an array of a value unless it is already an array
64
64
  #
65
65
  # :call-seq:
66
- # enumerable(value) => value || [value]
67
- def enumerable(value)
68
- value.respond_to?(:each) ? value : [value]
66
+ # array(value) => value || [value]
67
+ def array(value)
68
+ value.respond_to?(:to_ary) ? value : [value]
69
69
  end
70
70
 
71
71
  # Format a +string+ with values from a +dictionary+
@@ -85,4 +85,4 @@ module Dagger
85
85
  end
86
86
  end
87
87
 
88
- Dir[__dir__ + '/generator/*.rb'].each { |file| load(file) }
88
+ Dir[__dir__ + '/generate/*.rb'].each { |file| load(file) }
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'generator'
4
+
5
+ module Dagger
6
+ module Generate
7
+ # Abstract base for generating numeric values
8
+ class NumericGenerator < Dagger::Generator
9
+ def process(args)
10
+ array(args).each do |arg|
11
+ result = process_recurse(arg)
12
+ yield result unless result.nil?
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def process_recurse(arg)
19
+ case arg
20
+ when Hash
21
+ process_hash(arg)
22
+ when ::String
23
+ str = format_string(arg)
24
+ from_s(str) unless str.nil?
25
+ else
26
+ from_s(arg)
27
+ end
28
+ end
29
+
30
+ def process_hash(hash)
31
+ print(hash)
32
+ hash.each do |key, args|
33
+ result = process_hash_item(key, args)
34
+ return result unless result.nil?
35
+ end
36
+ end
37
+
38
+ def process_hash_item(key, args)
39
+ case args
40
+ when ::String
41
+ send("numeric_#{key}", dictionary[args])
42
+ else
43
+ send("numeric_#{key}", process_args(args))
44
+ end
45
+ end
46
+
47
+ def process_args(args)
48
+ args = array(args).flat_map { |arg| process_recurse(arg) }
49
+ args.delete(nil)
50
+ args
51
+ end
52
+
53
+ def numeric_values(args)
54
+ args.map { |value| from_s(value) }
55
+ end
56
+
57
+ def numeric_sum(args)
58
+ args.sum
59
+ end
60
+
61
+ def numeric_product(args)
62
+ args.reduce(:*)
63
+ end
64
+
65
+ def numeric_arithmetic_mean(args)
66
+ return if args.empty?
67
+
68
+ numeric_sum(args) / args.length
69
+ end
70
+
71
+ def numeric_geometric_mean(args)
72
+ return if args.empty?
73
+
74
+ numeric_product(args)**(1.0 / args.length)
75
+ end
76
+
77
+ def numeric_harmonic_mean(args)
78
+ return if args.empty?
79
+
80
+ args.length / args.map { |n| 1.0 / n }.sum
81
+ end
82
+ end
83
+ end
84
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-dagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Calle Englund
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-02 00:00:00.000000000 Z
11
+ date: 2019-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: key_tree
@@ -175,6 +175,7 @@ files:
175
175
  - ".rspec"
176
176
  - ".rubocop.yml"
177
177
  - ".travis.yml"
178
+ - CHANGELOG.md
178
179
  - CODE_OF_CONDUCT.md
179
180
  - Gemfile
180
181
  - LICENSE.txt
@@ -186,12 +187,15 @@ files:
186
187
  - lib/dagger.rb
187
188
  - lib/dagger/context.rb
188
189
  - lib/dagger/default.rb
190
+ - lib/dagger/generate/float.rb
191
+ - lib/dagger/generate/integer.rb
192
+ - lib/dagger/generate/regexp.rb
193
+ - lib/dagger/generate/require.rb
194
+ - lib/dagger/generate/require_name.rb
195
+ - lib/dagger/generate/string.rb
189
196
  - lib/dagger/generator.rb
190
- - lib/dagger/generator/regexp.rb
191
- - lib/dagger/generator/require.rb
192
- - lib/dagger/generator/require_name.rb
193
- - lib/dagger/generator/string.rb
194
197
  - lib/dagger/graph.rb
198
+ - lib/dagger/numeric_generator.rb
195
199
  - lib/dagger/version.rb
196
200
  - lib/dagger/vertex.rb
197
201
  - ruby-dagger.gemspec