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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3409c8bba7e91bcb9287e1ba2f454a27e64a9cf0ede8d32bd560c71959e28cae
4
- data.tar.gz: 9fe487e9a057cd5e4a4a7bcae3bdf0752f0715f3d5f00a1a52cfbad9c27f7573
3
+ metadata.gz: 3ec32ca688b8984c5ae191170b977709dd1b1770a18fba47c5af8390d1092302
4
+ data.tar.gz: 5bd164bcacccd44e9db7997855a540c7d289fdb977233e48ac6456d7c467e4ba
5
5
  SHA512:
6
- metadata.gz: 208d93005b80ed7373af2ccd1be79afb961c320fb47dc428c098e3e337537e5dfc229b4c34d96fa549bb5b1b2b9716d6c550cf65cebdff220099545a675d03d2
7
- data.tar.gz: 124f0d4f6efa6b97289905a4b82d6b47b843721a1e20a05a9e57fa328d52115d52fc1af9728909c7c011bdfa6ad64a4f3f3eb1a2c8b4d452d2760928b179cef7
6
+ metadata.gz: 3af977187b1542e5c039478f7d583989b2a9dd1f974721c314f69c1aeb329fa23e777d06480a781e8acc278e40458ad13f4a1db64fcd92dd40c2a9bf86e787cb
7
+ data.tar.gz: 3ed7c35c6ea466c6e7bd5ad8460b9edd21f361501b555aab7766eda009759acb6658ccdc86d98e3d685ae9e96ccbbe295bf5539a561da7f507abba78680f9d75
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rake_factory (0.4.0)
4
+ rake_factory (0.5.0)
5
5
  activesupport (~> 5.2)
6
6
  rake (~> 13.0)
7
7
 
@@ -1,11 +1,23 @@
1
1
  module RakeFactory
2
2
  module Actions
3
- def actions
4
- @actions ||= []
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
5
  end
6
6
 
7
- def action(&action_block)
8
- actions << action_block
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
- include Parameters
9
-
10
- def inherited(inheritor)
11
- super(inheritor)
12
- inheritor.class_eval do
13
- parameter(:name,
14
- configurable: false,
15
- transform: lambda { |n| n.to_sym })
16
- parameter(:argument_names,
17
- configurable: false,
18
- default: [])
19
- parameter(:prerequisites,
20
- configurable: false,
21
- default: [])
22
- parameter(:order_only_prerequisites,
23
- configurable: false,
24
- default: [])
25
- parameter(:description,
26
- configurable: false)
27
-
28
- unless inheritor.name.nil?
29
- default_name inheritor.name.demodulize.underscore
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
- def default_name(name)
35
- parameter_set.update_default_for(:name, name)
36
- end
39
+ def default_name(name)
40
+ parameter_set.update_default_for(:name, name)
41
+ end
37
42
 
38
- def default_argument_names(argument_names)
39
- parameter_set.update_default_for(:argument_names, argument_names)
40
- end
43
+ def default_argument_names(argument_names)
44
+ parameter_set.update_default_for(:argument_names, argument_names)
45
+ end
41
46
 
42
- def default_prerequisites(prerequisites)
43
- parameter_set.update_default_for(:prerequisites, prerequisites)
44
- end
47
+ def default_prerequisites(prerequisites)
48
+ parameter_set.update_default_for(:prerequisites, prerequisites)
49
+ end
45
50
 
46
- def default_order_only_prerequisites(order_only_prerequisites)
47
- parameter_set
48
- .update_default_for(
49
- :order_only_prerequisites, order_only_prerequisites)
50
- end
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
- def default_description(description)
53
- parameter_set.update_default_for(:description, description)
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
- value = instance.send(reader_method)
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(*[t, args].slice(0, value.arity)) :
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 parameter_set
6
- @parameter_set ||= ParameterSet.new
5
+ def self.included(base)
6
+ base.extend(ClassMethods)
7
7
  end
8
8
 
9
- def parameter(name, options = {})
10
- parameter = parameter_set.add(name, options)
11
- parameter.define_on(self)
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
@@ -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 Parameters
11
- extend Actions
12
- extend Defaults
13
+ extend Definable
13
14
 
14
- attr_accessor(:configuration_block)
15
-
16
- def self.inherited(inheritor)
17
- super(inheritor)
18
- inheritor.singleton_class.class_eval do
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
@@ -1,3 +1,3 @@
1
1
  module RakeFactory
2
- VERSION = '0.4.0'
2
+ VERSION = '0.5.0'
3
3
  end
data/lib/rake_factory.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rake_factory/version'
2
2
  require 'rake_factory/task'
3
+ require 'rake_factory/task_set'
3
4
 
4
5
  module RakeFactory
5
6
  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.4.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-03 00:00:00.000000000 Z
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