to_factory 0.0.3 → 0.1.0

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 (67) hide show
  1. data/.gitignore +6 -0
  2. data/.rspec +2 -1
  3. data/.travis.yml +23 -0
  4. data/Gemfile +3 -13
  5. data/README.md +59 -20
  6. data/Rakefile +20 -14
  7. data/bin/ci +2 -0
  8. data/bin/spec +2 -0
  9. data/lib/to_factory/collation.rb +34 -0
  10. data/lib/to_factory/config.rb +18 -0
  11. data/lib/to_factory/definition_group.rb +47 -0
  12. data/lib/to_factory/file_sync.rb +48 -0
  13. data/lib/to_factory/file_writer.rb +39 -0
  14. data/lib/to_factory/finders/factory.rb +17 -0
  15. data/lib/to_factory/finders/model.rb +47 -0
  16. data/lib/to_factory/generation/attribute.rb +52 -0
  17. data/lib/to_factory/generation/factory.rb +74 -0
  18. data/lib/to_factory/parsing/file.rb +38 -0
  19. data/lib/to_factory/parsing/new_syntax.rb +9 -0
  20. data/lib/to_factory/parsing/old_syntax.rb +9 -0
  21. data/lib/to_factory/parsing/syntax.rb +86 -0
  22. data/lib/to_factory/version.rb +1 -1
  23. data/lib/to_factory.rb +55 -1
  24. data/spec/db/migrate/{201108201012010100_create_users.rb → 1_create_users.rb} +0 -0
  25. data/spec/db/migrate/2_create_projects.rb +13 -0
  26. data/spec/db/migrate/3_create_not_namespaced.rb +11 -0
  27. data/spec/db/migrate/4_add_birthday_to_users.rb +9 -0
  28. data/spec/example_factories/new_syntax/admin.rb +6 -0
  29. data/spec/example_factories/new_syntax/admin_with_header.rb +8 -0
  30. data/spec/example_factories/new_syntax/project_with_header.rb +7 -0
  31. data/spec/example_factories/new_syntax/user.rb +6 -0
  32. data/spec/example_factories/new_syntax/user_admin.rb +13 -0
  33. data/spec/example_factories/new_syntax/user_admin_with_header.rb +15 -0
  34. data/spec/example_factories/new_syntax/user_with_header.rb +8 -0
  35. data/spec/example_factories/old_syntax/admin.rb +6 -0
  36. data/spec/example_factories/old_syntax/project_with_header.rb +5 -0
  37. data/spec/example_factories/old_syntax/user.rb +6 -0
  38. data/spec/example_factories/old_syntax/user_admin.rb +13 -0
  39. data/spec/example_factories/old_syntax/user_admin_with_header.rb +13 -0
  40. data/spec/example_factories/old_syntax/user_with_header.rb +6 -0
  41. data/spec/integration/config_spec.rb +19 -0
  42. data/spec/integration/file_sync_spec.rb +77 -0
  43. data/spec/integration/file_writer_spec.rb +16 -0
  44. data/spec/integration/generate_class_method_spec.rb +107 -0
  45. data/spec/integration/lint_spec.rb +16 -0
  46. data/spec/spec_helper.rb +90 -14
  47. data/spec/support/match_sexp.rb +24 -0
  48. data/spec/support/models/not_active_record.rb +2 -0
  49. data/spec/support/models/project.rb +3 -0
  50. data/spec/support/models/user.rb +3 -0
  51. data/spec/support/terse_expect_syntax.rb +23 -0
  52. data/spec/unit/collation_spec.rb +35 -0
  53. data/spec/unit/definition_group_spec.rb +19 -0
  54. data/spec/unit/file_writer_spec.rb +28 -0
  55. data/spec/unit/finders/factory_spec.rb +27 -0
  56. data/spec/unit/finders/model_spec.rb +28 -0
  57. data/spec/unit/generator_spec.rb +71 -0
  58. data/spec/unit/parsing/file_spec.rb +83 -0
  59. data/tmp/.keep +0 -0
  60. data/to_factory.gemspec +49 -22
  61. metadata +225 -25
  62. data/.rvmrc +0 -1
  63. data/Gemfile.lock +0 -113
  64. data/lib/to_factory/generator.rb +0 -115
  65. data/spec/config/database.yml +0 -2
  66. data/spec/db/test.sqlite +0 -0
  67. data/spec/generator_spec.rb +0 -166
@@ -0,0 +1,86 @@
1
+ module ToFactory
2
+ module Parsing
3
+ class Syntax
4
+ attr_accessor :contents
5
+
6
+ def initialize(contents)
7
+ @contents = contents
8
+ end
9
+
10
+ def multiple_factories?
11
+ factories_sexp[0] == :block
12
+ end
13
+
14
+ def parse
15
+ result = {}
16
+ @klass_inference = KlassInference.new
17
+
18
+ parse_multiple do |factory_name, parent_name, ruby|
19
+ klass = @klass_inference.infer(factory_name, parent_name)
20
+ result[klass] ||= {}
21
+ result[klass][factory_name] = ruby
22
+ end
23
+
24
+ result
25
+ end
26
+
27
+ def factories
28
+ if multiple_factories?
29
+ factories_sexp[1..-1]
30
+ else
31
+ [factories_sexp]
32
+ end
33
+ end
34
+
35
+ def factories_sexp
36
+ header? ? sexp[3] : sexp
37
+ end
38
+
39
+ def parse_multiple(&block)
40
+ factories.each do |x|
41
+ yield name_from(x), parent_from(x), to_ruby(x)
42
+ end
43
+ end
44
+
45
+ def parent_from(x)
46
+ x[1][-1][-1][-1] rescue name_from(x)
47
+ end
48
+
49
+ def name_from(sexp)
50
+ sexp[1][3][1]
51
+ end
52
+
53
+ private
54
+
55
+ def to_ruby(sexp)
56
+ ruby2ruby.process sexp.deep_clone
57
+ end
58
+
59
+ def sexp
60
+ @sexp ||= ruby_parser.process(@contents)
61
+ end
62
+
63
+ def ruby2ruby
64
+ @ruby2ruby ||= Ruby2Ruby.new
65
+ end
66
+
67
+ def ruby_parser
68
+ @ruby_parseer ||= RubyParser.new
69
+ end
70
+
71
+ class KlassInference
72
+ def initialize
73
+ @mapping = {}
74
+ end
75
+
76
+ def infer(klass, parent_klass=nil)
77
+ @mapping[klass] ||= klass.to_s.camelize.constantize
78
+ rescue
79
+ infer(parent_klass)
80
+ end
81
+ end
82
+
83
+
84
+ end
85
+ end
86
+ end
@@ -1,3 +1,3 @@
1
1
  module ToFactory
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/to_factory.rb CHANGED
@@ -1,2 +1,56 @@
1
+ require "deep_merge"
2
+
1
3
  require "to_factory/version"
2
- require "to_factory/generator"
4
+ require "to_factory/config"
5
+ require "to_factory/generation/factory"
6
+ require "to_factory/generation/attribute"
7
+ require "to_factory/collation"
8
+ require "to_factory/file_writer"
9
+ require "to_factory/finders/model"
10
+ require "to_factory/finders/factory"
11
+ require "to_factory/definition_group"
12
+ require "to_factory/file_sync"
13
+ require "to_factory/parsing/file"
14
+
15
+ module ToFactory
16
+ class MissingActiveRecordInstanceException < Exception;end
17
+
18
+ class << self
19
+ def new_syntax?
20
+ require "factory_girl"
21
+ if FactoryGirl::VERSION.to_s[0..0].to_i > 1
22
+ true
23
+ else
24
+ false
25
+ end
26
+ rescue NameError, ArgumentError
27
+ false
28
+ end
29
+ end
30
+ end
31
+
32
+ public
33
+
34
+ def ToFactory(args=nil)
35
+ exclusions = if args.is_a?(Hash)
36
+ exclusions = Array(args.delete(:exclude) || [])
37
+ args = nil if args.keys.length == 0
38
+ exclusions
39
+ else
40
+ []
41
+ end
42
+
43
+ meth = ToFactory::FileSync.method(:new)
44
+ sync = args ? meth.call(args) : meth.call
45
+
46
+ sync.perform(exclusions)
47
+ end
48
+
49
+ if defined?(Rails)
50
+ unless Rails.respond_to?(:configuration)
51
+ #FactoryGirl 1.3.x expects this method, but it isn't defined in Rails 2.0.2
52
+ def Rails.configuration
53
+ OpenStruct.new
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,13 @@
1
+ class CreateProjects < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :projects do |t|
4
+ t.column :name, :string, :null => false
5
+ t.column :objective, :string
6
+ t.integer :some_id
7
+ end
8
+ end
9
+
10
+ def self.down
11
+ drop_table :projects
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ class CreateNotNamespaced < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :not_namespaced_active_record_class_but_long_enough_it_shouldnt_cause_conflicts do |t|
4
+ t.column :name, :string, :null => false
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :not_namespaced_active_record_class_but_long_enough_it_shouldnt_cause_conflicts
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ class AddBirthdayToUsers < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :users, :birthday, :datetime
4
+ end
5
+
6
+ def self.down
7
+ remove_column :users, :birthday
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ factory(:admin, :parent => :"to_factory/user") do
2
+ birthday "2014-07-08T15:30Z"
3
+ email "admin@example.com"
4
+ name "Admin"
5
+ some_id 9
6
+ end
@@ -0,0 +1,8 @@
1
+ FactoryGirl.define do
2
+ factory(:admin, :parent => :"to_factory/user") do
3
+ birthday "2014-07-08T15:30Z"
4
+ email "admin@example.com"
5
+ name "Admin"
6
+ some_id 9
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory(:"to_factory/project") do
3
+ name "My Project"
4
+ objective "easy testing"
5
+ some_id 9
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ factory(:"to_factory/user") do
2
+ birthday "2014-07-08T15:30Z"
3
+ email "test@example.com"
4
+ name "Jeff"
5
+ some_id 8
6
+ end
@@ -0,0 +1,13 @@
1
+ factory(:"to_factory/user") do
2
+ birthday "2014-07-08T15:30Z"
3
+ email "test@example.com"
4
+ name "Jeff"
5
+ some_id 8
6
+ end
7
+
8
+ factory(:admin, :parent => :"to_factory/user") do
9
+ birthday "2014-07-08T15:30Z"
10
+ email "admin@example.com"
11
+ name "Admin"
12
+ some_id 9
13
+ end
@@ -0,0 +1,15 @@
1
+ FactoryGirl.define do
2
+ factory(:"to_factory/user") do
3
+ birthday "2014-07-08T15:30Z"
4
+ email "test@example.com"
5
+ name "Jeff"
6
+ some_id 8
7
+ end
8
+
9
+ factory(:admin, :parent => :"to_factory/user") do
10
+ birthday "2014-07-08T15:30Z"
11
+ email "admin@example.com"
12
+ name "Admin"
13
+ some_id 9
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ FactoryGirl.define do
2
+ factory(:"to_factory/user") do
3
+ birthday "2014-07-08T15:30Z"
4
+ email "test@example.com"
5
+ name "Jeff"
6
+ some_id 8
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ Factory.define(:admin, :parent => :"to_factory/user") do |o|
2
+ o.birthday "2014-07-08T15:30Z"
3
+ o.email "admin@example.com"
4
+ o.name "Admin"
5
+ o.some_id 9
6
+ end
@@ -0,0 +1,5 @@
1
+ Factory.define(:"to_factory/project") do |o|
2
+ o.name "My Project"
3
+ o.objective "easy testing"
4
+ o.some_id 9
5
+ end
@@ -0,0 +1,6 @@
1
+ Factory.define(:"to_factory/user") do |o|
2
+ o.birthday "2014-07-08T15:30Z"
3
+ o.email "test@example.com"
4
+ o.name "Jeff"
5
+ o.some_id 8
6
+ end
@@ -0,0 +1,13 @@
1
+ Factory.define(:"to_factory/user") do |o|
2
+ o.birthday "2014-07-08T15:30Z"
3
+ o.email "test@example.com"
4
+ o.name "Jeff"
5
+ o.some_id 8
6
+ end
7
+
8
+ Factory.define(:admin, :parent => :"to_factory/user") do |o|
9
+ o.birthday "2014-07-08T15:30Z"
10
+ o.email "admin@example.com"
11
+ o.name "Admin"
12
+ o.some_id 9
13
+ end
@@ -0,0 +1,13 @@
1
+ Factory.define(:"to_factory/user") do |o|
2
+ o.birthday "2014-07-08T15:30Z"
3
+ o.email "test@example.com"
4
+ o.name "Jeff"
5
+ o.some_id 8
6
+ end
7
+
8
+ Factory.define(:admin, :parent => :"to_factory/user") do |o|
9
+ o.birthday "2014-07-08T15:30Z"
10
+ o.email "admin@example.com"
11
+ o.name "Admin"
12
+ o.some_id 9
13
+ end
@@ -0,0 +1,6 @@
1
+ Factory.define(:"to_factory/user") do |o|
2
+ o.birthday "2014-07-08T15:30Z"
3
+ o.email "test@example.com"
4
+ o.name "Jeff"
5
+ o.some_id 8
6
+ end
@@ -0,0 +1,19 @@
1
+ describe "ToFactory Configuration" do
2
+ before do
3
+ ToFactory.reset_config!
4
+ end
5
+
6
+ it do
7
+ expect(ToFactory.factories).to eq "./spec/factories"
8
+ ToFactory.factories = "factories dir"
9
+
10
+ expect(ToFactory.factories).to eq "factories dir"
11
+ end
12
+
13
+ it do
14
+ expect(ToFactory.models).to eq "./app/models"
15
+ ToFactory.models = "models dir"
16
+
17
+ expect(ToFactory.models).to eq "models dir"
18
+ end
19
+ end
@@ -0,0 +1,77 @@
1
+ describe "FileSync" do
2
+ let(:user) { create_user! }
3
+ let(:admin) { create_admin! }
4
+ let(:project) { create_project! }
5
+ let(:version) { ToFactory.new_syntax? ? "new" : "old"}
6
+ let(:expected_user_file) { File.read("./spec/example_factories/#{version}_syntax/user.rb") }
7
+ let(:expected_user_with_header_file) { File.read("./spec/example_factories/#{version}_syntax/user_with_header.rb") }
8
+ let(:expected_admin_file) { File.read("./spec/example_factories/#{version}_syntax/admin.rb") }
9
+ let(:user_with_header) { File.read("./spec/example_factories/#{version}_syntax/user_with_header.rb") }
10
+ let(:user_admin_with_header) { File.read("./spec/example_factories/#{version}_syntax/user_admin_with_header.rb") }
11
+
12
+
13
+ before do
14
+ FileUtils.rm_rf "./tmp/factories"
15
+ end
16
+
17
+ def user_file
18
+ File.read("./tmp/factories/to_factory/user.rb") rescue nil
19
+ end
20
+
21
+ def project_file
22
+ File.read("./tmp/factories/to_factory/project.rb") rescue nil
23
+ end
24
+
25
+
26
+ context "with no arguments" do
27
+ before do
28
+ user
29
+ admin
30
+ end
31
+
32
+ it "finds the first existing instance" do
33
+ sync = ToFactory::FileSync.new
34
+ sync.perform
35
+
36
+ expect(user_file ).to match_sexp expected_user_with_header_file
37
+ end
38
+ end
39
+
40
+ context "with an instance" do
41
+ it "writes that instance" do
42
+ sync = ToFactory::FileSync.new(user)
43
+ sync.perform
44
+
45
+ expect(user_file ).to match_sexp user_with_header
46
+ expect(project_file).to eq nil
47
+ end
48
+ end
49
+
50
+ context "with a pre-existing file" do
51
+ let(:sync) { ToFactory::FileSync.new(user) }
52
+ before do
53
+ sync.perform
54
+ expect(user_file).to match_sexp user_with_header
55
+ end
56
+
57
+ it "raises an error" do
58
+ expect(lambda{ sync.perform }).to raise_error ToFactory::AlreadyExists
59
+ end
60
+
61
+ context "with a named factory" do
62
+ it do
63
+ sync = ToFactory::FileSync.new({:admin => admin})
64
+ sync.perform
65
+
66
+ parser = ToFactory::Parsing::File.new(user_file)
67
+ result = parser.parse[ToFactory::User]
68
+ expect(result[:admin]).to match_sexp expected_admin_file
69
+ expect(result[:"to_factory/user"]).to match_sexp expected_user_file
70
+
71
+ expect(lambda{
72
+ sync.perform
73
+ }).to raise_error ToFactory::AlreadyExists
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,16 @@
1
+ describe ToFactory::FileWriter do
2
+ let(:fw) { ToFactory::FileWriter.new }
3
+ let(:expected) { File.read "./spec/example_factories/#{version}_syntax/user_with_header.rb"}
4
+ let(:user_file_contents) { File.read "./tmp/factories/to_factory/user.rb"}
5
+ let!(:user) { create_user! }
6
+ let!(:admin) { create_admin! }
7
+ it do
8
+ fs = ToFactory::FileSync.new
9
+ definitions = fs.new_definitions
10
+ #sanity check generation isn't broken
11
+ expect(definitions.keys).to eq [ToFactory::User]
12
+
13
+ fw.write definitions
14
+ expect(user_file_contents).to match_sexp expected
15
+ end
16
+ end
@@ -0,0 +1,107 @@
1
+ describe ToFactory do
2
+ let!(:user) { create_user! }
3
+ let!(:project) { create_project!}
4
+
5
+ before { FileUtils.rm_rf "./tmp/factories" }
6
+
7
+ def user_file
8
+ File.read("./tmp/factories/to_factory/user.rb") rescue nil
9
+ end
10
+
11
+ def project_file
12
+ File.read("./tmp/factories/to_factory/project.rb") rescue nil
13
+ end
14
+
15
+ let(:expected_user_file) { File.read "./spec/example_factories/#{version}_syntax/user_with_header.rb"}
16
+ let(:expected_project_file) { File.read "./spec/example_factories/#{version}_syntax/project_with_header.rb"}
17
+
18
+ describe "Object#ToFactory" do
19
+ it "generates all factories" do
20
+ ToFactory()
21
+ expect(user_file) .to match_sexp expected_user_file
22
+ expect(project_file).to match_sexp expected_project_file
23
+ end
24
+
25
+ def user_file_includes(content)
26
+ expect(user_file).to include content
27
+ end
28
+
29
+ context "excluding classes" do
30
+ before do
31
+ user
32
+ project
33
+ end
34
+
35
+ it "ignores specified classes" do
36
+ ToFactory(:exclude => ToFactory::User)
37
+ expect(user_file).to be_nil
38
+ expect(project_file).to be_present
39
+ end
40
+
41
+ it "ignores specified classes - sanity check" do
42
+ ToFactory(:exclude => ToFactory::Project)
43
+ expect(user_file).to be_present
44
+ expect(project_file).to be_nil
45
+ end
46
+
47
+ it "doesn't auto generate any if :all is specified" do
48
+ ToFactory(:exclude => :all)
49
+ expect(user_file).to be_nil
50
+ expect(project_file).to be_nil
51
+
52
+ #sanity check
53
+ ToFactory()
54
+ expect(user_file).to be_present
55
+ expect(project_file).to be_present
56
+ end
57
+ end
58
+
59
+ context "with no existing file" do
60
+ it "creates the file" do
61
+ expect(user_file).to be_nil
62
+ ToFactory(user)
63
+ expect(user_file).to be_present
64
+ end
65
+
66
+ context "with single ActiveRecord::Base instance argument" do
67
+ it "creates the file" do
68
+ expect(user_file).to be_nil
69
+ ToFactory(user)
70
+ expect(user_file).to be_present
71
+ end
72
+ end
73
+ end
74
+
75
+ context "with an existing file" do
76
+ before do
77
+ expect(user_file).to be_nil
78
+ ToFactory(user)
79
+ expect(user_file).to be_present
80
+ end
81
+
82
+ context "with a name for the factory" do
83
+ it "appends to the file" do
84
+ if ToFactory.new_syntax?
85
+ user_file_includes('factory(:"to_factory/user"')
86
+ else
87
+ user_file_includes('Factory.define(:"to_factory/user"')
88
+ end
89
+
90
+ ToFactory(:specific_user => user)
91
+ if ToFactory.new_syntax?
92
+ user_file_includes('factory(:specific_user, :parent => :"to_factory/user"')
93
+ else
94
+ user_file_includes('Factory.define(:specific_user, :parent => :"to_factory/user"')
95
+ end
96
+
97
+
98
+ end
99
+ end
100
+
101
+ it "without a name" do
102
+ expect(lambda{ToFactory(user)}).
103
+ to raise_error ToFactory::AlreadyExists
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,16 @@
1
+ context "full integration" do
2
+ let(:user) do
3
+ ToFactory::User.create :name => "Jeff", :email => "test@example.com", :some_id => 8, :birthday => Time.now
4
+ end
5
+
6
+ it "#to_factory linting the output" do
7
+ if ToFactory.new_syntax?
8
+ ToFactory(user)
9
+
10
+ load "./tmp/factories/to_factory/user.rb"
11
+
12
+ FactoryGirl.lint
13
+ end
14
+ end
15
+ end
16
+
data/spec/spec_helper.rb CHANGED
@@ -1,17 +1,93 @@
1
- require 'rubygems'
2
- require 'spork'
3
- require 'spork/ext/ruby-debug'
4
-
5
- Spork.prefork do
6
- require 'active_record'
7
- require 'rspec'
8
- require 'yaml'
9
- require 'fileutils'
10
- require 'ruby-debug'
11
- require 'active_support/core_ext/string'
12
- require 'active_support/core_ext/hash'
1
+ begin
2
+ require "codeclimate-test-reporter"
3
+ CodeClimate::TestReporter.start
4
+ rescue LoadError
5
+ #ignore on ruby 1.8.x
13
6
  end
14
7
 
15
- Spork.each_run do
16
- Dir['lib/**/*.rb'].each{|f| require f unless f=="lib/to_factory/version.rb"}
8
+ require 'active_record'
9
+ require 'fileutils'
10
+ require 'active_support/core_ext/string'
11
+ require 'active_support/core_ext/hash'
12
+ require "sqlite3"
13
+ require "database_cleaner"
14
+
15
+ begin
16
+ require "pry-byebug"
17
+ rescue LoadError
18
+ begin
19
+ require "ruby-debug"
20
+ rescue LoadError
21
+ $stderr.puts "No debugger available for #{RUBY_VERSION}"
22
+ end
23
+ end
24
+
25
+ require "to_factory"
26
+
27
+ require "./spec/support/models/user"
28
+ require "./spec/support/models/project"
29
+ require "./spec/support/terse_expect_syntax"
30
+ require "./spec/support/match_sexp"
31
+
32
+ module ToFactory::DataCreation
33
+ def create_all!
34
+ create_user!
35
+ create_admin!
36
+ end
37
+
38
+ def create_project!
39
+ ToFactory::Project.create({:name => "My Project", :objective => "easy testing", :some_id => 9 })
40
+ end
41
+
42
+ def birthday
43
+ Time.find_zone("UTC").parse("2014-07-08T15:30Z")
44
+ end
45
+
46
+ def create_user!
47
+ ToFactory::User.create :name => "Jeff", :email => "test@example.com", :some_id => 8, :birthday => birthday
48
+ end
49
+
50
+ def create_admin!
51
+ ToFactory::User.create :name => "Admin", :email => "admin@example.com", :some_id => 9, :birthday => birthday
52
+ end
53
+ end
54
+
55
+ module ToFactory::SpecSyntaxHelpers
56
+ def version
57
+ ToFactory.new_syntax? ? "new" : "old"
58
+ end
59
+ end
60
+
61
+ RSpec.configure do |config|
62
+ config.include TerseExpectSyntax
63
+ config.include ToFactory::DataCreation
64
+ config.include ToFactory::SpecSyntaxHelpers
65
+
66
+ config.before :suite do
67
+ ActiveRecord::Base.tap do |base|
68
+ config = {:adapter => "sqlite3", :database => "spec/db/test.sqlite3"}
69
+ base.configurations = {:test => config}.with_indifferent_access
70
+ base.establish_connection :test
71
+ end
72
+
73
+ DatabaseCleaner.strategy = :truncation
74
+ DatabaseCleaner.clean_with(:truncation)
75
+ DatabaseCleaner.start
76
+ end
77
+
78
+ config.before(:each) do
79
+ FileUtils.rm_rf "tmp/factories"
80
+ DatabaseCleaner.clean
81
+ ToFactory.reset_config!
82
+ ToFactory.models = "./spec/support/models"
83
+ ToFactory.factories = "./tmp/factories"
84
+ end
85
+
86
+ config.expect_with :rspec do |expectations|
87
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
88
+ end
89
+
90
+ config.mock_with :rspec do |mocks|
91
+ mocks.verify_partial_doubles = true
92
+ end
17
93
  end