to_factory 0.1.1 → 0.2.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.
- 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
|