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 +4 -4
- data/Gemfile.lock +1 -1
- data/TODO.md +16 -0
- data/lib/rake_factory/kernel_extensions.rb +11 -0
- data/lib/rake_factory/parameter.rb +6 -11
- data/lib/rake_factory/parameter_view.rb +6 -8
- data/lib/rake_factory/task_set.rb +2 -6
- data/lib/rake_factory/values.rb +61 -0
- data/lib/rake_factory/version.rb +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc9e6dc8e318ce336d74c0a711e52878e50c6fb46590158813571c93a871c7e7
|
4
|
+
data.tar.gz: 96c59975d86c5bb4a2863790576361f4a41a5d087f5e9465d91313fe5750c1c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ceb116d978a610b6a6194a745357dc50687afdd370e47e6d000719609a1bba1ad7d39b8cd606bc0e2f23931393d5dd37e2a7d18b9da71ed3880d6309c269466
|
7
|
+
data.tar.gz: b65d4d012b05c3092b60e7494ce8cecec1b0c0a27ba0019170b042823adbdcf1bcabea2bbf9a15375f74d81bd7cf40666b73051731a526ebb92e4da077863caa
|
data/Gemfile.lock
CHANGED
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
|
@@ -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
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
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,
|
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
|
-
|
17
|
-
|
18
|
-
|
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
|
-
|
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
|
data/lib/rake_factory/version.rb
CHANGED
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.
|
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-
|
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:
|
188
|
+
version: 1.3.1
|
187
189
|
requirements: []
|
188
190
|
rubygems_version: 3.0.1
|
189
191
|
signing_key:
|