hen 0.0.2.144 → 0.0.2.148

Sign up to get free protection for your applications and to get access to all the features.
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