hen 0.0.2.144 → 0.0.2.148

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/Rakefile CHANGED
@@ -15,7 +15,7 @@ task(:gem_spec) {{
15
15
  "that fits my own personal style.",
16
16
  :files => FileList['lib/**/*.rb', 'bin/*'].to_a,
17
17
  :extra_files => FileList['[A-Z]*', 'lib/hens/*.rake', 'example/*', 'example/.henrc'].to_a,
18
- :dependencies => %w[rubyforge]
18
+ :dependencies => ['rubyforge', ['ruby-nuggets', '>= 0.0.3']]
19
19
  }}
20
20
 
21
21
  Hen.lay!
data/lib/hen.rb CHANGED
@@ -29,6 +29,9 @@
29
29
  require 'rake'
30
30
  require 'yaml'
31
31
 
32
+ require 'rubygems'
33
+ require 'nuggets/proc/bind'
34
+
32
35
  require 'hen/dsl'
33
36
  require 'hen/errors'
34
37
 
@@ -102,14 +105,10 @@ class Hen
102
105
 
103
106
  # Execute each hen definition
104
107
  hens.each { |name, hen|
105
- # Load any dependencies first
108
+ # Load any dependencies, in case they're not included yet
106
109
  load_hens(*hen.dependencies)
107
110
 
108
- begin
109
- hen.lay!
110
- rescue HenError => err
111
- warn "#{name}: #{err}" if verbose
112
- end
111
+ hen.lay!
113
112
  }
114
113
  end
115
114
 
@@ -126,6 +125,14 @@ class Hen
126
125
  end
127
126
  end
128
127
 
128
+ # call-seq:
129
+ # Hen[hen] => aHen
130
+ #
131
+ # Get hen by name.
132
+ def [](hen)
133
+ @hens[hen]
134
+ end
135
+
129
136
  private
130
137
 
131
138
  # call-seq:
@@ -182,7 +189,16 @@ class Hen
182
189
  #
183
190
  # Runs the definition block, exposing the DSL if requested.
184
191
  def lay!
185
- block.arity == 1 ? block[DSL] : block.call
192
+ return if laid?
193
+
194
+ # Call dependencies first
195
+ dependencies.each { |hen|
196
+ self.class[hen].lay!
197
+ }
198
+
199
+ block.bind(DSL).call
200
+ rescue HenError => err
201
+ warn "#{name}: #{err}" if verbose
186
202
  end
187
203
 
188
204
  # call-seq:
@@ -217,6 +233,17 @@ class Hen
217
233
  [name.to_sym, dependencies.map { |d| d.to_sym }]
218
234
  end
219
235
 
236
+ # call-seq:
237
+ # laid? => true or false
238
+ #
239
+ # Keeps track of whether the block has already been executed.
240
+ def laid?
241
+ return @laid if @laid
242
+
243
+ @laid = true
244
+ false
245
+ end
246
+
220
247
  end
221
248
 
222
249
  # call-seq:
data/lib/hen/dsl.rb CHANGED
@@ -33,41 +33,22 @@ class Hen
33
33
 
34
34
  extend self
35
35
 
36
- # call-seq:
37
- # hen.requires(*tasks)
38
- #
39
- # Specify a list of +tasks+ the hen requires to be present in
40
- # actual the Rakefile. In case one of those is not available,
41
- # a HenError::TaskRequired error is raised.
42
- def requires(*tasks)
43
- tasks.each { |task|
44
- raise HenError::TaskRequired.new(task) \
45
- unless Rake::Task.task_defined?(task)
46
- }
47
- end
48
-
49
- # call-seq:
50
- # hen.call(task)
51
- #
52
- # Short-cut to call Rake task +task+.
53
- def call(task)
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)
54
39
  Rake::Task[task].invoke.first.call
55
40
  end
56
41
 
57
- # call-seq:
58
- # hen.config
59
- #
60
42
  # The Hen configuration.
61
43
  def config
62
44
  Hen.config
63
45
  end
64
46
 
65
- # call-seq:
66
- # hen[key]
67
- #
68
- # Short-cut to the config.
69
- def [](key)
70
- config[key]
47
+ # Define task +t+, but overwrite any existing task of that name!
48
+ # (Rake usually just adds them up)
49
+ def task!(t, &block)
50
+ Rake.application.instance_variable_get(:@tasks).delete(t.to_s)
51
+ task(t, &block)
71
52
  end
72
53
 
73
54
  end
data/lib/hens/gem.rake CHANGED
@@ -1,96 +1,85 @@
1
1
  # Use RDOC_OPTIONS from 'rdoc.rake'
2
- Hen :gem => :rdoc do |hen|
3
- hen.requires :gem_spec
4
-
2
+ Hen :gem => :rdoc do
5
3
  require 'rake/gempackagetask'
6
4
 
7
- GEM_DEFAULTS = hen[:gem] unless Object.const_defined?(:GEM_DEFAULTS)
5
+ GEM_DEFAULTS = config[:gem] unless Object.const_defined?(:GEM_DEFAULTS)
8
6
 
9
- gem_options = GEM_DEFAULTS.merge(hen.call(:gem_spec))
7
+ # Merge defaults with user's spec
8
+ gem_options = GEM_DEFAULTS.merge(call_task(:gem_spec))
10
9
 
11
10
  if Object.const_defined?(:RDOC_OPTIONS)
12
11
  gem_options[:rdoc_options] ||= RDOC_OPTIONS[:options]
13
12
  rdoc_files = RDOC_OPTIONS[:rdoc_files]
14
13
  end
15
14
 
16
- spec = Gem::Specification.new { |gem_spec|
15
+ gem_spec = Gem::Specification.new { |spec|
16
+
17
+ ### dependencies
18
+
17
19
  (gem_options.delete(:dependencies) || []).each { |dependency|
18
- gem_spec.add_dependency(*dependency)
20
+ spec.add_dependency(*dependency)
19
21
  }
20
22
 
21
- if gem_options.has_key?(:version)
22
- gem_version = gem_options.delete(:version).dup
23
- else
24
- abort "Gem version missing"
25
- end
23
+ ### version
24
+
25
+ abort 'Gem version missing' unless gem_options[:version]
26
26
 
27
27
  if gem_options.delete(:append_svnversion) && svnversion = `svnversion`.chomp[/\d+/]
28
- gem_version << '.' << svnversion
28
+ gem_options[:version] << '.' << svnversion
29
29
  end
30
30
 
31
- gem_spec.version = gem_version
31
+ ### description
32
32
 
33
- if rubyforge_project = gem_options[:rubyforge_project]
34
- gem_spec.homepage = gem_options.delete(:homepage) ||
35
- "#{rubyforge_project}.rubyforge.org/#{gem_options[:name]}"
33
+ gem_options[:description] ||= gem_options[:summary]
34
+
35
+ ### homepage
36
+
37
+ if rf_project = gem_options[:rubyforge_project]
38
+ gem_options[:homepage] ||= "#{rf_project}.rubyforge.org/#{gem_options[:name]}"
36
39
  end
37
40
 
38
- files = gem_options.delete(:files) || []
39
- extra_files = gem_options.delete(:extra_files) || []
40
- executable_files = gem_options.delete(:executables) || files.grep(/\Abin\//)
41
+ ### extra_rdoc_files, files, executables, bindir
41
42
 
42
- unless executable_files.empty?
43
- gem_spec.executables = executable_files.map { |executable|
44
- File.basename(executable)
45
- }
43
+ gem_options[:files] ||= []
44
+ gem_options[:extra_rdoc_files] ||= rdoc_files - gem_options[:files] if rdoc_files
45
+ gem_options[:files] += gem_options.delete(:extra_files) || []
46
46
 
47
- gem_spec.bindir = File.dirname(executable_files.first)
48
- end
47
+ gem_options[:executables] ||= gem_options[:files].grep(/\Abin\//)
48
+ gem_options[:bindir] ||= File.dirname(gem_options[:executables].first)
49
49
 
50
- gem_spec.extra_rdoc_files = gem_options.delete(:extra_rdoc_files)
51
- gem_spec.extra_rdoc_files ||= rdoc_files - files if rdoc_files
50
+ gem_options[:executables].map! { |executable| File.basename(executable) }
52
51
 
53
- gem_spec.files = files + extra_files
52
+ ### => set options!
54
53
 
55
54
  gem_options.each { |option, value|
56
- gem_spec.send("#{option}=", value)
55
+ spec.send("#{option}=", value)
57
56
  }
58
57
  }
59
58
 
60
- Rake::GemPackageTask.new(spec) do |pkg|
61
- pkg.need_tar = true
59
+ desc "Display the gem specification"
60
+ task :debug_gem do
61
+ puts gem_spec.to_ruby
62
+ end
63
+
64
+ pkg_task = Rake::GemPackageTask.new(gem_spec) do |pkg|
65
+ pkg.need_tar_gz = true
66
+ pkg.need_zip = true
62
67
  end
63
68
 
64
- desc 'Upload latest gem to Rubyforge'
65
- task :upload_gem => :gem do
69
+ desc "Package and upload the release to Rubyforge"
70
+ task :release => :package do
66
71
  require 'rubyforge'
67
72
 
68
- rf = RubyForge.new
69
- rf.login
73
+ files = Dir[File.join('pkg', "#{pkg_task.package_name}.*")]
74
+ abort "Nothing to release!" if files.empty?
70
75
 
71
76
  # shorten to (at most) three digits
72
- version = spec.version.to_s.split(/([.])/)[0..4].join
77
+ version = pkg_task.version.to_s.split(/([.])/)[0..4].join
73
78
 
74
- latest_gem = Dir['pkg/*.gem'].sort_by { |gem|
75
- File.mtime(gem)
76
- }.last
77
-
78
- rf.add_release spec.rubyforge_project, spec.name, version, latest_gem
79
- end
80
-
81
- desc 'Upload latest gem to gem server'
82
- task :upload_gem_to_server => :gem do
83
- host = ENV['GEM_HOST'] || 'prometheus.khi.uni-koeln.de'
84
- user = ENV['GEM_USER'] || 'prometheus'
85
- path = ENV['GEM_PATH'] || '/var/www/rubygems'
86
- temp = ENV['GEM_TEMP'] || File.join(path, 'tmp')
87
-
88
- latest_gem = Dir['pkg/*.gem'].sort_by { |gem|
89
- File.mtime(gem)
90
- }.last
79
+ rf = RubyForge.new
80
+ rf.login
91
81
 
92
- sh "scp #{latest_gem} #{user}@#{host}:#{path}/gems"
93
- sh "ssh #{user}@#{host} 'TMPDIR='#{temp}' gem generate_index -d #{path} -V'"
82
+ rf.add_release gem_spec.rubyforge_project, pkg_task.name, version, *files
94
83
  end
95
84
 
96
85
  end
data/lib/hens/rdoc.rake CHANGED
@@ -1,12 +1,11 @@
1
- Hen :rdoc do |hen|
2
- hen.requires :doc_spec
3
-
1
+ Hen :rdoc do
4
2
  require 'rake/rdoctask'
5
3
 
6
- RDOC_DEFAULTS = hen[:rdoc] unless Object.const_defined?(:RDOC_DEFAULTS)
4
+ RDOC_DEFAULTS = config[:rdoc] unless Object.const_defined?(:RDOC_DEFAULTS)
7
5
 
8
6
  unless Object.const_defined?(:RDOC_OPTIONS)
9
- opts = RDOC_DEFAULTS.merge(hen.call(:doc_spec))
7
+ # Merge defaults with user's spec
8
+ opts = RDOC_DEFAULTS.merge(call_task(:doc_spec))
10
9
 
11
10
  RDOC_OPTIONS = {
12
11
  :rdoc_dir => opts.delete(:rdoc_dir),
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.144
4
+ version: 0.0.2.148
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2007-12-21 00:00:00 +01:00
12
+ date: 2008-01-04 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -21,14 +21,25 @@ dependencies:
21
21
  - !ruby/object:Gem::Version
22
22
  version: "0"
23
23
  version:
24
- description:
24
+ - !ruby/object:Gem::Dependency
25
+ name: ruby-nuggets
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: 0.0.3
32
+ version:
33
+ description: Hoe or Echoe? No, thanks! Just a Rake helper that fits my own personal style.
25
34
  email: jens.wille@uni-koeln.de
26
35
  executables:
27
36
  - hen
28
37
  extensions: []
29
38
 
30
- extra_rdoc_files: []
31
-
39
+ extra_rdoc_files:
40
+ - README
41
+ - COPYING
42
+ - ChangeLog
32
43
  files:
33
44
  - lib/hen/version.rb
34
45
  - lib/hen/dsl.rb
@@ -48,14 +59,14 @@ homepage: prometheus.rubyforge.org/hen
48
59
  post_install_message:
49
60
  rdoc_options:
50
61
  - --all
51
- - --line-numbers
62
+ - --charset
63
+ - UTF-8
64
+ - --title
65
+ - hen Application documentation
52
66
  - --main
53
67
  - README
68
+ - --line-numbers
54
69
  - --inline-source
55
- - --title
56
- - hen Application documentation
57
- - --charset
58
- - UTF-8
59
70
  require_paths:
60
71
  - lib
61
72
  required_ruby_version: !ruby/object:Gem::Requirement