active_schema 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +1 -0
- data/.document +11 -0
- data/.gitignore +48 -0
- data/.rspec +3 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +63 -0
- data/LICENSE +20 -0
- data/README.textile +80 -0
- data/Rakefile +59 -0
- data/VERSION +1 -0
- data/autotest/discover.rb +1 -0
- data/lib/active_schema.rb +30 -0
- data/lib/active_schema/active_record/base.rb +46 -0
- data/lib/active_schema/associations/by_foreign_key.rb +50 -0
- data/lib/active_schema/associations/generator.rb +25 -0
- data/lib/active_schema/configuration.rb +20 -0
- data/lib/active_schema/feeder.rb +45 -0
- data/lib/active_schema/in_advance_feeder.rb +10 -0
- data/lib/active_schema/on_the_fly_feeder.rb +26 -0
- data/lib/active_schema/schema_feeder.rb +41 -0
- data/lib/active_schema/table.rb +30 -0
- data/lib/active_schema/table_hub.rb +42 -0
- data/lib/active_schema/validations/by_column.rb +41 -0
- data/lib/active_schema/validations/by_index.rb +5 -0
- data/lib/active_schema/validations/generator.rb +45 -0
- data/nbproject/project.properties +7 -0
- data/nbproject/project.xml +15 -0
- data/spec/.rspec +1 -0
- data/spec/active_schema/active_record/base_spec.rb +118 -0
- data/spec/active_schema/associations/by_foreign_key_spec.rb +73 -0
- data/spec/active_schema/associations/generator_spec.rb +5 -0
- data/spec/active_schema/in_advance_feeder_spec.rb +25 -0
- data/spec/active_schema/on_the_fly_feeder_spec.rb +34 -0
- data/spec/active_schema/schema_feeder_spec.rb +111 -0
- data/spec/active_schema/table_hub_spec.rb +70 -0
- data/spec/active_schema/table_spec.rb +13 -0
- data/spec/active_schema/validations/by_column_spec.rb +47 -0
- data/spec/active_schema/validations/by_index_spec.rb +15 -0
- data/spec/active_schema/validations/generator_spec.rb +23 -0
- data/spec/active_schema_spec.rb +14 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/support/establish_connection.rb +8 -0
- data/spec/support/model_macros.rb +31 -0
- data/spec/support/test_models.rb +12 -0
- metadata +366 -0
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
include ActiveSchema::Associations
|
3
|
+
|
4
|
+
describe ActiveSchema::Associations::ByForeignKey do
|
5
|
+
def given_foreign_key(from_table, to_table, key_name, unique = false)
|
6
|
+
@from_model = mock("FakeFromModel",
|
7
|
+
:columns => [ActiveRecord::ConnectionAdapters::Column.new(key_name, nil, 'int(11)')],
|
8
|
+
:name => from_table.singularize.camelize
|
9
|
+
)
|
10
|
+
@to_model = mock("FakeToModel",
|
11
|
+
:name => to_table.singularize.camelize
|
12
|
+
)
|
13
|
+
@key_name = key_name
|
14
|
+
@unique = unique
|
15
|
+
end
|
16
|
+
after {
|
17
|
+
described_class.new(@from_model, @to_model, @key_name, @unique).generate
|
18
|
+
}
|
19
|
+
|
20
|
+
describe ActiveSchema::Associations::ByForwardForeignKey do
|
21
|
+
it "sets belongs_to" do
|
22
|
+
given_foreign_key('prisoners', 'facilities', 'facility_id')
|
23
|
+
@from_model.should_receive(:belongs_to)\
|
24
|
+
.with("facility", { :class_name => "Facility", :foreign_key => 'facility_id'})
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe ActiveSchema::Associations::ByReverseForeignKey do
|
29
|
+
context "Key column not unique" do
|
30
|
+
it "sets has_many" do
|
31
|
+
given_foreign_key('prisoners', 'facilities', 'facility_id')
|
32
|
+
@to_model.should_receive(:has_many)\
|
33
|
+
.with("prisoners", { :class_name => "Prisoner", :foreign_key => 'facility_id'})
|
34
|
+
end
|
35
|
+
end
|
36
|
+
context "Key column unique" do
|
37
|
+
it "sets has_one" do
|
38
|
+
given_foreign_key('prisoners', 'facilities', 'facility_id', true)
|
39
|
+
@to_model.should_receive(:has_one)\
|
40
|
+
.with("prisoner", { :class_name => "Prisoner", :foreign_key => 'facility_id'})
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe ActiveSchema::Associations::Naming do
|
48
|
+
before {
|
49
|
+
@naming = Class.new.send(:include, Naming).new
|
50
|
+
}
|
51
|
+
|
52
|
+
def given_model(model_name)
|
53
|
+
@model = mock(model_name, :name => model_name)
|
54
|
+
end
|
55
|
+
context "name_for" do
|
56
|
+
it "underscores camelized names" do
|
57
|
+
given_model("ABumpyBackModel")
|
58
|
+
@naming.name_for(@model).should == "a_bumpy_back_model"
|
59
|
+
end
|
60
|
+
|
61
|
+
it "strips module names" do
|
62
|
+
given_model("Hideously::Complicated::And::Convoluted::ClassHierarchy")
|
63
|
+
@naming.name_for(@model).should == "class_hierarchy"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context "plural_name_for" do
|
68
|
+
it "pluralizes name_for" do
|
69
|
+
given_model("BumpyBackModel")
|
70
|
+
@naming.plural_name_for(@model).should == "bumpy_back_models"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
include ActiveSchema
|
3
|
+
|
4
|
+
describe InAdvanceFeeder do
|
5
|
+
before(:each) do
|
6
|
+
@prisoner_model = prisoner_model
|
7
|
+
@in_advance_feeder = InAdvanceFeeder.new
|
8
|
+
@in_advance_feeder.stub!(:dispatch_attachments)
|
9
|
+
end
|
10
|
+
|
11
|
+
context "when a model is loaded" do
|
12
|
+
after { @in_advance_feeder.model_loaded(@prisoner_model) }
|
13
|
+
|
14
|
+
it "adds the model" do
|
15
|
+
@in_advance_feeder.table_hub.should_receive(:add_model).with(@prisoner_model)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "attaches associations and validations" do
|
19
|
+
@in_advance_feeder.should_receive(:dispatch_attachments)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
5
|
+
|
6
|
+
describe ActiveSchema::OnTheFlyFeeder do
|
7
|
+
before(:each) do
|
8
|
+
@on_the_fly_feeder = ActiveSchema::OnTheFlyFeeder.new
|
9
|
+
@prisoner_model = prisoner_model
|
10
|
+
@table_hub = @on_the_fly_feeder.table_hub
|
11
|
+
end
|
12
|
+
|
13
|
+
context "when a model is loaded" do
|
14
|
+
after { @on_the_fly_feeder.model_loaded(@prisoner_model) }
|
15
|
+
|
16
|
+
it "adds indexes to TableHub" do
|
17
|
+
@table_hub.should_receive(:add_index)\
|
18
|
+
.with(@prisoner_model.table_name, instance_of(ActiveRecord::ConnectionAdapters::IndexDefinition))
|
19
|
+
end
|
20
|
+
|
21
|
+
it "adds foreign keys to TableHub" do
|
22
|
+
@table_hub.should_receive(:add_foreign_key).with('prisoners', 'facilities', 'facility_id')
|
23
|
+
end
|
24
|
+
#
|
25
|
+
it "adds model to TableHub" do
|
26
|
+
@on_the_fly_feeder.stub!(:dispatch_attachments)
|
27
|
+
@table_hub.should_receive(:add_model).with(@prisoner_model)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "attaches associations and validations" do
|
31
|
+
@on_the_fly_feeder.should_receive(:dispatch_attachments)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
include ActiveSchema
|
4
|
+
describe SchemaFeeder do
|
5
|
+
before(:each) do
|
6
|
+
@table_hub = ActiveSchema::TableHub.new
|
7
|
+
@schema_feeder = SchemaFeeder.new
|
8
|
+
@schema_feeder.stub!(:table_hub).and_return(@table_hub)
|
9
|
+
end
|
10
|
+
|
11
|
+
context "add_index" do
|
12
|
+
after do
|
13
|
+
@schema_feeder.add_index "facilities", ["warden_id"], :name => "warden_id", :unique => true
|
14
|
+
end
|
15
|
+
|
16
|
+
it "adds an IndexDefinition to TableHub" do
|
17
|
+
@table_hub.should_receive(:add_index).with('facilities', instance_of(ActiveRecord::ConnectionAdapters::IndexDefinition))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "add_foreign_key" do
|
22
|
+
after do
|
23
|
+
@schema_feeder.add_foreign_key "facilities", "wardens", :name => "facilities_warden_id"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "guesses the foreign key column name if not supplied" do
|
27
|
+
@table_hub.should_receive(:add_foreign_key).with(anything, anything, "warden_id")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "adds a foreign key to TableHub" do
|
31
|
+
@table_hub.should_receive(:add_foreign_key).with('facilities', 'wardens', "warden_id")
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
context "reading the contents of a schema file" do
|
37
|
+
it "receives appropriate callbacks" do
|
38
|
+
@schema_feeder.should_receive(:add_index).exactly(4).times
|
39
|
+
@schema_feeder.should_receive(:add_foreign_key).exactly(3).times
|
40
|
+
@schema_feeder.read(EXAMPLE_SCHEMA)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe FilteredSchemaReader do
|
47
|
+
before do
|
48
|
+
@call_back = mock("SchemaFeeder")
|
49
|
+
@filtered_schema_reader = FilteredSchemaReader.new(@call_back, EXAMPLE_SCHEMA)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "contains only lines matching filter" do
|
53
|
+
@filtered_schema_reader.filtered_lines.size.should == 7
|
54
|
+
end
|
55
|
+
|
56
|
+
it "makes callbacks to the supplied object" do
|
57
|
+
@call_back.should_receive(:add_index).exactly(4).times
|
58
|
+
@call_back.should_receive(:add_foreign_key).exactly(3).times
|
59
|
+
@filtered_schema_reader.evaluate
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
#ActiveRecord::Schema.define(:version => 0)
|
64
|
+
|
65
|
+
EXAMPLE_SCHEMA = <<FILE
|
66
|
+
# This file is auto-generated from the current state of the database. Instead
|
67
|
+
# of editing this file, please use the migrations feature of Active Record to
|
68
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
69
|
+
#
|
70
|
+
# Note that this schema.rb definition is the authoritative source for your
|
71
|
+
# database schema. If you need to create the application database on another
|
72
|
+
# system, you should be using db:schema:load, not running all the migrations
|
73
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
74
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
75
|
+
#
|
76
|
+
# It's strongly recommended to check this file into your version control system.
|
77
|
+
|
78
|
+
ActiveRecord::Schema.define(:version => 0) do
|
79
|
+
|
80
|
+
create_table "facilities", :force => true do |t|
|
81
|
+
t.text "name", :null => false
|
82
|
+
t.integer "warden_id", :null => false
|
83
|
+
end
|
84
|
+
|
85
|
+
add_index "facilities", ["warden_id"], :name => "warden_id", :unique => true
|
86
|
+
|
87
|
+
create_table "prisoners", :force => true do |t|
|
88
|
+
t.text "name", :null => false
|
89
|
+
t.integer "facility_id", :null => false
|
90
|
+
end
|
91
|
+
|
92
|
+
add_index "prisoners", ["facility_id"], :name => "facility_id"
|
93
|
+
|
94
|
+
create_table "wardens", :primary_key => "facility_id", :force => true do |t|
|
95
|
+
t.integer "id", :null => false
|
96
|
+
t.text "name", :null => false
|
97
|
+
end
|
98
|
+
|
99
|
+
add_index "wardens", ["facility_id"], :name => "facility_id", :unique => true
|
100
|
+
add_index "wardens", ["id"], :name => "id"
|
101
|
+
|
102
|
+
add_foreign_key "facilities", "wardens", :name => "facilities_warden_id"
|
103
|
+
|
104
|
+
add_foreign_key "prisoners", "facilities", :name => "prisoners_facility_id"
|
105
|
+
|
106
|
+
add_foreign_key "wardens", "facilities", :name => "wardens_facility_id"
|
107
|
+
|
108
|
+
end
|
109
|
+
FILE
|
110
|
+
|
111
|
+
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe ActiveSchema::TableHub do
|
4
|
+
before(:each) do
|
5
|
+
@table_hub = ActiveSchema::TableHub.new
|
6
|
+
end
|
7
|
+
|
8
|
+
context "when adding a model" do
|
9
|
+
it "should have a table by the model's table name" do
|
10
|
+
@table_hub.add_model(prisoner_model)
|
11
|
+
@table_hub.tables.should have_key("prisoners")
|
12
|
+
end
|
13
|
+
|
14
|
+
context "and a table already exists" do
|
15
|
+
it "should not change the identity of the existing table object" do
|
16
|
+
@table_hub.add_model(prisoner_model)
|
17
|
+
@table_hub.add_foreign_key('prisoners', 'facilities', 'facility_id') # Makes a Table object for the 'facilities' table
|
18
|
+
facility_table = @table_hub.tables['facilities']
|
19
|
+
@table_hub.add_model(facility_model)
|
20
|
+
@table_hub.tables['facilities'].should equal(facility_table)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "links the model with the existing table" do
|
24
|
+
@table_hub.add_model(prisoner_model)
|
25
|
+
@table_hub.add_foreign_key('prisoners', 'facilities', 'facility_id') # Makes a Table object for the 'facilities' table
|
26
|
+
facility = facility_model
|
27
|
+
@table_hub.add_model(facility)
|
28
|
+
@table_hub.tables['facilities'].model.should == facility
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when adding a foreign key" do
|
34
|
+
it "should contain an entry for the destination table" do
|
35
|
+
@table_hub.add_model(prisoner_model)
|
36
|
+
@table_hub.add_foreign_key('prisoners', 'facilities', 'facility_id')
|
37
|
+
@table_hub.tables.should have_key("facilities")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "adds forward and reverse relations between tables" do
|
41
|
+
@table_hub.add_foreign_key('prisoners', 'facilities', 'facility_id')
|
42
|
+
@table_hub.relations['prisoners'].should include(@table_hub.tables['facilities'])
|
43
|
+
@table_hub.relations['facilities'].should include(@table_hub.tables['prisoners'])
|
44
|
+
end
|
45
|
+
|
46
|
+
it "adds a foreign key to the source table" do
|
47
|
+
@table_hub.add_model(prisoner_model)
|
48
|
+
prisoner_table = @table_hub.tables['prisoners']
|
49
|
+
prisoner_table.should_receive(:add_foreign_key)
|
50
|
+
@table_hub.add_foreign_key('prisoners', 'facilities', 'facility_id')
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when adding an index" do
|
56
|
+
it "should contain an entry for the indexed table" do
|
57
|
+
@table_hub.add_index('prisoners', mock("IndexObject"))
|
58
|
+
@table_hub.tables.should have_key("prisoners")
|
59
|
+
end
|
60
|
+
|
61
|
+
it "adds an index entry to the indexed table" do
|
62
|
+
@table_hub.add_model(prisoner_model)
|
63
|
+
index_obj = mock("IndexObject")
|
64
|
+
@table_hub.tables['prisoners'].should_receive(:add_index).with(index_obj)
|
65
|
+
@table_hub.add_index('prisoners', index_obj)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
5
|
+
|
6
|
+
describe ActiveSchema::Table do
|
7
|
+
describe "unique_index_on?" do
|
8
|
+
it "should be true if unique index" do
|
9
|
+
Warden.table_with_indexes.unique_index_on?('facility_id').should be_true
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe ActiveSchema::Validations::ByColumn do
|
4
|
+
after { described_class.new(@model, @column).generate }
|
5
|
+
|
6
|
+
def given_column(name, sql_type, null = true)
|
7
|
+
@model = double("FakeModel")
|
8
|
+
@column = ActiveRecord::ConnectionAdapters::Column.new(name, nil, sql_type, null)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe ActiveSchema::Validations::ByDataType do
|
12
|
+
|
13
|
+
it "accepts only integers when int(11)" do
|
14
|
+
given_column('digit', 'int(11)')
|
15
|
+
@model.should_receive(:validates_numericality_of)\
|
16
|
+
.with(:digit, {:allow_nil => true, :only_integer => true})
|
17
|
+
end
|
18
|
+
|
19
|
+
it "accepts only numbers when decimal(8,2)" do
|
20
|
+
given_column('number', 'decimal(8,2)')
|
21
|
+
@model.should_receive(:validates_numericality_of)\
|
22
|
+
.with(:number, {:allow_nil => true})
|
23
|
+
end
|
24
|
+
|
25
|
+
it "validates text length when varchar(255)" do
|
26
|
+
given_column('text', 'varchar(255)')
|
27
|
+
@model.should_receive(:validates_length_of)\
|
28
|
+
.with(:text, {:allow_nil => true, :maximum => 255})
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe ActiveSchema::Validations::ByNullability do
|
33
|
+
|
34
|
+
it "validates presence when varchar(255)" do
|
35
|
+
given_column('text', 'varchar(255)', false)
|
36
|
+
@model.should_receive(:validates_presence_of)\
|
37
|
+
.with(:text, {})
|
38
|
+
end
|
39
|
+
|
40
|
+
it "validates inclusion of when boolean" do
|
41
|
+
given_column('yes_or_no', 'boolean', false)
|
42
|
+
@model.should_receive(:validates_inclusion_of)\
|
43
|
+
.with(:yes_or_no, {:in => [true, false]})
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# To change this template, choose Tools | Templates
|
2
|
+
# and open the template in the editor.
|
3
|
+
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
5
|
+
|
6
|
+
describe ActiveSchema::Validations::ByIndex do
|
7
|
+
before(:each) do
|
8
|
+
@by_index = ActiveSchema::Validations::ByIndex
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should desc" do
|
12
|
+
# TODO
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe ActiveSchema::Validations::Generator do
|
4
|
+
before {
|
5
|
+
@prisoner_table = prisoner_table
|
6
|
+
@prisoner_model = @prisoner_table.model
|
7
|
+
}
|
8
|
+
|
9
|
+
it "is a healthy model" do
|
10
|
+
@prisoner_model.columns.should_not be_nil
|
11
|
+
end
|
12
|
+
|
13
|
+
it "skips validation for columns in given proc" do
|
14
|
+
@prisoner_model.should_not be_nil
|
15
|
+
skip_proc = proc{|column| column.name == "id" }
|
16
|
+
generator = ActiveSchema::Validations::Generator.new(@prisoner_table, skip_proc)
|
17
|
+
generator.generate
|
18
|
+
@prisoner_model.validators_on(:id).should be_empty
|
19
|
+
@prisoner_model.validators_on(:name).should_not be_empty
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "ActiveSchema" do
|
4
|
+
context "configuration" do
|
5
|
+
it "has configuration method" do
|
6
|
+
ActiveSchema.should respond_to :configuration
|
7
|
+
end
|
8
|
+
|
9
|
+
it "defaults to OnTheFlyFeeder" do
|
10
|
+
ActiveSchema.configuration.feeder.should be_instance_of(ActiveSchema::OnTheFlyFeeder)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spork'
|
3
|
+
|
4
|
+
Spork.prefork do
|
5
|
+
# Loading more in this block will cause your tests to run faster. However,
|
6
|
+
# if you change any configuration or code from libraries loaded here, you'll
|
7
|
+
# need to restart spork for it take effect.
|
8
|
+
require 'bundler'
|
9
|
+
begin
|
10
|
+
Bundler.setup(:default, :development)
|
11
|
+
rescue Bundler::BundlerError => e
|
12
|
+
$stderr.puts e.message
|
13
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
14
|
+
exit e.status_code
|
15
|
+
end
|
16
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
17
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
18
|
+
require 'rspec'
|
19
|
+
end
|
20
|
+
|
21
|
+
Spork.each_run do
|
22
|
+
require 'active_schema'
|
23
|
+
end
|
24
|
+
|
25
|
+
# Requires supporting files with custom matchers and macros, etc,
|
26
|
+
# in ./support/ and its subdirectories.
|
27
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
28
|
+
|
29
|
+
RSpec.configure do |c|
|
30
|
+
c.include(ModelMacros)
|
31
|
+
end
|