active_mocker 1.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/README.md +61 -25
  4. data/Rakefile +1 -1
  5. data/active_mocker.gemspec +3 -3
  6. data/lib/active_hash/init.rb +13 -22
  7. data/lib/active_mocker.rb +1 -0
  8. data/lib/active_mocker/active_record/unknown_class_method.rb +1 -1
  9. data/lib/active_mocker/active_record/unknown_module.rb +3 -3
  10. data/lib/active_mocker/collection_association.rb +19 -20
  11. data/lib/active_mocker/config.rb +7 -4
  12. data/lib/active_mocker/field.rb +4 -4
  13. data/lib/active_mocker/generate.rb +75 -18
  14. data/lib/active_mocker/logger.rb +10 -1
  15. data/lib/active_mocker/mock_class_methods.rb +12 -2
  16. data/lib/active_mocker/mock_instance_methods.rb +3 -2
  17. data/lib/active_mocker/mock_requires.rb +2 -1
  18. data/lib/active_mocker/mock_template.erb +25 -22
  19. data/lib/active_mocker/public_methods.rb +6 -2
  20. data/lib/active_mocker/version.rb +1 -1
  21. data/sample_app_rails_4/app/models/micropost.rb +0 -2
  22. data/sample_app_rails_4/bin/rspec +16 -0
  23. data/sample_app_rails_4/config/application.rb +0 -3
  24. data/sample_app_rails_4/config/database.yml +5 -6
  25. data/sample_app_rails_4/config/environments/development.rb +0 -2
  26. data/sample_app_rails_4/config/environments/test.rb +0 -1
  27. data/sample_app_rails_4/config/initializers/active_mocker.rb +7 -5
  28. data/sample_app_rails_4/db/migrate/20130311191400_create_users.rb +1 -1
  29. data/sample_app_rails_4/db/migrate/20130315015932_add_admin_to_users.rb +1 -1
  30. data/sample_app_rails_4/db/schema.rb +4 -3
  31. data/sample_app_rails_4/lib/tasks/{mocks.rake → active_mocker.rake} +5 -5
  32. data/sample_app_rails_4/lib/unit_logger.rb +22 -0
  33. data/sample_app_rails_4/spec/compare_mocker_and_record_spec.rb +110 -4
  34. data/sample_app_rails_4/spec/mocks/micropost_mock.rb +31 -27
  35. data/sample_app_rails_4/spec/mocks/relationship_mock.rb +29 -24
  36. data/sample_app_rails_4/spec/mocks/user_mock.rb +69 -58
  37. data/sample_app_rails_4/spec/spec_helper.rb +6 -7
  38. data/sample_app_rails_4/spec/user_mock_spec.rb +14 -7
  39. data/spec/lib/active_mocker/collection_association_spec.rb +17 -3
  40. data/spec/lib/active_mocker/generate_spec.rb +8 -6
  41. data/spec/lib/active_mocker/model_reader_spec.rb +5 -0
  42. data/spec/lib/active_mocker/schema_reader_spec.rb +1 -1
  43. data/spec/lib/readme_spec.rb +199 -205
  44. data/spec/unit_logger.rb +24 -0
  45. metadata +22 -32
  46. data/mocks/micropost_mock.rb +0 -108
  47. data/mocks/relationship_mock.rb +0 -109
  48. data/mocks/user_mock.rb +0 -199
  49. data/plan_mock.rb +0 -2323
  50. data/sample_app_rails_4/config/cucumber.yml +0 -8
  51. data/sample_app_rails_4/db/development.sqlite3 +0 -0
  52. data/sample_app_rails_4/db/test.sqlite3 +0 -0
  53. data/spec/lib/active_mocker/performance/base_spec.rb +0 -454
  54. data/spec/lib/active_mocker/performance/large_schema.rb +0 -3576
  55. data/spec/lib/active_mocker/performance/migration/20140327205359_migration.rb +0 -0
  56. data/spec/lib/active_mocker/performance/schema_reader_spec.rb +0 -96
  57. data/spec/lib/compare_mocker_and_record_spec.rb +0 -133
@@ -6,6 +6,13 @@ class MicropostMock < ::ActiveHash::Base
6
6
  include ActiveMocker::MockInstanceMethods
7
7
  extend ActiveMocker::MockClassMethods
8
8
 
9
+ def initialize(attributes = {})
10
+ @attributes = HashWithIndifferentAccess.new({"id"=>nil, "content"=>nil, "user_id"=>nil, "created_at"=>nil, "updated_at"=>nil})
11
+ @associations = HashWithIndifferentAccess.new({:user=>nil})
12
+ super(attributes)
13
+ end
14
+
15
+
9
16
  def self.column_names
10
17
  ["id", "content", "user_id", "created_at", "updated_at"]
11
18
  end
@@ -19,43 +26,48 @@ class MicropostMock < ::ActiveHash::Base
19
26
  ##################################
20
27
 
21
28
  def id
22
- attributes['id']
23
- end
29
+ @attributes['id']
30
+ end
24
31
 
25
32
  def id=(val)
26
- attributes['id'] = val
33
+ type = (types[:id] ||= Virtus::Attribute.build(Fixnum))
34
+ @attributes['id'] = type.coerce(val)
27
35
  end
28
36
 
29
37
  def content
30
- attributes['content']
31
- end
38
+ @attributes['content']
39
+ end
32
40
 
33
41
  def content=(val)
34
- attributes['content'] = val
42
+ type = (types[:content] ||= Virtus::Attribute.build(String))
43
+ @attributes['content'] = type.coerce(val)
35
44
  end
36
45
 
37
46
  def user_id
38
- attributes['user_id']
39
- end
47
+ @attributes['user_id']
48
+ end
40
49
 
41
50
  def user_id=(val)
42
- attributes['user_id'] = val
51
+ type = (types[:user_id] ||= Virtus::Attribute.build(Fixnum))
52
+ @attributes['user_id'] = type.coerce(val)
43
53
  end
44
54
 
45
55
  def created_at
46
- attributes['created_at']
47
- end
56
+ @attributes['created_at']
57
+ end
48
58
 
49
59
  def created_at=(val)
50
- attributes['created_at'] = val
60
+ type = (types[:created_at] ||= Virtus::Attribute.build(DateTime))
61
+ @attributes['created_at'] = type.coerce(val)
51
62
  end
52
63
 
53
64
  def updated_at
54
- attributes['updated_at']
55
- end
65
+ @attributes['updated_at']
66
+ end
56
67
 
57
68
  def updated_at=(val)
58
- attributes['updated_at'] = val
69
+ type = (types[:updated_at] ||= Virtus::Attribute.build(DateTime))
70
+ @attributes['updated_at'] = type.coerce(val)
59
71
  end
60
72
 
61
73
  ##################################
@@ -74,22 +86,16 @@ class MicropostMock < ::ActiveHash::Base
74
86
  associations['user'] = val
75
87
  end
76
88
 
77
-
78
89
  ##################################
79
90
  # Model Methods getter/setters #
80
91
  ##################################
81
92
 
82
93
  def self.model_instance_methods
83
- return @model_instance_methods if @model_instance_methods
84
- @model_instance_methods = {}
85
- @model_instance_methods
94
+ @model_instance_methods ||= {}
86
95
  end
87
96
 
88
97
  def self.model_class_methods
89
- return @model_class_methods if @model_class_methods
90
- @model_class_methods = {}
91
- @model_class_methods[:from_users_followed_by] = :not_implemented
92
- @model_class_methods
98
+ @model_class_methods ||= {"from_users_followed_by"=>:not_implemented}
93
99
  end
94
100
 
95
101
  def self.clear_mock
@@ -97,12 +103,10 @@ class MicropostMock < ::ActiveHash::Base
97
103
  delete_all
98
104
  end
99
105
 
100
-
101
106
  def self.from_users_followed_by(user)
102
- block = model_class_methods[:from_users_followed_by]
103
- is_implemented(block, "::from_users_followed_by")
107
+ block = model_class_methods['from_users_followed_by']
108
+ is_implemented(block, '::from_users_followed_by')
104
109
  instance_exec(*[user], &block)
105
110
  end
106
111
 
107
-
108
112
  end
@@ -6,6 +6,13 @@ class RelationshipMock < ::ActiveHash::Base
6
6
  include ActiveMocker::MockInstanceMethods
7
7
  extend ActiveMocker::MockClassMethods
8
8
 
9
+ def initialize(attributes = {})
10
+ @attributes = HashWithIndifferentAccess.new({"id"=>nil, "follower_id"=>nil, "followed_id"=>nil, "created_at"=>nil, "updated_at"=>nil})
11
+ @associations = HashWithIndifferentAccess.new({:follower=>nil, :followed=>nil})
12
+ super(attributes)
13
+ end
14
+
15
+
9
16
  def self.column_names
10
17
  ["id", "follower_id", "followed_id", "created_at", "updated_at"]
11
18
  end
@@ -19,43 +26,48 @@ class RelationshipMock < ::ActiveHash::Base
19
26
  ##################################
20
27
 
21
28
  def id
22
- attributes['id']
23
- end
29
+ @attributes['id']
30
+ end
24
31
 
25
32
  def id=(val)
26
- attributes['id'] = val
33
+ type = (types[:id] ||= Virtus::Attribute.build(Fixnum))
34
+ @attributes['id'] = type.coerce(val)
27
35
  end
28
36
 
29
37
  def follower_id
30
- attributes['follower_id']
31
- end
38
+ @attributes['follower_id']
39
+ end
32
40
 
33
41
  def follower_id=(val)
34
- attributes['follower_id'] = val
42
+ type = (types[:follower_id] ||= Virtus::Attribute.build(Fixnum))
43
+ @attributes['follower_id'] = type.coerce(val)
35
44
  end
36
45
 
37
46
  def followed_id
38
- attributes['followed_id']
39
- end
47
+ @attributes['followed_id']
48
+ end
40
49
 
41
50
  def followed_id=(val)
42
- attributes['followed_id'] = val
51
+ type = (types[:followed_id] ||= Virtus::Attribute.build(Fixnum))
52
+ @attributes['followed_id'] = type.coerce(val)
43
53
  end
44
54
 
45
55
  def created_at
46
- attributes['created_at']
47
- end
56
+ @attributes['created_at']
57
+ end
48
58
 
49
59
  def created_at=(val)
50
- attributes['created_at'] = val
60
+ type = (types[:created_at] ||= Virtus::Attribute.build(DateTime))
61
+ @attributes['created_at'] = type.coerce(val)
51
62
  end
52
63
 
53
64
  def updated_at
54
- attributes['updated_at']
55
- end
65
+ @attributes['updated_at']
66
+ end
56
67
 
57
68
  def updated_at=(val)
58
- attributes['updated_at'] = val
69
+ type = (types[:updated_at] ||= Virtus::Attribute.build(DateTime))
70
+ @attributes['updated_at'] = type.coerce(val)
59
71
  end
60
72
 
61
73
  ##################################
@@ -82,21 +94,16 @@ class RelationshipMock < ::ActiveHash::Base
82
94
  associations['followed'] = val
83
95
  end
84
96
 
85
-
86
97
  ##################################
87
98
  # Model Methods getter/setters #
88
99
  ##################################
89
100
 
90
101
  def self.model_instance_methods
91
- return @model_instance_methods if @model_instance_methods
92
- @model_instance_methods = {}
93
- @model_instance_methods
102
+ @model_instance_methods ||= {}
94
103
  end
95
104
 
96
105
  def self.model_class_methods
97
- return @model_class_methods if @model_class_methods
98
- @model_class_methods = {}
99
- @model_class_methods
106
+ @model_class_methods ||= {}
100
107
  end
101
108
 
102
109
  def self.clear_mock
@@ -104,6 +111,4 @@ class RelationshipMock < ::ActiveHash::Base
104
111
  delete_all
105
112
  end
106
113
 
107
-
108
-
109
114
  end
@@ -6,12 +6,19 @@ class UserMock < ::ActiveHash::Base
6
6
  include ActiveMocker::MockInstanceMethods
7
7
  extend ActiveMocker::MockClassMethods
8
8
 
9
+ def initialize(attributes = {})
10
+ @attributes = HashWithIndifferentAccess.new({"id"=>nil, "name"=>nil, "email"=>"", "credits"=>nil, "created_at"=>nil, "updated_at"=>nil, "password_digest"=>nil, "remember_token"=>true, "admin"=>false})
11
+ @associations = HashWithIndifferentAccess.new({:microposts=>nil, :relationships=>nil, :followed_users=>nil, :reverse_relationships=>nil, :followers=>nil})
12
+ super(attributes)
13
+ end
14
+
15
+
9
16
  def self.column_names
10
- ["id", "name", "email", "created_at", "updated_at", "password_digest", "remember_token", "admin"]
17
+ ["id", "name", "email", "credits", "created_at", "updated_at", "password_digest", "remember_token", "admin"]
11
18
  end
12
19
 
13
20
  def self.attribute_names
14
- @attribute_names = [:id, :name, :email, :created_at, :updated_at, :password_digest, :remember_token, :admin]
21
+ @attribute_names = [:id, :name, :email, :credits, :created_at, :updated_at, :password_digest, :remember_token, :admin]
15
22
  end
16
23
 
17
24
  ##################################
@@ -19,67 +26,84 @@ class UserMock < ::ActiveHash::Base
19
26
  ##################################
20
27
 
21
28
  def id
22
- attributes['id']
23
- end
29
+ @attributes['id']
30
+ end
24
31
 
25
32
  def id=(val)
26
- attributes['id'] = val
33
+ type = (types[:id] ||= Virtus::Attribute.build(Fixnum))
34
+ @attributes['id'] = type.coerce(val)
27
35
  end
28
36
 
29
37
  def name
30
- attributes['name']
31
- end
38
+ @attributes['name']
39
+ end
32
40
 
33
41
  def name=(val)
34
- attributes['name'] = val
42
+ type = (types[:name] ||= Virtus::Attribute.build(String))
43
+ @attributes['name'] = type.coerce(val)
35
44
  end
36
45
 
37
46
  def email
38
- attributes['email']
39
- end
47
+ @attributes['email']
48
+ end
40
49
 
41
50
  def email=(val)
42
- attributes['email'] = val
51
+ type = (types[:email] ||= Virtus::Attribute.build(String))
52
+ @attributes['email'] = type.coerce(val)
43
53
  end
44
54
 
45
- def created_at
46
- attributes['created_at']
55
+ def credits
56
+ @attributes['credits']
57
+ end
58
+
59
+ def credits=(val)
60
+ type = (types[:credits] ||= Virtus::Attribute.build(BigDecimal))
61
+ @attributes['credits'] = type.coerce(val)
47
62
  end
48
63
 
64
+ def created_at
65
+ @attributes['created_at']
66
+ end
67
+
49
68
  def created_at=(val)
50
- attributes['created_at'] = val
69
+ type = (types[:created_at] ||= Virtus::Attribute.build(DateTime))
70
+ @attributes['created_at'] = type.coerce(val)
51
71
  end
52
72
 
53
73
  def updated_at
54
- attributes['updated_at']
55
- end
74
+ @attributes['updated_at']
75
+ end
56
76
 
57
77
  def updated_at=(val)
58
- attributes['updated_at'] = val
78
+ type = (types[:updated_at] ||= Virtus::Attribute.build(DateTime))
79
+ @attributes['updated_at'] = type.coerce(val)
59
80
  end
60
81
 
61
82
  def password_digest
62
- attributes['password_digest']
63
- end
83
+ @attributes['password_digest']
84
+ end
64
85
 
65
86
  def password_digest=(val)
66
- attributes['password_digest'] = val
87
+ type = (types[:password_digest] ||= Virtus::Attribute.build(String))
88
+ @attributes['password_digest'] = type.coerce(val)
67
89
  end
68
90
 
69
91
  def remember_token
70
- attributes['remember_token']
71
- end
92
+ @attributes['remember_token']
93
+ end
72
94
 
73
95
  def remember_token=(val)
74
- attributes['remember_token'] = val
96
+ type = (types[:remember_token] ||= Virtus::Attribute.build(Virtus::Attribute::Boolean))
97
+ @attributes['remember_token'] = type.coerce(val)
75
98
  end
76
99
 
77
100
  def admin
78
- attributes['admin']
79
- end
101
+ @attributes['admin']
102
+ end
80
103
 
81
104
  def admin=(val)
82
- attributes['admin'] = val
105
+ type = (types[:admin] ||= Virtus::Attribute.build(Virtus::Attribute::Boolean))
106
+ @attributes['admin'] = type.coerce(val)
83
107
  end
84
108
 
85
109
  ##################################
@@ -90,9 +114,8 @@ class UserMock < ::ActiveHash::Base
90
114
  @association_names = [:microposts, :relationships, :followed_users, :reverse_relationships, :followers]
91
115
  end
92
116
 
93
-
94
117
  def microposts
95
- associations['microposts']
118
+ associations['microposts'] ||= ActiveMocker::CollectionAssociation.new
96
119
  end
97
120
 
98
121
  def microposts=(val)
@@ -100,7 +123,7 @@ class UserMock < ::ActiveHash::Base
100
123
  end
101
124
 
102
125
  def relationships
103
- associations['relationships']
126
+ associations['relationships'] ||= ActiveMocker::CollectionAssociation.new
104
127
  end
105
128
 
106
129
  def relationships=(val)
@@ -108,7 +131,7 @@ class UserMock < ::ActiveHash::Base
108
131
  end
109
132
 
110
133
  def followed_users
111
- associations['followed_users']
134
+ associations['followed_users'] ||= ActiveMocker::CollectionAssociation.new
112
135
  end
113
136
 
114
137
  def followed_users=(val)
@@ -116,7 +139,7 @@ class UserMock < ::ActiveHash::Base
116
139
  end
117
140
 
118
141
  def reverse_relationships
119
- associations['reverse_relationships']
142
+ associations['reverse_relationships'] ||= ActiveMocker::CollectionAssociation.new
120
143
  end
121
144
 
122
145
  def reverse_relationships=(val)
@@ -124,7 +147,7 @@ class UserMock < ::ActiveHash::Base
124
147
  end
125
148
 
126
149
  def followers
127
- associations['followers']
150
+ associations['followers'] ||= ActiveMocker::CollectionAssociation.new
128
151
  end
129
152
 
130
153
  def followers=(val)
@@ -136,21 +159,11 @@ class UserMock < ::ActiveHash::Base
136
159
  ##################################
137
160
 
138
161
  def self.model_instance_methods
139
- return @model_instance_methods if @model_instance_methods
140
- @model_instance_methods = {}
141
- @model_instance_methods[:feed] = :not_implemented
142
- @model_instance_methods[:following?] = :not_implemented
143
- @model_instance_methods[:follow!] = :not_implemented
144
- @model_instance_methods[:unfollow!] = :not_implemented
145
- @model_instance_methods
162
+ @model_instance_methods ||= {"feed"=>:not_implemented, "following?"=>:not_implemented, "follow!"=>:not_implemented, "unfollow!"=>:not_implemented}
146
163
  end
147
164
 
148
165
  def self.model_class_methods
149
- return @model_class_methods if @model_class_methods
150
- @model_class_methods = {}
151
- @model_class_methods[:new_remember_token] = :not_implemented
152
- @model_class_methods[:digest] = :not_implemented
153
- @model_class_methods
166
+ @model_class_methods ||= {"new_remember_token"=>:not_implemented, "digest"=>:not_implemented}
154
167
  end
155
168
 
156
169
  def self.clear_mock
@@ -159,41 +172,39 @@ class UserMock < ::ActiveHash::Base
159
172
  end
160
173
 
161
174
  def feed()
162
- block = model_instance_methods[:feed]
163
- self.class.is_implemented(block, "#feed")
175
+ block = model_instance_methods['feed']
176
+ self.class.is_implemented(block, '#feed')
164
177
  instance_exec(*[], &block)
165
178
  end
166
179
 
167
180
  def following?(other_user)
168
- block = model_instance_methods[:following?]
169
- self.class.is_implemented(block, "#following?")
181
+ block = model_instance_methods['following?']
182
+ self.class.is_implemented(block, '#following?')
170
183
  instance_exec(*[other_user], &block)
171
184
  end
172
185
 
173
186
  def follow!(other_user)
174
- block = model_instance_methods[:follow!]
175
- self.class.is_implemented(block, "#follow!")
187
+ block = model_instance_methods['follow!']
188
+ self.class.is_implemented(block, '#follow!')
176
189
  instance_exec(*[other_user], &block)
177
190
  end
178
191
 
179
192
  def unfollow!(other_user)
180
- block = model_instance_methods[:unfollow!]
181
- self.class.is_implemented(block, "#unfollow!")
193
+ block = model_instance_methods['unfollow!']
194
+ self.class.is_implemented(block, '#unfollow!')
182
195
  instance_exec(*[other_user], &block)
183
196
  end
184
197
 
185
-
186
198
  def self.new_remember_token()
187
- block = model_class_methods[:new_remember_token]
188
- is_implemented(block, "::new_remember_token")
199
+ block = model_class_methods['new_remember_token']
200
+ is_implemented(block, '::new_remember_token')
189
201
  instance_exec(*[], &block)
190
202
  end
191
203
 
192
204
  def self.digest(token)
193
- block = model_class_methods[:digest]
194
- is_implemented(block, "::digest")
205
+ block = model_class_methods['digest']
206
+ is_implemented(block, '::digest')
195
207
  instance_exec(*[token], &block)
196
208
  end
197
209
 
198
-
199
210
  end