rake_factory 0.5.0 → 0.6.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: 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