hen 0.0.2.148 → 0.0.3.149

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,5 +1,15 @@
1
1
  = Revision history for hen
2
2
 
3
+ == 0.0.3 [2008-01-04]
4
+
5
+ * More cleanup and maturing.
6
+ * New tasks 'release' (formerly 'upload_gem'), 'publish_docs', and 'debug_gem'
7
+ * All in all: Pretty much inspired by Hoe ;-)
8
+
9
+ == 0.0.2 [2007-12-21]
10
+
11
+ * Cleanup and minor improvements
12
+
3
13
  == 0.0.1 [2007-12-20]
4
14
 
5
15
  * Birthday :-)
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to hen version 0.0.2
5
+ This documentation refers to hen version 0.0.3
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -17,7 +17,7 @@ TODO: well, the description... ;-)
17
17
 
18
18
  == LICENSE AND COPYRIGHT
19
19
 
20
- Copyright (C) 2007 University of Cologne,
20
+ Copyright (C) 2007-2008 University of Cologne,
21
21
  Albertus-Magnus-Platz, 50932 Cologne, Germany
22
22
 
23
23
  hen is free software: you can redistribute it and/or modify it under the
data/Rakefile CHANGED
@@ -1,21 +1,18 @@
1
1
  $:.unshift('lib')
2
2
 
3
3
  require 'hen'
4
- require 'hen/version'
5
4
 
6
- task(:doc_spec) {{
7
- :title => 'hen Application documentation'
8
- }}
5
+ Hen.lay! {{
6
+ :rubyforge => {
7
+ :package => 'hen'
8
+ },
9
9
 
10
- task(:gem_spec) {{
11
- :name => 'hen',
12
- :version => Hen::VERSION,
13
- :rubyforge_project => 'prometheus',
14
- :summary => "Hoe or Echoe? No, thanks! Just a Rake helper " <<
15
- "that fits my own personal style.",
16
- :files => FileList['lib/**/*.rb', 'bin/*'].to_a,
17
- :extra_files => FileList['[A-Z]*', 'lib/hens/*.rake', 'example/*', 'example/.henrc'].to_a,
18
- :dependencies => ['rubyforge', ['ruby-nuggets', '>= 0.0.3']]
10
+ :gem => {
11
+ :version => Hen::VERSION,
12
+ :summary => "Hoe or Echoe? No, thanks! Just a Rake " <<
13
+ "helper that fits my own personal style.",
14
+ :files => FileList['lib/**/*.rb', 'bin/*'].to_a,
15
+ :extra_files => FileList['[A-Z]*', 'lib/hens/*.rake', 'example/*', 'example/.henrc'].to_a,
16
+ :dependencies => ['rubyforge', ['ruby-nuggets', '>= 0.0.3']]
17
+ }
19
18
  }}
20
-
21
- Hen.lay!
data/example/.henrc CHANGED
@@ -1,5 +1,10 @@
1
1
  ---
2
2
 
3
+ :rubyforge:
4
+ :username: your_name
5
+ :project: your_project
6
+ :rdoc_dir: :package
7
+
3
8
  :rdoc:
4
9
  :rdoc_dir: doc
5
10
  :rdoc_files: [README, COPYING, ChangeLog, lib/**/*.rb]
data/lib/hen.rb CHANGED
@@ -3,9 +3,9 @@
3
3
  # #
4
4
  # hen -- Just a Rake helper #
5
5
  # #
6
- # Copyright (C) 2007 University of Cologne, #
7
- # Albertus-Magnus-Platz, #
8
- # 50932 Cologne, Germany #
6
+ # Copyright (C) 2007-2008 University of Cologne, #
7
+ # Albertus-Magnus-Platz, #
8
+ # 50932 Cologne, Germany #
9
9
  # #
10
10
  # Authors: #
11
11
  # Jens Wille <jens.wille@uni-koeln.de> #
@@ -34,6 +34,7 @@ require 'nuggets/proc/bind'
34
34
 
35
35
  require 'hen/dsl'
36
36
  require 'hen/errors'
37
+ require 'hen/version'
37
38
 
38
39
  class Hen
39
40
 
@@ -76,8 +77,8 @@ class Hen
76
77
 
77
78
  # call-seq:
78
79
  # lay!
79
- # lay! :some_hen, :some_other_hen
80
- # lay! :exclude => [:some_hen, :some_other_hen]
80
+ # lay!(:some_hen, :some_other_hen)
81
+ # lay!(:exclude => [:some_hen, :some_other_hen])
81
82
  #
82
83
  # Loads the hens, causing them to lay their eggs^H^H^Htasks. Either all,
83
84
  # if no restrictions are specified, or the given hens, or all but those
@@ -88,9 +89,15 @@ class Hen
88
89
 
89
90
  @verbose = options[:verbose] if options.has_key?(:verbose)
90
91
 
92
+ if block_given?
93
+ yield.each { |key, value|
94
+ config[key].update(value)
95
+ }
96
+ end
97
+
91
98
  # Handle include/exclude requirements
92
- exclude = *options[:exclude]
93
- args, default = args.empty? ? [exclude || [], true] : [args, false]
99
+ excl = options[:exclude]
100
+ args, default = args.empty? ? [excl ? [*excl] : [], true] : [args, false]
94
101
 
95
102
  inclexcl = Hash.new(default)
96
103
  args.each { |arg|
data/lib/hen/dsl.rb CHANGED
@@ -3,9 +3,9 @@
3
3
  # #
4
4
  # A component of hen, the Rake helper. #
5
5
  # #
6
- # Copyright (C) 2007 University of Cologne, #
7
- # Albertus-Magnus-Platz, #
8
- # 50932 Cologne, Germany #
6
+ # Copyright (C) 2007-2008 University of Cologne, #
7
+ # Albertus-Magnus-Platz, #
8
+ # 50932 Cologne, Germany #
9
9
  # #
10
10
  # Authors: #
11
11
  # Jens Wille <jens.wille@uni-koeln.de> #
@@ -33,15 +33,20 @@ class Hen
33
33
 
34
34
  extend self
35
35
 
36
- # Call Rake task +task+. Raises HenError::TaskRequired if task is not defined.
37
- def call_task(task)
38
- raise HenError::TaskRequired.new(task) unless Rake::Task.task_defined?(task)
39
- Rake::Task[task].invoke.first.call
40
- end
41
-
42
- # The Hen configuration.
36
+ # The Hen configuration. Raises HenError::ConfigRequired
37
+ # if a required configuration is missing.
43
38
  def config
44
- Hen.config
39
+ config = Hen.config
40
+
41
+ # always return a duplicate for a value, hence making the
42
+ # configuration immutable; raise if config is missing
43
+ def config.[](key)
44
+ raise HenError::ConfigRequired.new(key) unless has_key?(key)
45
+
46
+ fetch(key).dup
47
+ end
48
+
49
+ config
45
50
  end
46
51
 
47
52
  # Define task +t+, but overwrite any existing task of that name!
@@ -51,6 +56,32 @@ class Hen
51
56
  task(t, &block)
52
57
  end
53
58
 
59
+ # Execute a series of commands until one of them succeeds. Intended for
60
+ # platform-dependent alternatives (Command A is not available? Then try
61
+ # B instead).
62
+ #
63
+ # TODO: This won't detect cases where a command is actually available,
64
+ # but simply fails.
65
+ def execute(*commands)
66
+ commands.each { |command|
67
+ ok, res = sh(command) { |ok, res| [ok, res] }
68
+ break if ok
69
+
70
+ warn "Error while executing command (return code #{res.exitstatus})"
71
+ }
72
+ end
73
+
74
+ # Prepare the use of Rubyforge, optionally logging in right away.
75
+ # Returns the RubyForge object.
76
+ def init_rubyforge(login = true)
77
+ require 'rubyforge'
78
+
79
+ rf = RubyForge.new
80
+ rf.login if login
81
+
82
+ rf
83
+ end
84
+
54
85
  end
55
86
 
56
87
  end
data/lib/hen/errors.rb CHANGED
@@ -3,9 +3,9 @@
3
3
  # #
4
4
  # A component of hen, the Rake helper. #
5
5
  # #
6
- # Copyright (C) 2007 University of Cologne, #
7
- # Albertus-Magnus-Platz, #
8
- # 50932 Cologne, Germany #
6
+ # Copyright (C) 2007-2008 University of Cologne, #
7
+ # Albertus-Magnus-Platz, #
8
+ # 50932 Cologne, Germany #
9
9
  # #
10
10
  # Authors: #
11
11
  # Jens Wille <jens.wille@uni-koeln.de> #
@@ -31,21 +31,21 @@ class Hen
31
31
  # Base class for Hen errors.
32
32
  class HenError < StandardError
33
33
 
34
- # Raised if a required task is missing.
35
- class TaskRequired < HenError
34
+ # Raised if a required configuration is missing.
35
+ class ConfigRequired < HenError
36
36
 
37
37
  # call-seq:
38
- # new(task)
38
+ # new(key)
39
39
  #
40
- def initialize(task)
41
- @task = task
40
+ def initialize(key)
41
+ @key = key
42
42
  end
43
43
 
44
44
  # call-seq:
45
45
  # to_s
46
46
  #
47
47
  def to_s
48
- "Required task missing: #{@task}"
48
+ "Required configuration missing for #{@key}"
49
49
  end
50
50
 
51
51
  end
data/lib/hen/version.rb CHANGED
@@ -3,9 +3,9 @@
3
3
  # #
4
4
  # A component of hen, the Rake helper. #
5
5
  # #
6
- # Copyright (C) 2007 University of Cologne, #
7
- # Albertus-Magnus-Platz, #
8
- # 50932 Cologne, Germany #
6
+ # Copyright (C) 2007-2008 University of Cologne, #
7
+ # Albertus-Magnus-Platz, #
8
+ # 50932 Cologne, Germany #
9
9
  # #
10
10
  # Authors: #
11
11
  # Jens Wille <jens.wille@uni-koeln.de> #
@@ -32,7 +32,7 @@ class Hen
32
32
 
33
33
  MAJOR = 0
34
34
  MINOR = 0
35
- TINY = 2
35
+ TINY = 3
36
36
 
37
37
  class << self
38
38
 
data/lib/hens/gem.rake CHANGED
@@ -2,10 +2,8 @@
2
2
  Hen :gem => :rdoc do
3
3
  require 'rake/gempackagetask'
4
4
 
5
- GEM_DEFAULTS = config[:gem] unless Object.const_defined?(:GEM_DEFAULTS)
6
-
7
- # Merge defaults with user's spec
8
- gem_options = GEM_DEFAULTS.merge(call_task(:gem_spec))
5
+ gem_options = config[:gem]
6
+ rubyforge = config[:rubyforge]
9
7
 
10
8
  if Object.const_defined?(:RDOC_OPTIONS)
11
9
  gem_options[:rdoc_options] ||= RDOC_OPTIONS[:options]
@@ -14,11 +12,11 @@ Hen :gem => :rdoc do
14
12
 
15
13
  gem_spec = Gem::Specification.new { |spec|
16
14
 
17
- ### dependencies
15
+ ### name
18
16
 
19
- (gem_options.delete(:dependencies) || []).each { |dependency|
20
- spec.add_dependency(*dependency)
21
- }
17
+ gem_options[:name] ||= rubyforge[:package]
18
+
19
+ abort "Gem name missing" unless gem_options[:name]
22
20
 
23
21
  ### version
24
22
 
@@ -32,7 +30,9 @@ Hen :gem => :rdoc do
32
30
 
33
31
  gem_options[:description] ||= gem_options[:summary]
34
32
 
35
- ### homepage
33
+ ### rubyforge project, homepage
34
+
35
+ gem_options[:rubyforge_project] ||= rubyforge[:project]
36
36
 
37
37
  if rf_project = gem_options[:rubyforge_project]
38
38
  gem_options[:homepage] ||= "#{rf_project}.rubyforge.org/#{gem_options[:name]}"
@@ -49,6 +49,12 @@ Hen :gem => :rdoc do
49
49
 
50
50
  gem_options[:executables].map! { |executable| File.basename(executable) }
51
51
 
52
+ ### dependencies
53
+
54
+ (gem_options.delete(:dependencies) || []).each { |dependency|
55
+ spec.add_dependency(*dependency)
56
+ }
57
+
52
58
  ### => set options!
53
59
 
54
60
  gem_options.each { |option, value|
@@ -67,8 +73,8 @@ Hen :gem => :rdoc do
67
73
  end
68
74
 
69
75
  desc "Package and upload the release to Rubyforge"
70
- task :release => :package do
71
- require 'rubyforge'
76
+ task :release => [:package, :publish_docs] do
77
+ rf = init_rubyforge
72
78
 
73
79
  files = Dir[File.join('pkg', "#{pkg_task.package_name}.*")]
74
80
  abort "Nothing to release!" if files.empty?
@@ -76,10 +82,7 @@ Hen :gem => :rdoc do
76
82
  # shorten to (at most) three digits
77
83
  version = pkg_task.version.to_s.split(/([.])/)[0..4].join
78
84
 
79
- rf = RubyForge.new
80
- rf.login
81
-
82
- rf.add_release gem_spec.rubyforge_project, pkg_task.name, version, *files
85
+ rf.add_release rubyforge[:project], pkg_task.name, version, *files
83
86
  end
84
87
 
85
88
  end
data/lib/hens/rdoc.rake CHANGED
@@ -1,28 +1,53 @@
1
1
  Hen :rdoc do
2
2
  require 'rake/rdoctask'
3
3
 
4
- RDOC_DEFAULTS = config[:rdoc] unless Object.const_defined?(:RDOC_DEFAULTS)
5
-
6
- unless Object.const_defined?(:RDOC_OPTIONS)
7
- # Merge defaults with user's spec
8
- opts = RDOC_DEFAULTS.merge(call_task(:doc_spec))
9
-
10
- RDOC_OPTIONS = {
11
- :rdoc_dir => opts.delete(:rdoc_dir),
12
- :rdoc_files => FileList[opts.delete(:rdoc_files)].to_a.uniq,
13
- :options => opts.map { |option, value|
14
- option = '--' << option.to_s.tr('_', '-')
15
- value.is_a?(String) ? [option, value] : value ? option : nil
16
- }.compact.flatten
17
- }
4
+ rdoc_options = config[:rdoc]
5
+ rubyforge = config[:rubyforge]
6
+
7
+ if rf_package = rubyforge[:package]
8
+ rdoc_options[:title] ||= "#{rf_package} Application documentation"
18
9
  end
19
10
 
20
- Rake::RDocTask.new(:doc) { |rdoc|
21
- opts = RDOC_OPTIONS
11
+ RDOC_OPTIONS = {
12
+ :rdoc_dir => rdoc_options.delete(:rdoc_dir),
13
+ :rdoc_files => FileList[rdoc_options.delete(:rdoc_files)].to_a.uniq,
14
+ :options => rdoc_options.map { |option, value|
15
+ option = '--' << option.to_s.tr('_', '-')
16
+ value.is_a?(String) ? [option, value] : value ? option : nil
17
+ }.compact.flatten
18
+ }
22
19
 
23
- rdoc.rdoc_dir = opts[:rdoc_dir]
24
- rdoc.rdoc_files = opts[:rdoc_files]
25
- rdoc.options = opts[:options]
20
+ rdoc_task = Rake::RDocTask.new(:doc) { |rdoc|
21
+ rdoc.rdoc_dir = RDOC_OPTIONS[:rdoc_dir]
22
+ rdoc.rdoc_files = RDOC_OPTIONS[:rdoc_files]
23
+ rdoc.options = RDOC_OPTIONS[:options]
26
24
  }
27
25
 
26
+ desc "Publish RDoc to Rubyforge"
27
+ task :publish_docs => :doc do
28
+ rf_project = rubyforge[:project]
29
+ abort "Rubyforge project name missing" unless rf_project
30
+
31
+ rf_user = rubyforge[:username]
32
+ abort "Rubyforge user name missing" unless rf_user
33
+
34
+ user__host = "#{rf_user}@rubyforge.org"
35
+
36
+ local_dir = rdoc_task.rdoc_dir + '/'
37
+ remote_dir = "/var/www/gforge-projects/#{rf_project}/"
38
+
39
+ if rdoc_dir = rubyforge[:rdoc_dir]
40
+ if rf_package = rubyforge[:package]
41
+ rdoc_dir = rf_package if rdoc_dir == :package
42
+ end
43
+
44
+ remote_dir += rdoc_dir + '/'
45
+ end
46
+
47
+ execute(
48
+ "rsync -av --delete #{local_dir} #{user__host}:#{remote_dir}",
49
+ "scp -r #{local_dir} #{user__host}:#{remote_dir}"
50
+ )
51
+ end
52
+
28
53
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.148
4
+ version: 0.0.3.149
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
@@ -59,14 +59,14 @@ homepage: prometheus.rubyforge.org/hen
59
59
  post_install_message:
60
60
  rdoc_options:
61
61
  - --all
62
+ - --line-numbers
63
+ - --inline-source
64
+ - --main
65
+ - README
62
66
  - --charset
63
67
  - UTF-8
64
68
  - --title
65
69
  - hen Application documentation
66
- - --main
67
- - README
68
- - --line-numbers
69
- - --inline-source
70
70
  require_paths:
71
71
  - lib
72
72
  required_ruby_version: !ruby/object:Gem::Requirement