rake_factory 0.21.0 → 0.22.0.pre.1

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: 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: