ruby-dagger 0.2.1 → 0.3.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 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