do_riak 0.10.1.pre

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