burke 0.2.1 → 0.2.2

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
@@ -10,8 +10,6 @@ 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.rake '~> 0.8.7'
14
-
15
13
  s.has_rdoc = true
16
14
 
17
15
  s.clean = %w[.yardoc]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
data/lib/burke.rb CHANGED
@@ -1,8 +1,46 @@
1
1
  require 'rubygems'
2
- require 'rubygems/installer'
3
2
  require 'rake'
4
- require 'rake/tasklib'
5
- require 'mash'
3
+ require 'hashie'
4
+
5
+ class Smash < Hashie::Mash
6
+ def initialize *args
7
+ super
8
+ @read_filters = {}
9
+ @write_filters = {}
10
+ end
11
+
12
+ def method_missing name, *args
13
+ key = convert_key(name)
14
+ if key? key or @read_filters.key? key
15
+ value = self[key]
16
+ yield value if block_given?
17
+ value
18
+ else
19
+ super
20
+ end
21
+ end
22
+
23
+ def [](key)
24
+ filter = @read_filters[convert_key(key)]
25
+ value = super(key)
26
+ filter.nil? ? value : filter[value]
27
+ end
28
+
29
+ def []=(key, value)
30
+ filter = @write_filters[convert_key(key)]
31
+ value = filter[value] if filter
32
+ super(key, value)
33
+ end
34
+
35
+ def read_filter key, &block
36
+ key = convert_key(key)
37
+ @read_filters[key] = block
38
+ end
39
+
40
+ def write_filter key, &block
41
+ @write_filters[convert_key(key)] = block
42
+ end
43
+ end
6
44
 
7
45
  module Burke
8
46
  VERSION = File.read(File.join(File.dirname(File.dirname(__FILE__)), 'VERSION'))
@@ -26,86 +64,7 @@ module Burke
26
64
  end
27
65
 
28
66
  def setup
29
- @settings = Mash[
30
- :dependencies => Mash[],
31
- :docs => Mash[],
32
- :rspec => Mash[:rcov => Mash[]],
33
- :test => Mash[],
34
- :gems => GemSettings.new,
35
- :clean => [],
36
- :clobber => [],
37
- ]
38
-
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
50
- end
51
-
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
58
- end
59
-
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
67
- end
68
- end
69
-
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
78
- end
79
-
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
93
- end
94
- end
95
-
96
- @settings.test.getter_filter :test_files do |v|
97
- v or Dir['test/**/{*_{test,tc},{test,tc}_*}.rb']
98
- end
99
-
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] }
67
+ @settings = create_settings
109
68
 
110
69
  yield @settings
111
70
 
@@ -113,8 +72,15 @@ module Burke
113
72
  @settings.gems.platform 'ruby'
114
73
  end
115
74
 
75
+ generate_tasks
76
+
77
+ return @settings
78
+ end
79
+
80
+ def generate_tasks
116
81
  begin
117
82
  require 'rake/clean'
83
+ CLEAN.include(*@settings.clean) if @settings.clean
118
84
  CLOBBER.include(*@settings.clobber) if @settings.clobber
119
85
  rescue LoadError
120
86
  end if @tasks.include? :clean
@@ -167,8 +133,12 @@ module Burke
167
133
  require 'spec/rake/spectask'
168
134
  r = @settings.rspec
169
135
  opts = []
170
- opts << "--colour" if r.color
171
- opts << "--format" << r.format if r.format
136
+ if r.options_file
137
+ opts << "--options" << r.options_file
138
+ else
139
+ opts << "--colour" if r.color
140
+ opts << "--format" << r.format if r.format
141
+ end
172
142
  Spec::Rake::SpecTask.new 'spec' do |t|
173
143
  t.spec_files = r.spec_files
174
144
  t.spec_opts = opts
@@ -176,6 +146,7 @@ module Burke
176
146
  end
177
147
 
178
148
  begin
149
+ require 'rcov'
179
150
  require 'spec/rake/verify_rcov'
180
151
 
181
152
  desc "Run specs with RCov"
@@ -216,11 +187,11 @@ module Burke
216
187
  rescue LoadError
217
188
  end if @tasks.include? :gems
218
189
 
219
- if @tasks.include? :install
190
+ begin
191
+ require 'rubygems/installer'
220
192
  GemTaskManager.install_task unless GemTaskManager::TASKS.empty?
221
- end
222
-
223
- @settings
193
+ rescue LoadError
194
+ end if @tasks.include? :install
224
195
  end
225
196
 
226
197
  def base_gemspec
@@ -228,7 +199,7 @@ module Burke
228
199
  @base_gemspec = Gem::Specification.new
229
200
 
230
201
  attrs = Gem::Specification.attribute_names
231
- attrs -= [:dependencies]
202
+ attrs -= [:dependencies, :development_dependencies]
232
203
  attrs += [:author]
233
204
 
234
205
  attrs.each do |attr|
@@ -236,8 +207,12 @@ module Burke
236
207
  @base_gemspec.send("#{attr}=", value) if value
237
208
  end
238
209
 
239
- @settings.dependencies.each do |gem, version|
240
- @base_gemspec.add_dependency gem.to_s, version
210
+ @settings.dependencies.each do |gem, requirements|
211
+ @base_gemspec.add_dependency gem.to_s, *requirements
212
+ end
213
+
214
+ @settings.development_dependencies.each do |gem, requirements|
215
+ @base_gemspec.add_development_dependency gem.to_s, *requirements
241
216
  end
242
217
  end
243
218
 
@@ -248,10 +223,138 @@ module Burke
248
223
  @settings
249
224
  end
250
225
 
226
+ def create_settings
227
+ # TODO: put default values in getter filters
228
+ s = Smash.new
229
+ s.docs!
230
+ s.rspec!.rcov!
231
+ s.test!
232
+ s.gems = GemSettings.new
233
+ s.clean = []
234
+ s.clobber = []
235
+
236
+ s.read_filter :dependencies do |v|
237
+ if v.nil?
238
+ s.dependencies = Smash.new
239
+ v = s.dependencies
240
+ begin
241
+ require 'bundler'
242
+ bundler = Bundler.load
243
+ deps = bundler.dependencies_for(:runtime)
244
+ if deps.empty?
245
+ deps = bundler.dependencies_for(:default)
246
+ end
247
+ deps.each do |d|
248
+ v[d.name] = d.requirement.to_s
249
+ end
250
+ rescue
251
+ end
252
+ end
253
+ v
254
+ end
255
+
256
+ s.read_filter :development_dependencies do |v|
257
+ if v.nil?
258
+ s.development_dependencies = Smash.new
259
+ v = s.development_dependencies
260
+ begin
261
+ require 'bundler'
262
+ Bundler.load.dependencies_for(:development).each do |d|
263
+ v[d.name] = d.requirement.to_s
264
+ end
265
+ rescue
266
+ end
267
+ end
268
+ v
269
+ end
270
+
271
+ s.read_filter :files do |v|
272
+ if v.nil?
273
+ v = Dir['{lib,spec,bin}/**/*']
274
+ v << s.docs.readme_file
275
+ v << s.docs.license_file
276
+ v << s.version_file
277
+ v << s.rakefile_file
278
+ v.compact.freeze
279
+ else
280
+ v
281
+ end
282
+ end
283
+
284
+ s.read_filter :rakefile_file do |v|
285
+ v or find_file('rakefile').freeze
286
+ end
287
+
288
+ s.read_filter :version_file do |v|
289
+ v or find_file('version{.*,}').freeze
290
+ end
291
+
292
+ s.read_filter :version do |v|
293
+ if v.nil? and s.version_file
294
+ File.read(s.version_file).strip.freeze
295
+ else
296
+ v
297
+ end
298
+ end
299
+
300
+ s.docs.read_filter :readme_file do |v|
301
+ v or find_file('readme{.*,}').freeze
302
+ end
303
+ s.docs.read_filter(:readme) { s.docs.readme_file }
304
+ s.docs.write_filter(:readme) { |v| s.docs.readme_file = v }
305
+
306
+ s.docs.read_filter :license_file do |v|
307
+ v or find_file('{licen{c,s}e,copying}{.*,}').freeze
308
+ end
309
+ s.docs.read_filter(:license) { s.docs.license_file }
310
+ s.docs.write_filter(:license) { |v| s.docs.license_file = v }
311
+
312
+ s.docs.read_filter :markup do |v|
313
+ readme = s.docs.readme
314
+ if v.nil? and readme
315
+ case File.extname(readme).downcase
316
+ when '.rdoc'
317
+ 'rdoc'
318
+ when '.md', '.markdown'
319
+ 'markdown'
320
+ when '.textile'
321
+ 'textile'
322
+ end.freeze
323
+ else
324
+ v
325
+ end
326
+ end
327
+
328
+ s.test.read_filter :test_files do |v|
329
+ v or Dir['test/**/{*_{test,tc},{test,tc}_*}.rb'].freeze
330
+ end
331
+
332
+ s.rspec.read_filter :options_file do |v|
333
+ v or find_file('{{spec/,}{spec.opts,.specopts}}').freeze
334
+ end
335
+
336
+ s.rspec.read_filter :color do |v|
337
+ v.nil? ? true : v
338
+ end
339
+
340
+ s.rspec.read_filter :spec_files do |v|
341
+ v or Dir['spec/**/*_spec.rb'].freeze
342
+ end
343
+
344
+ s.rspec.write_filter(:ruby_opts) { |v| [*v] }
345
+
346
+ return s
347
+ end
348
+
251
349
  private
252
350
  def readable_file? file
253
351
  File.readable? file and File.file? file
254
352
  end
353
+
354
+ def find_file pattern
355
+ files = Dir.glob(pattern, File::FNM_CASEFOLD)
356
+ files.find { |f| readable_file? f }
357
+ end
255
358
  end
256
359
 
257
360
  class GemTaskManager
File without changes
File without changes
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'burke'
3
+
4
+ Burke.enable_all
5
+
6
+ Burke.setup do |s|
7
+ s.name = 'conventional_project'
8
+ s.summary = 'A sample project which follows conventions'
9
+ end
10
+
@@ -0,0 +1 @@
1
+ 1.2.3
File without changes
@@ -0,0 +1,36 @@
1
+ DIR = File.dirname(File.expand_path(__FILE__))
2
+ require File.join(DIR, 'spec_helper')
3
+
4
+ describe Burke do
5
+ describe 'settings' do
6
+ context 'for example of a conventional project' do
7
+ before do
8
+ @old_pwd = Dir.pwd
9
+ Dir.chdir File.join(DIR, 'conventional_project')
10
+ mock_burke_setup
11
+ eval(File.read('Rakefile'))
12
+ @settings = Burke.test_settings
13
+ end
14
+
15
+ subject { @settings }
16
+
17
+ its(:name) { should eql 'conventional_project' }
18
+
19
+ its(:version_file) { should eql 'VERSION' }
20
+ its(:rakefile_file) { should eql 'Rakefile' }
21
+
22
+ describe 'docs' do
23
+ subject { @settings.docs }
24
+ its(:readme_file) { should eql 'README.md' }
25
+ its(:license_file) { should eql 'COPYING' }
26
+ its(:markup) { should eql 'markdown' }
27
+ end
28
+
29
+ after do
30
+ unmock_burke_setup
31
+ Dir.chdir @old_pwd
32
+ end
33
+ end
34
+ end
35
+ end
36
+
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,25 @@
1
- require File.join(File.dirname(__FILE__), *%w[.. lib burke])
1
+ $LOAD_PATH << File.join(File.dirname(File.expand_path(__FILE__)), 'lib')
2
+ require 'burke'
3
+
4
+ def mock_burke_setup
5
+ Burke.module_eval do
6
+ class << self
7
+ attr_reader :test_settings
8
+ alias :old_setup :setup
9
+
10
+ def setup
11
+ @test_settings = create_settings
12
+ yield @test_settings
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ def unmock_burke_setup
19
+ Burke.module_eval do
20
+ class << self
21
+ alias :setup :old_setup
22
+ end
23
+ end
24
+ end
2
25
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Aiden Nibali
@@ -14,13 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-28 00:00:00 +10:00
17
+ date: 2010-09-26 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: rake
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
21
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
22
  requirements:
25
23
  - - ~>
26
24
  - !ruby/object:Gem::Version
@@ -29,26 +27,44 @@ dependencies:
29
27
  - 8
30
28
  - 7
31
29
  version: 0.8.7
30
+ requirement: *id001
31
+ prerelease: false
32
32
  type: :runtime
33
- version_requirements: *id001
33
+ name: rake
34
+ - !ruby/object:Gem::Dependency
35
+ version_requirements: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ~>
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ - 4
42
+ - 0
43
+ version: 0.4.0
44
+ requirement: *id002
45
+ prerelease: false
46
+ type: :runtime
47
+ name: hashie
34
48
  description:
35
49
  email: dismal.denizen@gmail.com
36
50
  executables: []
37
51
 
38
52
  extensions: []
39
53
 
40
- extra_rdoc_files:
41
- - lib/burke.rb
42
- - lib/mash.rb
43
- - README.rdoc
54
+ extra_rdoc_files: []
55
+
44
56
  files:
45
57
  - lib/burke.rb
46
- - lib/mash.rb
58
+ - spec/conventional_project_spec.rb
59
+ - spec/conventional_project/lib/main.rb
60
+ - spec/conventional_project/Rakefile
61
+ - spec/conventional_project/README.md
62
+ - spec/conventional_project/COPYING
63
+ - spec/conventional_project/VERSION
47
64
  - spec/spec_helper.rb
48
- - spec/mash_spec.rb
49
65
  - README.rdoc
50
- - Rakefile
51
66
  - VERSION
67
+ - Rakefile
52
68
  has_rdoc: true
53
69
  homepage: http://github.com/dismaldenizen/burke
54
70
  licenses: []
@@ -56,7 +72,7 @@ licenses: []
56
72
  post_install_message:
57
73
  rdoc_options:
58
74
  - --title
59
- - burke 0.2.1
75
+ - burke 0.2.2
60
76
  - --main
61
77
  - README.rdoc
62
78
  require_paths:
data/lib/mash.rb DELETED
@@ -1,48 +0,0 @@
1
- class Mash < Hash
2
- def initialize *args, &block
3
- super
4
- end
5
-
6
- def method_missing name, *args, &block
7
- if name.to_s =~ /(.*)=/
8
- self.[]=($1, *args, &block)
9
- else
10
- if args.empty?
11
- self.[](name, &block)
12
- else
13
- self.[]=(name, *args, &block)
14
- end
15
- end
16
- end
17
-
18
- def []=(k, *v)
19
- k = k.to_s.downcase.to_sym
20
- v = *v if v.one?
21
- v = setter_filters[k].call v if setter_filters.has_key? k
22
- super k, v
23
- end
24
-
25
- def [](k)
26
- v = super(k.to_s.downcase.to_sym)
27
- v = getter_filters[k].call v if getter_filters.has_key? k
28
- yield v if block_given?
29
- v
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
47
- end
48
-
data/spec/mash_spec.rb DELETED
@@ -1,11 +0,0 @@
1
- require File.join(File.dirname(File.expand_path(__FILE__)), 'spec_helper')
2
-
3
- describe Mash do
4
- context "when representing {:num => 42}" do
5
- subject { Mash[:num => 42] }
6
- its(:num) { should eql 42 }
7
- its(:size) { should eql 1 }
8
- its(:to_hash) { should eql :num => 42 }
9
- end
10
- end
11
-