to_factory 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -0
- data/README.md +8 -11
- data/lib/to_factory/collation.rb +40 -14
- data/lib/to_factory/file_sync.rb +9 -7
- data/lib/to_factory/file_writer.rb +21 -11
- data/lib/to_factory/finders/factory.rb +12 -6
- data/lib/to_factory/finders/model.rb +25 -9
- data/lib/to_factory/generation/attribute.rb +35 -17
- data/lib/to_factory/generation/factory.rb +32 -24
- data/lib/to_factory/klass_inference.rb +50 -0
- data/lib/to_factory/options_parser.rb +34 -0
- data/lib/to_factory/parsing/file.rb +1 -0
- data/lib/to_factory/parsing/syntax.rb +6 -17
- data/lib/to_factory/representation.rb +27 -0
- data/lib/to_factory/version.rb +1 -1
- data/lib/to_factory.rb +4 -4
- data/spec/example_factories/new_syntax/user_admin_root.rb +21 -0
- data/spec/example_factories/new_syntax/user_admin_super_admin.rb +4 -4
- data/spec/example_factories/old_syntax/user_admin_root.rb +21 -0
- data/spec/example_factories/old_syntax/user_admin_super_admin.rb +4 -3
- data/spec/integration/file_sync_spec.rb +9 -3
- data/spec/integration/file_writer_spec.rb +5 -3
- data/spec/integration/to_factory_method_spec.rb +17 -11
- data/spec/unit/collation_spec.rb +25 -18
- data/spec/unit/file_writer_spec.rb +4 -2
- data/spec/unit/finders/factory_spec.rb +2 -3
- data/spec/unit/generator_spec.rb +13 -16
- data/spec/unit/parsing/file_spec.rb +10 -11
- data/spec/unit/parsing/klass_inference_spec.rb +15 -16
- data/to_factory.gemspec +0 -1
- metadata +21 -32
- data/lib/to_factory/definition_group.rb +0 -47
- data/lib/to_factory/parsing/klass_inference.rb +0 -34
- data/spec/unit/definition_group_spec.rb +0 -19
@@ -1,4 +1,8 @@
|
|
1
1
|
FactoryGirl.define do
|
2
|
+
factory(:"to_factory/user") do
|
3
|
+
name "User"
|
4
|
+
end
|
5
|
+
|
2
6
|
factory(:admin, :parent => :"to_factory/user") do
|
3
7
|
name "Admin"
|
4
8
|
end
|
@@ -6,8 +10,4 @@ FactoryGirl.define do
|
|
6
10
|
factory(:super_admin, :parent => :admin) do
|
7
11
|
name "Super Admin"
|
8
12
|
end
|
9
|
-
|
10
|
-
factory(:"to_factory/user") do
|
11
|
-
name "User"
|
12
|
-
end
|
13
13
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Factory.define(:"to_factory/user") do |o|
|
2
|
+
o.name("User")
|
3
|
+
end
|
4
|
+
|
5
|
+
Factory.define(:root, :parent => :"to_factory/user") do |o|
|
6
|
+
o.birthday "2014-07-08T15:30Z"
|
7
|
+
o.email "test@example.com"
|
8
|
+
o.name "Jeff"
|
9
|
+
o.some_attributes({:a => 1})
|
10
|
+
o.some_id 8
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
Factory.define(:admin, :parent => :"to_factory/user") do |o|
|
15
|
+
o.name("Admin")
|
16
|
+
end
|
17
|
+
|
18
|
+
Factory.define(:super_admin, :parent => :admin) do |o|
|
19
|
+
o.name("Super Admin")
|
20
|
+
end
|
21
|
+
|
@@ -1,3 +1,7 @@
|
|
1
|
+
Factory.define(:"to_factory/user") do |o|
|
2
|
+
o.name "User"
|
3
|
+
end
|
4
|
+
|
1
5
|
Factory.define(:admin, :parent => :"to_factory/user") do |o|
|
2
6
|
o.name "Admin"
|
3
7
|
end
|
@@ -6,6 +10,3 @@ Factory.define(:super_admin, :parent => :admin) do |o|
|
|
6
10
|
o.name "Super Admin"
|
7
11
|
end
|
8
12
|
|
9
|
-
Factory.define(:"to_factory/user") do |o|
|
10
|
-
o.name "User"
|
11
|
-
end
|
@@ -47,6 +47,8 @@ describe "FileSync" do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
|
51
|
+
|
50
52
|
context "with a pre-existing file" do
|
51
53
|
let(:sync) { ToFactory::FileSync.new(user) }
|
52
54
|
before do
|
@@ -64,9 +66,13 @@ describe "FileSync" do
|
|
64
66
|
sync.perform
|
65
67
|
|
66
68
|
parser = ToFactory::Parsing::File.new(user_file)
|
67
|
-
result = parser.parse
|
68
|
-
|
69
|
-
|
69
|
+
result = parser.parse
|
70
|
+
admin= result.find{|r| r.name == "admin"}
|
71
|
+
user= result.find{|r| r.name == "to_factory/user"}
|
72
|
+
|
73
|
+
|
74
|
+
expect(admin.definition).to match_sexp expected_admin_file
|
75
|
+
expect(user.definition).to match_sexp expected_user_file
|
70
76
|
|
71
77
|
expect(lambda{
|
72
78
|
sync.perform
|
@@ -4,13 +4,15 @@ describe ToFactory::FileWriter do
|
|
4
4
|
let(:user_file_contents) { File.read "./tmp/factories/to_factory/user.rb"}
|
5
5
|
let!(:user) { create_user! }
|
6
6
|
let!(:admin) { create_admin! }
|
7
|
+
|
7
8
|
it do
|
8
9
|
fs = ToFactory::FileSync.new
|
9
|
-
|
10
|
+
representations = fs.all_representations
|
10
11
|
#sanity check generation isn't broken
|
11
|
-
expect(
|
12
|
+
expect(representations.keys).to eq [ToFactory::User]
|
13
|
+
expect(representations.values[0][0]).to be_a ToFactory::Representation
|
12
14
|
|
13
|
-
fw.write
|
15
|
+
fw.write representations
|
14
16
|
expect(user_file_contents).to match_sexp expected
|
15
17
|
end
|
16
18
|
end
|
@@ -24,6 +24,23 @@ describe ToFactory do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
describe "Object#ToFactory" do
|
27
|
+
context "with multiple levels of parent classes" do
|
28
|
+
let(:filename) { "spec/example_factories/#{version}_syntax/#{'user_admin_super_admin'}.rb"}
|
29
|
+
|
30
|
+
it "gets the output order correct" do
|
31
|
+
output = "./tmp/factories/to_factory/user.rb"
|
32
|
+
`mkdir -p ./tmp/factories/to_factory`
|
33
|
+
`cp #{filename} #{output}`
|
34
|
+
|
35
|
+
ToFactory(:root => user)
|
36
|
+
|
37
|
+
expected = File.read "spec/example_factories/#{version}_syntax/#{'user_admin_root'}.rb"
|
38
|
+
|
39
|
+
#user, admin, super_admin, root
|
40
|
+
expect(File.read(output)).to match_sexp expected
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
27
44
|
it "generates all factories" do
|
28
45
|
ToFactory()
|
29
46
|
expect(user_file) .to match_sexp expected_user_file
|
@@ -51,17 +68,6 @@ describe ToFactory do
|
|
51
68
|
expect(user_file).to be_present
|
52
69
|
expect(project_file).to be_nil
|
53
70
|
end
|
54
|
-
|
55
|
-
it "doesn't auto generate any if :all is specified" do
|
56
|
-
ToFactory(:exclude => :all)
|
57
|
-
expect(user_file).to be_nil
|
58
|
-
expect(project_file).to be_nil
|
59
|
-
|
60
|
-
#sanity check
|
61
|
-
ToFactory()
|
62
|
-
expect(user_file).to be_present
|
63
|
-
expect(project_file).to be_present
|
64
|
-
end
|
65
71
|
end
|
66
72
|
|
67
73
|
context "with no existing file" do
|
data/spec/unit/collation_spec.rb
CHANGED
@@ -1,34 +1,41 @@
|
|
1
1
|
describe ToFactory::Collation do
|
2
|
-
|
3
|
-
ToFactory::Collation.
|
4
|
-
|
2
|
+
describe "detect_collisions!" do
|
3
|
+
let(:collation) { ToFactory::Collation.new(a,b) }
|
4
|
+
let(:a) { [double(:name => "a")]}
|
5
|
+
let(:b) { [double(:name => "a")]}
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
def perform
|
8
|
+
collation.detect_collisions!(a, b)
|
9
|
+
end
|
9
10
|
|
10
11
|
it do
|
11
12
|
expect(lambda{perform}).to raise_error ToFactory::AlreadyExists
|
12
13
|
end
|
13
|
-
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
context "non matching keys" do
|
16
|
+
let(:a) { [double(:name => "a")]}
|
17
|
+
let(:b) { [double(:name => "b")]}
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
it do
|
20
|
+
expect(perform).to eq nil
|
21
|
+
end
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
context "
|
26
|
-
let(:
|
27
|
-
let(:
|
25
|
+
context "organizing" do
|
26
|
+
let(:root) { ToFactory::Representation.new(:root, "super_admin", " Factory.define(:root, :parent => :\"to_factory/user\") do|o|\n o.birthday \"2014-07-08T15:30Z\"\n o.email \"test@example.com\"\n o.name \"Jeff\"\n o.some_id 8\n end\n") }
|
27
|
+
let(:user) { ToFactory::Representation.new("to_factory/user", nil, "Factory.define(:\"to_factory/user\") { |o| o.name(\"User\") }") }
|
28
|
+
let(:admin) { ToFactory::Representation.new("admin", "to_factory/user", "Factory.define(:admin, :parent => :\"to_factory/user\") { |o| o.name(\"Admin\") }") }
|
29
|
+
let(:super_admin) { ToFactory::Representation.new("super_admin", "admin", "Factory.define(:super_admin, :parent => :admin) { |o| o.name(\"Super Admin\") }") }
|
28
30
|
|
29
31
|
it do
|
30
|
-
|
31
|
-
|
32
|
+
new_definitions = [ root ]
|
33
|
+
pre_existing = [ admin, user, super_admin ]
|
34
|
+
|
35
|
+
result = ToFactory::Collation.organize(new_definitions, pre_existing)
|
36
|
+
result = result[ToFactory::User]
|
37
|
+
expect(result.map &:hierarchy_order).to eq [1,2,3,4]
|
38
|
+
expect(result).to eq [user, admin, super_admin, root]
|
32
39
|
end
|
33
40
|
end
|
34
41
|
end
|
@@ -11,8 +11,10 @@ describe ToFactory::FileWriter do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "adds factories for all models" do
|
14
|
-
|
15
|
-
|
14
|
+
user_representation = double :name => :user, "definition" => "factory a"
|
15
|
+
project_representation = double :name => "project", :definition =>"factory b"
|
16
|
+
fw.write({ToFactory::User =>[user_representation],
|
17
|
+
ToFactory::Project => [project_representation]
|
16
18
|
})
|
17
19
|
|
18
20
|
if ToFactory.new_syntax?
|
@@ -13,12 +13,11 @@ describe ToFactory::Finders::Factory do
|
|
13
13
|
finder = ToFactory::Finders::Factory.new
|
14
14
|
|
15
15
|
result = finder.call
|
16
|
-
result = result[ToFactory::User]
|
17
16
|
|
18
|
-
expect(result[
|
17
|
+
expect(result[0].definition).
|
19
18
|
to match_sexp user_file_contents
|
20
19
|
|
21
|
-
expect(result[
|
20
|
+
expect(result[1].definition).
|
22
21
|
to match_sexp admin_file_contents
|
23
22
|
end
|
24
23
|
end
|
data/spec/unit/generator_spec.rb
CHANGED
@@ -10,26 +10,23 @@ describe ToFactory::Generation::Factory do
|
|
10
10
|
|
11
11
|
let!(:user) { create_user! }
|
12
12
|
|
13
|
-
let(:
|
13
|
+
let(:representation) { ToFactory::Representation.from(user) }
|
14
|
+
let(:generator) { ToFactory::Generation::Factory.new representation }
|
15
|
+
|
14
16
|
|
15
|
-
describe ".new" do
|
16
|
-
it "requires an activerecord instance" do
|
17
|
-
expect(lambda{ToFactory::Generation::Factory.new "", ""}).to raise_error ToFactory::MissingActiveRecordInstanceException
|
18
|
-
end
|
19
|
-
end
|
20
17
|
|
21
18
|
describe "#header" do
|
22
19
|
it do
|
23
20
|
if ToFactory.new_syntax?
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
expect(generator.header{}).to match_sexp <<-eof.strip_heredoc
|
22
|
+
factory(:"to_factory/user") do
|
23
|
+
end
|
24
|
+
eof
|
28
25
|
else
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
expect(generator.header{}).to match_sexp <<-eof.strip_heredoc
|
27
|
+
Factory.define(:"to_factory/user") do |o|
|
28
|
+
end
|
29
|
+
eof
|
33
30
|
end
|
34
31
|
end
|
35
32
|
end
|
@@ -64,8 +61,8 @@ describe ToFactory::Generation::Factory do
|
|
64
61
|
|
65
62
|
it do
|
66
63
|
expect(generator.to_factory).to match_sexp expected
|
67
|
-
result = ToFactory(user).values.first.
|
68
|
-
expect(result).to match_sexp expected
|
64
|
+
result = ToFactory(user).values.first.first
|
65
|
+
expect(result.definition).to match_sexp expected
|
69
66
|
end
|
70
67
|
end
|
71
68
|
end
|
@@ -42,7 +42,7 @@ describe ToFactory::Parsing::File do
|
|
42
42
|
it do
|
43
43
|
result = parser.parse
|
44
44
|
|
45
|
-
expect(result
|
45
|
+
expect(result.map(&:name)).to match_array ["super_admin", "admin", "to_factory/user"]
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -50,9 +50,9 @@ describe ToFactory::Parsing::File do
|
|
50
50
|
let(:filename) { "spec/example_factories/#{version}_syntax/#{'user'}.rb"}
|
51
51
|
|
52
52
|
it do
|
53
|
-
result = parser.parse
|
53
|
+
result = parser.parse
|
54
54
|
|
55
|
-
expect(result
|
55
|
+
expect(result.first.definition).to match_sexp user_contents
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -60,9 +60,9 @@ describe ToFactory::Parsing::File do
|
|
60
60
|
let(:filename) { "spec/example_factories/#{version}_syntax/#{'user_with_header'}.rb"}
|
61
61
|
|
62
62
|
it do
|
63
|
-
result = parser.parse
|
63
|
+
result = parser.parse
|
64
64
|
|
65
|
-
expect(result
|
65
|
+
expect(result.first.definition).to match_sexp user_contents
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -72,11 +72,10 @@ describe ToFactory::Parsing::File do
|
|
72
72
|
it do
|
73
73
|
result = parser.parse
|
74
74
|
|
75
|
-
|
76
|
-
users = result[ToFactory::User]
|
75
|
+
user, admin = result
|
77
76
|
|
78
|
-
expect(
|
79
|
-
expect(
|
77
|
+
expect(user.definition).to match_sexp user_contents
|
78
|
+
expect(admin.definition).to match_sexp admin_contents
|
80
79
|
end
|
81
80
|
end
|
82
81
|
|
@@ -84,9 +83,9 @@ describe ToFactory::Parsing::File do
|
|
84
83
|
let(:filename) { "spec/example_factories/#{version}_syntax/#{'user_admin_with_header'}.rb"}
|
85
84
|
|
86
85
|
it do
|
87
|
-
result = parser.parse
|
86
|
+
result = parser.parse
|
88
87
|
|
89
|
-
expect(result
|
88
|
+
expect(result.first.definition).to match_sexp user_contents
|
90
89
|
end
|
91
90
|
end
|
92
91
|
end
|
@@ -1,24 +1,23 @@
|
|
1
|
-
describe ToFactory::
|
2
|
-
let(:inference) { ToFactory::
|
1
|
+
describe ToFactory::KlassInference do
|
2
|
+
let(:inference) { ToFactory::KlassInference.new representations }
|
3
3
|
|
4
|
-
mappings =
|
5
|
-
[:
|
6
|
-
[:
|
7
|
-
[:
|
8
|
-
[:
|
9
|
-
[:"
|
4
|
+
mappings = [
|
5
|
+
[:super_admin, :admin, ToFactory::User, 3],
|
6
|
+
[:"to_factory/user", nil, ToFactory::User, 1],
|
7
|
+
[:admin, :"to_factory/user", ToFactory::User, 2],
|
8
|
+
[:some_project, :"to_factory/project", ToFactory::Project, 2],
|
9
|
+
[:sub_project, :"some_project", ToFactory::Project, 3],
|
10
|
+
]
|
10
11
|
|
11
12
|
|
12
|
-
|
13
|
+
let(:representations) { mappings.map{|name, parent, _| ToFactory::Representation.new(name,parent) }}
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
15
|
+
mappings.each do |name, parent_name, expected_klass, expected_order|
|
16
|
+
it "having #{name} and #{parent_name.inspect} implies #{expected_klass} #{expected_order} "do
|
17
|
+
result_klass, order = inference.infer(name.to_s)
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
result = inference.infer(klass)
|
21
|
-
expect(result).to eq expected
|
19
|
+
expect(result_klass).to eq expected_klass
|
20
|
+
expect(order ).to eq expected_order
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
data/to_factory.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: to_factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mark Burns
|
@@ -77,24 +77,10 @@ dependencies:
|
|
77
77
|
version: "0"
|
78
78
|
type: :runtime
|
79
79
|
version_requirements: *id004
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: deep_merge
|
82
|
-
prerelease: false
|
83
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
84
|
-
none: false
|
85
|
-
requirements:
|
86
|
-
- - ">="
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
hash: 3
|
89
|
-
segments:
|
90
|
-
- 0
|
91
|
-
version: "0"
|
92
|
-
type: :runtime
|
93
|
-
version_requirements: *id005
|
94
80
|
- !ruby/object:Gem::Dependency
|
95
81
|
name: activerecord
|
96
82
|
prerelease: false
|
97
|
-
requirement: &
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
98
84
|
none: false
|
99
85
|
requirements:
|
100
86
|
- - ">"
|
@@ -112,11 +98,11 @@ dependencies:
|
|
112
98
|
- 0
|
113
99
|
version: "4.0"
|
114
100
|
type: :runtime
|
115
|
-
version_requirements: *
|
101
|
+
version_requirements: *id005
|
116
102
|
- !ruby/object:Gem::Dependency
|
117
103
|
name: i18n
|
118
104
|
prerelease: false
|
119
|
-
requirement: &
|
105
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
120
106
|
none: false
|
121
107
|
requirements:
|
122
108
|
- - <
|
@@ -127,11 +113,11 @@ dependencies:
|
|
127
113
|
- 7
|
128
114
|
version: "0.7"
|
129
115
|
type: :runtime
|
130
|
-
version_requirements: *
|
116
|
+
version_requirements: *id006
|
131
117
|
- !ruby/object:Gem::Dependency
|
132
118
|
name: factory_girl
|
133
119
|
prerelease: false
|
134
|
-
requirement: &
|
120
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
135
121
|
none: false
|
136
122
|
requirements:
|
137
123
|
- - <
|
@@ -142,11 +128,11 @@ dependencies:
|
|
142
128
|
- 0
|
143
129
|
version: "2.0"
|
144
130
|
type: :development
|
145
|
-
version_requirements: *
|
131
|
+
version_requirements: *id007
|
146
132
|
- !ruby/object:Gem::Dependency
|
147
133
|
name: rspec
|
148
134
|
prerelease: false
|
149
|
-
requirement: &
|
135
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
150
136
|
none: false
|
151
137
|
requirements:
|
152
138
|
- - ~>
|
@@ -157,11 +143,11 @@ dependencies:
|
|
157
143
|
- 0
|
158
144
|
version: "3.0"
|
159
145
|
type: :development
|
160
|
-
version_requirements: *
|
146
|
+
version_requirements: *id008
|
161
147
|
- !ruby/object:Gem::Dependency
|
162
148
|
name: rake
|
163
149
|
prerelease: false
|
164
|
-
requirement: &
|
150
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
165
151
|
none: false
|
166
152
|
requirements:
|
167
153
|
- - ~>
|
@@ -172,7 +158,7 @@ dependencies:
|
|
172
158
|
- 0
|
173
159
|
version: "10.0"
|
174
160
|
type: :development
|
175
|
-
version_requirements: *
|
161
|
+
version_requirements: *id009
|
176
162
|
description: Autogenerate and append/create factory_girl definitions from the console
|
177
163
|
email:
|
178
164
|
- markthedeveloper@gmail.com
|
@@ -194,18 +180,19 @@ files:
|
|
194
180
|
- lib/to_factory.rb
|
195
181
|
- lib/to_factory/collation.rb
|
196
182
|
- lib/to_factory/config.rb
|
197
|
-
- lib/to_factory/definition_group.rb
|
198
183
|
- lib/to_factory/file_sync.rb
|
199
184
|
- lib/to_factory/file_writer.rb
|
200
185
|
- lib/to_factory/finders/factory.rb
|
201
186
|
- lib/to_factory/finders/model.rb
|
202
187
|
- lib/to_factory/generation/attribute.rb
|
203
188
|
- lib/to_factory/generation/factory.rb
|
189
|
+
- lib/to_factory/klass_inference.rb
|
190
|
+
- lib/to_factory/options_parser.rb
|
204
191
|
- lib/to_factory/parsing/file.rb
|
205
|
-
- lib/to_factory/parsing/klass_inference.rb
|
206
192
|
- lib/to_factory/parsing/new_syntax.rb
|
207
193
|
- lib/to_factory/parsing/old_syntax.rb
|
208
194
|
- lib/to_factory/parsing/syntax.rb
|
195
|
+
- lib/to_factory/representation.rb
|
209
196
|
- lib/to_factory/version.rb
|
210
197
|
- spec/db/migrate/1_create_users.rb
|
211
198
|
- spec/db/migrate/2_create_projects.rb
|
@@ -217,6 +204,7 @@ files:
|
|
217
204
|
- spec/example_factories/new_syntax/project_with_header.rb
|
218
205
|
- spec/example_factories/new_syntax/user.rb
|
219
206
|
- spec/example_factories/new_syntax/user_admin.rb
|
207
|
+
- spec/example_factories/new_syntax/user_admin_root.rb
|
220
208
|
- spec/example_factories/new_syntax/user_admin_super_admin.rb
|
221
209
|
- spec/example_factories/new_syntax/user_admin_with_header.rb
|
222
210
|
- spec/example_factories/new_syntax/user_with_header.rb
|
@@ -224,6 +212,7 @@ files:
|
|
224
212
|
- spec/example_factories/old_syntax/project_with_header.rb
|
225
213
|
- spec/example_factories/old_syntax/user.rb
|
226
214
|
- spec/example_factories/old_syntax/user_admin.rb
|
215
|
+
- spec/example_factories/old_syntax/user_admin_root.rb
|
227
216
|
- spec/example_factories/old_syntax/user_admin_super_admin.rb
|
228
217
|
- spec/example_factories/old_syntax/user_admin_with_header.rb
|
229
218
|
- spec/example_factories/old_syntax/user_with_header.rb
|
@@ -239,7 +228,6 @@ files:
|
|
239
228
|
- spec/support/models/project.rb
|
240
229
|
- spec/support/models/user.rb
|
241
230
|
- spec/unit/collation_spec.rb
|
242
|
-
- spec/unit/definition_group_spec.rb
|
243
231
|
- spec/unit/file_writer_spec.rb
|
244
232
|
- spec/unit/finders/factory_spec.rb
|
245
233
|
- spec/unit/finders/model_spec.rb
|
@@ -294,6 +282,7 @@ test_files:
|
|
294
282
|
- spec/example_factories/new_syntax/project_with_header.rb
|
295
283
|
- spec/example_factories/new_syntax/user.rb
|
296
284
|
- spec/example_factories/new_syntax/user_admin.rb
|
285
|
+
- spec/example_factories/new_syntax/user_admin_root.rb
|
297
286
|
- spec/example_factories/new_syntax/user_admin_super_admin.rb
|
298
287
|
- spec/example_factories/new_syntax/user_admin_with_header.rb
|
299
288
|
- spec/example_factories/new_syntax/user_with_header.rb
|
@@ -301,6 +290,7 @@ test_files:
|
|
301
290
|
- spec/example_factories/old_syntax/project_with_header.rb
|
302
291
|
- spec/example_factories/old_syntax/user.rb
|
303
292
|
- spec/example_factories/old_syntax/user_admin.rb
|
293
|
+
- spec/example_factories/old_syntax/user_admin_root.rb
|
304
294
|
- spec/example_factories/old_syntax/user_admin_super_admin.rb
|
305
295
|
- spec/example_factories/old_syntax/user_admin_with_header.rb
|
306
296
|
- spec/example_factories/old_syntax/user_with_header.rb
|
@@ -316,7 +306,6 @@ test_files:
|
|
316
306
|
- spec/support/models/project.rb
|
317
307
|
- spec/support/models/user.rb
|
318
308
|
- spec/unit/collation_spec.rb
|
319
|
-
- spec/unit/definition_group_spec.rb
|
320
309
|
- spec/unit/file_writer_spec.rb
|
321
310
|
- spec/unit/finders/factory_spec.rb
|
322
311
|
- spec/unit/finders/model_spec.rb
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module ToFactory
|
2
|
-
class DefinitionGroup
|
3
|
-
def self.perform(instances)
|
4
|
-
new.perform(instances)
|
5
|
-
end
|
6
|
-
|
7
|
-
def perform(instances)
|
8
|
-
instances.inject({}) do |result, record|
|
9
|
-
klass, name, definition = define_factory(record)
|
10
|
-
result[klass] ||= {}
|
11
|
-
result[klass][name] = definition
|
12
|
-
result
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def define_factory(record)
|
17
|
-
name, item, parent_klass = extract_details(record)
|
18
|
-
|
19
|
-
definition = ToFactory::Generation::Factory.new(item, name).to_factory(parent_klass)
|
20
|
-
|
21
|
-
[item.class, name, definition]
|
22
|
-
end
|
23
|
-
|
24
|
-
def calculate_name(klass)
|
25
|
-
klass.name.to_s.underscore
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def extract_details(record)
|
31
|
-
if record.is_a?(ActiveRecord::Base)
|
32
|
-
name = calculate_name record.class
|
33
|
-
|
34
|
-
[name, record, nil]
|
35
|
-
elsif record.is_a?(Array)
|
36
|
-
name, item = record
|
37
|
-
parent_klass_name = calculate_name(item.class)
|
38
|
-
parent_klass_name = nil if parent_klass_name.to_s == name.to_s
|
39
|
-
[name, item, parent_klass_name]
|
40
|
-
else
|
41
|
-
raise NotImplemented
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module ToFactory
|
2
|
-
module Parsing
|
3
|
-
CannotInferClass = Class.new ArgumentError
|
4
|
-
|
5
|
-
class KlassInference
|
6
|
-
def initialize
|
7
|
-
@mapping = {}
|
8
|
-
end
|
9
|
-
|
10
|
-
def setup(factory_names_and_parents)
|
11
|
-
factory_names_and_parents.each do |factory_name, parent|
|
12
|
-
@mapping[factory_name.to_s] = to_const(parent || factory_name)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def infer(factory_name)
|
17
|
-
result = @mapping[factory_name.to_s]
|
18
|
-
return result if result.is_a? Class
|
19
|
-
|
20
|
-
raise CannotInferClass.new(factory_name) if result.nil?
|
21
|
-
|
22
|
-
infer(result)
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def to_const(factory_name)
|
28
|
-
factory_name.to_s.camelize.constantize
|
29
|
-
rescue NameError
|
30
|
-
factory_name
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
describe ToFactory::DefinitionGroup do
|
2
|
-
let(:user) { create_user! }
|
3
|
-
let(:admin) { create_admin! }
|
4
|
-
let(:user_definition) { File.read "./spec/example_factories/#{version}_syntax/user.rb"}
|
5
|
-
let(:admin_definition) { File.read "./spec/example_factories/#{version}_syntax/admin.rb"}
|
6
|
-
let(:group) { ToFactory::DefinitionGroup.new }
|
7
|
-
|
8
|
-
it do
|
9
|
-
result = group.perform([[:"to_factory/user", user], [:admin, admin]])
|
10
|
-
|
11
|
-
expect(result.keys[0]).to eq ToFactory::User
|
12
|
-
expect(result.values[0][:"to_factory/user"]).to match_sexp user_definition
|
13
|
-
expect(result.values[0][:admin]).to match_sexp admin_definition
|
14
|
-
end
|
15
|
-
|
16
|
-
it "#calculate_name" do
|
17
|
-
expect(group.calculate_name(ToFactory::Project)).to eq "to_factory/project"
|
18
|
-
end
|
19
|
-
end
|