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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/README.md +35 -29
- data/lib/active_mocker.rb +3 -1
- data/lib/active_mocker/active_record.rb +27 -5
- data/lib/active_mocker/active_record/scope.rb +5 -5
- data/lib/active_mocker/active_record/unknown_module.rb +4 -4
- data/lib/active_mocker/generate.rb +36 -15
- data/lib/active_mocker/loaded_mocks.rb +60 -54
- data/lib/active_mocker/mock.rb +24 -0
- data/lib/active_mocker/mock/association.rb +6 -0
- data/lib/{active_mock → active_mocker/mock}/base.rb +43 -89
- data/lib/{active_mock → active_mocker/mock}/collection.rb +14 -7
- data/lib/{active_mock → active_mocker/mock}/do_nothing_active_record_methods.rb +7 -1
- data/lib/active_mocker/mock/exceptions.rb +25 -0
- data/lib/active_mocker/mock/has_and_belongs_to_many.rb +6 -0
- data/lib/active_mocker/mock/has_many.rb +60 -0
- data/lib/active_mocker/mock/hash_process.rb +19 -0
- data/lib/active_mocker/mock/mock_abilities.rb +98 -0
- data/lib/{active_mock → active_mocker/mock}/next_id.rb +7 -2
- data/lib/{active_mock → active_mocker/mock}/object_inspect.rb +3 -1
- data/lib/{active_mock → active_mocker/mock}/queries.rb +32 -29
- data/lib/active_mocker/mock/records.rb +62 -0
- data/lib/{active_mock → active_mocker/mock}/relation.rb +4 -3
- data/lib/active_mocker/mock/template_methods.rb +39 -0
- data/lib/active_mocker/mock_template.erb +45 -31
- data/lib/active_mocker/model_reader.rb +29 -0
- data/lib/active_mocker/model_schema.rb +23 -16
- data/lib/active_mocker/model_schema/generate.rb +19 -8
- data/lib/active_mocker/railtie.rb +17 -0
- data/lib/active_mocker/reparameterize.rb +2 -4
- data/lib/active_mocker/rspec_helper.rb +18 -0
- data/lib/active_mocker/task.rake +15 -0
- data/lib/active_mocker/version.rb +1 -1
- metadata +80 -206
- data/.gitignore +0 -19
- data/.hound.yml +0 -0
- data/.travis.yml +0 -5
- data/Gemfile +0 -4
- data/Rakefile +0 -26
- data/active_mocker.gemspec +0 -40
- data/lib/active_mock/association.rb +0 -7
- data/lib/active_mock/creators.rb +0 -25
- data/lib/active_mock/has_and_belongs_to_many.rb +0 -7
- data/lib/active_mock/has_many.rb +0 -54
- data/lib/active_mock/records.rb +0 -83
- data/lib/active_mocker/active_mock.rb +0 -26
- data/lib/active_mocker/active_record/const_missing.rb +0 -5
- data/lib/active_mocker/class_exists.rb +0 -12
- data/lib/active_mocker/const_sets.rb +0 -24
- data/lib/active_mocker/mock_task.rb +0 -12
- data/sample_app_rails_4/.idea/.generators +0 -8
- data/sample_app_rails_4/.idea/.name +0 -1
- data/sample_app_rails_4/.idea/.rakeTasks +0 -7
- data/sample_app_rails_4/.idea/dataSources.ids +0 -141
- data/sample_app_rails_4/.idea/dataSources.xml +0 -36
- data/sample_app_rails_4/.idea/dictionaries/zeisler.xml +0 -3
- data/sample_app_rails_4/.idea/encodings.xml +0 -5
- data/sample_app_rails_4/.idea/inspectionProfiles/Project_Default.xml +0 -20
- data/sample_app_rails_4/.idea/inspectionProfiles/profiles_settings.xml +0 -7
- data/sample_app_rails_4/.idea/misc.xml +0 -5
- data/sample_app_rails_4/.idea/modules.xml +0 -10
- data/sample_app_rails_4/.idea/runConfigurations/Development__sample_app_rails_4.xml +0 -28
- data/sample_app_rails_4/.idea/runConfigurations/Production__sample_app_rails_4.xml +0 -28
- data/sample_app_rails_4/.idea/runConfigurations/spec__sample_app_rails_4.xml +0 -26
- data/sample_app_rails_4/.idea/runConfigurations/test__sample_app_rails_4.xml +0 -28
- data/sample_app_rails_4/.idea/sample_app_rails_4.iml +0 -262
- data/sample_app_rails_4/.idea/scopes/scope_settings.xml +0 -5
- data/sample_app_rails_4/.idea/vcs.xml +0 -7
- data/sample_app_rails_4/.idea/workspace.xml +0 -619
- data/sample_app_rails_4/.rspec +0 -1
- data/sample_app_rails_4/.secret +0 -1
- data/sample_app_rails_4/Gemfile +0 -13
- data/sample_app_rails_4/Guardfile +0 -53
- data/sample_app_rails_4/LICENSE +0 -21
- data/sample_app_rails_4/README.md +0 -25
- data/sample_app_rails_4/README.nitrous.md +0 -20
- data/sample_app_rails_4/Rakefile +0 -6
- data/sample_app_rails_4/app/assets/images/rails.png +0 -0
- data/sample_app_rails_4/app/assets/javascripts/application.js +0 -17
- data/sample_app_rails_4/app/assets/javascripts/sessions.js.coffee +0 -3
- data/sample_app_rails_4/app/assets/javascripts/static_pages.js.coffee +0 -3
- data/sample_app_rails_4/app/assets/javascripts/users.js.coffee +0 -3
- data/sample_app_rails_4/app/assets/stylesheets/application.css +0 -13
- data/sample_app_rails_4/app/assets/stylesheets/custom.css.scss +0 -246
- data/sample_app_rails_4/app/assets/stylesheets/sessions.css.scss +0 -3
- data/sample_app_rails_4/app/assets/stylesheets/static_pages.css.scss +0 -3
- data/sample_app_rails_4/app/assets/stylesheets/users.css.scss +0 -3
- data/sample_app_rails_4/app/controllers/application_controller.rb +0 -6
- data/sample_app_rails_4/app/controllers/concerns/.keep +0 -0
- data/sample_app_rails_4/app/controllers/microposts_controller.rb +0 -31
- data/sample_app_rails_4/app/controllers/relationships_controller.rb +0 -21
- data/sample_app_rails_4/app/controllers/sessions_controller.rb +0 -21
- data/sample_app_rails_4/app/controllers/static_pages_controller.rb +0 -18
- data/sample_app_rails_4/app/controllers/users_controller.rb +0 -80
- data/sample_app_rails_4/app/helpers/application_helper.rb +0 -12
- data/sample_app_rails_4/app/helpers/sessions_helper.rb +0 -49
- data/sample_app_rails_4/app/helpers/static_pages_helper.rb +0 -2
- data/sample_app_rails_4/app/helpers/users_helper.rb +0 -10
- data/sample_app_rails_4/app/mailers/.keep +0 -0
- data/sample_app_rails_4/app/models/.keep +0 -0
- data/sample_app_rails_4/app/models/concerns/.keep +0 -0
- data/sample_app_rails_4/app/models/micropost.rb +0 -24
- data/sample_app_rails_4/app/models/relationship.rb +0 -6
- data/sample_app_rails_4/app/models/user.rb +0 -39
- data/sample_app_rails_4/app/views/layouts/_footer.html.erb +0 -13
- data/sample_app_rails_4/app/views/layouts/_header.html.erb +0 -31
- data/sample_app_rails_4/app/views/layouts/_shim.html.erb +0 -3
- data/sample_app_rails_4/app/views/layouts/application.html.erb +0 -22
- data/sample_app_rails_4/app/views/microposts/_micropost.html.erb +0 -11
- data/sample_app_rails_4/app/views/relationships/create.js.erb +0 -2
- data/sample_app_rails_4/app/views/relationships/destroy.js.erb +0 -2
- data/sample_app_rails_4/app/views/sessions/new.html.erb +0 -19
- data/sample_app_rails_4/app/views/shared/_error_messages.html.erb +0 -12
- data/sample_app_rails_4/app/views/shared/_feed.html.erb +0 -6
- data/sample_app_rails_4/app/views/shared/_feed_item.html.erb +0 -15
- data/sample_app_rails_4/app/views/shared/_micropost_form.html.erb +0 -7
- data/sample_app_rails_4/app/views/shared/_stats.html.erb +0 -15
- data/sample_app_rails_4/app/views/shared/_user_info.html.erb +0 -12
- data/sample_app_rails_4/app/views/static_pages/about.html.erb +0 -8
- data/sample_app_rails_4/app/views/static_pages/contact.html.erb +0 -6
- data/sample_app_rails_4/app/views/static_pages/help.html.erb +0 -8
- data/sample_app_rails_4/app/views/static_pages/home.html.erb +0 -34
- data/sample_app_rails_4/app/views/static_pages/show.html.erb +0 -0
- data/sample_app_rails_4/app/views/users/_follow.html.erb +0 -5
- data/sample_app_rails_4/app/views/users/_follow_form.html.erb +0 -9
- data/sample_app_rails_4/app/views/users/_unfollow.html.erb +0 -5
- data/sample_app_rails_4/app/views/users/_user.html.erb +0 -8
- data/sample_app_rails_4/app/views/users/edit.html.erb +0 -27
- data/sample_app_rails_4/app/views/users/index.html.erb +0 -10
- data/sample_app_rails_4/app/views/users/new.html.erb +0 -24
- data/sample_app_rails_4/app/views/users/show.html.erb +0 -24
- data/sample_app_rails_4/app/views/users/show_follow.html.erb +0 -30
- data/sample_app_rails_4/bin/bundle +0 -3
- data/sample_app_rails_4/bin/rails +0 -4
- data/sample_app_rails_4/bin/rake +0 -4
- data/sample_app_rails_4/bin/rspec +0 -16
- data/sample_app_rails_4/config.ru +0 -4
- data/sample_app_rails_4/config/application.rb +0 -28
- data/sample_app_rails_4/config/boot.rb +0 -4
- data/sample_app_rails_4/config/database.yml +0 -27
- data/sample_app_rails_4/config/environment.rb +0 -5
- data/sample_app_rails_4/config/environments/development.rb +0 -25
- data/sample_app_rails_4/config/environments/production.rb +0 -79
- data/sample_app_rails_4/config/environments/test.rb +0 -38
- data/sample_app_rails_4/config/initializers/active_mocker.rb +0 -12
- data/sample_app_rails_4/config/initializers/backtrace_silencers.rb +0 -7
- data/sample_app_rails_4/config/initializers/filter_parameter_logging.rb +0 -4
- data/sample_app_rails_4/config/initializers/inflections.rb +0 -16
- data/sample_app_rails_4/config/initializers/mime_types.rb +0 -5
- data/sample_app_rails_4/config/initializers/secret_token.rb +0 -22
- data/sample_app_rails_4/config/initializers/session_store.rb +0 -3
- data/sample_app_rails_4/config/initializers/wrap_parameters.rb +0 -14
- data/sample_app_rails_4/config/locales/en.yml +0 -23
- data/sample_app_rails_4/config/routes.rb +0 -17
- data/sample_app_rails_4/db/migrate/20130311191400_create_users.rb +0 -10
- data/sample_app_rails_4/db/migrate/20130311194153_add_index_to_users_email.rb +0 -5
- data/sample_app_rails_4/db/migrate/20130311201841_add_password_digest_to_users.rb +0 -5
- data/sample_app_rails_4/db/migrate/20130314184954_add_remember_token_to_users.rb +0 -6
- data/sample_app_rails_4/db/migrate/20130315015932_add_admin_to_users.rb +0 -5
- data/sample_app_rails_4/db/migrate/20130315175534_create_microposts.rb +0 -11
- data/sample_app_rails_4/db/migrate/20130315230445_create_relationships.rb +0 -13
- data/sample_app_rails_4/db/schema.rb +0 -51
- data/sample_app_rails_4/db/seeds.rb +0 -7
- data/sample_app_rails_4/features/signing_in.feature +0 -13
- data/sample_app_rails_4/features/step_definitions/authentication_steps.rb +0 -30
- data/sample_app_rails_4/features/support/env.rb +0 -59
- data/sample_app_rails_4/lib/assets/.keep +0 -0
- data/sample_app_rails_4/lib/tasks/.keep +0 -0
- data/sample_app_rails_4/lib/tasks/active_mocker.rake +0 -10
- data/sample_app_rails_4/lib/tasks/cucumber.rake +0 -65
- data/sample_app_rails_4/lib/tasks/sample_data.rake +0 -42
- data/sample_app_rails_4/lib/unit_logger.rb +0 -22
- data/sample_app_rails_4/public/404.html +0 -27
- data/sample_app_rails_4/public/422.html +0 -26
- data/sample_app_rails_4/public/500.html +0 -26
- data/sample_app_rails_4/public/assets/application-4962059d8f80f9bb096692bacc29c4e8.css +0 -5091
- data/sample_app_rails_4/public/assets/application-4962059d8f80f9bb096692bacc29c4e8.css.gz +0 -0
- data/sample_app_rails_4/public/assets/application-eeb856e3fe2c8f879c91d0e81d59cb40.js +0 -12952
- data/sample_app_rails_4/public/assets/application-eeb856e3fe2c8f879c91d0e81d59cb40.js.gz +0 -0
- data/sample_app_rails_4/public/assets/glyphicons-halflings-c806376f05e4ccabe2c5315a8e95667c.png +0 -0
- data/sample_app_rails_4/public/assets/glyphicons-halflings-white-62b67d9edee3db90d18833087f848d6e.png +0 -0
- data/sample_app_rails_4/public/assets/manifest-802de9eb1c853769101852422b620883.json +0 -1
- data/sample_app_rails_4/public/assets/rails-231a680f23887d9dd70710ea5efd3c62.png +0 -0
- data/sample_app_rails_4/public/favicon.ico +0 -0
- data/sample_app_rails_4/public/robots.txt +0 -5
- data/sample_app_rails_4/script/cucumber +0 -10
- data/sample_app_rails_4/spec/compare_mocker_and_record_spec.rb +0 -1038
- data/sample_app_rails_4/spec/factories.rb +0 -17
- data/sample_app_rails_4/spec/micropost_mock_spec.rb +0 -145
- data/sample_app_rails_4/spec/mocks/micropost_mock.rb +0 -153
- data/sample_app_rails_4/spec/mocks/relationship_mock.rb +0 -151
- data/sample_app_rails_4/spec/mocks/user_mock.rb +0 -215
- data/sample_app_rails_4/spec/reload_spec.rb +0 -45
- data/sample_app_rails_4/spec/spec_helper.rb +0 -46
- data/sample_app_rails_4/spec/user_mock_spec.rb +0 -197
- data/sample_app_rails_4/vendor/assets/javascripts/.keep +0 -0
- data/sample_app_rails_4/vendor/assets/stylesheets/.keep +0 -0
- data/spec/lib/acitve_mock/queriable_spec.rb +0 -207
- data/spec/lib/active_mocker/db_to_ruby_type_spec.rb +0 -124
- data/spec/lib/active_mocker/generate_spec.rb +0 -40
- data/spec/lib/active_mocker/loaded_mocks_spec.rb +0 -167
- data/spec/lib/active_mocker/logger_spec.rb +0 -32
- data/spec/lib/active_mocker/model_reader_spec.rb +0 -206
- data/spec/lib/active_mocker/model_schema/generate_spec.rb +0 -111
- data/spec/lib/active_mocker/model_schema_spec.rb +0 -145
- data/spec/lib/active_mocker/schema_reader_spec.rb +0 -109
- data/spec/lib/model.rb +0 -43
- data/spec/lib/person.rb +0 -9
- data/spec/lib/readme_spec.rb +0 -199
- data/spec/lib/reparameterize_spec.rb +0 -202
- data/spec/lib/schema.rb +0 -40
- 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'
|
|
@@ -1,25 +1,11 @@
|
|
|
1
|
-
module
|
|
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
|
-
|
|
22
|
-
|
|
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.
|
|
48
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
40
|
-
|
|
41
|
-
collection.hash == val.hash
|
|
40
|
+
def to_ary
|
|
41
|
+
to_a
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
def hash
|
|
45
|
+
@collection.hash
|
|
46
|
+
end
|
|
45
47
|
|
|
46
|
-
def
|
|
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
|
|
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,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
|