nake 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +3 -0
- data/bin/nake +0 -16
- data/examples/boot.rb +18 -0
- data/examples/dependencies.rb +3 -0
- data/features/{setup.feature → boot.feature} +0 -0
- data/features/executable.feature +3 -0
- data/lib/nake.rb +2 -1
- data/lib/nake/args.rb +3 -0
- data/lib/nake/task.rb +41 -28
- metadata +4 -5
- data/examples/setup.rb +0 -24
data/CHANGELOG
CHANGED
data/bin/nake
CHANGED
@@ -6,22 +6,6 @@ require "nake"
|
|
6
6
|
require "nake/args"
|
7
7
|
require "nake/helpers"
|
8
8
|
|
9
|
-
# TODO: what if I want to run:
|
10
|
-
# ./bin/nake -T
|
11
|
-
# ./bin/nake --verbose -T
|
12
|
-
# ./examples/flags.rb --verbose
|
13
|
-
|
14
|
-
# First file in arguments is separator between args for nake and for task
|
15
|
-
# If there is no file in the arguments
|
16
|
-
# co kdyz omezim tasky na list etc a nebudou moct mit --task etc?
|
17
|
-
# nake --verbose list arg1 arg2 --with-something
|
18
|
-
# => zmizi potreba aliasu
|
19
|
-
# => potreba API pro mapovani na -T etc
|
20
|
-
# Nake.args["-T"] = Nake::Task[:tasks]
|
21
|
-
|
22
|
-
# !!!!!! --verbose neni runable task to jen switchuje naky shity, takze -T by melo fungovat tak, ze naplni Nake.parse[:task] s taskem co se ma runnout
|
23
|
-
# First argument has to be path to file with your tasks
|
24
|
-
|
25
9
|
# parse arguments
|
26
10
|
begin
|
27
11
|
Nake.parse
|
data/examples/boot.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ./bin/nake
|
2
|
+
|
3
|
+
# You might want to give more useful description, however you don't have access
|
4
|
+
# to some variables so far ... at least with Rake. Nake provides boot method which
|
5
|
+
# run after everything is loaded, and if you specify optional dependencies for the
|
6
|
+
# boot method, it will run the boot block of specified tasks first. This might come
|
7
|
+
# handy time to time, but usually it's enough to use it without arguments since you
|
8
|
+
# usually need just to load the whole task file where is all the configuration.
|
9
|
+
|
10
|
+
# Typical usecases:
|
11
|
+
# - you want to provide concrete info in description
|
12
|
+
# - you need to access configuration of a task on other place than in the define block
|
13
|
+
|
14
|
+
Task.new(:build) do |task|
|
15
|
+
task.boot(:release) do
|
16
|
+
task.description = "Release version #{Task[:release].config[:version]}"
|
17
|
+
end
|
18
|
+
end
|
data/examples/dependencies.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ./bin/nake
|
2
2
|
|
3
|
+
# You can do the same by adding Task[name].call in the define block, but please,
|
4
|
+
# don't use this approach. Dependencies are readable and if someone wants to,
|
5
|
+
# he can simply remove a dependency from the dependency array.
|
3
6
|
task(:greet1)
|
4
7
|
task(:greet2)
|
5
8
|
|
File without changes
|
data/features/executable.feature
CHANGED
data/lib/nake.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require "nake/task"
|
4
4
|
|
5
5
|
module Nake
|
6
|
-
VERSION ||= "0.0.
|
6
|
+
VERSION ||= "0.0.7"
|
7
7
|
def self.verbose
|
8
8
|
@@verbose
|
9
9
|
rescue NameError
|
@@ -79,6 +79,7 @@ module Nake
|
|
79
79
|
# @since 0.0.1
|
80
80
|
# @author Jakub Stastny
|
81
81
|
def self.run_task
|
82
|
+
Task.boot
|
82
83
|
name, *args = Nake.parse[:task]
|
83
84
|
task = Task[name]
|
84
85
|
if name.nil?
|
data/lib/nake/args.rb
CHANGED
@@ -7,6 +7,8 @@ argument("-H", "--help") do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
argument("-T", "--tasks") do |pattern = nil|
|
10
|
+
Task.boot
|
11
|
+
|
10
12
|
tasks, options = Task.tasks.select { |name, task| not task.hidden? }.sort.partition { |key, value| not key.match(/^-/) }
|
11
13
|
arguments = Nake.args.sort
|
12
14
|
|
@@ -31,6 +33,7 @@ argument("-T", "--tasks") do |pattern = nil|
|
|
31
33
|
end
|
32
34
|
|
33
35
|
argument("-i", "--interactive") do |task = nil|
|
36
|
+
Task.boot
|
34
37
|
ARGV.clear # otherwise IRB will parse it
|
35
38
|
|
36
39
|
require "irb"
|
data/lib/nake/task.rb
CHANGED
@@ -9,14 +9,7 @@ module Nake
|
|
9
9
|
|
10
10
|
class Task
|
11
11
|
def self.[](name)
|
12
|
-
name
|
13
|
-
self.tasks[name] || self.find_in_aliases(name)
|
14
|
-
end
|
15
|
-
|
16
|
-
# @private
|
17
|
-
def self.find_in_aliases(name)
|
18
|
-
_, task = self.tasks.find { |_, task| task.aliases.include?(name) }
|
19
|
-
return task
|
12
|
+
self.tasks[name.to_s]
|
20
13
|
end
|
21
14
|
|
22
15
|
def self.[]=(name, task)
|
@@ -28,6 +21,12 @@ module Nake
|
|
28
21
|
@@tasks ||= Hash.new
|
29
22
|
end
|
30
23
|
|
24
|
+
def self.boot
|
25
|
+
self.tasks.each do |name, task|
|
26
|
+
task.boot!
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
31
30
|
# return existing task if task with given name already exist
|
32
31
|
def self.new(name, *dependencies, &block)
|
33
32
|
task = self[name]
|
@@ -35,16 +34,9 @@ module Nake
|
|
35
34
|
end
|
36
35
|
|
37
36
|
attr_accessor :name, :description, :dependencies, :hidden, :original_args
|
38
|
-
attr_reader :blocks
|
37
|
+
attr_reader :blocks
|
39
38
|
def initialize(name, *dependencies, &block)
|
40
|
-
@
|
41
|
-
# This is a bit weird, but it's best solution
|
42
|
-
# when we want to keep API simple and keep it
|
43
|
-
# as one object even if it has more names
|
44
|
-
if name.respond_to?(:join) # array
|
45
|
-
name, *aliases = name
|
46
|
-
self.aliases.push(*aliases)
|
47
|
-
end
|
39
|
+
@hidden = false
|
48
40
|
@name, @blocks = name.to_sym, Array.new
|
49
41
|
@dependencies = Array.new
|
50
42
|
self.register
|
@@ -95,27 +87,48 @@ module Nake
|
|
95
87
|
note "Executing task #{name} with arguments #{args.inspect} and options #{options.inspect}"
|
96
88
|
debug "Config #{self.config.inspect}"
|
97
89
|
self.blocks.each do |block|
|
98
|
-
|
99
|
-
|
90
|
+
block.call(*args, options)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
100
94
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
95
|
+
def bootloaders
|
96
|
+
@bootloaders ||= Array.new
|
97
|
+
end
|
98
|
+
|
99
|
+
def boot_dependencies
|
100
|
+
@boot_dependencies ||= Array.new
|
101
|
+
end
|
102
|
+
|
103
|
+
def boot(*dependencies, &block)
|
104
|
+
self.boot_dependencies.push(*dependencies)
|
105
|
+
self.bootloaders.push(block)
|
106
|
+
end
|
105
107
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
108
|
+
def boot!
|
109
|
+
unless self.boot_dependencies.empty? && self.bootloaders.empty?
|
110
|
+
note "Booting #{self.name}"
|
111
|
+
end
|
112
|
+
while dependency = self.boot_dependencies.shift
|
113
|
+
self.class[dependency].tap do |task|
|
114
|
+
if task.nil?
|
115
|
+
raise TaskNotFound, "Task #{dependency} doesn't exist!"
|
110
116
|
end
|
117
|
+
task.boot!
|
111
118
|
end
|
112
119
|
end
|
120
|
+
while block = self.bootloaders.shift
|
121
|
+
block.call
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def booted?
|
126
|
+
self.bootloaders.empty? && self.boot_dependencies.empty?
|
113
127
|
end
|
114
128
|
|
115
129
|
def reset!
|
116
130
|
self.dependencies.clear
|
117
131
|
self.blocks.clear
|
118
|
-
self.aliases.clear
|
119
132
|
end
|
120
133
|
|
121
134
|
protected
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Jakub \xC5\xA0\xC5\xA5astn\xC3\xBD aka Botanicus"
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- CHANGELOG
|
39
39
|
- examples/arguments.rb
|
40
40
|
- examples/basic.rb
|
41
|
+
- examples/boot.rb
|
41
42
|
- examples/complex.rb
|
42
43
|
- examples/configuration.rb
|
43
44
|
- examples/default.rb
|
@@ -47,10 +48,10 @@ files:
|
|
47
48
|
- examples/helpers.rb
|
48
49
|
- examples/invoking.rb
|
49
50
|
- examples/script.rb
|
50
|
-
- examples/setup.rb
|
51
51
|
- examples/task_arguments.rb
|
52
52
|
- features/arguments.feature
|
53
53
|
- features/basic.feature
|
54
|
+
- features/boot.feature
|
54
55
|
- features/builtin_arguments.feature
|
55
56
|
- features/complex.feature
|
56
57
|
- features/configuration.feature
|
@@ -63,7 +64,6 @@ files:
|
|
63
64
|
- features/helpers.feature
|
64
65
|
- features/invoking.feature
|
65
66
|
- features/script.feature
|
66
|
-
- features/setup.feature
|
67
67
|
- features/steps.rb
|
68
68
|
- features/task_arguments.feature
|
69
69
|
- lib/nake/args.rb
|
@@ -104,8 +104,7 @@ licenses: []
|
|
104
104
|
|
105
105
|
post_install_message: |-
|
106
106
|
=== Changes in the last Nake ===
|
107
|
-
-
|
108
|
-
- DSL helper rule
|
107
|
+
- Added Task#boot method for setting some stuff after other tasks boot
|
109
108
|
rdoc_options: []
|
110
109
|
|
111
110
|
require_paths:
|
data/examples/setup.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ./bin/nake
|
2
|
-
|
3
|
-
# NOTE: this isn't implemented yet!
|
4
|
-
# THERE MIGHT TO BE USEFUL TO HAVE BASE CLASS FOR TASK, BECAUSE FILE TASK DOESN'T HAVE ALIASES ETC
|
5
|
-
Task.new(:build) do |task|
|
6
|
-
task.description = "Release version #{Task[:release].config[:version]}" # but release task might not exist yet
|
7
|
-
end
|
8
|
-
|
9
|
-
# soo ...
|
10
|
-
Task.new(:build) do |task|
|
11
|
-
task.setup do |variable|
|
12
|
-
task.description = "Release version #{Task[:release].config[:version]}"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# hodi se hlavne pro descriptions a pro pushovani veci do dependencies, protoze z dependencies se daji odstranit, kdezto z procu, kde se invokujou explicitne, to jde fakt tezko
|
17
|
-
# setup task se vola na zacatku Nake.run
|
18
|
-
|
19
|
-
# advanced ...
|
20
|
-
Task.new(:build) do |task|
|
21
|
-
task.setup(:release, :other_task) do |variable|
|
22
|
-
task.description = "Release version #{Task[:release].config[:version]}"
|
23
|
-
end
|
24
|
-
end
|