fabricas 1.0.0 → 1.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.
- checksums.yaml +4 -4
- data/README.md +32 -7
- data/lib/fabricas.rb +12 -6
- data/test/test_fabricas.rb +32 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b6608c567c383f3d3ef165b065e95b57a2602ab
|
4
|
+
data.tar.gz: df81722a0858b92dd920c921f5c064d578729942
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0abf02bd476abf98478ca8ef61d4ae299eae41a316e9599fb693dea39af90e8c453900d1a7c0cafb64646634d856984d8907db2adc4b6bef633be2577e7b7c29
|
7
|
+
data.tar.gz: f8f8d92c38a54a045b5c2b193ae98fc9cfb76de2a56752e2401742b907b0c017f863d0452e07c15de955c12d830f5cd9f3f1a597a3391ab90dc4f12712400379
|
data/README.md
CHANGED
@@ -47,15 +47,15 @@ You can provide your own class name to your factories using the `class_name` key
|
|
47
47
|
|
48
48
|
```ruby
|
49
49
|
Fabricas.define do
|
50
|
-
factory :
|
51
|
-
name "
|
52
|
-
|
50
|
+
factory :employee, class_name: "User" do
|
51
|
+
name "Dilbert"
|
52
|
+
area "Engineer"
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
|
57
|
-
puts
|
58
|
-
#=> <User @name= "
|
56
|
+
employee = Fabricas.build :employee
|
57
|
+
puts employee.inspect
|
58
|
+
#=> <User @name= "Dilbert", @area= "Engineer">
|
59
59
|
```
|
60
60
|
|
61
61
|
### Sending blocks as attributes
|
@@ -110,5 +110,30 @@ end
|
|
110
110
|
|
111
111
|
user = Fabricas.build :user
|
112
112
|
puts user.inspect
|
113
|
-
#=> <User @name= "Julio", @url="workingawesome.com" @email= "julio@workingawesome.com">
|
113
|
+
#=> <User @name= "Julio", @url="workingawesome.com", @email= "julio@workingawesome.com">
|
114
|
+
```
|
115
|
+
|
116
|
+
### Inheritance
|
117
|
+
There is inheritance, your factory child can receive the same attributes and class name of its parent.
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
Fabricas.define do
|
121
|
+
factory :user do
|
122
|
+
first_name "Julio"
|
123
|
+
email "email@gmail.com"
|
124
|
+
|
125
|
+
factory :admin do
|
126
|
+
access true
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
user = Fabricas.build :user
|
132
|
+
admin = Fabricas.build :admin
|
133
|
+
|
134
|
+
puts user.inspect
|
135
|
+
#=> <User @name= "Julio", @email= "email@gmail.com">
|
136
|
+
|
137
|
+
puts admin.inspect
|
138
|
+
#=> <User @name= "Julio", @email= "email@gmail.com", @access= true>
|
114
139
|
```
|
data/lib/fabricas.rb
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
19
|
# SOFTWARE.
|
20
20
|
module Fabricas
|
21
|
-
VERSION = "1.
|
21
|
+
VERSION = "1.1.0"
|
22
22
|
@factories = {}
|
23
23
|
def self.factories; @factories; end
|
24
24
|
|
@@ -27,14 +27,16 @@ module Fabricas
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def self.factory(klass, args = {}, &block)
|
30
|
+
_o = args.fetch(:parent, nil)
|
30
31
|
if block_given?
|
31
|
-
factories[klass] = CleanRoom.new
|
32
|
+
factories[klass] = CleanRoom.new(args.fetch(:class_name, nil) || (_o.class_name if _o) || klass)
|
33
|
+
factories[klass].attributes = _o.attributes.clone if _o
|
32
34
|
factories[klass].instance_eval(&block)
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
36
38
|
def self.build(klass, values = {})
|
37
|
-
_i = const_get(
|
39
|
+
_i = const_get(factories[klass].class_name.capitalize).new
|
38
40
|
attributes = factories[klass].attributes.merge(values)
|
39
41
|
attributes.each do |name, value|
|
40
42
|
_i.send("#{name}=", value.is_a?(Proc) ? _i.instance_eval(&value) : value)
|
@@ -43,15 +45,19 @@ module Fabricas
|
|
43
45
|
end
|
44
46
|
|
45
47
|
class CleanRoom < BasicObject
|
46
|
-
|
48
|
+
attr_accessor :class_name, :attributes
|
47
49
|
|
48
|
-
def initialize(
|
50
|
+
def initialize(name)
|
49
51
|
@attributes = {}
|
50
|
-
@class_name =
|
52
|
+
@class_name = name.is_a?(::String) ? name.downcase.to_sym : name
|
51
53
|
end
|
52
54
|
|
53
55
|
def method_missing(method_name, *args, &block)
|
54
56
|
attributes[method_name] = args.first || block
|
55
57
|
end
|
58
|
+
|
59
|
+
def factory(klass, args={}, &block)
|
60
|
+
::Fabricas.factory(klass, args.merge(parent: self), &block)
|
61
|
+
end
|
56
62
|
end
|
57
63
|
end
|
data/test/test_fabricas.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.expand_path("../lib/fabricas", File.dirname(__FILE__))
|
2
2
|
|
3
3
|
class User
|
4
|
-
attr_accessor :name, :email, :pet, :admin, :password, :url
|
4
|
+
attr_accessor :name, :email, :pet, :admin, :password, :url, :access
|
5
5
|
|
6
6
|
def self.generate_password
|
7
7
|
"5555"
|
@@ -12,6 +12,10 @@ class Pet
|
|
12
12
|
attr_accessor :name, :age, :adopted
|
13
13
|
end
|
14
14
|
|
15
|
+
class Comment
|
16
|
+
attr_accessor :content, :sent
|
17
|
+
end
|
18
|
+
|
15
19
|
Fabricas.define do
|
16
20
|
factory :user do
|
17
21
|
name "Julio"
|
@@ -19,6 +23,10 @@ Fabricas.define do
|
|
19
23
|
email { "#{name.downcase}@#{url}" }
|
20
24
|
password { User.generate_password }
|
21
25
|
pet { Fabricas.build :pet }
|
26
|
+
|
27
|
+
factory :super_admin do
|
28
|
+
access true
|
29
|
+
end
|
22
30
|
end
|
23
31
|
|
24
32
|
factory :admin, class_name: "User" do
|
@@ -32,6 +40,14 @@ Fabricas.define do
|
|
32
40
|
age 1
|
33
41
|
adopted true
|
34
42
|
end
|
43
|
+
|
44
|
+
factory :message, class_name: "Comment" do
|
45
|
+
content "Hei dude"
|
46
|
+
|
47
|
+
factory :message_sent do
|
48
|
+
sent true
|
49
|
+
end
|
50
|
+
end
|
35
51
|
end
|
36
52
|
|
37
53
|
scope do
|
@@ -39,6 +55,7 @@ scope do
|
|
39
55
|
user = Fabricas.build :user
|
40
56
|
assert_equal user.name, "Julio"
|
41
57
|
assert_equal user.url, "workingawesome.com"
|
58
|
+
assert_equal user.access, nil
|
42
59
|
end
|
43
60
|
|
44
61
|
test "build user with name returns the sent name" do
|
@@ -75,4 +92,18 @@ scope do
|
|
75
92
|
user = Fabricas.build :user
|
76
93
|
assert_equal user.email, "julio@workingawesome.com"
|
77
94
|
end
|
95
|
+
|
96
|
+
test "inheritance" do
|
97
|
+
super_admin = Fabricas.build :super_admin
|
98
|
+
assert_equal super_admin.name, "Julio"
|
99
|
+
assert_equal super_admin.access, true
|
100
|
+
end
|
101
|
+
|
102
|
+
test "inheritance with class_name in parent" do
|
103
|
+
message = Fabricas.build :message
|
104
|
+
message_sent = Fabricas.build :message_sent
|
105
|
+
assert_equal message.content, "Hei dude"
|
106
|
+
assert_equal message_sent.content, "Hei dude"
|
107
|
+
assert_equal message_sent.sent, true
|
108
|
+
end
|
78
109
|
end
|