burke 0.2.1 → 0.2.2

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