bee 0.6.1 → 0.7.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.
- data/README +1 -1
- data/egg/sinatra.yml +55 -0
- data/egg/sinatra/build.yml +45 -0
- data/egg/sinatra/server.rb +10 -0
- data/lib/bee.rb +27 -1
- data/lib/bee_console.rb +6 -1
- data/lib/bee_task.rb +2 -0
- data/lib/bee_task_default.rb +108 -15
- metadata +5 -2
data/README
CHANGED
data/egg/sinatra.yml
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
- build: package
|
2
|
+
default: all
|
3
|
+
description: "Generate a Sinatra project"
|
4
|
+
|
5
|
+
- properties:
|
6
|
+
- name: sinatra
|
7
|
+
- description: |
|
8
|
+
This script will create a Sinatra project. Generated build file has a
|
9
|
+
target 'run' to run the server, 'zip' to generate a distribution archive
|
10
|
+
and 'clean' to delete generated files.
|
11
|
+
|
12
|
+
- target: welcome
|
13
|
+
description: "Print information message"
|
14
|
+
script:
|
15
|
+
- print: :description
|
16
|
+
|
17
|
+
- target: prompt
|
18
|
+
depends: welcome
|
19
|
+
description: "Prompt for project information"
|
20
|
+
script:
|
21
|
+
- print: "Please answer following questions to generate the project:"
|
22
|
+
- prompt:
|
23
|
+
message: "What is the project's name?"
|
24
|
+
default: :name
|
25
|
+
property: name
|
26
|
+
|
27
|
+
- target: generate
|
28
|
+
depends: prompt
|
29
|
+
description: "Generate project"
|
30
|
+
script:
|
31
|
+
- print: "Generating project..."
|
32
|
+
- rb: |
|
33
|
+
error "A directory named '#{name}' already exists, aborting" if
|
34
|
+
File.exists?("#{here}/#{name}")
|
35
|
+
- mkdir: "#{here}/#{name}"
|
36
|
+
- erb:
|
37
|
+
src: "#{base}/sinatra/build.yml"
|
38
|
+
dest: "#{here}/#{name}/build.yml"
|
39
|
+
- cp:
|
40
|
+
src: "#{base}/sinatra/server.rb"
|
41
|
+
dest: "#{here}/#{name}/server.rb"
|
42
|
+
|
43
|
+
- target: customization
|
44
|
+
depends: generate
|
45
|
+
description: "Print information about project customization"
|
46
|
+
script:
|
47
|
+
- print: |
|
48
|
+
Project has been generated in directory '#{name}'. Type 'bee -b' to print
|
49
|
+
information about generated build file. To start server, type 'b run'. To
|
50
|
+
send a request, call URL 'http://localhost:4567/hello/world', typing
|
51
|
+
'b call' for instance (which requires curl).
|
52
|
+
Enjoy!
|
53
|
+
|
54
|
+
- target: all
|
55
|
+
depends: [welcome, prompt, generate, customization]
|
@@ -0,0 +1,45 @@
|
|
1
|
+
- build: <%= name %>
|
2
|
+
description: Project <%= name %>
|
3
|
+
default: all
|
4
|
+
|
5
|
+
- properties:
|
6
|
+
- name: "<%= name %>"
|
7
|
+
- version: "0.0.0"
|
8
|
+
- build: "build"
|
9
|
+
- zip_prefix: "#{name}-#{version}"
|
10
|
+
- zip_file: "#{build}/#{zip_prefix}.zip"
|
11
|
+
- url: "http://localhost:4567/hello"
|
12
|
+
- clean_dirs: [:build]
|
13
|
+
- clean_files: ["**/*~", "**/.#*", "**/.DS_Store"]
|
14
|
+
|
15
|
+
- target: run
|
16
|
+
description: Run server
|
17
|
+
script:
|
18
|
+
- "./server.rb"
|
19
|
+
|
20
|
+
- target: call
|
21
|
+
description: Call server
|
22
|
+
script:
|
23
|
+
- get:
|
24
|
+
url: "#{url}/World"
|
25
|
+
prop: response
|
26
|
+
- print: :response
|
27
|
+
|
28
|
+
- target: zip
|
29
|
+
description: Generate a ZIP archive
|
30
|
+
script:
|
31
|
+
- mkdir: :build
|
32
|
+
- zip:
|
33
|
+
includes: "server.rb"
|
34
|
+
prefix: :zip_prefix
|
35
|
+
dest: :zip_file
|
36
|
+
|
37
|
+
- target: clean
|
38
|
+
description: Clean generated files
|
39
|
+
script:
|
40
|
+
- rmdir: :clean_dirs
|
41
|
+
- rm: :clean_files
|
42
|
+
|
43
|
+
- target: all
|
44
|
+
depends: [clean, zip]
|
45
|
+
description: Generate the whole project
|
data/lib/bee.rb
CHANGED
@@ -629,6 +629,9 @@ module Bee
|
|
629
629
|
# for construct
|
630
630
|
elsif construct.keys.include?('for')
|
631
631
|
construct_for(construct, dry)
|
632
|
+
# try construct
|
633
|
+
elsif construct.keys.include?('try')
|
634
|
+
construct_try(construct, dry)
|
632
635
|
else
|
633
636
|
error "Unknown construct '#{construct.keys.join('-')}'"
|
634
637
|
end
|
@@ -711,6 +714,29 @@ module Bee
|
|
711
714
|
end
|
712
715
|
end
|
713
716
|
|
717
|
+
# Run try-catch construct.
|
718
|
+
# - task: the construct as a hash.
|
719
|
+
# - dry: tells if we run in dry mode.
|
720
|
+
def construct_try(task, dry)
|
721
|
+
# test entries
|
722
|
+
error "Try-catch construct must include 'catch' entry" if
|
723
|
+
not task.keys.include?('catch')
|
724
|
+
unknown_keys = task.keys - ['try', 'catch']
|
725
|
+
error "Try-catch construct may only include 'try' and 'catch' entries" if
|
726
|
+
unknown_keys.length > 0
|
727
|
+
error "Try entry in try-catch construct must be a list" if
|
728
|
+
not task['try'].kind_of?(Array)
|
729
|
+
error "Catch entry in try-catch construct must be a list" if
|
730
|
+
not task['catch'].kind_of?(Array)
|
731
|
+
# try and catch errors
|
732
|
+
begin
|
733
|
+
run_block(task['try'], dry)
|
734
|
+
rescue
|
735
|
+
@targets.build.listener.recover if @targets.build.listener
|
736
|
+
run_block(task['catch'], dry)
|
737
|
+
end
|
738
|
+
end
|
739
|
+
|
714
740
|
# Run a block, that is a list of tasks.
|
715
741
|
# - block: the block to run as a list of tasks.
|
716
742
|
# - dry: tells if we run in dry mode.
|
@@ -776,7 +802,7 @@ module Bee
|
|
776
802
|
|
777
803
|
# Return list of properties (as local variables of binding).
|
778
804
|
def properties
|
779
|
-
return eval('local_variables', @context_binding)
|
805
|
+
return eval('local_variables', @context_binding).map{ |var| var.to_s }
|
780
806
|
end
|
781
807
|
|
782
808
|
# Evaluate a script in context.
|
data/lib/bee_console.rb
CHANGED
@@ -60,7 +60,7 @@ targets Targets to run (default target if omitted).'
|
|
60
60
|
| |__ ___ ___
|
61
61
|
____ | '_ \ / _ \/ _ \ _____ _____ _____ _____ _____ _____ _____ _____ _____
|
62
62
|
|____| | |_) | __/ __/ |_____|_____|_____|_____|_____|_____|_____|_____|_____|
|
63
|
-
|_.__/ \___|\___| 0.
|
63
|
+
|_.__/ \___|\___| 0.7.0 http://bee.rubyforge.org
|
64
64
|
|
65
65
|
EOF
|
66
66
|
|
@@ -621,6 +621,11 @@ EOF
|
|
621
621
|
raise Bee::Util::BuildError.new(message)
|
622
622
|
end
|
623
623
|
|
624
|
+
# Recover from a previous error (catching it for instance).
|
625
|
+
def recover
|
626
|
+
@success = true
|
627
|
+
end
|
628
|
+
|
624
629
|
# Print text on the console.
|
625
630
|
# - text: text to print.
|
626
631
|
def print(text)
|
data/lib/bee_task.rb
CHANGED
@@ -73,6 +73,7 @@ module Bee
|
|
73
73
|
when :string_or_array
|
74
74
|
error "#{task} '#{param}' parameter must be a string or an array" unless
|
75
75
|
params[param.to_s].kind_of?(String) or params[param.to_s].kind_of?(Array)
|
76
|
+
params[param.to_s] = Array(params[param.to_s])
|
76
77
|
when :string_or_integer
|
77
78
|
error "#{task} '#{param}' parameter must be a string or an integer" unless
|
78
79
|
params[param.to_s].kind_of?(String) or params[param.to_s].kind_of?(Integer)
|
@@ -119,6 +120,7 @@ module Bee
|
|
119
120
|
Dir.chdir(root) if root
|
120
121
|
included = []
|
121
122
|
includes = '**/*' if not includes
|
123
|
+
includes = Array(includes)
|
122
124
|
for include in includes
|
123
125
|
error "includes must be a glob or a list of globs" unless
|
124
126
|
include.kind_of?(String)
|
data/lib/bee_task_default.rb
CHANGED
@@ -18,6 +18,7 @@ require 'bee_task'
|
|
18
18
|
require 'bee_util'
|
19
19
|
require 'erb'
|
20
20
|
require 'fileutils'
|
21
|
+
require 'net/smtp'
|
21
22
|
|
22
23
|
module Bee
|
23
24
|
|
@@ -130,6 +131,21 @@ module Bee
|
|
130
131
|
@build.context.set_property(property, value)
|
131
132
|
end
|
132
133
|
|
134
|
+
# Trow a build error with a given message.
|
135
|
+
#
|
136
|
+
# - message: the error message. Will be printed on the console as the
|
137
|
+
# build failure reason.
|
138
|
+
#
|
139
|
+
# Example
|
140
|
+
#
|
141
|
+
# - if: "not File.exists?('/etc/config')"
|
142
|
+
# then:
|
143
|
+
# - throw: "No /etc/config file found!"
|
144
|
+
def throw(message)
|
145
|
+
error "throw parameter must be a string" if not message.kind_of?(String)
|
146
|
+
error message
|
147
|
+
end
|
148
|
+
|
133
149
|
# Get a given URL and store its content in a given file. Parameters
|
134
150
|
# is a Hash with following entries:
|
135
151
|
#
|
@@ -137,6 +153,8 @@ module Bee
|
|
137
153
|
# - dest: destination file. Optional, defaults to retrieved file name
|
138
154
|
# in current directory. If destination is a directory, file is saved
|
139
155
|
# in destination directory with the name of the retrieved file.
|
156
|
+
# - prop: Property to set with content of the response body. Optional
|
157
|
+
# defaults to output in a file.
|
140
158
|
# - limit: the redirections limit. Optional, defaults to 10.
|
141
159
|
#
|
142
160
|
# Example
|
@@ -145,19 +163,23 @@ module Bee
|
|
145
163
|
# url: http://rubyforge.org/frs/download.php/22185/bee-0.4.0.zip
|
146
164
|
def get(parameters)
|
147
165
|
params_desc = {
|
148
|
-
:url => { :mandatory => true,
|
149
|
-
:dest => { :mandatory => false,
|
150
|
-
:
|
166
|
+
:url => { :mandatory => true, :type => :string },
|
167
|
+
:dest => { :mandatory => false, :type => :string },
|
168
|
+
:prop => { :mandatory => false, :type => :string },
|
169
|
+
:limit => { :mandatory => false, :type => :integer, :default => 10 }
|
151
170
|
}
|
152
171
|
check_parameters(parameters, params_desc)
|
153
172
|
url = parameters[:url]
|
154
173
|
dest = parameters[:dest]
|
155
|
-
|
174
|
+
prop = parameters[:prop]
|
175
|
+
if not dest and not prop
|
156
176
|
destination = File.basename(url)
|
157
|
-
elsif File.directory?(dest)
|
177
|
+
elsif dest and File.directory?(dest)
|
158
178
|
destination = File.join(dest, File.basename(url))
|
159
|
-
|
179
|
+
elsif dest
|
160
180
|
destination = dest
|
181
|
+
else
|
182
|
+
destination = nil
|
161
183
|
end
|
162
184
|
limit = parameters[:limit]
|
163
185
|
puts "Getting URL '#{url}'..."
|
@@ -166,12 +188,65 @@ module Bee
|
|
166
188
|
rescue Exception
|
167
189
|
error "Error getting URL: #{$!}"
|
168
190
|
end
|
169
|
-
|
191
|
+
if destination
|
192
|
+
todir = File.dirname(destination)
|
193
|
+
begin
|
194
|
+
FileUtils.makedirs(todir) if not File.exists?(todir)
|
195
|
+
File.open(destination, 'w') { |file| file.write(content) }
|
196
|
+
rescue Exception
|
197
|
+
error "Error saving file: #{$!}"
|
198
|
+
end
|
199
|
+
end
|
200
|
+
if prop
|
201
|
+
@build.context.set_property(prop, content)
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
|
206
|
+
# Send an email using SMTP.
|
207
|
+
#
|
208
|
+
# - from: The sender of the email.
|
209
|
+
# - to: Recipient of the email. This may be a list of recipients.
|
210
|
+
# - subject: The subject of the email.
|
211
|
+
# - message: The body of the email.
|
212
|
+
# - smtp: The address of the SMTP server.
|
213
|
+
#
|
214
|
+
# Example
|
215
|
+
#
|
216
|
+
# - mail:
|
217
|
+
# from: "foo@bee.com"
|
218
|
+
# to: "bar@bee.com"
|
219
|
+
# subject: "Bee Release 0.6.2"
|
220
|
+
# message: "Hi! There is a new Bee release!"
|
221
|
+
# smtp: "smtp.bee.com"
|
222
|
+
def mail(parameters)
|
223
|
+
params_desc = {
|
224
|
+
:from => { :mandatory => true, :type => :string },
|
225
|
+
:to => { :mandatory => true, :type => :string_or_array },
|
226
|
+
:subject => { :mandatory => true, :type => :string },
|
227
|
+
:message => { :mandatory => true, :type => :string },
|
228
|
+
:smtp => { :mandatory => true, :type => :string },
|
229
|
+
}
|
230
|
+
check_parameters(parameters, params_desc)
|
231
|
+
from = parameters[:from]
|
232
|
+
to = Array(parameters[:to])
|
233
|
+
subject = parameters[:subject]
|
234
|
+
message = parameters[:message]
|
235
|
+
smtp = parameters[:smtp]
|
236
|
+
body = <<EOF
|
237
|
+
From: #{from}
|
238
|
+
To: #{to.join(', ')}
|
239
|
+
Subject: #{subject}
|
240
|
+
|
241
|
+
#{message}
|
242
|
+
EOF
|
243
|
+
puts "Sending email about '#{subject}'..."
|
170
244
|
begin
|
171
|
-
|
172
|
-
|
245
|
+
Net::SMTP.start(smtp) do |smtp_server|
|
246
|
+
smtp_server.send_message(body, from, to)
|
247
|
+
end
|
173
248
|
rescue Exception
|
174
|
-
error "Error
|
249
|
+
error "Error sending email: #{$!}"
|
175
250
|
end
|
176
251
|
end
|
177
252
|
|
@@ -364,6 +439,7 @@ module Bee
|
|
364
439
|
def mkdir(dirs)
|
365
440
|
error "mkdir parameter must a String or an array of Strings" unless
|
366
441
|
dirs.kind_of?(String) or dirs.kind_of?(Array)
|
442
|
+
dirs = Array(dirs)
|
367
443
|
for dir in dirs
|
368
444
|
error "mkdir parameter must a String or an array of Strings" unless
|
369
445
|
dir.kind_of?(String)
|
@@ -623,6 +699,7 @@ module Bee
|
|
623
699
|
def rm(globs)
|
624
700
|
error "rm parameter is a String or Array of Strings" unless
|
625
701
|
globs.kind_of?(String) or globs.kind_of?(Array)
|
702
|
+
globs = Array(globs)
|
626
703
|
for glob in globs
|
627
704
|
error "rm parameter is a String or Array of Strings" unless
|
628
705
|
glob.kind_of?(String)
|
@@ -646,9 +723,9 @@ module Bee
|
|
646
723
|
#
|
647
724
|
# - rmrf: :build
|
648
725
|
def rmrf(globs)
|
649
|
-
globs = [globs] if globs.kind_of?(String)
|
650
726
|
error "rmrf parameter is a String or an Array of Strings" unless
|
651
727
|
globs.kind_of?(String) or globs.kind_of?(Array)
|
728
|
+
globs = Array(globs)
|
652
729
|
for glob in globs
|
653
730
|
error "rmrf parameter is a String or an Array of Strings" unless
|
654
731
|
glob.kind_of?(String)
|
@@ -676,9 +753,9 @@ module Bee
|
|
676
753
|
#
|
677
754
|
# - touch: '#{target}/classes/**/*.class'
|
678
755
|
def touch(globs)
|
679
|
-
globs = [globs] if globs.kind_of?(String)
|
680
756
|
error "touch parameter is a String or an Array of Strings" unless
|
681
757
|
globs.kind_of?(String) or globs.kind_of?(Array)
|
758
|
+
globs = Array(globs)
|
682
759
|
files = []
|
683
760
|
for glob in globs
|
684
761
|
error "touch parameter is a String or an Array of Strings" unless
|
@@ -864,7 +941,6 @@ module Bee
|
|
864
941
|
# dir: "test"
|
865
942
|
def test(params)
|
866
943
|
require 'test/unit'
|
867
|
-
require 'test/unit/testresult'
|
868
944
|
params_desc = {
|
869
945
|
:root => { :mandatory => false, :type => :string },
|
870
946
|
:includes => { :mandatory => true, :type => :string },
|
@@ -1000,7 +1076,8 @@ module Bee
|
|
1000
1076
|
:root => { :mandatory => false, :type => :string },
|
1001
1077
|
:includes => { :mandatory => true, :type => :string_or_array },
|
1002
1078
|
:excludes => { :mandatory => false, :type => :string_or_array },
|
1003
|
-
:dotmatch => { :mandatory => false, :type => :boolean,
|
1079
|
+
:dotmatch => { :mandatory => false, :type => :boolean,
|
1080
|
+
:default => false },
|
1004
1081
|
:dest => { :mandatory => true, :type => :string },
|
1005
1082
|
:options => { :mandatory => false, :type => :string_or_array }
|
1006
1083
|
}
|
@@ -1013,7 +1090,7 @@ module Bee
|
|
1013
1090
|
options = params[:options]
|
1014
1091
|
files = filter_files(includes, excludes, root, dotmatch)
|
1015
1092
|
command_line = ['-S', '-o', dest]
|
1016
|
-
command_line
|
1093
|
+
command_line += options if options
|
1017
1094
|
command_line += files
|
1018
1095
|
begin
|
1019
1096
|
rdoc = RDoc::RDoc.new
|
@@ -1501,6 +1578,22 @@ module Bee
|
|
1501
1578
|
def for
|
1502
1579
|
end
|
1503
1580
|
|
1581
|
+
# Try construct will run the block in the 'try' entry and will switch to
|
1582
|
+
# block in the 'catch' entry if an error occurs.
|
1583
|
+
#
|
1584
|
+
# - try: the block to run.
|
1585
|
+
# - catch: the block to switch to if an error occurs.
|
1586
|
+
#
|
1587
|
+
# Example:
|
1588
|
+
#
|
1589
|
+
# - try:
|
1590
|
+
# - print: "In the try block"
|
1591
|
+
# - throw: "Something went terribly wrong!"
|
1592
|
+
# catch:
|
1593
|
+
# - print: "An error occured"
|
1594
|
+
def try
|
1595
|
+
end
|
1596
|
+
|
1504
1597
|
end
|
1505
1598
|
|
1506
1599
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michel Casabianca & Contributors
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-17 00:00:00 +01:00
|
13
13
|
default_executable: bee
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -64,6 +64,9 @@ files:
|
|
64
64
|
- egg/package/test_build_listener.rb
|
65
65
|
- egg/package/test_suite.rb
|
66
66
|
- egg/package.yml
|
67
|
+
- egg/sinatra/build.yml
|
68
|
+
- egg/sinatra/server.rb
|
69
|
+
- egg/sinatra.yml
|
67
70
|
- README
|
68
71
|
- LICENSE
|
69
72
|
has_rdoc: true
|