rake_factory 0.5.0 → 0.6.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: 3ec32ca688b8984c5ae191170b977709dd1b1770a18fba47c5af8390d1092302
4
- data.tar.gz: 5bd164bcacccd44e9db7997855a540c7d289fdb977233e48ac6456d7c467e4ba
3
+ metadata.gz: d70ea35bceef77a7c68633a8dd7859301bab82a82dfb233a8a4da549391c992c
4
+ data.tar.gz: ca2df6b0a8d14418145122051fda1ef15fd4ddf27a3c686bfd0b5ae3ee6099e9
5
5
  SHA512:
6
- metadata.gz: 3af977187b1542e5c039478f7d583989b2a9dd1f974721c314f69c1aeb329fa23e777d06480a781e8acc278e40458ad13f4a1db64fcd92dd40c2a9bf86e787cb
7
- data.tar.gz: 3ed7c35c6ea466c6e7bd5ad8460b9edd21f361501b555aab7766eda009759acb6658ccdc86d98e3d685ae9e96ccbbe295bf5539a561da7f507abba78680f9d75
6
+ metadata.gz: 14e48671b2498a3349c3c83670fa865cf4b9cce24e996bcdb39397fb99138457901183af164622e6c82012285e413d70d97143c689de8fe3b8054a4b09dd57f1
7
+ data.tar.gz: a515bf269b42255663b5f0775a494a5f1dd74cabd7751599e3e4549f19c1ebf18dab89738ef3f173f47b2df421238f74bbe70c7000b2e011d785207951ddf595
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rake_factory (0.5.0)
4
+ rake_factory (0.6.0)
5
5
  activesupport (~> 5.2)
6
6
  rake (~> 13.0)
7
7
 
@@ -12,66 +12,125 @@ module RakeFactory
12
12
  include Configurable
13
13
  include Arguments
14
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 = {}
15
+ class << self
16
+ def tasks
17
+ @tasks ||= []
23
18
  end
24
19
 
25
- def with_overrides(overrides)
26
- self.overrides = overrides
27
- self
20
+ def task(klass, *args, &block)
21
+ tasks << TaskDefinition.new(klass, args, &block)
28
22
  end
23
+ end
29
24
 
30
- def define_on(application)
31
- self.klass.new(*resolved_args, &self.block)
25
+ def define_on(application)
26
+ invoke_configuration_block
27
+ self.class.tasks.each do |task_definition|
28
+ task_definition
29
+ .for_task_set(self)
32
30
  .define_on(application)
33
31
  end
32
+ self
33
+ end
34
+
35
+ private
36
+
37
+ class TaskArguments
38
+ attr_reader :arguments, :task_set
39
+
40
+ def initialize(arguments, task_set)
41
+ @arguments = arguments || []
42
+ @task_set = task_set
43
+ end
34
44
 
35
- private
45
+ def parameter_overrides
46
+ task_set&.parameter_values || {}
47
+ end
48
+
49
+ def parameter_hash
50
+ arguments.first.is_a?(Hash) ?
51
+ arguments.first :
52
+ {}
53
+ end
36
54
 
37
- def resolved_args
38
- initial_args = self.args.empty? && self.overrides ?
39
- [self.overrides] : self.args
55
+ def resolve
56
+ if arguments.empty?
57
+ resolved_parameter_hash = parameter_overrides
58
+ resolved_parameter_hash =
59
+ process_parameter_hash(resolved_parameter_hash)
60
+ return [resolved_parameter_hash]
61
+ end
40
62
 
41
- unless initial_args.first && initial_args.first.is_a?(Hash)
42
- return initial_args
63
+ if arguments.first.is_a?(Hash)
64
+ resolved_parameter_hash = arguments.first.merge(parameter_overrides)
65
+ resolved_parameter_hash =
66
+ process_parameter_hash(resolved_parameter_hash)
67
+ return [resolved_parameter_hash, *arguments.drop(1)]
43
68
  end
44
69
 
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
70
+ arguments
71
+ end
51
72
 
52
- [merged_parameters, *other_args]
73
+ private
74
+
75
+ def process_parameter_hash(parameter_hash)
76
+ parameter_hash.reduce({}) do |acc, (name, value)|
77
+ resolved_value = lambda do |t|
78
+ value.respond_to?(:call) ?
79
+ value.call(*[task_set, t].slice(0, value.arity)) :
80
+ value
81
+ end
82
+ acc.merge({name => resolved_value})
83
+ end
53
84
  end
54
85
  end
55
86
 
56
- class << self
57
- def tasks
58
- @tasks ||= []
87
+ private_constant :TaskArguments
88
+
89
+ class TaskDefinition
90
+ attr_reader :task_set, :klass, :args, :block
91
+
92
+ def initialize(klass, args, task_set = nil, &block)
93
+ @task_set = task_set
94
+ @klass = klass
95
+ @args = args
96
+ @block = block
59
97
  end
60
98
 
61
- def task(klass, *args, &block)
62
- tasks << TaskDefinition.new(klass, *args, &block)
99
+ def for_task_set(task_set)
100
+ self.class.new(klass, args, task_set, &block)
63
101
  end
64
- end
65
102
 
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)
103
+ def define_on(application)
104
+ if should_define?
105
+ klass.new(*resolve_arguments, &resolve_block).define_on(application)
106
+ end
107
+ end
108
+
109
+ private
110
+
111
+ def task_arguments
112
+ TaskArguments.new(args, task_set)
113
+ end
114
+
115
+ def should_define?
116
+ task_arguments.parameter_hash.include?(:define_if) ?
117
+ task_arguments.parameter_hash[:define_if].call(task_set) :
118
+ true
119
+ end
120
+
121
+ def resolve_arguments
122
+ task_arguments.resolve
123
+ end
124
+
125
+ def resolve_block
126
+ lambda do |t, args|
127
+ if block.respond_to?(:call)
128
+ block.call(*[task_set, t, args].slice(0, block.arity))
129
+ end
130
+ end
73
131
  end
74
- self
75
132
  end
133
+
134
+ private_constant :TaskDefinition
76
135
  end
77
136
  end
@@ -1,3 +1,3 @@
1
1
  module RakeFactory
2
- VERSION = '0.5.0'
2
+ VERSION = '0.6.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake_factory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Clemson