rake_factory 0.4.0 → 0.5.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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/rake_factory/actions.rb +16 -4
- data/lib/rake_factory/arguments.rb +22 -0
- data/lib/rake_factory/configurable.rb +36 -0
- data/lib/rake_factory/defaults.rb +45 -39
- data/lib/rake_factory/definable.rb +12 -0
- data/lib/rake_factory/parameter.rb +5 -2
- data/lib/rake_factory/parameter_set.rb +6 -0
- data/lib/rake_factory/parameter_view.rb +2 -1
- data/lib/rake_factory/parameters.rb +30 -6
- data/lib/rake_factory/task.rb +14 -58
- data/lib/rake_factory/task_set.rb +77 -0
- data/lib/rake_factory/version.rb +1 -1
- data/lib/rake_factory.rb +1 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ec32ca688b8984c5ae191170b977709dd1b1770a18fba47c5af8390d1092302
|
4
|
+
data.tar.gz: 5bd164bcacccd44e9db7997855a540c7d289fdb977233e48ac6456d7c467e4ba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3af977187b1542e5c039478f7d583989b2a9dd1f974721c314f69c1aeb329fa23e777d06480a781e8acc278e40458ad13f4a1db64fcd92dd40c2a9bf86e787cb
|
7
|
+
data.tar.gz: 3ed7c35c6ea466c6e7bd5ad8460b9edd21f361501b555aab7766eda009759acb6658ccdc86d98e3d685ae9e96ccbbe295bf5539a561da7f507abba78680f9d75
|
data/Gemfile.lock
CHANGED
data/lib/rake_factory/actions.rb
CHANGED
@@ -1,11 +1,23 @@
|
|
1
1
|
module RakeFactory
|
2
2
|
module Actions
|
3
|
-
def
|
4
|
-
|
3
|
+
def self.included(base)
|
4
|
+
base.extend(ClassMethods)
|
5
5
|
end
|
6
6
|
|
7
|
-
def
|
8
|
-
actions
|
7
|
+
def invoke_actions(args)
|
8
|
+
self.class.actions.each do |action|
|
9
|
+
self.instance_exec(*[self, args].slice(0, action.arity), &action)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module ClassMethods
|
14
|
+
def actions
|
15
|
+
@actions ||= []
|
16
|
+
end
|
17
|
+
|
18
|
+
def action(&action_block)
|
19
|
+
actions << action_block
|
20
|
+
end
|
9
21
|
end
|
10
22
|
end
|
11
23
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module RakeFactory
|
2
|
+
module Arguments
|
3
|
+
def initialize(*args, &configuration_block)
|
4
|
+
arity = self.method(:initialize).super_method.arity
|
5
|
+
super(*args.slice(0, arity), &configuration_block)
|
6
|
+
process_arguments(args)
|
7
|
+
end
|
8
|
+
|
9
|
+
def process_arguments(args)
|
10
|
+
opts = args.first || {}
|
11
|
+
opts.each { |key, value| set_if_value_present(key, value) }
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def set_if_value_present(key, value)
|
17
|
+
if self.respond_to?("#{key}=") && !value.nil?
|
18
|
+
self.send("#{key}=", value)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module RakeFactory
|
2
|
+
module Configurable
|
3
|
+
def self.included(base)
|
4
|
+
base.class_eval do
|
5
|
+
attr_accessor(:configuration_block)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(*args, &configuration_block)
|
10
|
+
arity = self.method(:initialize).super_method.arity
|
11
|
+
super(*args.slice(0, arity), &configuration_block)
|
12
|
+
process_configuration_block(configuration_block)
|
13
|
+
end
|
14
|
+
|
15
|
+
def process_configuration_block(configuration_block)
|
16
|
+
set_if_value_present(:configuration_block, configuration_block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def invoke_configuration_block(args=nil)
|
20
|
+
if configuration_block
|
21
|
+
view = ParameterView.new(self, args)
|
22
|
+
params = args ? [view, args] : [view]
|
23
|
+
configuration_block.call(
|
24
|
+
*params.slice(0, configuration_block.arity))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def set_if_value_present(key, value)
|
31
|
+
if self.respond_to?("#{key}=") && !value.nil?
|
32
|
+
self.send("#{key}=", value)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -5,52 +5,58 @@ require_relative 'parameters'
|
|
5
5
|
|
6
6
|
module RakeFactory
|
7
7
|
module Defaults
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
8
|
+
def self.included(base)
|
9
|
+
base.extend(ClassMethods)
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
include Parameters
|
14
|
+
|
15
|
+
def inherited(inheritor)
|
16
|
+
super(inheritor)
|
17
|
+
inheritor.class_eval do
|
18
|
+
parameter(:name,
|
19
|
+
configurable: false,
|
20
|
+
transform: lambda { |n| n.to_sym })
|
21
|
+
parameter(:argument_names,
|
22
|
+
configurable: false,
|
23
|
+
default: [])
|
24
|
+
parameter(:prerequisites,
|
25
|
+
configurable: false,
|
26
|
+
default: [])
|
27
|
+
parameter(:order_only_prerequisites,
|
28
|
+
configurable: false,
|
29
|
+
default: [])
|
30
|
+
parameter(:description,
|
31
|
+
configurable: false)
|
32
|
+
|
33
|
+
unless inheritor.name.nil?
|
34
|
+
default_name inheritor.name.demodulize.underscore
|
35
|
+
end
|
30
36
|
end
|
31
37
|
end
|
32
|
-
end
|
33
38
|
|
34
|
-
|
35
|
-
|
36
|
-
|
39
|
+
def default_name(name)
|
40
|
+
parameter_set.update_default_for(:name, name)
|
41
|
+
end
|
37
42
|
|
38
|
-
|
39
|
-
|
40
|
-
|
43
|
+
def default_argument_names(argument_names)
|
44
|
+
parameter_set.update_default_for(:argument_names, argument_names)
|
45
|
+
end
|
41
46
|
|
42
|
-
|
43
|
-
|
44
|
-
|
47
|
+
def default_prerequisites(prerequisites)
|
48
|
+
parameter_set.update_default_for(:prerequisites, prerequisites)
|
49
|
+
end
|
45
50
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
+
def default_order_only_prerequisites(order_only_prerequisites)
|
52
|
+
parameter_set
|
53
|
+
.update_default_for(
|
54
|
+
:order_only_prerequisites, order_only_prerequisites)
|
55
|
+
end
|
51
56
|
|
52
|
-
|
53
|
-
|
57
|
+
def default_description(description)
|
58
|
+
parameter_set.update_default_for(:description, description)
|
59
|
+
end
|
54
60
|
end
|
55
61
|
end
|
56
62
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module RakeFactory
|
2
|
+
module Definable
|
3
|
+
def inherited(inheritor)
|
4
|
+
super(inheritor)
|
5
|
+
inheritor.singleton_class.class_eval do
|
6
|
+
define_method :define do |*args, &block|
|
7
|
+
inheritor.new(*args, &block).define_on(Rake.application)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -51,13 +51,16 @@ module RakeFactory
|
|
51
51
|
instance.send(writer_method, @default) unless @default.nil?
|
52
52
|
end
|
53
53
|
|
54
|
+
def read_from(instance)
|
55
|
+
instance.send(reader_method)
|
56
|
+
end
|
57
|
+
|
54
58
|
def configurable?
|
55
59
|
@configurable
|
56
60
|
end
|
57
61
|
|
58
62
|
def dissatisfied_by?(instance)
|
59
|
-
|
60
|
-
@required && value.nil?
|
63
|
+
@required && read_from(instance).nil?
|
61
64
|
end
|
62
65
|
|
63
66
|
def satisfied_by?(instance)
|
@@ -44,5 +44,11 @@ module RakeFactory
|
|
44
44
|
"Required parameter#{pluralisation_string} #{names_string} unset."
|
45
45
|
end
|
46
46
|
end
|
47
|
+
|
48
|
+
def read_from(instance)
|
49
|
+
@parameter_set.reduce({}) do |acc, (key, parameter)|
|
50
|
+
acc.merge(Hash[key, parameter.read_from(instance)])
|
51
|
+
end
|
52
|
+
end
|
47
53
|
end
|
48
54
|
end
|
@@ -12,8 +12,9 @@ module RakeFactory
|
|
12
12
|
if parameter.configurable?
|
13
13
|
define_singleton_method parameter.writer_method do |value|
|
14
14
|
resolved_value = lambda do |t|
|
15
|
+
params = args ? [t, args] : [t]
|
15
16
|
value.respond_to?(:call) ?
|
16
|
-
value.call(*
|
17
|
+
value.call(*params.slice(0, value.arity)) :
|
17
18
|
value
|
18
19
|
end
|
19
20
|
task.send(parameter.writer_method, resolved_value)
|
@@ -2,13 +2,37 @@ require_relative 'parameter_set'
|
|
2
2
|
|
3
3
|
module RakeFactory
|
4
4
|
module Parameters
|
5
|
-
def
|
6
|
-
|
5
|
+
def self.included(base)
|
6
|
+
base.extend(ClassMethods)
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
11
|
-
|
9
|
+
def initialize(*args, &configuration_block)
|
10
|
+
arity = self.method(:initialize).super_method.arity
|
11
|
+
super(*args.slice(0, arity), &configuration_block)
|
12
|
+
setup_parameter_defaults
|
13
|
+
end
|
14
|
+
|
15
|
+
def parameter_values
|
16
|
+
self.class.parameter_set.read_from(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def setup_parameter_defaults
|
20
|
+
self.class.parameter_set.apply_defaults_to(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def check_parameter_requirements
|
24
|
+
self.class.parameter_set.enforce_requirements_on(self)
|
25
|
+
end
|
26
|
+
|
27
|
+
module ClassMethods
|
28
|
+
def parameter_set
|
29
|
+
@parameter_set ||= ParameterSet.new
|
30
|
+
end
|
31
|
+
|
32
|
+
def parameter(name, options = {})
|
33
|
+
parameter = parameter_set.add(name, options)
|
34
|
+
parameter.define_on(self)
|
35
|
+
end
|
12
36
|
end
|
13
37
|
end
|
14
|
-
end
|
38
|
+
end
|
data/lib/rake_factory/task.rb
CHANGED
@@ -3,63 +3,24 @@ require 'rake/tasklib'
|
|
3
3
|
require_relative 'parameters'
|
4
4
|
require_relative 'parameter_view'
|
5
5
|
require_relative 'actions'
|
6
|
+
require_relative 'configurable'
|
6
7
|
require_relative 'defaults'
|
8
|
+
require_relative 'definable'
|
9
|
+
require_relative 'arguments'
|
7
10
|
|
8
11
|
module RakeFactory
|
9
12
|
class Task < ::Rake::TaskLib
|
10
|
-
extend
|
11
|
-
extend Actions
|
12
|
-
extend Defaults
|
13
|
+
extend Definable
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
define_method :define do |*args, &block|
|
20
|
-
inheritor.new(*args, &block).define_on(Rake.application)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def initialize(*args, &configuration_block)
|
26
|
-
setup_parameter_defaults
|
27
|
-
process_arguments(args)
|
28
|
-
process_configuration_block(configuration_block)
|
29
|
-
end
|
30
|
-
|
31
|
-
def setup_parameter_defaults
|
32
|
-
self.class.parameter_set.apply_defaults_to(self)
|
33
|
-
end
|
34
|
-
|
35
|
-
def process_arguments(args)
|
36
|
-
opts = args.first || {}
|
37
|
-
opts.each { |key, value| set_if_value_present(key, value) }
|
38
|
-
end
|
39
|
-
|
40
|
-
def process_configuration_block(configuration_block)
|
41
|
-
set_if_value_present(:configuration_block, configuration_block)
|
42
|
-
end
|
43
|
-
|
44
|
-
def invoke_configuration_block(args)
|
45
|
-
if configuration_block
|
46
|
-
view = ParameterView.new(self, args)
|
47
|
-
configuration_block.call(
|
48
|
-
*[view, args].slice(0, configuration_block.arity))
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def check_parameter_requirements
|
53
|
-
self.class.parameter_set.enforce_requirements_on(self)
|
54
|
-
end
|
55
|
-
|
56
|
-
def invoke_actions(args)
|
57
|
-
self.class.actions.each do |action|
|
58
|
-
self.instance_exec(*[self, args].slice(0, action.arity), &action)
|
59
|
-
end
|
60
|
-
end
|
15
|
+
include Parameters
|
16
|
+
include Configurable
|
17
|
+
include Defaults
|
18
|
+
include Arguments
|
19
|
+
include Actions
|
61
20
|
|
62
21
|
def define_on(application)
|
22
|
+
creator = self
|
23
|
+
|
63
24
|
@task = application.define_task(
|
64
25
|
Rake::Task,
|
65
26
|
name,
|
@@ -71,6 +32,9 @@ module RakeFactory
|
|
71
32
|
invoke_actions(args)
|
72
33
|
end
|
73
34
|
@task.add_description(description)
|
35
|
+
@task.instance_eval do
|
36
|
+
define_singleton_method(:creator) { creator }
|
37
|
+
end
|
74
38
|
|
75
39
|
self
|
76
40
|
end
|
@@ -82,13 +46,5 @@ module RakeFactory
|
|
82
46
|
super(method, *args, &block)
|
83
47
|
end
|
84
48
|
end
|
85
|
-
|
86
|
-
private
|
87
|
-
|
88
|
-
def set_if_value_present(key, value)
|
89
|
-
if self.respond_to?("#{key}=") && !value.nil?
|
90
|
-
self.send("#{key}=", value)
|
91
|
-
end
|
92
|
-
end
|
93
49
|
end
|
94
50
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'rake/tasklib'
|
2
|
+
|
3
|
+
require_relative 'parameters'
|
4
|
+
require_relative 'definable'
|
5
|
+
require_relative 'defaults'
|
6
|
+
|
7
|
+
module RakeFactory
|
8
|
+
class TaskSet < ::Rake::TaskLib
|
9
|
+
extend Definable
|
10
|
+
|
11
|
+
include Parameters
|
12
|
+
include Configurable
|
13
|
+
include Arguments
|
14
|
+
|
15
|
+
class TaskDefinition
|
16
|
+
attr_accessor :klass, :args, :overrides, :block
|
17
|
+
|
18
|
+
def initialize(klass, *args, &block)
|
19
|
+
self.klass = klass
|
20
|
+
self.args = args
|
21
|
+
self.block = block
|
22
|
+
self.overrides = {}
|
23
|
+
end
|
24
|
+
|
25
|
+
def with_overrides(overrides)
|
26
|
+
self.overrides = overrides
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def define_on(application)
|
31
|
+
self.klass.new(*resolved_args, &self.block)
|
32
|
+
.define_on(application)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def resolved_args
|
38
|
+
initial_args = self.args.empty? && self.overrides ?
|
39
|
+
[self.overrides] : self.args
|
40
|
+
|
41
|
+
unless initial_args.first && initial_args.first.is_a?(Hash)
|
42
|
+
return initial_args
|
43
|
+
end
|
44
|
+
|
45
|
+
other_args = initial_args.drop(1)
|
46
|
+
merged_parameters = initial_args.first.merge(self.overrides)
|
47
|
+
merged_parameters = merged_parameters.include?(:name_parameter) ?
|
48
|
+
{name: self.overrides[merged_parameters[:name_parameter]]}
|
49
|
+
.merge(merged_parameters) :
|
50
|
+
merged_parameters
|
51
|
+
|
52
|
+
[merged_parameters, *other_args]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class << self
|
57
|
+
def tasks
|
58
|
+
@tasks ||= []
|
59
|
+
end
|
60
|
+
|
61
|
+
def task(klass, *args, &block)
|
62
|
+
tasks << TaskDefinition.new(klass, *args, &block)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def define_on(application)
|
67
|
+
invoke_configuration_block
|
68
|
+
parameter_values = self.parameter_values
|
69
|
+
self.class.tasks.each do |task_definition|
|
70
|
+
task_definition
|
71
|
+
.with_overrides(parameter_values)
|
72
|
+
.define_on(application)
|
73
|
+
end
|
74
|
+
self
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/lib/rake_factory/version.rb
CHANGED
data/lib/rake_factory.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.5.0
|
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-01-
|
11
|
+
date: 2020-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -145,13 +145,17 @@ files:
|
|
145
145
|
- go
|
146
146
|
- lib/rake_factory.rb
|
147
147
|
- lib/rake_factory/actions.rb
|
148
|
+
- lib/rake_factory/arguments.rb
|
149
|
+
- lib/rake_factory/configurable.rb
|
148
150
|
- lib/rake_factory/defaults.rb
|
151
|
+
- lib/rake_factory/definable.rb
|
149
152
|
- lib/rake_factory/exceptions.rb
|
150
153
|
- lib/rake_factory/parameter.rb
|
151
154
|
- lib/rake_factory/parameter_set.rb
|
152
155
|
- lib/rake_factory/parameter_view.rb
|
153
156
|
- lib/rake_factory/parameters.rb
|
154
157
|
- lib/rake_factory/task.rb
|
158
|
+
- lib/rake_factory/task_set.rb
|
155
159
|
- lib/rake_factory/version.rb
|
156
160
|
- rake_factory.gemspec
|
157
161
|
- scripts/ci/common/configure-git.sh
|