bee 0.8.0 → 0.8.1

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 (4) hide show
  1. data/README +1 -1
  2. data/lib/bee_console.rb +11 -2
  3. data/lib/bee_task_default.rb +214 -14
  4. metadata +12 -2
data/README CHANGED
@@ -25,4 +25,4 @@ or go to URL http://www.apache.org/licenses/LICENSE-2.0).
25
25
 
26
26
  = Copyright
27
27
 
28
- bee version 0.8.0 (C) Michel Casabianca & Contributors - 2006-2010
28
+ bee version 0.8.1 (C) Michel Casabianca & Contributors - 2006-2010
@@ -52,6 +52,8 @@ targets Targets to run (default target if omitted).'
52
52
  EXIT_BUILD_ERROR = 2
53
53
  # Exit value on unknown error
54
54
  EXIT_UNKNOWN_ERROR = 3
55
+ # Exit value on user interruption
56
+ EXIT_INTERRUPT_ERROR = 4
55
57
  # Bee options environment variable.
56
58
  BEE_OPT_ENV = 'BEEOPT'
57
59
  # Bee text logo (generated with http://www.network-science.de/ascii/)
@@ -60,7 +62,7 @@ targets Targets to run (default target if omitted).'
60
62
  | |__ ___ ___
61
63
  ____ | '_ \ / _ \/ _ \ _____ _____ _____ _____ _____ _____ _____ _____ _____
62
64
  |____| | |_) | __/ __/ |_____|_____|_____|_____|_____|_____|_____|_____|_____|
63
- |_.__/ \___|\___| 0.8.0 http://bee.rubyforge.org
65
+ |_.__/ \___|\___| 0.8.1 http://bee.rubyforge.org
64
66
 
65
67
  EOF
66
68
 
@@ -210,6 +212,10 @@ EOF
210
212
  puts "#{formatter.format_error('ERROR')}: #{$!}"
211
213
  puts e.backtrace.join("\n") if verbose
212
214
  exit(EXIT_BUILD_ERROR)
215
+ rescue Interrupt => e
216
+ puts "#{formatter.format_error('ERROR')}: Build was interrupted!"
217
+ puts e.backtrace.join("\n") if verbose
218
+ exit(EXIT_INTERRUPT_ERROR)
213
219
  rescue Exception => e
214
220
  puts "#{formatter.format_error('ERROR')}: #{$!}"
215
221
  puts e.backtrace.join("\n")
@@ -562,6 +568,8 @@ EOF
562
568
  attr_reader :last_target
563
569
  # Last task met.
564
570
  attr_reader :last_task
571
+ # Minimum duration to print on console even if not verbose (in seconds)
572
+ AUTO_DURATION = 60
565
573
 
566
574
  # Constructor.
567
575
  # - formatter: the formatter to use to output on console.
@@ -650,7 +658,8 @@ EOF
650
658
  def duration
651
659
  @end_time = Time.now
652
660
  @duration = @end_time - @start_time
653
- puts "Built in #{@duration} s" if @verbose
661
+ @duration = (@duration * 1000).round / 1000
662
+ puts "Built in #{@duration} s" if @verbose or @duration >= AUTO_DURATION
654
663
  end
655
664
 
656
665
  end
@@ -19,6 +19,8 @@ require 'bee_util'
19
19
  require 'erb'
20
20
  require 'fileutils'
21
21
  require 'net/smtp'
22
+ require 'highline/import'
23
+ require 'net/ftp'
22
24
 
23
25
  module Bee
24
26
 
@@ -82,6 +84,8 @@ module Bee
82
84
  # - error: the error message to print when pattern is not matched.
83
85
  # - attempts: number of allowed attempts. Optional, defaults to 0, which
84
86
  # means an unlimited number of attempts.
87
+ # - echo: the character to echo while typing. Useful for passwords,
88
+ # echoing '*' for instance.
85
89
  #
86
90
  # Example
87
91
  #
@@ -99,7 +103,9 @@ module Bee
99
103
  :pattern => { :mandatory => false, :type => :string },
100
104
  :error => { :mandatory => false, :type => :string },
101
105
  :attempts => { :mandatory => false, :type => :integer,
102
- :default => 0 }
106
+ :default => 0 },
107
+ :echo => { :mandatory => false, :type => :string,
108
+ :default => false }
103
109
  }
104
110
  check_parameters(params, params_desc)
105
111
  message = params[:message]
@@ -108,13 +114,17 @@ module Bee
108
114
  pattern = params[:pattern]
109
115
  error = params[:error]
110
116
  attempts = params[:attempts]
117
+ echo_char = params[:echo]
111
118
  message << " [#{default}]" if default
112
- message << ':'
119
+ message << ': '
113
120
  ok = false
114
121
  nb_attempts = 1
115
122
  while not (ok or (nb_attempts > attempts and attempts != 0))
116
- puts message
117
- value = gets.strip
123
+ if echo_char
124
+ value = ask(message) {|q| q.echo=echo_char}
125
+ else
126
+ value = ask(message)
127
+ end
118
128
  value = default if default and value.length == 0
119
129
  if pattern
120
130
  if value =~ /#{pattern}/
@@ -210,6 +220,7 @@ module Bee
210
220
  # - subject: The subject of the email.
211
221
  # - message: The body of the email.
212
222
  # - smtp: The address of the SMTP server.
223
+ # - encoding: The message encoding. Defaults to ASCII.
213
224
  #
214
225
  # Example
215
226
  #
@@ -221,19 +232,24 @@ module Bee
221
232
  # smtp: "smtp.bee.com"
222
233
  def mail(parameters)
223
234
  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 },
235
+ :from => { :mandatory => true, :type => :string },
236
+ :to => { :mandatory => true, :type => :string_or_array },
237
+ :subject => { :mandatory => true, :type => :string },
238
+ :message => { :mandatory => true, :type => :string },
239
+ :smtp => { :mandatory => true, :type => :string },
240
+ :encoding => { :mandatory => false, :type => :string,
241
+ :default => 'UTF-8'}
229
242
  }
230
243
  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]
244
+ from = parameters[:from]
245
+ to = Array(parameters[:to])
246
+ subject = parameters[:subject]
247
+ message = parameters[:message]
248
+ smtp = parameters[:smtp]
249
+ encoding = parameters[:encoding]
236
250
  body = <<EOF
251
+ MIME-Version: 1.0
252
+ Content-Type: text/plain; charset=#{encoding}
237
253
  From: #{from}
238
254
  To: #{to.join(', ')}
239
255
  Subject: #{subject}
@@ -1509,6 +1525,189 @@ EOF
1509
1525
  end
1510
1526
  end
1511
1527
 
1528
+ ######################################################################
1529
+ # FTP TASKS #
1530
+ ######################################################################
1531
+
1532
+ # Login to a remote FTP site. Useful to test a connection. Raises a
1533
+ # build error if connection fails. Parameter is a hash with following
1534
+ # entries:
1535
+ #
1536
+ # - username: the username to connect to FTP. Defaults to anonymous.
1537
+ # - password: the password to connect to FTP. Defaults to no password.
1538
+ # - host: the hostname to connect to.
1539
+ #
1540
+ # Example
1541
+ #
1542
+ # - ftp_login:
1543
+ # username: foo
1544
+ # password: bar
1545
+ # host: example.com
1546
+ def ftp_login(params)
1547
+ params_desc = {
1548
+ :username => { :mandatory => false, :type => :string },
1549
+ :password => { :mandatory => false, :type => :string },
1550
+ :host => { :mandatory => true, :type => :string }
1551
+ }
1552
+ check_parameters(params, params_desc)
1553
+ username = params[:username]
1554
+ password = params[:password]
1555
+ host = params[:host]
1556
+ begin
1557
+ Net::FTP.open(host) do |ftp|
1558
+ ftp.login(username, password)
1559
+ ftp.close
1560
+ end
1561
+ puts "Connection to FTP host '#{host}' sucessful"
1562
+ rescue
1563
+ error "Error connecting to FTP host: #{$!}"
1564
+ end
1565
+ end
1566
+
1567
+ # Get a file from a remote FTP site. Raises a build error this operation
1568
+ # fails. Parameter is a hash with following entries:
1569
+ #
1570
+ # - username: the username to connect to FTP. Defaults to anonymous.
1571
+ # - password: the password to connect to FTP. Defaults to no password.
1572
+ # - host: the hostname to connect to.
1573
+ # - file: the FTP path to remote file to get.
1574
+ # - output: the local path to file to write. Defaults to same file name
1575
+ # in current directory.
1576
+ # - binary: sets the binary mode for download. Defaults to true.
1577
+ #
1578
+ # Example:
1579
+ #
1580
+ # - ftp_get:
1581
+ # username: foo
1582
+ # password: bar
1583
+ # host: foo
1584
+ # file: test.txt
1585
+ def ftp_get(params)
1586
+ params_desc = {
1587
+ :username => { :mandatory => false, :type => :string },
1588
+ :password => { :mandatory => false, :type => :string },
1589
+ :host => { :mandatory => true, :type => :string },
1590
+ :file => { :mandatory => true, :type => :string },
1591
+ :output => { :mandatory => false, :type => :string },
1592
+ :binary => { :mandatory => false, :type => :boolean,
1593
+ :default => true }
1594
+ }
1595
+ check_parameters(params, params_desc)
1596
+ username = params[:username]
1597
+ password = params[:password]
1598
+ host = params[:host]
1599
+ file = params[:file]
1600
+ output = params[:output]||File.basename(file)
1601
+ binary = params[:binary]
1602
+ basename = File.basename(file)
1603
+ puts "Getting file '#{basename}'..."
1604
+ begin
1605
+ Net::FTP.open(host) do |ftp|
1606
+ ftp.login(username, password)
1607
+ if binary
1608
+ ftp.getbinaryfile(file, output)
1609
+ else
1610
+ ftp.gettextfile(file, output)
1611
+ end
1612
+ ftp.close
1613
+ end
1614
+ rescue
1615
+ error "Error getting file '#{basename}': #{$!}"
1616
+ end
1617
+ end
1618
+
1619
+ # Put a file to a remote FTP site. Raises a build error this operation
1620
+ # fails. Parameter is a hash with following entries:
1621
+ #
1622
+ # - username: the username to connect to FTP. Defaults to anonymous.
1623
+ # - password: the password to connect to FTP. Defaults to no password.
1624
+ # - host: the hostname to connect to.
1625
+ # - file: locale file to send.
1626
+ # - tofile: remote file to write on remote server. Defaults to base name
1627
+ # of local file.
1628
+ # - binary: sets the binary mode for upload. Defaults to true.
1629
+ #
1630
+ # Example:
1631
+ #
1632
+ # - ftp_put:
1633
+ # username: foo
1634
+ # password: bar
1635
+ # host: foo
1636
+ # file: test.txt
1637
+ def ftp_put(params)
1638
+ params_desc = {
1639
+ :username => { :mandatory => false, :type => :string },
1640
+ :password => { :mandatory => false, :type => :string },
1641
+ :host => { :mandatory => true, :type => :string },
1642
+ :file => { :mandatory => true, :type => :string },
1643
+ :tofile => { :mandatory => false, :type => :string },
1644
+ :binary => { :mandatory => false, :type => :boolean,
1645
+ :default => true }
1646
+ }
1647
+ check_parameters(params, params_desc)
1648
+ username = params[:username]
1649
+ password = params[:password]
1650
+ host = params[:host]
1651
+ file = params[:file]
1652
+ tofile = params[:tofile]
1653
+ binary = params[:binary]
1654
+ basename = File.basename(file)
1655
+ puts "Putting file '#{basename}'..."
1656
+ begin
1657
+ Net::FTP.open(host) do |ftp|
1658
+ ftp.login(username, password)
1659
+ if binary
1660
+ ftp.putbinaryfile(file, tofile)
1661
+ else
1662
+ ftp.puttextfile(file, tofile)
1663
+ end
1664
+ ftp.close
1665
+ end
1666
+ rescue
1667
+ error "Error putting file '#{basename}': #{$!}"
1668
+ end
1669
+ end
1670
+
1671
+ # Make a directory on a remote FTP site. Raises a build error this
1672
+ # operation fails. Parameter is a hash with following entries:
1673
+ #
1674
+ # - username: the username to connect to FTP. Defaults to anonymous.
1675
+ # - password: the password to connect to FTP. Defaults to no password.
1676
+ # - host: the hostname to connect to.
1677
+ # - dir: the path of the remote directory to create.
1678
+ #
1679
+ # Example:
1680
+ #
1681
+ # - ftp_mkdir:
1682
+ # username: foo
1683
+ # password: bar
1684
+ # host: foo
1685
+ # dir: test
1686
+ def ftp_mkdir(params)
1687
+ params_desc = {
1688
+ :username => { :mandatory => false, :type => :string },
1689
+ :password => { :mandatory => false, :type => :string },
1690
+ :host => { :mandatory => true, :type => :string },
1691
+ :dir => { :mandatory => true, :type => :string }
1692
+ }
1693
+ check_parameters(params, params_desc)
1694
+ username = params[:username]
1695
+ password = params[:password]
1696
+ host = params[:host]
1697
+ dir = params[:dir]
1698
+ basename = File.basename(dir)
1699
+ puts "Making directory '#{basename}'..."
1700
+ begin
1701
+ Net::FTP.open(host) do |ftp|
1702
+ ftp.login(username, password)
1703
+ ftp.mkdir(dir)
1704
+ ftp.close
1705
+ end
1706
+ rescue
1707
+ error "Error making directory '#{basename}': #{$!}"
1708
+ end
1709
+ end
1710
+
1512
1711
  ######################################################################
1513
1712
  # CONSTRUCTS #
1514
1713
  ######################################################################
@@ -1602,3 +1801,4 @@ EOF
1602
1801
  end
1603
1802
 
1604
1803
  end
1804
+
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.8.0
4
+ version: 0.8.1
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-04-04 00:00:00 +02:00
12
+ date: 2010-04-16 00:00:00 +02:00
13
13
  default_executable: bee
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,6 +22,16 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: 0.5.1
24
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: highline
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.5.2
34
+ version:
25
35
  - !ruby/object:Gem::Dependency
26
36
  name: rubyzip
27
37
  type: :runtime