hen 0.0.2.148 → 0.0.3.149

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