active_mocker 1.4.2 → 1.5

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 (213) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/README.md +35 -29
  4. data/lib/active_mocker.rb +3 -1
  5. data/lib/active_mocker/active_record.rb +27 -5
  6. data/lib/active_mocker/active_record/scope.rb +5 -5
  7. data/lib/active_mocker/active_record/unknown_module.rb +4 -4
  8. data/lib/active_mocker/generate.rb +36 -15
  9. data/lib/active_mocker/loaded_mocks.rb +60 -54
  10. data/lib/active_mocker/mock.rb +24 -0
  11. data/lib/active_mocker/mock/association.rb +6 -0
  12. data/lib/{active_mock → active_mocker/mock}/base.rb +43 -89
  13. data/lib/{active_mock → active_mocker/mock}/collection.rb +14 -7
  14. data/lib/{active_mock → active_mocker/mock}/do_nothing_active_record_methods.rb +7 -1
  15. data/lib/active_mocker/mock/exceptions.rb +25 -0
  16. data/lib/active_mocker/mock/has_and_belongs_to_many.rb +6 -0
  17. data/lib/active_mocker/mock/has_many.rb +60 -0
  18. data/lib/active_mocker/mock/hash_process.rb +19 -0
  19. data/lib/active_mocker/mock/mock_abilities.rb +98 -0
  20. data/lib/{active_mock → active_mocker/mock}/next_id.rb +7 -2
  21. data/lib/{active_mock → active_mocker/mock}/object_inspect.rb +3 -1
  22. data/lib/{active_mock → active_mocker/mock}/queries.rb +32 -29
  23. data/lib/active_mocker/mock/records.rb +62 -0
  24. data/lib/{active_mock → active_mocker/mock}/relation.rb +4 -3
  25. data/lib/active_mocker/mock/template_methods.rb +39 -0
  26. data/lib/active_mocker/mock_template.erb +45 -31
  27. data/lib/active_mocker/model_reader.rb +29 -0
  28. data/lib/active_mocker/model_schema.rb +23 -16
  29. data/lib/active_mocker/model_schema/generate.rb +19 -8
  30. data/lib/active_mocker/railtie.rb +17 -0
  31. data/lib/active_mocker/reparameterize.rb +2 -4
  32. data/lib/active_mocker/rspec_helper.rb +18 -0
  33. data/lib/active_mocker/task.rake +15 -0
  34. data/lib/active_mocker/version.rb +1 -1
  35. metadata +80 -206
  36. data/.gitignore +0 -19
  37. data/.hound.yml +0 -0
  38. data/.travis.yml +0 -5
  39. data/Gemfile +0 -4
  40. data/Rakefile +0 -26
  41. data/active_mocker.gemspec +0 -40
  42. data/lib/active_mock/association.rb +0 -7
  43. data/lib/active_mock/creators.rb +0 -25
  44. data/lib/active_mock/has_and_belongs_to_many.rb +0 -7
  45. data/lib/active_mock/has_many.rb +0 -54
  46. data/lib/active_mock/records.rb +0 -83
  47. data/lib/active_mocker/active_mock.rb +0 -26
  48. data/lib/active_mocker/active_record/const_missing.rb +0 -5
  49. data/lib/active_mocker/class_exists.rb +0 -12
  50. data/lib/active_mocker/const_sets.rb +0 -24
  51. data/lib/active_mocker/mock_task.rb +0 -12
  52. data/sample_app_rails_4/.idea/.generators +0 -8
  53. data/sample_app_rails_4/.idea/.name +0 -1
  54. data/sample_app_rails_4/.idea/.rakeTasks +0 -7
  55. data/sample_app_rails_4/.idea/dataSources.ids +0 -141
  56. data/sample_app_rails_4/.idea/dataSources.xml +0 -36
  57. data/sample_app_rails_4/.idea/dictionaries/zeisler.xml +0 -3
  58. data/sample_app_rails_4/.idea/encodings.xml +0 -5
  59. data/sample_app_rails_4/.idea/inspectionProfiles/Project_Default.xml +0 -20
  60. data/sample_app_rails_4/.idea/inspectionProfiles/profiles_settings.xml +0 -7
  61. data/sample_app_rails_4/.idea/misc.xml +0 -5
  62. data/sample_app_rails_4/.idea/modules.xml +0 -10
  63. data/sample_app_rails_4/.idea/runConfigurations/Development__sample_app_rails_4.xml +0 -28
  64. data/sample_app_rails_4/.idea/runConfigurations/Production__sample_app_rails_4.xml +0 -28
  65. data/sample_app_rails_4/.idea/runConfigurations/spec__sample_app_rails_4.xml +0 -26
  66. data/sample_app_rails_4/.idea/runConfigurations/test__sample_app_rails_4.xml +0 -28
  67. data/sample_app_rails_4/.idea/sample_app_rails_4.iml +0 -262
  68. data/sample_app_rails_4/.idea/scopes/scope_settings.xml +0 -5
  69. data/sample_app_rails_4/.idea/vcs.xml +0 -7
  70. data/sample_app_rails_4/.idea/workspace.xml +0 -619
  71. data/sample_app_rails_4/.rspec +0 -1
  72. data/sample_app_rails_4/.secret +0 -1
  73. data/sample_app_rails_4/Gemfile +0 -13
  74. data/sample_app_rails_4/Guardfile +0 -53
  75. data/sample_app_rails_4/LICENSE +0 -21
  76. data/sample_app_rails_4/README.md +0 -25
  77. data/sample_app_rails_4/README.nitrous.md +0 -20
  78. data/sample_app_rails_4/Rakefile +0 -6
  79. data/sample_app_rails_4/app/assets/images/rails.png +0 -0
  80. data/sample_app_rails_4/app/assets/javascripts/application.js +0 -17
  81. data/sample_app_rails_4/app/assets/javascripts/sessions.js.coffee +0 -3
  82. data/sample_app_rails_4/app/assets/javascripts/static_pages.js.coffee +0 -3
  83. data/sample_app_rails_4/app/assets/javascripts/users.js.coffee +0 -3
  84. data/sample_app_rails_4/app/assets/stylesheets/application.css +0 -13
  85. data/sample_app_rails_4/app/assets/stylesheets/custom.css.scss +0 -246
  86. data/sample_app_rails_4/app/assets/stylesheets/sessions.css.scss +0 -3
  87. data/sample_app_rails_4/app/assets/stylesheets/static_pages.css.scss +0 -3
  88. data/sample_app_rails_4/app/assets/stylesheets/users.css.scss +0 -3
  89. data/sample_app_rails_4/app/controllers/application_controller.rb +0 -6
  90. data/sample_app_rails_4/app/controllers/concerns/.keep +0 -0
  91. data/sample_app_rails_4/app/controllers/microposts_controller.rb +0 -31
  92. data/sample_app_rails_4/app/controllers/relationships_controller.rb +0 -21
  93. data/sample_app_rails_4/app/controllers/sessions_controller.rb +0 -21
  94. data/sample_app_rails_4/app/controllers/static_pages_controller.rb +0 -18
  95. data/sample_app_rails_4/app/controllers/users_controller.rb +0 -80
  96. data/sample_app_rails_4/app/helpers/application_helper.rb +0 -12
  97. data/sample_app_rails_4/app/helpers/sessions_helper.rb +0 -49
  98. data/sample_app_rails_4/app/helpers/static_pages_helper.rb +0 -2
  99. data/sample_app_rails_4/app/helpers/users_helper.rb +0 -10
  100. data/sample_app_rails_4/app/mailers/.keep +0 -0
  101. data/sample_app_rails_4/app/models/.keep +0 -0
  102. data/sample_app_rails_4/app/models/concerns/.keep +0 -0
  103. data/sample_app_rails_4/app/models/micropost.rb +0 -24
  104. data/sample_app_rails_4/app/models/relationship.rb +0 -6
  105. data/sample_app_rails_4/app/models/user.rb +0 -39
  106. data/sample_app_rails_4/app/views/layouts/_footer.html.erb +0 -13
  107. data/sample_app_rails_4/app/views/layouts/_header.html.erb +0 -31
  108. data/sample_app_rails_4/app/views/layouts/_shim.html.erb +0 -3
  109. data/sample_app_rails_4/app/views/layouts/application.html.erb +0 -22
  110. data/sample_app_rails_4/app/views/microposts/_micropost.html.erb +0 -11
  111. data/sample_app_rails_4/app/views/relationships/create.js.erb +0 -2
  112. data/sample_app_rails_4/app/views/relationships/destroy.js.erb +0 -2
  113. data/sample_app_rails_4/app/views/sessions/new.html.erb +0 -19
  114. data/sample_app_rails_4/app/views/shared/_error_messages.html.erb +0 -12
  115. data/sample_app_rails_4/app/views/shared/_feed.html.erb +0 -6
  116. data/sample_app_rails_4/app/views/shared/_feed_item.html.erb +0 -15
  117. data/sample_app_rails_4/app/views/shared/_micropost_form.html.erb +0 -7
  118. data/sample_app_rails_4/app/views/shared/_stats.html.erb +0 -15
  119. data/sample_app_rails_4/app/views/shared/_user_info.html.erb +0 -12
  120. data/sample_app_rails_4/app/views/static_pages/about.html.erb +0 -8
  121. data/sample_app_rails_4/app/views/static_pages/contact.html.erb +0 -6
  122. data/sample_app_rails_4/app/views/static_pages/help.html.erb +0 -8
  123. data/sample_app_rails_4/app/views/static_pages/home.html.erb +0 -34
  124. data/sample_app_rails_4/app/views/static_pages/show.html.erb +0 -0
  125. data/sample_app_rails_4/app/views/users/_follow.html.erb +0 -5
  126. data/sample_app_rails_4/app/views/users/_follow_form.html.erb +0 -9
  127. data/sample_app_rails_4/app/views/users/_unfollow.html.erb +0 -5
  128. data/sample_app_rails_4/app/views/users/_user.html.erb +0 -8
  129. data/sample_app_rails_4/app/views/users/edit.html.erb +0 -27
  130. data/sample_app_rails_4/app/views/users/index.html.erb +0 -10
  131. data/sample_app_rails_4/app/views/users/new.html.erb +0 -24
  132. data/sample_app_rails_4/app/views/users/show.html.erb +0 -24
  133. data/sample_app_rails_4/app/views/users/show_follow.html.erb +0 -30
  134. data/sample_app_rails_4/bin/bundle +0 -3
  135. data/sample_app_rails_4/bin/rails +0 -4
  136. data/sample_app_rails_4/bin/rake +0 -4
  137. data/sample_app_rails_4/bin/rspec +0 -16
  138. data/sample_app_rails_4/config.ru +0 -4
  139. data/sample_app_rails_4/config/application.rb +0 -28
  140. data/sample_app_rails_4/config/boot.rb +0 -4
  141. data/sample_app_rails_4/config/database.yml +0 -27
  142. data/sample_app_rails_4/config/environment.rb +0 -5
  143. data/sample_app_rails_4/config/environments/development.rb +0 -25
  144. data/sample_app_rails_4/config/environments/production.rb +0 -79
  145. data/sample_app_rails_4/config/environments/test.rb +0 -38
  146. data/sample_app_rails_4/config/initializers/active_mocker.rb +0 -12
  147. data/sample_app_rails_4/config/initializers/backtrace_silencers.rb +0 -7
  148. data/sample_app_rails_4/config/initializers/filter_parameter_logging.rb +0 -4
  149. data/sample_app_rails_4/config/initializers/inflections.rb +0 -16
  150. data/sample_app_rails_4/config/initializers/mime_types.rb +0 -5
  151. data/sample_app_rails_4/config/initializers/secret_token.rb +0 -22
  152. data/sample_app_rails_4/config/initializers/session_store.rb +0 -3
  153. data/sample_app_rails_4/config/initializers/wrap_parameters.rb +0 -14
  154. data/sample_app_rails_4/config/locales/en.yml +0 -23
  155. data/sample_app_rails_4/config/routes.rb +0 -17
  156. data/sample_app_rails_4/db/migrate/20130311191400_create_users.rb +0 -10
  157. data/sample_app_rails_4/db/migrate/20130311194153_add_index_to_users_email.rb +0 -5
  158. data/sample_app_rails_4/db/migrate/20130311201841_add_password_digest_to_users.rb +0 -5
  159. data/sample_app_rails_4/db/migrate/20130314184954_add_remember_token_to_users.rb +0 -6
  160. data/sample_app_rails_4/db/migrate/20130315015932_add_admin_to_users.rb +0 -5
  161. data/sample_app_rails_4/db/migrate/20130315175534_create_microposts.rb +0 -11
  162. data/sample_app_rails_4/db/migrate/20130315230445_create_relationships.rb +0 -13
  163. data/sample_app_rails_4/db/schema.rb +0 -51
  164. data/sample_app_rails_4/db/seeds.rb +0 -7
  165. data/sample_app_rails_4/features/signing_in.feature +0 -13
  166. data/sample_app_rails_4/features/step_definitions/authentication_steps.rb +0 -30
  167. data/sample_app_rails_4/features/support/env.rb +0 -59
  168. data/sample_app_rails_4/lib/assets/.keep +0 -0
  169. data/sample_app_rails_4/lib/tasks/.keep +0 -0
  170. data/sample_app_rails_4/lib/tasks/active_mocker.rake +0 -10
  171. data/sample_app_rails_4/lib/tasks/cucumber.rake +0 -65
  172. data/sample_app_rails_4/lib/tasks/sample_data.rake +0 -42
  173. data/sample_app_rails_4/lib/unit_logger.rb +0 -22
  174. data/sample_app_rails_4/public/404.html +0 -27
  175. data/sample_app_rails_4/public/422.html +0 -26
  176. data/sample_app_rails_4/public/500.html +0 -26
  177. data/sample_app_rails_4/public/assets/application-4962059d8f80f9bb096692bacc29c4e8.css +0 -5091
  178. data/sample_app_rails_4/public/assets/application-4962059d8f80f9bb096692bacc29c4e8.css.gz +0 -0
  179. data/sample_app_rails_4/public/assets/application-eeb856e3fe2c8f879c91d0e81d59cb40.js +0 -12952
  180. data/sample_app_rails_4/public/assets/application-eeb856e3fe2c8f879c91d0e81d59cb40.js.gz +0 -0
  181. data/sample_app_rails_4/public/assets/glyphicons-halflings-c806376f05e4ccabe2c5315a8e95667c.png +0 -0
  182. data/sample_app_rails_4/public/assets/glyphicons-halflings-white-62b67d9edee3db90d18833087f848d6e.png +0 -0
  183. data/sample_app_rails_4/public/assets/manifest-802de9eb1c853769101852422b620883.json +0 -1
  184. data/sample_app_rails_4/public/assets/rails-231a680f23887d9dd70710ea5efd3c62.png +0 -0
  185. data/sample_app_rails_4/public/favicon.ico +0 -0
  186. data/sample_app_rails_4/public/robots.txt +0 -5
  187. data/sample_app_rails_4/script/cucumber +0 -10
  188. data/sample_app_rails_4/spec/compare_mocker_and_record_spec.rb +0 -1038
  189. data/sample_app_rails_4/spec/factories.rb +0 -17
  190. data/sample_app_rails_4/spec/micropost_mock_spec.rb +0 -145
  191. data/sample_app_rails_4/spec/mocks/micropost_mock.rb +0 -153
  192. data/sample_app_rails_4/spec/mocks/relationship_mock.rb +0 -151
  193. data/sample_app_rails_4/spec/mocks/user_mock.rb +0 -215
  194. data/sample_app_rails_4/spec/reload_spec.rb +0 -45
  195. data/sample_app_rails_4/spec/spec_helper.rb +0 -46
  196. data/sample_app_rails_4/spec/user_mock_spec.rb +0 -197
  197. data/sample_app_rails_4/vendor/assets/javascripts/.keep +0 -0
  198. data/sample_app_rails_4/vendor/assets/stylesheets/.keep +0 -0
  199. data/spec/lib/acitve_mock/queriable_spec.rb +0 -207
  200. data/spec/lib/active_mocker/db_to_ruby_type_spec.rb +0 -124
  201. data/spec/lib/active_mocker/generate_spec.rb +0 -40
  202. data/spec/lib/active_mocker/loaded_mocks_spec.rb +0 -167
  203. data/spec/lib/active_mocker/logger_spec.rb +0 -32
  204. data/spec/lib/active_mocker/model_reader_spec.rb +0 -206
  205. data/spec/lib/active_mocker/model_schema/generate_spec.rb +0 -111
  206. data/spec/lib/active_mocker/model_schema_spec.rb +0 -145
  207. data/spec/lib/active_mocker/schema_reader_spec.rb +0 -109
  208. data/spec/lib/model.rb +0 -43
  209. data/spec/lib/person.rb +0 -9
  210. data/spec/lib/readme_spec.rb +0 -199
  211. data/spec/lib/reparameterize_spec.rb +0 -202
  212. data/spec/lib/schema.rb +0 -40
  213. data/spec/unit_logger.rb +0 -24
@@ -0,0 +1,24 @@
1
+ require 'active_support/hash_with_indifferent_access'
2
+ require 'active_support/core_ext/module/delegation'
3
+ require 'active_support/inflector'
4
+ require 'active_support/core_ext/object/try'
5
+ require 'virtus'
6
+
7
+ require 'active_mocker/logger'
8
+ require 'active_mocker/loaded_mocks'
9
+ require 'active_mocker/rspec_helper'
10
+ require 'active_mocker/mock/hash_process'
11
+ require 'active_mocker/mock/collection'
12
+ require 'active_mocker/mock/queries'
13
+ require 'active_mocker/mock/relation'
14
+ require 'active_mocker/mock/association'
15
+ require 'active_mocker/mock/has_many'
16
+ require 'active_mocker/mock/has_and_belongs_to_many'
17
+ require 'active_mocker/mock/mock_abilities'
18
+ require 'active_mocker/mock/exceptions'
19
+ require 'active_mocker/mock/template_methods'
20
+ require 'active_mocker/mock/do_nothing_active_record_methods'
21
+ require 'active_mocker/mock/next_id'
22
+ require 'active_mocker/mock/records'
23
+ require 'active_mocker/mock/object_inspect'
24
+ require 'active_mocker/mock/base'
@@ -0,0 +1,6 @@
1
+ module ActiveMocker
2
+ module Mock
3
+ class Association < Relation
4
+ end
5
+ end
6
+ end
@@ -1,25 +1,11 @@
1
- module ActiveMock
2
-
3
- class RecordNotFound < StandardError
4
- end
5
-
6
- class ReservedFieldError < StandardError
7
- end
8
-
9
- class IdError < StandardError
10
- end
11
-
12
- class FileTypeMismatchError < StandardError
13
- end
14
-
15
- class RejectedParams < Exception
16
- end
17
-
1
+ module ActiveMocker
2
+ module Mock
18
3
  class Base
19
4
 
20
5
  include DoNothingActiveRecordMethods
21
- extend ActiveMock::Queries
22
- extend ActiveMock::Creators
6
+ include MockAbilities
7
+ include TemplateMethods
8
+ extend Queries
23
9
 
24
10
  def self.inherited(subclass)
25
11
  return ActiveMocker::LoadedMocks.add(subclass) if subclass.superclass == Base
@@ -28,6 +14,24 @@ class Base
28
14
 
29
15
  class << self
30
16
 
17
+ def create(attributes = {}, &block)
18
+ record = new
19
+ record.save
20
+ record.send(:set_properties, attributes) unless block_given?
21
+ record.send(:set_properties_block, attributes, &block) if block_given?
22
+ record
23
+ end
24
+
25
+ alias_method :create!, :create
26
+
27
+ def find_or_create_by(attributes)
28
+ find_by(attributes) || create(attributes)
29
+ end
30
+
31
+ def find_or_initialize_by(attributes)
32
+ find_by(attributes) || new(attributes)
33
+ end
34
+
31
35
  def records
32
36
  @records ||= Records.new
33
37
  end
@@ -44,8 +48,8 @@ class Base
44
48
  alias_method :destroy, :delete
45
49
 
46
50
  def delete_all(options=nil)
47
- return records.reset_all_records if options.nil?
48
- where(options).map { |r| r.delete }.count
51
+ return records.reset if options.nil?
52
+ super
49
53
  end
50
54
 
51
55
  alias_method :destroy_all, :delete_all
@@ -58,12 +62,16 @@ class Base
58
62
  ActiveMocker::LoadedMocks.find(klass)
59
63
  end
60
64
 
61
- private :classes
65
+ def new_relation(collection)
66
+ ScopeRelation.new(collection)
67
+ end
68
+
69
+ private :classes, :build_type, :new_relation
62
70
 
63
71
  public
64
72
 
65
73
  def clear_mock
66
- @model_class_methods, @model_instance_methods = nil, nil
74
+ clear_mocked_methods
67
75
  delete_all
68
76
  end
69
77
 
@@ -83,13 +91,9 @@ class Base
83
91
  end
84
92
 
85
93
  def setup_instance_variables
86
- {:@model_instance_methods => :model_instance_methods,
87
- :@model_class_methods => :model_class_methods,
88
- :@associations => :associations,
89
- :@attributes => :attributes,
90
- :@types => :types}.each do |var, value|
91
- instance_variable_set(var, self.class.send(value).dup)
92
- end
94
+ @types = self.class.send(:types)
95
+ @attributes = self.class.send(:attributes).dup
96
+ @associations = self.class.send(:associations).dup
93
97
  end
94
98
 
95
99
  private :setup_instance_variables
@@ -109,7 +113,7 @@ class Base
109
113
  begin
110
114
  send "#{key}=", value
111
115
  rescue NoMethodError
112
- raise ActiveMock::RejectedParams, "{:#{key}=>#{value.inspect}} for #{self.class.name}"
116
+ raise RejectedParams, "{:#{key}=>#{value.inspect}} for #{self.class.name}"
113
117
  end
114
118
  end
115
119
  end
@@ -135,8 +139,14 @@ class Base
135
139
  records.delete(self)
136
140
  end
137
141
 
142
+ alias_method :destroy, :delete
143
+
138
144
  delegate :[], :[]=, to: :attributes
139
145
 
146
+ def reload
147
+ self
148
+ end
149
+
140
150
  def new_record?
141
151
  !records.new_record?(self)
142
152
  end
@@ -187,64 +197,8 @@ class Base
187
197
 
188
198
  include PropertiesGetterAndSetter
189
199
 
190
- module MockAbilities
191
-
192
- def self.included(base)
193
- base.extend(ClassMethods)
194
- end
195
-
196
- module ClassMethods
197
- def mock_instance_method(method, &block)
198
- model_instance_methods[method.to_s] = block
199
- end
200
-
201
- def mock_class_method(method, &block)
202
- model_class_methods[method.to_s] = block
203
- end
204
-
205
- def model_class_methods
206
- @model_class_methods ||= HashWithIndifferentAccess.new
207
- end
208
-
209
- def model_instance_methods
210
- @model_instance_methods ||= HashWithIndifferentAccess.new
211
- end
212
-
213
- private :model_class_methods, :model_instance_methods
214
-
215
-
216
- def is_implemented(val, method)
217
- raise "#{method} is not Implemented for Class: #{name}" if val == :not_implemented
218
- end
219
-
220
- end
221
-
222
- def mock_instance_method(method, &block)
223
- @model_instance_methods[method.to_s] = block
224
- end
225
-
226
- def model_instance_methods
227
- class_level_mocks = self.class.send(:model_instance_methods)
228
- merged_mocks = class_level_mocks.merge(@model_instance_methods)
229
- return class_level_mocks if all_not_implemented?(merged_mocks) && !all_not_implemented?(class_level_mocks)
230
- merged_mocks
231
- end
232
-
233
- def all_not_implemented?(hash)
234
- hash.select { |k, v| v == :not_implemented }.count == hash.count
235
- end
236
-
237
- private :all_not_implemented?
238
-
239
- def model_class_methods
240
- self.class.send(:model_class_methods).merge(@model_class_methods)
241
- end
242
-
243
- private :model_class_methods, :model_instance_methods
244
-
200
+ class ScopeRelation < ::ActiveMocker::Mock::Association
245
201
  end
246
-
247
- include MockAbilities
248
-
249
202
  end
250
203
  end
204
+ end
@@ -1,4 +1,5 @@
1
- module ActiveMock
1
+ module ActiveMocker
2
+ module Mock
2
3
 
3
4
  class Collection
4
5
 
@@ -36,17 +37,23 @@ module ActiveMock
36
37
  @collection
37
38
  end
38
39
 
39
- def ==(val)
40
- return false if val.nil?
41
- collection.hash == val.hash
40
+ def to_ary
41
+ to_a
42
42
  end
43
43
 
44
- private
44
+ def hash
45
+ @collection.hash
46
+ end
45
47
 
46
- def collection
47
- @collection
48
+ def ==(val)
49
+ @collection == val
48
50
  end
49
51
 
52
+ protected
53
+
54
+ attr_accessor :collection
55
+
50
56
  end
51
57
 
58
+ end
52
59
  end
@@ -1,4 +1,5 @@
1
- module ActiveMock
1
+ module ActiveMocker
2
+ module Mock
2
3
  module DoNothingActiveRecordMethods
3
4
 
4
5
  def self.included(base)
@@ -15,6 +16,10 @@ module DoNothingActiveRecordMethods
15
16
  raise e
16
17
  end
17
18
 
19
+ def column_names
20
+ attribute_names
21
+ end
22
+
18
23
  end
19
24
 
20
25
  def readonly?
@@ -47,5 +52,6 @@ module DoNothingActiveRecordMethods
47
52
  false
48
53
  end
49
54
 
55
+ end
50
56
  end
51
57
  end
@@ -0,0 +1,25 @@
1
+ module ActiveMocker
2
+ module Mock
3
+ class RecordNotFound < StandardError
4
+ end
5
+
6
+ class ReservedFieldError < StandardError
7
+ end
8
+
9
+ class IdError < StandardError
10
+ end
11
+
12
+ class FileTypeMismatchError < StandardError
13
+ end
14
+
15
+ class RejectedParams < Exception
16
+ end
17
+
18
+ class Unimplemented < Exception
19
+ end
20
+
21
+ class IdNotNumber < Exception
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,6 @@
1
+ module ActiveMocker
2
+ module Mock
3
+ class HasAndBelongsToMany < HasMany
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,60 @@
1
+ module ActiveMocker
2
+ module Mock
3
+
4
+ class HasMany < Association
5
+
6
+ include Queries
7
+
8
+ def self.new(collection, foreign_key=nil, foreign_id=nil, relation_class=nil)
9
+ return Relation.new(collection) if relation_class.nil?
10
+ super
11
+ end
12
+
13
+ def initialize(collection, foreign_key, foreign_id, relation_class)
14
+ @relation_class = relation_class
15
+ @foreign_key = foreign_key
16
+ @foreign_id = foreign_id
17
+ self.class.include "#{relation_class.name}::Scopes".constantize
18
+ super(collection)
19
+ end
20
+
21
+ private
22
+ attr_reader :relation_class, :foreign_key, :foreign_id
23
+ public
24
+
25
+ def build(options={}, &block)
26
+ new_record = relation_class.new(init_options.merge!(options), &block)
27
+
28
+ def new_record.belongs_to(collection)
29
+ @belongs_to_collection = collection
30
+ end
31
+
32
+ new_record.belongs_to(self)
33
+
34
+ def new_record.save
35
+ @belongs_to_collection << self
36
+ super
37
+ end
38
+
39
+ new_record
40
+ end
41
+
42
+ def create(options={}, &block)
43
+ created_record = relation_class.create(init_options.merge!(options), &block)
44
+ collection << created_record
45
+ created_record
46
+ end
47
+
48
+ alias_method :create!, :create
49
+
50
+ def init_options
51
+ {foreign_key => foreign_id}
52
+ end
53
+
54
+ private :init_options
55
+
56
+ end
57
+
58
+ end
59
+ end
60
+
@@ -0,0 +1,19 @@
1
+ module ActiveMocker
2
+ module Mock
3
+ class HashProcess
4
+
5
+ attr_accessor :hash, :processor
6
+
7
+ def initialize(hash, processor)
8
+ @hash = hash
9
+ @processor = processor
10
+ @hash_process = {}
11
+ end
12
+
13
+ def [](val)
14
+ @hash_process[val] ||= processor.call(hash[val])
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,98 @@
1
+ module ActiveMocker
2
+ module Mock
3
+ module MockAbilities
4
+
5
+ module InstanceAndClassMethods
6
+
7
+ def mock_instance_method(method, exe_bind=false, &block)
8
+ mockable_instance_methods[method.to_sym] = MockMethod.new(block, exe_bind)
9
+ end
10
+
11
+ alias_method :stub_instance_method, :mock_instance_method
12
+
13
+ def clear_mocked_methods
14
+ mockable_instance_methods.clear
15
+ mockable_class_methods.clear
16
+ end
17
+
18
+ private
19
+
20
+ def mockable_instance_methods
21
+ @mockable_instance_methods ||= {}
22
+ end
23
+
24
+ def class_name
25
+ return name if self.class == Class
26
+ self.class
27
+ end
28
+
29
+ def is_implemented(val, method, type)
30
+ raise Unimplemented, "#{type}#{method} is not Implemented for Class: #{class_name}" if val.nil?
31
+ end
32
+
33
+ def execute_block(method)
34
+ return instance_exec(method.arguments, &method.block) if method.exe_bind
35
+ method.block.call(*method.arguments)
36
+ end
37
+
38
+ end
39
+
40
+ def self.included(base)
41
+ base.extend(ClassMethods)
42
+ end
43
+
44
+ module ClassMethods
45
+
46
+ include InstanceAndClassMethods
47
+
48
+ def mockable_class_methods
49
+ @mockable_class_methods ||= {}
50
+ end
51
+
52
+ def mock_class_method(method, exe_bind=false, &block)
53
+ mockable_class_methods[method.to_sym] = MockMethod.new(block, exe_bind)
54
+ end
55
+
56
+ alias_method :stub_class_method, :mock_class_method
57
+
58
+ def call_mock_method(method, *arguments)
59
+ mock_method = mockable_class_methods[method.to_sym]
60
+ is_implemented(mock_method, method, '::')
61
+ mock_method.arguments = arguments
62
+ execute_block(mock_method)
63
+ end
64
+
65
+ private :call_mock_method
66
+
67
+ end
68
+
69
+ include InstanceAndClassMethods
70
+
71
+ def call_mock_method(method, *arguments)
72
+ mock_method = mockable_instance_methods[method.to_sym]
73
+ mock_method = self.class.send(:mockable_instance_methods)[method.to_sym] if mock_method.nil?
74
+ is_implemented(mock_method, method, '#')
75
+ mock_method.arguments = arguments
76
+ execute_block mock_method
77
+ end
78
+
79
+ private :call_mock_method
80
+
81
+ def clear_mocked_methods
82
+ mockable_instance_methods.clear
83
+ end
84
+
85
+ class MockMethod
86
+
87
+ attr_accessor :block, :arguments, :exe_bind
88
+
89
+ def initialize(block, exe_bind)
90
+ @block = block
91
+ @exe_bind = exe_bind
92
+ end
93
+
94
+ end
95
+
96
+ end
97
+ end
98
+ end