do_riak 0.10.1.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. data/CHANGELOG +2 -0
  2. data/Gemfile +9 -0
  3. data/LICENSE +20 -0
  4. data/README.textile +23 -0
  5. data/TODO.txt +4 -0
  6. data/deps.rip +8 -0
  7. data/do_riak.gemspec +40 -0
  8. data/do_riak.pre.gemspec +8 -0
  9. data/gems/cache/bacon-1.1.0.gem +0 -0
  10. data/gems/cache/code-cleaner-0.8.1.gem +0 -0
  11. data/gems/cache/nake-0.0.8.gem +0 -0
  12. data/gems/cache/term-ansicolor-1.0.4.gem +0 -0
  13. data/gems/environment.rb +107 -0
  14. data/gems/gems/bacon-1.1.0/COPYING +18 -0
  15. data/gems/gems/bacon-1.1.0/ChangeLog +220 -0
  16. data/gems/gems/bacon-1.1.0/RDOX +69 -0
  17. data/gems/gems/bacon-1.1.0/README +290 -0
  18. data/gems/gems/bacon-1.1.0/Rakefile +138 -0
  19. data/gems/gems/bacon-1.1.0/bin/bacon +117 -0
  20. data/gems/gems/bacon-1.1.0/lib/autotest/bacon.rb +36 -0
  21. data/gems/gems/bacon-1.1.0/lib/autotest/bacon_rspec.rb +2 -0
  22. data/gems/gems/bacon-1.1.0/lib/autotest/discover.rb +9 -0
  23. data/gems/gems/bacon-1.1.0/lib/bacon.rb +354 -0
  24. data/gems/gems/bacon-1.1.0/test/spec_bacon.rb +374 -0
  25. data/gems/gems/bacon-1.1.0/test/spec_should.rb +32 -0
  26. data/gems/gems/code-cleaner-0.8.1/LICENSE +20 -0
  27. data/gems/gems/code-cleaner-0.8.1/README.textile +87 -0
  28. data/gems/gems/code-cleaner-0.8.1/TODO.txt +1 -0
  29. data/gems/gems/code-cleaner-0.8.1/bin/code-cleaner +143 -0
  30. data/gems/gems/code-cleaner-0.8.1/code-cleaner-0.8.gem +0 -0
  31. data/gems/gems/code-cleaner-0.8.1/code-cleaner.gemspec +25 -0
  32. data/gems/gems/code-cleaner-0.8.1/support/pre-commit.erb +70 -0
  33. data/gems/gems/code-cleaner-0.8.1/tasks.rb +13 -0
  34. data/gems/gems/code-cleaner-0.8.1/tasks/code-cleaner.nake +49 -0
  35. data/gems/gems/code-cleaner-0.8.1/tasks/code-cleaner.rake +22 -0
  36. data/gems/gems/code-cleaner-0.8.1/tasks/code-cleaner.thor +35 -0
  37. data/gems/gems/nake-0.0.8/CHANGELOG +48 -0
  38. data/gems/gems/nake-0.0.8/LICENSE +20 -0
  39. data/gems/gems/nake-0.0.8/README.textile +39 -0
  40. data/gems/gems/nake-0.0.8/TODO.txt +23 -0
  41. data/gems/gems/nake-0.0.8/bin/nake +66 -0
  42. data/gems/gems/nake-0.0.8/bin/nrake +4 -0
  43. data/gems/gems/nake-0.0.8/bin/rake2nake +1 -0
  44. data/gems/gems/nake-0.0.8/bin/snake +41 -0
  45. data/gems/gems/nake-0.0.8/bm/Rakefile +28 -0
  46. data/gems/gems/nake-0.0.8/bm/bms.rb +56 -0
  47. data/gems/gems/nake-0.0.8/bm/output.txt +5 -0
  48. data/gems/gems/nake-0.0.8/bm/tasks.rb +21 -0
  49. data/gems/gems/nake-0.0.8/bm/tmp/test.c +6 -0
  50. data/gems/gems/nake-0.0.8/bm/tmp/www/index.html +1 -0
  51. data/gems/gems/nake-0.0.8/deps.rb +5 -0
  52. data/gems/gems/nake-0.0.8/deps.rip +5 -0
  53. data/gems/gems/nake-0.0.8/examples/arguments.rb +38 -0
  54. data/gems/gems/nake-0.0.8/examples/basic.rb +5 -0
  55. data/gems/gems/nake-0.0.8/examples/boot.rb +18 -0
  56. data/gems/gems/nake-0.0.8/examples/complex.rb +9 -0
  57. data/gems/gems/nake-0.0.8/examples/configuration.rb +15 -0
  58. data/gems/gems/nake-0.0.8/examples/default.rb +10 -0
  59. data/gems/gems/nake-0.0.8/examples/default_proc.rb +11 -0
  60. data/gems/gems/nake-0.0.8/examples/dependencies.rb +10 -0
  61. data/gems/gems/nake-0.0.8/examples/description.rb +33 -0
  62. data/gems/gems/nake-0.0.8/examples/file.rb +22 -0
  63. data/gems/gems/nake-0.0.8/examples/helpers.rb +3 -0
  64. data/gems/gems/nake-0.0.8/examples/invoking.rb +14 -0
  65. data/gems/gems/nake-0.0.8/examples/rules.rb +0 -0
  66. data/gems/gems/nake-0.0.8/examples/script.rb +20 -0
  67. data/gems/gems/nake-0.0.8/examples/task_arguments.rb +27 -0
  68. data/gems/gems/nake-0.0.8/features/arguments.feature +22 -0
  69. data/gems/gems/nake-0.0.8/features/basic.feature +6 -0
  70. data/gems/gems/nake-0.0.8/features/boot.feature +5 -0
  71. data/gems/gems/nake-0.0.8/features/builtin_arguments.feature +14 -0
  72. data/gems/gems/nake-0.0.8/features/complex.feature +6 -0
  73. data/gems/gems/nake-0.0.8/features/configuration.feature +10 -0
  74. data/gems/gems/nake-0.0.8/features/default.feature +10 -0
  75. data/gems/gems/nake-0.0.8/features/default_proc.feature +6 -0
  76. data/gems/gems/nake-0.0.8/features/dependencies.feature +16 -0
  77. data/gems/gems/nake-0.0.8/features/description.feature +0 -0
  78. data/gems/gems/nake-0.0.8/features/env.rb +11 -0
  79. data/gems/gems/nake-0.0.8/features/executable.feature +29 -0
  80. data/gems/gems/nake-0.0.8/features/file.feature +23 -0
  81. data/gems/gems/nake-0.0.8/features/helpers.feature +6 -0
  82. data/gems/gems/nake-0.0.8/features/invoking.feature +14 -0
  83. data/gems/gems/nake-0.0.8/features/rules.feature +0 -0
  84. data/gems/gems/nake-0.0.8/features/script.feature +10 -0
  85. data/gems/gems/nake-0.0.8/features/steps.rb +39 -0
  86. data/gems/gems/nake-0.0.8/features/task_arguments.feature +10 -0
  87. data/gems/gems/nake-0.0.8/lib/nake.rb +103 -0
  88. data/gems/gems/nake-0.0.8/lib/nake/abstract_task.rb +175 -0
  89. data/gems/gems/nake-0.0.8/lib/nake/args.rb +65 -0
  90. data/gems/gems/nake-0.0.8/lib/nake/argv.rb +47 -0
  91. data/gems/gems/nake-0.0.8/lib/nake/colors.rb +22 -0
  92. data/gems/gems/nake-0.0.8/lib/nake/dsl.rb +70 -0
  93. data/gems/gems/nake-0.0.8/lib/nake/file_task.rb +62 -0
  94. data/gems/gems/nake-0.0.8/lib/nake/helpers.rb +65 -0
  95. data/gems/gems/nake-0.0.8/lib/nake/rake.rb +38 -0
  96. data/gems/gems/nake-0.0.8/lib/nake/rule.rb +35 -0
  97. data/gems/gems/nake-0.0.8/lib/nake/struct_hash.rb +22 -0
  98. data/gems/gems/nake-0.0.8/lib/nake/task.rb +6 -0
  99. data/gems/gems/nake-0.0.8/lib/nake/tasks/bundle.rb +30 -0
  100. data/gems/gems/nake-0.0.8/lib/nake/tasks/clean.rb +12 -0
  101. data/gems/gems/nake-0.0.8/lib/nake/tasks/gem.rb +29 -0
  102. data/gems/gems/nake-0.0.8/lib/nake/tasks/release.rb +43 -0
  103. data/gems/gems/nake-0.0.8/lib/nake/tasks/rip.rb +33 -0
  104. data/gems/gems/nake-0.0.8/lib/nake/tasks/spec.rb +20 -0
  105. data/gems/gems/nake-0.0.8/lib/nake/template.rb +51 -0
  106. data/gems/gems/nake-0.0.8/nake-0.0.8.pre.gem +0 -0
  107. data/gems/gems/nake-0.0.8/nake.gemspec +42 -0
  108. data/gems/gems/nake-0.0.8/nake.pre.gemspec +8 -0
  109. data/gems/gems/nake-0.0.8/spec/nake/abstract_task_spec.rb +0 -0
  110. data/gems/gems/nake-0.0.8/spec/nake/args_spec.rb +0 -0
  111. data/gems/gems/nake-0.0.8/spec/nake/argv_spec.rb +51 -0
  112. data/gems/gems/nake-0.0.8/spec/nake/colors_spec.rb +0 -0
  113. data/gems/gems/nake-0.0.8/spec/nake/dsl_spec.rb +35 -0
  114. data/gems/gems/nake-0.0.8/spec/nake/file_task_spec.rb +0 -0
  115. data/gems/gems/nake-0.0.8/spec/nake/helpers_spec.rb +14 -0
  116. data/gems/gems/nake-0.0.8/spec/nake/rake_spec.rb +0 -0
  117. data/gems/gems/nake-0.0.8/spec/nake/rule_spec.rb +72 -0
  118. data/gems/gems/nake-0.0.8/spec/nake/struct_hash_spec.rb +0 -0
  119. data/gems/gems/nake-0.0.8/spec/nake/task_spec.rb +72 -0
  120. data/gems/gems/nake-0.0.8/spec/nake/tasks/bundle_spec.rb +28 -0
  121. data/gems/gems/nake-0.0.8/spec/nake/tasks/clean_spec.rb +0 -0
  122. data/gems/gems/nake-0.0.8/spec/nake/tasks/gem_spec.rb +0 -0
  123. data/gems/gems/nake-0.0.8/spec/nake/tasks/release_spec.rb +0 -0
  124. data/gems/gems/nake-0.0.8/spec/nake/tasks/rip_spec.rb +0 -0
  125. data/gems/gems/nake-0.0.8/spec/nake/tasks/spec_spec.rb +0 -0
  126. data/gems/gems/nake-0.0.8/spec/nake/tasks_spec.rb +48 -0
  127. data/gems/gems/nake-0.0.8/spec/nake/template_spec.rb +84 -0
  128. data/gems/gems/nake-0.0.8/spec/nake_spec.rb +9 -0
  129. data/gems/gems/nake-0.0.8/spec/spec.opts +5 -0
  130. data/gems/gems/nake-0.0.8/spec/spec_helper.rb +29 -0
  131. data/gems/gems/nake-0.0.8/spec/stubs/database.yml.erb +9 -0
  132. data/gems/gems/nake-0.0.8/spec/stubs/database.yml.tt +9 -0
  133. data/gems/gems/nake-0.0.8/tasks.rb +42 -0
  134. data/gems/gems/term-ansicolor-1.0.4/CHANGES +22 -0
  135. data/gems/gems/term-ansicolor-1.0.4/COPYING +340 -0
  136. data/gems/gems/term-ansicolor-1.0.4/README +31 -0
  137. data/gems/gems/term-ansicolor-1.0.4/Rakefile +86 -0
  138. data/gems/gems/term-ansicolor-1.0.4/VERSION +1 -0
  139. data/gems/gems/term-ansicolor-1.0.4/doc-main.txt +119 -0
  140. data/gems/gems/term-ansicolor-1.0.4/examples/cdiff.rb +19 -0
  141. data/gems/gems/term-ansicolor-1.0.4/examples/example.rb +89 -0
  142. data/gems/gems/term-ansicolor-1.0.4/install.rb +15 -0
  143. data/gems/gems/term-ansicolor-1.0.4/lib/term/ansicolor.rb +102 -0
  144. data/gems/gems/term-ansicolor-1.0.4/lib/term/ansicolor/version.rb +10 -0
  145. data/gems/gems/term-ansicolor-1.0.4/term-ansicolor.gemspec +20 -0
  146. data/gems/specifications/bacon-1.1.0.gemspec +30 -0
  147. data/gems/specifications/code-cleaner-0.8.1.gemspec +31 -0
  148. data/gems/specifications/nake-0.0.8.gemspec +35 -0
  149. data/gems/specifications/term-ansicolor-1.0.4.gemspec +30 -0
  150. data/lib/do_riak.rb +10 -0
  151. data/lib/do_riak/errors.rb +11 -0
  152. data/lib/do_riak/transaction.rb +24 -0
  153. data/lib/do_riak/version.rb +7 -0
  154. data/script/bacon +3 -0
  155. data/script/code-cleaner +3 -0
  156. data/script/nake +3 -0
  157. data/spec/command_spec.rb +8 -0
  158. data/spec/connection_spec.rb +17 -0
  159. data/spec/reader_spec.rb +8 -0
  160. data/spec/result_spec.rb +12 -0
  161. data/spec/spec_helper.rb +19 -0
  162. data/spec/typecast/array_spec.rb +8 -0
  163. data/spec/typecast/bigdecimal_spec.rb +8 -0
  164. data/spec/typecast/boolean_spec.rb +8 -0
  165. data/spec/typecast/byte_array_spec.rb +8 -0
  166. data/spec/typecast/class_spec.rb +8 -0
  167. data/spec/typecast/date_spec.rb +8 -0
  168. data/spec/typecast/datetime_spec.rb +8 -0
  169. data/spec/typecast/float_spec.rb +12 -0
  170. data/spec/typecast/integer_spec.rb +8 -0
  171. data/spec/typecast/nil_spec.rb +16 -0
  172. data/spec/typecast/other_spec.rb +8 -0
  173. data/spec/typecast/range_spec.rb +8 -0
  174. data/spec/typecast/string_spec.rb +8 -0
  175. data/spec/typecast/time_spec.rb +8 -0
  176. data/tasks.rb +37 -0
  177. metadata +238 -0
@@ -0,0 +1,175 @@
1
+ # encoding: utf-8
2
+
3
+ require "nake/colors"
4
+ require "nake/argv"
5
+
6
+ module Nake
7
+ TaskNotFound ||= Class.new(StandardError)
8
+ ConfigurationError ||= Class.new(StandardError)
9
+
10
+ class AbstractTask
11
+ def self.[](name)
12
+ self.tasks[name.to_s]
13
+ end
14
+
15
+ def self.[]=(name, task)
16
+ self.tasks[name.to_s] = task
17
+ end
18
+
19
+ # @protected use Task[name] resp. Task[name] = task
20
+ def self.tasks
21
+ @@tasks ||= Hash.new
22
+ end
23
+
24
+ def self.boot
25
+ self.tasks.each do |name, task|
26
+ task.boot!
27
+ end
28
+ end
29
+
30
+ # return existing task if task with given name already exist
31
+ def self.new(name, *dependencies, &block)
32
+ task = self[name]
33
+ task && task.setup(*dependencies, &block) || super(name, *dependencies, &block)
34
+ end
35
+
36
+ attr_accessor :name, :dependencies, :hidden, :original_args
37
+ attr_reader :blocks
38
+ def initialize(name, *dependencies, &block)
39
+ @hidden = false
40
+ @name, @blocks = name.to_sym, Array.new
41
+ @dependencies = Array.new
42
+ self.register
43
+ self.setup(*dependencies, &block)
44
+ end
45
+
46
+ attr_writer :description
47
+ def description
48
+ if @description.respond_to?(:call)
49
+ # task.description = lambda { "Edit #{self.config[:task_file]}" }
50
+ @description.call
51
+ elsif @description
52
+ # task.description = "Edit %{task_file}"
53
+ @description % self.config
54
+ else
55
+ nil
56
+ end
57
+ end
58
+
59
+ attr_writer :config # don't use this if you don't have to!
60
+ def config
61
+ @config ||= begin
62
+ Hash.new do |hash, key|
63
+ raise ConfigurationError, "Configuration key #{key} in task #{name} doesn't exist"
64
+ end.tap do |hash|
65
+ hash.define_singleton_method(:declare) do |*keys|
66
+ keys.each { |key| self[key] = nil unless self.has_key?(key) }
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ def setup(*dependencies, &block)
73
+ self.dependencies.push(*dependencies)
74
+ self.instance_exec(self, &block) if block
75
+ return self
76
+ end
77
+
78
+ def define(&block)
79
+ @blocks.push(block)
80
+ end
81
+
82
+ def hidden?
83
+ @hidden
84
+ end
85
+
86
+ def run(args)
87
+ self.original_args = args
88
+ options = ArgvParser.extract!(args)
89
+ self.call(args, options)
90
+ end
91
+
92
+ # NOTE: the reason why we don't have splat for args is that when we have Task["-T"]
93
+ # which doesn't have any args and options, we wall just call it without any arguments,
94
+ # but when we use splat, then we will have to call it at least with Hash.new for options
95
+ def call(args = Array.new, options = Hash.new)
96
+ unless self.dependencies.empty?
97
+ info "Invoking task #{name}"
98
+ self.invoke_dependencies(*args, options)
99
+ end
100
+ unless self.blocks.empty?
101
+ note "Executing task #{name} with arguments #{args.inspect} and options #{options.inspect}"
102
+ debug "Config #{self.config.inspect}"
103
+ self.blocks.each do |block|
104
+ block.call(*args, options)
105
+ end
106
+ ## we can't use arity, because it returns 0 for lambda { |options = Hash.new| }.arity
107
+ ## if we define method with one optional argument, it will returns -1
108
+ #
109
+ ## better argv parsing maybe, task(:spec) do |*paths, options| is fine, but task(:spec) do |path, options| will fail if no path specified ... but actually task(:spec) do |path = "spec", options| might be fine, try it ... BTW task(["-i", "--interactive"]) do |task, *args, options| doesn't work ... putting options as a first argument should solve everything, but it's not very intuitive :/
110
+ #if RUBY_VERSION >= "1.9.2"
111
+ # raise ArgumentError, "Task can't take block arguments" if args.length + 1 > block.parameters.select { |type, name| type.eql?(:req) || type.eql?(:opt) }.length
112
+ # raise ArgumentError, "Task can't take block arguments" if block.parameters.any? { |type, name| type.eql?(:block) }
113
+ #end
114
+ #
115
+ #if RUBY_VERSION >= "1.9.2" && block.parameters.empty?
116
+ # block.call
117
+ #else
118
+ # block.call(*args, options)
119
+ #end
120
+ end
121
+ end
122
+
123
+ def bootloaders
124
+ @bootloaders ||= Array.new
125
+ end
126
+
127
+ def boot_dependencies
128
+ @boot_dependencies ||= Array.new
129
+ end
130
+
131
+ def boot(*dependencies, &block)
132
+ self.boot_dependencies.push(*dependencies)
133
+ self.bootloaders.push(block)
134
+ end
135
+
136
+ def boot!
137
+ unless self.boot_dependencies.empty? && self.bootloaders.empty?
138
+ note "Booting #{self.name}"
139
+ end
140
+ while dependency = self.boot_dependencies.shift
141
+ self.class[dependency].tap do |task|
142
+ if task.nil?
143
+ raise TaskNotFound, "Task #{dependency} doesn't exist!"
144
+ end
145
+ task.boot!
146
+ end
147
+ end
148
+ while block = self.bootloaders.shift
149
+ block.call
150
+ end
151
+ end
152
+
153
+ def booted?
154
+ self.bootloaders.empty? && self.boot_dependencies.empty?
155
+ end
156
+
157
+ def reset!
158
+ self.dependencies.clear
159
+ self.blocks.clear
160
+ end
161
+
162
+ protected
163
+ def invoke_dependencies(*args, options)
164
+ self.dependencies.each do |name|
165
+ task = self.class[name]
166
+ raise TaskNotFound, "Task with name #{name} doesn't exist" if task.nil?
167
+ task.call(*args, options) # TODO: what about arguments?
168
+ end
169
+ end
170
+
171
+ def register
172
+ self.class[self.name] = self
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+
3
+ require "nake/dsl"
4
+
5
+ argument("-H", "--help") do |task_name = nil|
6
+ if task_name
7
+ task = Task[task_name]
8
+ if task
9
+ p task # TODO
10
+ else
11
+ abort "Task #{task_name} doesn't exist"
12
+ end
13
+ else
14
+ Kernel.abort "Use #{$0} -T for list of all available tasks or -i for interactive session"
15
+ end
16
+ end
17
+
18
+ argument("-T", "--tasks") do |pattern = nil|
19
+ Task.boot
20
+
21
+ tasks, options = Task.tasks.select { |name, task| not task.hidden? }.sort.partition { |key, value| not key.match(/^-/) }
22
+ arguments = Nake.args.sort
23
+
24
+ puts "\n#{"===".yellow} #{"Available tasks".magenta} #{"===".yellow}"
25
+ if tasks.empty?
26
+ puts "No tasks defined"
27
+ else
28
+ tasks.each do |name, task|
29
+ puts "#{name.green} #{task.dependencies.join(", ")} # #{task.description || "no description yet"}"
30
+ end
31
+ end
32
+
33
+ puts "\n#{"===".yellow} #{"Available arguments".magenta} #{"===".yellow}"
34
+ if arguments.empty?
35
+ puts "No arguments defined"
36
+ else
37
+ arguments.each do |names, proc|
38
+ puts "#{names.join(" or ").green}" # TODO: description
39
+ end
40
+ end
41
+ exit
42
+ end
43
+
44
+ argument("-i", "--interactive") do |task = nil|
45
+ Task.boot
46
+ ARGV.clear # otherwise IRB will parse it
47
+
48
+ require "irb"
49
+ begin
50
+ require "irb/readline"
51
+ rescue LoadError
52
+ warn "Code completion via readline isn't available"
53
+ end
54
+
55
+ if task
56
+ Task[task].tap { |task| task.call(*args, options) }
57
+ end
58
+
59
+ IRB.start
60
+ exit! # TODO: can we do it without exit? The usecase is ./tasks.rb -i mytask, so we can set env and then run the task
61
+ end
62
+
63
+ Nake.args["--verbose", "--no-verbose"] = lambda { |key, value| Nake.verbose = value }
64
+ Nake.args["--debug", "--no-debug"] = lambda { |key, value| Nake.debug = value }
65
+ Nake.args["--coloring", "--no-coloring"] = lambda { |key, value| Nake.coloring = value }
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ module Nake
4
+ module ArgvParser
5
+ def self.extract!(args)
6
+ args.dup.inject(Hash.new) do |options, argument|
7
+ key, value = self.parse(argument)
8
+ if key
9
+ options[key] = value
10
+ args.delete(argument)
11
+ end
12
+ options
13
+ end
14
+ end
15
+
16
+ def self.extract(args)
17
+ args.inject(Hash.new) do |options, argument|
18
+ key, value = self.parse(argument)
19
+ if key
20
+ options[key] = value
21
+ end
22
+ options
23
+ end
24
+ end
25
+
26
+ def self.parse!(argument)
27
+ self.parse(argument) || raise("Argument #{argument} can't be parsed!")
28
+ end
29
+
30
+ def self.parse(argument)
31
+ case argument
32
+ when /^--no-([^=]+)$/ # --no-git-repository
33
+ return [$1.gsub("-", "_").to_sym, false]
34
+ when /^--([^=]+)$/ # --git-repository
35
+ return [$1.gsub("-", "_").to_sym, true]
36
+ when /^--([^=]+)=([^,]+)$/ # --controller=post
37
+ key, value = $1, $2
38
+ return [key.gsub("-", "_").to_sym, value.dup]
39
+ when /^--([^=]+)=(.+)$/ # --controllers=posts,comments
40
+ key, value = $1, $2
41
+ return [key.gsub("-", "_").to_sym, value.split(",")]
42
+ else
43
+ return false
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ begin
4
+ require "term/ansicolor"
5
+ rescue LoadError
6
+ raise LoadError, "You have to install term-ansicolor gem!"
7
+ end
8
+
9
+ String.send(:include, Term::ANSIColor) # just for now, I know it's a mess
10
+
11
+ module Term::ANSIColor
12
+ def self.coloring?
13
+ if @coloring.respond_to?(:call)
14
+ @coloring.call
15
+ else
16
+ @coloring
17
+ end
18
+ end
19
+ end
20
+
21
+
22
+ Term::ANSIColor.coloring = lambda { Nake.coloring }
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+
3
+ require "nake"
4
+ require "nake/task"
5
+ require "nake/file_task"
6
+
7
+ module Nake
8
+ module DSL
9
+ include Nake
10
+ def argument(*names, &block)
11
+ Nake.args[*names] = block
12
+ end
13
+
14
+ # desc :release, "Create a new release"
15
+ # task(:release) do
16
+ # # ...
17
+ # end
18
+ def desc(task, description)
19
+ Task.new(task).description = description
20
+ end
21
+
22
+ # Rake-style task definition
23
+ # task(:release, :build) do |task|
24
+ # # task definition
25
+ # end
26
+ def task(name, *dependencies, &block)
27
+ if block.nil?
28
+ Task.new(name, *dependencies)
29
+ else
30
+ Task.new(name, *dependencies) do |task|
31
+ task.define(&block)
32
+ end
33
+ end
34
+ end
35
+
36
+ def file(path, *dependencies, &block)
37
+ if block.nil?
38
+ FileTask.new(path, *dependencies)
39
+ else
40
+ FileTask.new(path, *dependencies) do |task|
41
+ task.define(&block)
42
+ end
43
+ end
44
+ end
45
+
46
+ # rule "*.o", "*.c"
47
+ # rule "**/*.o", "**/.c"
48
+ def rule(pattern, *dependencies, &block)
49
+ if block.nil?
50
+ Rule.new(pattern, *dependencies)
51
+ else
52
+ Rule.new(pattern, *dependencies) do |rule|
53
+ rule.define(&block)
54
+ end
55
+ end
56
+ end
57
+
58
+ def directory(path)
59
+ FileTask.new(path) do |task|
60
+ task.hidden = true # do not show in list
61
+ task.description = "Create directory #{path}"
62
+ task.define { mkdir_p path }
63
+ end
64
+ end
65
+ end
66
+ end
67
+
68
+ class Object
69
+ include Nake::DSL
70
+ end
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+
3
+ require "nake/abstract_task"
4
+
5
+ module Nake
6
+ class FileTask < AbstractTask
7
+ # TODO: default description na Generate #name
8
+ alias_method :path, :name
9
+
10
+ # FileTask can depend on tasks, other file tasks or just files.
11
+ # If a file task depends on a task, this task isn't supposed to change anything what ...
12
+ # ... if it's changing something, make sure the changing task is actually called before the file tasks are executed
13
+ # If the task is changing something so the file will be generated in all cases, you should rather to use normal task
14
+ # If there are some dependencies on files
15
+ # FileTask.new("www/index.html") do |task|
16
+ # task.file_dependencies.push(*FileList["images/**/*"])
17
+ # task.dependencies.push("www") # www task exist
18
+ # end
19
+ def call(args = Array.new, options = Hash.new)
20
+ will_run = true
21
+ unless self.dependencies.empty?
22
+ info "Invoking file task #{name}"
23
+ will_run = self.invoke_dependencies(*args, options)
24
+ end
25
+ if will_run && ! self.blocks.empty?
26
+ note "Executing file task #{name} with arguments #{args.inspect} and options #{options.inspect}"
27
+ debug "Config #{self.config.inspect}"
28
+ self.blocks.each do |block|
29
+ block.call(self.path, *args, options)
30
+ end
31
+ else
32
+ warn "File task #{name} won't be executed"
33
+ end
34
+ end
35
+
36
+ protected
37
+ # task will be executed just if
38
+ def will_run?
39
+ file_tasks = self.dependencies.select { |name| self.class[name] }
40
+ file_tasks.any? do |path|
41
+
42
+ end
43
+ end
44
+
45
+ def task_will_run?(path)
46
+ File.exist?(path) || File.mtime(path) < File.mtime(self.name)
47
+ end
48
+
49
+ # return true if the task need to be executed, false otherwise
50
+ def invoke_dependencies(*args, options)
51
+ self.dependencies.each do |name|
52
+ if task = self.class[name] # first try if there is a task with given name
53
+ task.call(*args, options) # TODO: what about arguments?
54
+ elsif File.exist?(name) # if not, then fallback to file
55
+ task_will_run?(name)
56
+ else
57
+ raise TaskNotFound, "Task with name #{name} doesn't exist"
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end