blueprints 0.6.1 → 0.6.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/VERSION +1 -1
- data/blueprints.gemspec +2 -2
- data/lib/blueprints.rb +19 -2
- data/lib/blueprints/buildable.rb +3 -4
- data/lib/blueprints/database_backends/active_record.rb +3 -1
- data/lib/blueprints/extensions/rspec.rb +14 -16
- data/lib/blueprints/plan.rb +2 -1
- data/spec/active_record/blueprint.rb +2 -1
- data/spec/active_record/blueprints_spec.rb +13 -1
- data/spec/active_record/spec_helper.rb +13 -6
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.2
|
data/blueprints.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{blueprints}
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Andrius Chamentauskas"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-07-03}
|
13
13
|
s.description = %q{Another replacement for factories and fixtures. The library that lazy typists will love}
|
14
14
|
s.email = %q{sinsiliux@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/blueprints.rb
CHANGED
@@ -3,7 +3,7 @@ files = %w{
|
|
3
3
|
context buildable namespace root_namespace plan file_context helper errors
|
4
4
|
database_backends/abstract database_backends/active_record database_backends/none
|
5
5
|
}
|
6
|
-
files << if defined? Spec or $0 =~ /script.spec$/
|
6
|
+
files << if defined? Spec or $0 =~ /script.spec$/ or defined? RSpec
|
7
7
|
'extensions/rspec'
|
8
8
|
else
|
9
9
|
'extensions/test_unit'
|
@@ -70,8 +70,22 @@ module Blueprints
|
|
70
70
|
@@orm.delete_tables(@@delete_policy, *tables)
|
71
71
|
end
|
72
72
|
|
73
|
+
def self.backtrace_cleaner
|
74
|
+
@backtrace_cleaner ||= ActiveSupport::BacktraceCleaner.new.tap do |bc|
|
75
|
+
root_sub = /^#{@@framework_root}[\\\/]/
|
76
|
+
blueprints_path = File.dirname(__FILE__).sub(root_sub, '')
|
77
|
+
|
78
|
+
bc.add_filter {|line| line.sub('(eval)', @@file) }
|
79
|
+
bc.add_filter {|line| line.sub(root_sub, '') }
|
80
|
+
|
81
|
+
bc.add_silencer {|line| File.dirname(line).starts_with?(blueprints_path) }
|
82
|
+
bc.add_silencer {|line| Gem.path.any? {|path| File.dirname(line).starts_with?(path) } }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
73
86
|
def self.warn(message, blueprint)
|
74
87
|
$stderr.puts("**WARNING** #{message}: '#{blueprint}'")
|
88
|
+
$stderr.puts(backtrace_cleaner.clean(caller).first)
|
75
89
|
end
|
76
90
|
|
77
91
|
protected
|
@@ -85,7 +99,10 @@ module Blueprints
|
|
85
99
|
|
86
100
|
patterns.each do |pattern|
|
87
101
|
unless (files = Dir.glob(pattern)).empty?
|
88
|
-
files.each
|
102
|
+
files.each do |f|
|
103
|
+
@@file = f
|
104
|
+
FileContext.module_eval File.read(f)
|
105
|
+
end
|
89
106
|
FileContext.evaluating = false
|
90
107
|
return
|
91
108
|
end
|
data/lib/blueprints/buildable.rb
CHANGED
@@ -30,13 +30,12 @@ module Blueprints
|
|
30
30
|
each_namespace {|namespace| namespace.build_parents }
|
31
31
|
build_parents
|
32
32
|
|
33
|
-
Namespace.root.context.options
|
34
|
-
Namespace.root.context.attributes = attributes.merge(options)
|
33
|
+
old_options, old_attributes = Namespace.root.context.options, Namespace.root.context.attributes
|
34
|
+
Namespace.root.context.options, Namespace.root.context.attributes = options, attributes.merge(options)
|
35
35
|
each_namespace {|namespace| Namespace.root.context.attributes.reverse_merge! namespace.attributes }
|
36
36
|
|
37
37
|
build_self(build_once).tap do
|
38
|
-
Namespace.root.context.options =
|
39
|
-
Namespace.root.context.attributes = {}
|
38
|
+
Namespace.root.context.options, Namespace.root.context.attributes = old_options, old_attributes
|
40
39
|
end
|
41
40
|
end
|
42
41
|
|
@@ -67,7 +67,9 @@ module Blueprints
|
|
67
67
|
if name_or_attrs.is_a?(Array)
|
68
68
|
name_or_attrs.collect { |attrs| blueprint(attrs) }
|
69
69
|
else
|
70
|
-
|
70
|
+
object = new
|
71
|
+
object.blueprint(name_or_attrs)
|
72
|
+
object
|
71
73
|
end
|
72
74
|
end
|
73
75
|
end
|
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
module Runner #:nodoc:
|
3
|
-
class Configuration
|
4
|
-
# Enables blueprints in rspec. Is automatically added if <tt>Spec</tt> is defined at loading time or <tt>script/spec</tt>
|
5
|
-
# is used. You might need to require it manually in certain case (eg. running specs from metrics).
|
6
|
-
# Accepts options hash. For supported options please check Blueprints.load.
|
7
|
-
def enable_blueprints(options = {})
|
8
|
-
Blueprints.load(options)
|
1
|
+
extend_class = defined?(RSpec) ? RSpec::Core::Configuration : Spec::Runner::Configuration
|
9
2
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
3
|
+
extend_class.class_eval do
|
4
|
+
# Enables blueprints in rspec. Is automatically added if <tt>Spec</tt> is defined at loading time or <tt>script/spec</tt>
|
5
|
+
# is used. You might need to require it manually in certain case (eg. running specs from metrics).
|
6
|
+
# Accepts options hash. For supported options please check Blueprints.load.
|
7
|
+
def enable_blueprints(options = {})
|
8
|
+
Blueprints.load(options)
|
9
|
+
|
10
|
+
include(Blueprints::Helper)
|
11
|
+
before do
|
12
|
+
Blueprints.setup(self)
|
13
|
+
end
|
14
|
+
after do
|
15
|
+
Blueprints.teardown
|
18
16
|
end
|
19
17
|
end
|
20
18
|
end
|
data/lib/blueprints/plan.rb
CHANGED
@@ -26,7 +26,8 @@ module Blueprints
|
|
26
26
|
# Changes blueprint block to build another blueprint by passing additional options to it. Usually used to dry up
|
27
27
|
# blueprints that are often built with some options.
|
28
28
|
def extends(parent, options)
|
29
|
-
|
29
|
+
attributes(options)
|
30
|
+
@block = Proc.new { build parent => attributes }
|
30
31
|
end
|
31
32
|
|
32
33
|
private
|
@@ -44,7 +44,8 @@ end
|
|
44
44
|
|
45
45
|
Fruit.blueprint(:acorn, :species => 'Acorn', :tree => d(:oak))
|
46
46
|
blueprint :small_acorn do
|
47
|
-
build :acorn => {:average_diameter => 1}
|
47
|
+
@small_acorn = build :acorn => {:average_diameter => 1}
|
48
|
+
@small_acorn_options = options
|
48
49
|
end
|
49
50
|
blueprint(:huge_acorn => :huge_oak).extends(:acorn, :average_diameter => 100)
|
50
51
|
|
@@ -365,6 +365,11 @@ describe Blueprints do
|
|
365
365
|
@small_acorn.should == @acorn
|
366
366
|
end
|
367
367
|
|
368
|
+
it "should not reset options after call to build" do
|
369
|
+
build :small_acorn => {:option => 'value'}
|
370
|
+
@small_acorn_options.should == {:option => 'value'}
|
371
|
+
end
|
372
|
+
|
368
373
|
it "should allow to use shortcut to extend blueprint" do
|
369
374
|
build :huge_acorn
|
370
375
|
@huge_acorn.average_diameter.should == 100
|
@@ -374,6 +379,11 @@ describe Blueprints do
|
|
374
379
|
build :huge_acorn
|
375
380
|
@huge_acorn.tree.size.should == 'huge'
|
376
381
|
end
|
382
|
+
|
383
|
+
it "should allow to pass options when building extended blueprint" do
|
384
|
+
build :huge_acorn => {:average_diameter => 200}
|
385
|
+
@huge_acorn.average_diameter.should == 200
|
386
|
+
end
|
377
387
|
end
|
378
388
|
|
379
389
|
it "should allow to build! without checking if it was already built" do
|
@@ -383,13 +393,15 @@ describe Blueprints do
|
|
383
393
|
end
|
384
394
|
|
385
395
|
it "should warn when blueprint with same name exists" do
|
386
|
-
|
396
|
+
STDERR.expects(:puts).with("**WARNING** Overwriting existing blueprint: 'overwritten'")
|
397
|
+
STDERR.expects(:puts).with(regexp_matches(/^blueprints_spec\.rb:\d+:in `new'$/))
|
387
398
|
Blueprints::Plan.new(:overwritten)
|
388
399
|
Blueprints::Plan.new(:overwritten)
|
389
400
|
end
|
390
401
|
|
391
402
|
it "should warn when building with options and blueprint is already built" do
|
392
403
|
STDERR.expects(:puts).with("**WARNING** Building with options, but blueprint was already built: 'big_cherry'")
|
404
|
+
STDERR.expects(:puts).with(regexp_matches(/^blueprints_spec\.rb:\d+$/))
|
393
405
|
build :big_cherry => {:species => 'some species'}
|
394
406
|
end
|
395
407
|
|
@@ -1,10 +1,9 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'fileutils'
|
3
|
+
require 'logger'
|
4
|
+
version = ENV['RAILS']
|
5
|
+
gem 'activerecord', version == '3' ? '>= 3.0.0.beta' : "~> #{version}" if version
|
3
6
|
require 'active_record'
|
4
|
-
begin
|
5
|
-
require 'mysqlplus'
|
6
|
-
rescue LoadError
|
7
|
-
end
|
8
7
|
|
9
8
|
Dir.chdir File.join(File.dirname(__FILE__), '..', '..')
|
10
9
|
|
@@ -14,12 +13,20 @@ databases = YAML::load(IO.read("spec/active_record/fixtures/database.yml"))
|
|
14
13
|
db_info = databases[ENV["DB"] || "test"]
|
15
14
|
ActiveRecord::Base.establish_connection(db_info)
|
16
15
|
|
17
|
-
|
16
|
+
config_class = if version.to_s[0, 1] == '3'
|
17
|
+
gem 'rspec', '>= 2.0.0.beta'
|
18
|
+
require 'rspec'
|
19
|
+
RSpec
|
20
|
+
else
|
21
|
+
require 'spec'
|
22
|
+
Spec::Runner
|
23
|
+
end
|
24
|
+
|
18
25
|
require 'lib/blueprints'
|
19
26
|
require 'spec/active_record/fixtures/fruit'
|
20
27
|
require 'spec/active_record/fixtures/tree'
|
21
28
|
|
22
|
-
|
29
|
+
config_class.configure do |config|
|
23
30
|
config.mock_with :mocha
|
24
31
|
config.enable_blueprints :root => File.expand_path(File.join(File.dirname(__FILE__))), :prebuild => :big_cherry
|
25
32
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blueprints
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 2
|
10
|
+
version: 0.6.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andrius Chamentauskas
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-07-03 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|