rake_factory 0.4.0 → 0.5.0

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