rake_factory 0.21.0 → 0.22.0.pre.1

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: d02e044e9b6f155c382a8aa0f2a3c11e92646434a61c8bd394e7e8a864ae8be7
4
- data.tar.gz: 48eb21f6a42b567080e32526aabf453b4d42b6b538e901b9e39c85c739d3c292
3
+ metadata.gz: dc9e6dc8e318ce336d74c0a711e52878e50c6fb46590158813571c93a871c7e7
4
+ data.tar.gz: 96c59975d86c5bb4a2863790576361f4a41a5d087f5e9465d91313fe5750c1c6
5
5
  SHA512:
6
- metadata.gz: b659a191f909c92c62593dc5159f41b1a273429ea1a19c604dd1fc9567410f268291843575d181765c65de4d475dba9d58cfa46a578a9647fd53d4f1c9cb8c57
7
- data.tar.gz: '0592d281c30cfc70f02bd4e39caedbba44268b328358e7d9a85fb547cfad9775a802e34ee477b72d098fa767574e95e26936f1723e88c192869a0bec9ac7f0dd'
6
+ metadata.gz: 2ceb116d978a610b6a6194a745357dc50687afdd370e47e6d000719609a1bba1ad7d39b8cd606bc0e2f23931393d5dd37e2a7d18b9da71ed3880d6309c269466
7
+ data.tar.gz: b65d4d012b05c3092b60e7494ce8cecec1b0c0a27ba0019170b042823adbdcf1bcabea2bbf9a15375f74d81bd7cf40666b73051731a526ebb92e4da077863caa
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rake_factory (0.21.0)
4
+ rake_factory (0.22.0.pre.1)
5
5
  activesupport (>= 4)
6
6
  rake (~> 13.0)
7
7
 
data/TODO.md CHANGED
@@ -1,2 +1,18 @@
1
1
  * Allow parameter reads to be memoized
2
2
  * More clearly distinguish between construction and runtime parameters
3
+ - Parameter types:
4
+ - definition-time parameter: must be set before definition of the task.
5
+ - invocation-time parameter: can be set before or after definition of the
6
+ task; can be set in configuration block.
7
+ - Parameter value types:
8
+ - static value: do not depend on task set / task / runtime arguments.
9
+ - dynamic value: require task set / task / runtime arguments in order to be
10
+ resolved.
11
+ - For tasks:
12
+ - definition-time parameters can have static values and dynamic values of
13
+ arity zero or one, optionally taking the task itself
14
+ - invocation-time parameters can have static values and dynamic values of
15
+ arity zero, one or two, optionally taking the task itself and the runtime
16
+ arguments
17
+ - For task sets:
18
+ - all parameters are definition-time
@@ -0,0 +1,11 @@
1
+ require_relative 'values'
2
+
3
+ module Kernel
4
+ def dynamic(&block)
5
+ RakeFactory::DynamicValue.new(&block)
6
+ end
7
+
8
+ def static(value)
9
+ RakeFactory::StaticValue.new(value)
10
+ end
11
+ end
@@ -1,3 +1,5 @@
1
+ require_relative 'values'
2
+
1
3
  module RakeFactory
2
4
  class Parameter
3
5
  attr_reader(
@@ -5,7 +7,6 @@ module RakeFactory
5
7
  :default,
6
8
  :required,
7
9
  :configurable,
8
- :lazy,
9
10
  :transform)
10
11
  attr_writer(:default)
11
12
 
@@ -14,7 +15,6 @@ module RakeFactory
14
15
  @default = options[:default]
15
16
  @required = options[:required] || false
16
17
  @transform = options[:transform] || lambda { |x| x }
17
- @lazy = options[:lazy].nil? ? false : !!options[:lazy]
18
18
  @configurable =
19
19
  options[:configurable].nil? ? true : !!options[:configurable]
20
20
  end
@@ -39,15 +39,10 @@ module RakeFactory
39
39
  end
40
40
 
41
41
  define_method parameter.reader_method do
42
- value_resolver = lambda do |t|
43
- stored_value = instance_variable_get(parameter.instance_variable)
44
- resolved_value = stored_value.respond_to?(:call) ?
45
- stored_value.call(*[t].slice(0, stored_value.arity)) :
46
- stored_value
47
- transformed_value = parameter.transform.call(resolved_value)
48
- transformed_value
49
- end
50
- parameter.lazy ? value_resolver : value_resolver.call(self)
42
+ stored_value = instance_variable_get(parameter.instance_variable)
43
+ resolved_value = Values.resolve(stored_value).evaluate([self])
44
+ transformed_value = parameter.transform.call(resolved_value)
45
+ transformed_value
51
46
  end
52
47
  end
53
48
  end
@@ -1,8 +1,10 @@
1
+ require_relative 'values'
2
+
1
3
  module RakeFactory
2
4
  class ParameterView
3
5
  attr_reader(:task)
4
6
 
5
- def initialize(target, reader_class, writer_class, args)
7
+ def initialize(target, reader_class, writer_class, runtime_arguments)
6
8
  self.instance_eval do
7
9
  reader_class.parameter_set.each do |parameter|
8
10
  define_singleton_method parameter.reader_method do
@@ -13,13 +15,9 @@ module RakeFactory
13
15
  if parameter.configurable?
14
16
  define_singleton_method parameter.writer_method do |value|
15
17
  if target.respond_to?(parameter.writer_method)
16
- resolved_value = lambda do |t|
17
- params = args ? [t, args] : [t]
18
- value.respond_to?(:call) ?
19
- value.call(*params.slice(0, value.arity)) :
20
- value
21
- end
22
- target.send(parameter.writer_method, resolved_value)
18
+ target.send(
19
+ parameter.writer_method,
20
+ Values.resolve(value).append_argument(runtime_arguments))
23
21
  end
24
22
  end
25
23
  end
@@ -1,5 +1,6 @@
1
1
  require 'rake/tasklib'
2
2
 
3
+ require_relative 'values'
3
4
  require_relative 'parameters'
4
5
  require_relative 'definable'
5
6
  require_relative 'defaults'
@@ -77,12 +78,7 @@ module RakeFactory
77
78
 
78
79
  def process_parameter_hash(parameter_hash)
79
80
  parameter_hash.reduce({}) do |acc, (name, value)|
80
- resolved_value = lambda do |t|
81
- value.respond_to?(:call) ?
82
- value.call(*[task_set, t].slice(0, value.arity)) :
83
- value
84
- end
85
- acc.merge({name => resolved_value})
81
+ acc.merge(name => Values.resolve(value).prepend_argument(task_set))
86
82
  end
87
83
  end
88
84
  end
@@ -0,0 +1,61 @@
1
+ module RakeFactory
2
+ module Values
3
+ def self.resolve(value)
4
+ case value
5
+ when RakeFactory::DynamicValue, RakeFactory::StaticValue
6
+ value
7
+ else
8
+ RakeFactory::StaticValue.new(value)
9
+ end
10
+ end
11
+
12
+ module FactoryMethods
13
+ def dynamic(&block)
14
+ DynamicValue.new(&block)
15
+ end
16
+
17
+ def static(value)
18
+ StaticValue.new(value)
19
+ end
20
+ end
21
+ end
22
+
23
+ class DynamicValue
24
+ def initialize(pre_arguments = [], post_arguments = [], &block)
25
+ @block = block
26
+ @pre_arguments = pre_arguments
27
+ @post_arguments = post_arguments
28
+ end
29
+
30
+ def prepend_argument(argument)
31
+ self.class.new([argument, *@pre_arguments], @post_arguments, &@block)
32
+ end
33
+
34
+ def append_argument(argument)
35
+ self.class.new(@pre_arguments, [*@post_arguments, argument], &@block)
36
+ end
37
+
38
+ def evaluate(arguments)
39
+ resolved_arguments = [*@pre_arguments, *arguments, *@post_arguments]
40
+ @block.call(*resolved_arguments.slice(0, @block.arity))
41
+ end
42
+ end
43
+
44
+ class StaticValue
45
+ def initialize(value)
46
+ @value = value
47
+ end
48
+
49
+ def prepend_argument(_)
50
+ self
51
+ end
52
+
53
+ def append_argument(_)
54
+ self
55
+ end
56
+
57
+ def evaluate(*_)
58
+ @value
59
+ end
60
+ end
61
+ end
@@ -1,3 +1,3 @@
1
1
  module RakeFactory
2
- VERSION = '0.21.0'
2
+ VERSION = '0.22.0.pre.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake_factory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.22.0.pre.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Clemson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-04 00:00:00.000000000 Z
11
+ date: 2020-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -150,6 +150,7 @@ files:
150
150
  - lib/rake_factory/defaults.rb
151
151
  - lib/rake_factory/definable.rb
152
152
  - lib/rake_factory/exceptions.rb
153
+ - lib/rake_factory/kernel_extensions.rb
153
154
  - lib/rake_factory/namespaceable.rb
154
155
  - lib/rake_factory/parameter.rb
155
156
  - lib/rake_factory/parameter_set.rb
@@ -157,6 +158,7 @@ files:
157
158
  - lib/rake_factory/parameters.rb
158
159
  - lib/rake_factory/task.rb
159
160
  - lib/rake_factory/task_set.rb
161
+ - lib/rake_factory/values.rb
160
162
  - lib/rake_factory/version.rb
161
163
  - rake_factory.gemspec
162
164
  - scripts/ci/common/configure-git.sh
@@ -181,9 +183,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
183
  version: '2.6'
182
184
  required_rubygems_version: !ruby/object:Gem::Requirement
183
185
  requirements:
184
- - - ">="
186
+ - - ">"
185
187
  - !ruby/object:Gem::Version
186
- version: '0'
188
+ version: 1.3.1
187
189
  requirements: []
188
190
  rubygems_version: 3.0.1
189
191
  signing_key: