burke 0.2.0 → 0.2.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 (6) hide show
  1. data/README.rdoc +2 -15
  2. data/Rakefile +1 -7
  3. data/VERSION +1 -1
  4. data/lib/burke.rb +81 -37
  5. data/lib/mash.rb +24 -1
  6. metadata +5 -5
data/README.rdoc CHANGED
@@ -20,7 +20,6 @@ Here is a sample Rakefile using Burke.
20
20
 
21
21
  require 'rubygems'
22
22
  require 'burke'
23
- require 'fileutils'
24
23
 
25
24
  # Enable all tasks possible
26
25
  Burke.enable_all
@@ -30,10 +29,8 @@ Here is a sample Rakefile using Burke.
30
29
  s.name = 'foo'
31
30
  s.version = '1.2.3'
32
31
  s.summary = 'an example Ruby library with extra foo'
33
- s.files = FileList['lib/**/*.rb']
34
32
 
35
33
  s.docs do |d|
36
- d.readme = 'README'
37
34
  d.markup = 'rdoc'
38
35
  end
39
36
 
@@ -42,25 +39,15 @@ Here is a sample Rakefile using Burke.
42
39
 
43
40
  g.platform 'x86-linux' do |p|
44
41
  p.before do |s|
45
- FileUtils.copy 'native/libfoo-x86-linux.so', 'lib/libfoo.so'
42
+ cp 'native/libfoo-x86-linux.so', 'lib/libfoo.so'
46
43
  s.add_dependency 'ffi'
47
44
  s.files += ['lib/libfoo.so']
48
45
  end
49
46
 
50
47
  p.after do
51
- FileUtils.remove 'lib/libfoo.so'
48
+ rm 'lib/libfoo.so'
52
49
  end
53
50
  end
54
51
  end
55
52
  end
56
53
 
57
- == Default attributes
58
-
59
- * +version+ inferred from contents of 'VERSION' file
60
- * +files+ all files in 'lib' and 'spec' plus detected 'README', 'VERSION',
61
- 'LICENSE', 'COPYING' and/or 'Rakefile'
62
- * +docs.readme+ inferred from files matching 'README[\..*]?', case ignored
63
- * +docs.markup+ inferred from extension of detected README file
64
- * +rspec.spec_files+ 'spec/**/*_spec.rb'
65
- * +rspec.color+ true
66
-
data/Rakefile CHANGED
@@ -10,17 +10,11 @@ Burke.setup do |s|
10
10
  s.email = 'dismal.denizen@gmail.com'
11
11
  s.homepage = "http://github.com/dismaldenizen/burke"
12
12
 
13
- s.dependencies do |d|
14
- d.rake '~> 0.8.7'
15
- end
13
+ s.dependencies.rake '~> 0.8.7'
16
14
 
17
15
  s.has_rdoc = true
18
16
 
19
17
  s.clean = %w[.yardoc]
20
18
  s.clobber = %w[pkg doc html]
21
-
22
- s.gems do |g|
23
- g.platform 'ruby'
24
- end
25
19
  end
26
20
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
data/lib/burke.rb CHANGED
@@ -6,11 +6,12 @@ require 'mash'
6
6
 
7
7
  module Burke
8
8
  VERSION = File.read(File.join(File.dirname(File.dirname(__FILE__)), 'VERSION'))
9
+ ALL_TASKS = [:clean, :yard, :rdoc, :rspec, :rspec_rcov, :gems, :install, :test]
9
10
  @tasks = []
10
11
 
11
12
  class << self
12
13
  def enable_all opts={}
13
- @tasks = %w[clean yard rdoc rspec rspec_rcov gems install].map {|t| t.to_sym}
14
+ @tasks = ALL_TASKS.dup
14
15
  disable opts[:except] if opts[:except]
15
16
  end
16
17
 
@@ -29,61 +30,89 @@ module Burke
29
30
  :dependencies => Mash[],
30
31
  :docs => Mash[],
31
32
  :rspec => Mash[:rcov => Mash[]],
33
+ :test => Mash[],
32
34
  :gems => GemSettings.new,
33
35
  :clean => [],
34
36
  :clobber => [],
35
37
  ]
36
38
 
37
- @settings.files = Dir.glob('{lib,spec}/**/*')
38
- %w[Rakefile COPYING LICENSE].each do |file|
39
- @settings.files << file if File.exists?(file)
39
+ @settings.getter_filter :files do |v|
40
+ if v.nil?
41
+ v = Dir.glob('{lib,spec,bin}/**/*')
42
+ v << @settings.docs.readme
43
+ v << @settings.docs.license
44
+ v << 'Rakefile' if readable_file? 'Rakefile'
45
+ v << 'VERSION' if readable_file? 'VERSION'
46
+ v.compact
47
+ else
48
+ v
49
+ end
40
50
  end
41
51
 
42
- project_files = Dir['*'].reject! {|f| File.directory? f or !File.readable? f}
43
-
44
- version_file = 'VERSION'
45
- if File.readable?(version_file)
46
- @settings.version = File.read(version_file).strip
47
- @settings.files << version_file
52
+ @settings.getter_filter :version do |v|
53
+ if v.nil? and readable_file? 'VERSION'
54
+ File.read('VERSION').strip
55
+ else
56
+ v
57
+ end
48
58
  end
49
59
 
50
- license_file = nil
51
- project_files.each do |f|
52
- if %w[license licence copying].include? f.downcase.split('.').first
53
- license_file = f
60
+ @settings.docs.getter_filter :readme do |v|
61
+ if v.nil?
62
+ files = Dir.glob('{readme,readme.*}', File::FNM_CASEFOLD)
63
+ files.reject! { |f| !readable_file? f }
64
+ files.first
65
+ else
66
+ v
54
67
  end
55
68
  end
56
69
 
57
- if license_file
58
- @settings.docs.license = license_file
59
- @settings.files << license_file
70
+ @settings.docs.getter_filter :license do |v|
71
+ if v.nil?
72
+ files = Dir.glob('{license,license.*,copying,copying.*,licence,licence.*}', File::FNM_CASEFOLD)
73
+ files.reject! { |f| !readable_file? f }
74
+ files.first
75
+ else
76
+ v
77
+ end
60
78
  end
61
79
 
62
- readme_file = nil
63
- project_files.each do |f|
64
- if f.downcase =~ /readme[\..*]?/
65
- readme_file = f if readme_file.nil? or f.length < readme_file.length
80
+ @settings.docs.getter_filter :markup do |v|
81
+ readme = @settings.docs.readme
82
+ if v.nil? and readme
83
+ case File.extname(readme).downcase
84
+ when '.rdoc'
85
+ 'rdoc'
86
+ when '.md', '.markdown'
87
+ 'markdown'
88
+ when '.textile'
89
+ 'textile'
90
+ end
91
+ else
92
+ v
66
93
  end
67
94
  end
68
95
 
69
- if readme_file
70
- @settings.docs.readme = File.basename readme_file
71
- @settings.files << readme_file
72
- @settings.docs.markup = case File.extname(readme_file).downcase
73
- when '.rdoc'
74
- 'rdoc'
75
- when '.md'
76
- 'markdown'
77
- when '.textile'
78
- 'textile'
79
- end
96
+ @settings.test.getter_filter :test_files do |v|
97
+ v or Dir['test/**/{*_{test,tc},{test,tc}_*}.rb']
80
98
  end
81
99
 
82
- @settings.rspec.spec_files = Dir['spec/**/*_spec.rb']
83
- @settings.rspec.color = true
100
+ @settings.rspec.getter_filter :color do |v|
101
+ v.nil? ? true : v
102
+ end
103
+
104
+ @settings.rspec.getter_filter :spec_files do |v|
105
+ v or Dir['spec/**/*_spec.rb']
106
+ end
107
+
108
+ @settings.rspec.setter_filter(:ruby_opts) { |v| [*v] }
84
109
 
85
110
  yield @settings
86
111
 
112
+ if @tasks.include? :gems and GemTaskManager::TASKS.empty?
113
+ @settings.gems.platform 'ruby'
114
+ end
115
+
87
116
  begin
88
117
  require 'rake/clean'
89
118
  CLOBBER.include(*@settings.clobber) if @settings.clobber
@@ -143,7 +172,8 @@ module Burke
143
172
  Spec::Rake::SpecTask.new 'spec' do |t|
144
173
  t.spec_files = r.spec_files
145
174
  t.spec_opts = opts
146
- end unless r.empty?
175
+ t.ruby_opts = r.ruby_opts if r.ruby_opts
176
+ end
147
177
 
148
178
  begin
149
179
  require 'spec/rake/verify_rcov'
@@ -155,7 +185,8 @@ module Burke
155
185
  t.rcov = true
156
186
  t.rcov_opts = ['--exclude', 'spec']
157
187
  end
158
-
188
+
189
+ desc "Run specs with RCov and verify code coverage"
159
190
  RCov::VerifyTask.new('spec:rcov:verify' => 'spec:rcov') do |t|
160
191
  t.threshold = r.rcov.threshold
161
192
  t.index_html = 'coverage/index.html'
@@ -163,7 +194,15 @@ module Burke
163
194
  rescue LoadError
164
195
  end if @tasks.include? :rspec_rcov
165
196
  rescue LoadError
166
- end if @tasks.include? :rspec
197
+ end if @tasks.include? :rspec and !@settings.rspec.spec_files.empty?
198
+
199
+ begin
200
+ require 'rake/testtask'
201
+ Rake::TestTask.new do |t|
202
+ t.test_files = @settings.test.test_files
203
+ end
204
+ rescue LoadError
205
+ end if @tasks.include? :test and !@settings.test.test_files.empty?
167
206
 
168
207
  begin
169
208
  settings.gems.individuals.each do |conf|
@@ -208,6 +247,11 @@ module Burke
208
247
  def settings
209
248
  @settings
210
249
  end
250
+
251
+ private
252
+ def readable_file? file
253
+ File.readable? file and File.file? file
254
+ end
211
255
  end
212
256
 
213
257
  class GemTaskManager
data/lib/mash.rb CHANGED
@@ -1,4 +1,8 @@
1
1
  class Mash < Hash
2
+ def initialize *args, &block
3
+ super
4
+ end
5
+
2
6
  def method_missing name, *args, &block
3
7
  if name.to_s =~ /(.*)=/
4
8
  self.[]=($1, *args, &block)
@@ -12,14 +16,33 @@ class Mash < Hash
12
16
  end
13
17
 
14
18
  def []=(k, *v)
19
+ k = k.to_s.downcase.to_sym
15
20
  v = *v if v.one?
16
- super k.to_s.downcase.to_sym, v
21
+ v = setter_filters[k].call v if setter_filters.has_key? k
22
+ super k, v
17
23
  end
18
24
 
19
25
  def [](k)
20
26
  v = super(k.to_s.downcase.to_sym)
27
+ v = getter_filters[k].call v if getter_filters.has_key? k
21
28
  yield v if block_given?
22
29
  v
23
30
  end
31
+
32
+ def setter_filter key, &block
33
+ setter_filters[key.to_sym] = block
34
+ end
35
+
36
+ def getter_filter key, &block
37
+ getter_filters[key.to_sym] = block
38
+ end
39
+
40
+ def setter_filters
41
+ @setter_filters ||= {}
42
+ end
43
+
44
+ def getter_filters
45
+ @getter_filters ||= {}
46
+ end
24
47
  end
25
48
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 0
9
- version: 0.2.0
8
+ - 1
9
+ version: 0.2.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Aiden Nibali
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-24 00:00:00 +10:00
17
+ date: 2010-08-28 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -46,9 +46,9 @@ files:
46
46
  - lib/mash.rb
47
47
  - spec/spec_helper.rb
48
48
  - spec/mash_spec.rb
49
+ - README.rdoc
49
50
  - Rakefile
50
51
  - VERSION
51
- - README.rdoc
52
52
  has_rdoc: true
53
53
  homepage: http://github.com/dismaldenizen/burke
54
54
  licenses: []
@@ -56,7 +56,7 @@ licenses: []
56
56
  post_install_message:
57
57
  rdoc_options:
58
58
  - --title
59
- - burke 0.2.0
59
+ - burke 0.2.1
60
60
  - --main
61
61
  - README.rdoc
62
62
  require_paths: