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
@@ -1,32 +0,0 @@
1
- require 'rspec'
2
- $:.unshift File.expand_path('../../', __FILE__)
3
- require 'active_mocker/logger'
4
-
5
- describe ActiveMocker::Logger do
6
-
7
- describe '::set' do
8
-
9
- let(:logger){double()}
10
-
11
- around do
12
- described_class.class_variable_set(:@@logger, nil)
13
- end
14
-
15
- it 'set the logger to be used by the mock class' do
16
- described_class.set(logger)
17
- expect(described_class.class_variable_get(:@@logger)).to eq(logger)
18
- end
19
-
20
- it 'will pass any methods to the set logger' do
21
- described_class.set(logger)
22
- expect(logger).to receive(:info)
23
- described_class.info
24
- end
25
-
26
- it 'will return nil if no logger is set' do
27
- expect(described_class.any_method).to eq nil
28
- end
29
-
30
- end
31
-
32
- end
@@ -1,206 +0,0 @@
1
- require 'rspec'
2
- $:.unshift File.expand_path('../../', __FILE__)
3
- require 'active_support/core_ext/hash/indifferent_access'
4
- require 'singleton'
5
- require 'logger'
6
- require 'active_mocker/logger'
7
- require 'string_reader'
8
- require 'file_reader'
9
- require 'active_mocker/logger'
10
- require 'active_mocker/active_record'
11
- require 'active_mocker/model_reader'
12
- require 'active_mocker/reparameterize'
13
- require_relative '../../unit_logger'
14
-
15
- describe ActiveMocker::ModelReader do
16
-
17
- before(:all) do
18
- ActiveMocker::Logger.set(UnitLogger)
19
- end
20
-
21
- let(:model_reader){ described_class.new({model_dir: File.expand_path('../../', __FILE__)}).parse('model') }
22
-
23
- let(:subject){ model_reader}
24
-
25
- describe '#parse' do
26
-
27
- let(:subject){ described_class.new({model_dir: File.expand_path('../../', __FILE__)}) }
28
-
29
- it 'takes a model name to the active_record model class' do
30
- subject.parse('model')
31
- end
32
-
33
- end
34
-
35
- describe '#class_methods' do
36
-
37
- it 'returns all public class methods' do
38
- expect(subject.class_methods).to eq([:duper, :named, :foo, :bang!])
39
- end
40
-
41
- end
42
-
43
- describe '#instance methods' do
44
-
45
- it 'returns all public instance methods' do
46
- expect(subject.instance_methods).to eq([:foo, :super])
47
- end
48
-
49
- end
50
-
51
- describe '#instance_methods_with_arguments' do
52
-
53
- it 'returns all public instance methods' do
54
- expect(subject.instance_methods_with_arguments).to eq([{:foo=>[[:req, :foobar], [:req, :value]]}, {:super=>[]}])
55
- end
56
-
57
- end
58
-
59
- describe '#class_methods_with_arguments' do
60
-
61
- it 'returns all public instance methods' do
62
- expect(subject.class_methods_with_arguments).to eq( [{:duper=>[[:req, :value], [:rest, :args]]}, {:named=>[[:req, :name], [:opt, :value], [:opt, :options]]}, {:foo=>[]}, {:bang! =>[]}])
63
- end
64
-
65
- end
66
-
67
- describe '#belongs_to' do
68
-
69
- let(:subject){model_reader.belongs_to}
70
-
71
- it 'name of association' do
72
- expect(subject.first.name).to eq(:company)
73
- end
74
-
75
- it 'class_name override' do
76
- expect(subject.first.class_name).to eq('PlanServiceCategory')
77
- end
78
-
79
- it 'infer class_name' do
80
- expect(subject.last.class_name).to eq('Person')
81
- end
82
-
83
- it 'infer foreign key' do
84
- expect(subject.last.foreign_key).to eq('person_id')
85
- end
86
-
87
- it 'foreign key override' do
88
- expect(subject.first.foreign_key).to eq('category_id')
89
- end
90
-
91
- it 'through' do
92
- expect(subject.last.through).to eq('customer')
93
- end
94
-
95
- end
96
-
97
- describe '#has_one' do
98
-
99
- let(:subject) { model_reader.has_one }
100
-
101
- it 'name of association' do
102
- expect(subject.first.name).to eq(:account)
103
- end
104
-
105
- end
106
-
107
- describe '#has_many' do
108
-
109
- let(:subject) { model_reader.has_many }
110
-
111
- it 'name of association' do
112
- expect(subject.first.name).to eq(:users)
113
- end
114
-
115
- end
116
-
117
- describe '#has_and_belongs_to_many' do
118
-
119
- let(:subject) { model_reader.has_and_belongs_to_many }
120
-
121
- it 'name of association' do
122
- expect(subject.first.name).to eq(:disclosures)
123
- end
124
-
125
- end
126
-
127
- # TODO JoinTable
128
- # class Assembly < ActiveRecord::Base
129
- # has_and_belongs_to_many :parts
130
- # end
131
- #
132
- # class Part < ActiveRecord::Base
133
- # has_and_belongs_to_many :assemblies
134
- # end
135
- # These need to be backed up by a migration to create the assemblies_parts table.This table should be created without a primary key:
136
-
137
- # class CreateAssembliesPartsJoinTable < ActiveRecord::Migration
138
- # def change
139
- # create_table :assemblies_parts, id: false do |t|
140
- # t.integer :assembly_id
141
- # t.integer :part_id
142
- # end
143
- # end
144
- # end
145
-
146
- # TODO Polymorphic Associations
147
- # A slightly more advanced twist on associations is the polymorphic association.With polymorphic associations, a model can belong to more than one other model, on a single association.For example, you might have a picture model that belongs to either an employee model or a product model.Here 's how this could be declared:
148
- #
149
- # class Picture < ActiveRecord::Base
150
- # belongs_to :imageable, polymorphic: true
151
- # end
152
- #
153
- # class Employee < ActiveRecord::Base
154
- # has_many :pictures, as: :imageable
155
- # end
156
- #
157
- # class Product < ActiveRecord::Base
158
- # has_many :pictures, as: :imageable
159
- # end
160
-
161
- # class CreatePictures < ActiveRecord::Migration
162
- # def change
163
- # create_table :pictures do |t|
164
- # t.string :name
165
- # t.integer :imageable_id
166
- # t.string :imageable_type
167
- # t.timestamps
168
- # end
169
- # end
170
- # end
171
-
172
-
173
-
174
- context 'inject string_reader as file_reader' do
175
-
176
- let(:example_model){
177
- StringReader.new(
178
- <<-eos
179
- class Person < ActiveRecord::Base
180
-
181
- belongs_to :zip_code
182
-
183
- def full_name(first_name, last_name)
184
-
185
- end
186
-
187
- end
188
- eos
189
- )
190
- }
191
-
192
- let(:subject){described_class.new({model_dir: File.expand_path('../../', __FILE__), file_reader: example_model})}
193
-
194
- let(:search){subject.parse('person')}
195
-
196
- it 'let not read a file but return a string instead to be evaluated' do
197
- expect(search.relationships_types.belongs_to.first.name).to eq :zip_code
198
- expect(subject.instance_methods).to eq([:full_name])
199
- expect(subject.instance_methods_with_arguments).to eq([{:full_name=>[[:req, :first_name], [:req, :last_name]]}])
200
- end
201
-
202
- end
203
-
204
-
205
- end
206
-
@@ -1,111 +0,0 @@
1
- require 'rspec'
2
- $:.unshift File.expand_path('../../../../../lib', __FILE__)
3
- require 'active_mocker'
4
- require 'json'
5
- require 'active_support/core_ext/string/inflections'
6
- require 'active_support/core_ext/object/deep_dup.rb'
7
- require 'active_mocker/model_schema'
8
- require 'active_mocker/model_schema'
9
- require 'active_mocker/model_schema/generate'
10
- require_relative '../../../unit_logger'
11
-
12
- describe ActiveMocker::ModelSchema::Generate do
13
-
14
- let(:app_root) { File.expand_path('../../../../../', __FILE__) }
15
- let(:schema_file){ File.join(app_root, 'sample_app_rails_4/db/schema.rb') }
16
- # let(:schema_file){ '/Users/zeisler/dev/fbi/db/schema.rb' }
17
- let(:models_dir){ File.join(app_root, 'sample_app_rails_4/app/models') }
18
- # let(:models_dir){'/Users/zeisler/dev/fbi/app/models' }
19
- let(:run){described_class.new(schema_file: schema_file, models_dir: models_dir, logger: UnitLogger.unit).run.sort_by{|m| m.class_name}
20
- }
21
-
22
- it 'test' do
23
- result = described_class.new(schema_file: schema_file, models_dir: models_dir, logger: UnitLogger.unit).run
24
- expect(result.count).to eq 3
25
- end
26
-
27
- it 'relationships' do
28
- expect(run[-1].relationships.map{ |r| JSON.parse(r.to_json)})
29
- .to eq [{"name" => "microposts", "class_name" => "Micropost", "type" => "has_many", "foreign_key" => "user_id"},
30
- {"name" => "relationships", "class_name" => "Relationship", "type" => "has_many", "foreign_key" => "follower_id"},
31
- {"name" => "followed_users", "class_name" => "FollowedUser", "type" => "has_many", "foreign_key" => "user_id", "through" => "relationships"},
32
- {"name" => "reverse_relationships", "class_name" => "Relationship", "type" => "has_many", "foreign_key" => "followed_id"},
33
- {"name" => "followers", "class_name" => "Follower", "type" => "has_many", "foreign_key" => "user_id", "through" => "reverse_relationships"}]
34
- end
35
-
36
- it 'methods' do
37
- expect(run[-1].methods.map { |r| JSON.parse(r.to_json) })
38
- .to eq([{"name" => "feed", "arguments" => [], "type" => "instance"},
39
- {"name" => "following?", "arguments" => [["req", "other_user"]], "type" => "instance"},
40
- {"name" => "follow!", "arguments" => [["req", "other_user"]], "type" => "instance"},
41
- {"name" => "unfollow!", "arguments" => [["req", "other_user"]], "type" => "instance"},
42
- {"name" => "new_remember_token", "arguments" => [], "type" => "class"},
43
- {"name" => "digest", "arguments" => [["req", "token"]], "type" => "class"}])
44
- end
45
-
46
- it 'arguments' do
47
- expect(run[-1].methods.last.arguments.passable).to eq('token')
48
- end
49
-
50
- it 'attributes' do
51
- expect(run[-1].attributes.map { |r| JSON.parse(r.to_json) })
52
- .to eq([{"name" => "id", "type" => "integer", "primary_key" => true},
53
- {"name" => "name", "type" => "string"},
54
- {"name" => "email", "type" => "string", "default_value" => ""},
55
- {"name" => "credits", "type" => "decimal", "precision" => 19, "scale" => 6},
56
- {"name" => "created_at", "type" => "datetime"},
57
- {"name" => "updated_at", "type" => "datetime"},
58
- {"name" => "password_digest", "type" => "string"},
59
- {"name" => "remember_token", "type" => "boolean", "default_value" => true},
60
- {"name" => "admin", "type" => "boolean", "default_value" => false}])
61
- end
62
-
63
- describe '#primary_key' do
64
-
65
- context 'when primary model has a primary key' do
66
-
67
- let(:given_model){OpenStruct.new(primary_key: 'user_id')}
68
- let(:given_attributes){ [OpenStruct.new(name: 'user_id'), OpenStruct.new(name: 'name')] }
69
-
70
- it 'will return attributes with that name' do
71
- expect(described_class.new.primary_key(given_attributes, given_model)).to eq(given_attributes.first)
72
- end
73
-
74
- end
75
-
76
- context 'when attributes has a primary key' do
77
-
78
- let(:given_model) { OpenStruct.new(primary_key: false) }
79
- let(:given_attributes) { [OpenStruct.new(name: 'user_id', primary_key: true), OpenStruct.new(name: 'name')] }
80
-
81
- it 'will return attributes with that name' do
82
- expect(described_class.new.primary_key(given_attributes, given_model)).to eq(given_attributes.first)
83
- end
84
-
85
- end
86
-
87
- context 'when attributes or model has no primary key' do
88
-
89
- let(:given_model) { OpenStruct.new(primary_key: false) }
90
- let(:given_attributes) { [OpenStruct.new(name: 'id'), OpenStruct.new(name: 'name')] }
91
-
92
- it 'will default to attribute with id' do
93
- expect(described_class.new.primary_key(given_attributes, given_model)).to eq(given_attributes.first)
94
- end
95
-
96
- end
97
-
98
- context 'when attributes or model has no primary key and there is no id attribute' do
99
-
100
- let(:given_model) { OpenStruct.new(primary_key: false) }
101
- let(:given_attributes) { [OpenStruct.new(name: 'something'), OpenStruct.new(name: 'name')] }
102
-
103
- it 'will return nil' do
104
- expect(described_class.new.primary_key(given_attributes, given_model)).to eq(nil)
105
- end
106
-
107
- end
108
-
109
- end
110
-
111
- end
@@ -1,145 +0,0 @@
1
- require 'rspec'
2
- $:.unshift File.expand_path('../../../../lib', __FILE__)
3
- require 'json'
4
- require_relative '../../unit_logger'
5
- require 'active_mocker/model_schema'
6
-
7
- describe ActiveMocker::ModelSchema do
8
-
9
- subject{described_class.new(class_name: 'Model',
10
- table_name: 'models'
11
- )
12
- }
13
-
14
- it '#class_name' do
15
- expect(subject.class_name).to eq 'Model'
16
- end
17
-
18
- it '#table_name' do
19
- expect(subject.table_name).to eq 'models'
20
- end
21
-
22
- describe '#primary_key' do
23
-
24
- let(:a_primary_key_attribute){ ActiveMocker::ModelSchema::Attributes.new(name: 'key', primary_key: true, type: nil)}
25
-
26
- it 'will return the first attribute that is a primary key' do
27
- subject = described_class.new(attributes: [a_primary_key_attribute])
28
- expect(subject.primary_key).to eq a_primary_key_attribute
29
- end
30
-
31
- let(:a_non_primary_key_attribute){ ActiveMocker::ModelSchema::Attributes.new(name: 'key', primary_key: false, type: nil)}
32
-
33
- it 'will create a default primary_key of id if non is found' do
34
- subject = described_class.new(attributes: [a_non_primary_key_attribute])
35
- expect(subject.primary_key.name).to eq 'id'
36
- expect(subject.attributes.count).to eq 2
37
- end
38
-
39
- end
40
-
41
- describe '#attributes -> Array' do
42
-
43
- subject { described_class.new(
44
- attributes: [ActiveMocker::ModelSchema::Attributes.new(name: 'name',
45
- type: :string,
46
- precision: nil,
47
- scale: nil,
48
- default_value: 'default'
49
- )]
50
- ).attributes.first
51
- }
52
-
53
- it 'name' do
54
- expect(subject.name).to eq 'name'
55
- end
56
-
57
- it 'type' do
58
- expect(subject.type).to eq :string
59
- end
60
-
61
- it 'precision' do
62
- expect(subject.precision).to eq nil
63
- end
64
-
65
- it 'scale' do
66
- expect(subject.scale).to eq nil
67
- end
68
-
69
- it 'default_value' do
70
- expect(subject.default_value).to eq 'default'
71
- end
72
-
73
- end
74
-
75
- describe '#relationships -> Array' do
76
-
77
- subject { described_class.new(
78
- relationships:
79
- [
80
- ActiveMocker::ModelSchema::Relationships.new(name: 'name',
81
- class_name: 'ClassName',
82
- type: 'Relationship Type',
83
- through: 'link',
84
- foreign_key:'relationship_id',
85
- join_table: 'join_table'
86
- )
87
- ]
88
- ).relationships.first
89
- }
90
-
91
- it 'name' do
92
- expect(subject.name).to eq 'name'
93
- end
94
-
95
- it 'class_name' do
96
- expect(subject.class_name).to eq 'ClassName'
97
- end
98
-
99
- it 'type' do
100
- expect(subject.type).to eq 'Relationship Type'
101
- end
102
-
103
- it 'through' do
104
- expect(subject.through).to eq 'link'
105
- end
106
-
107
- it 'foreign_key' do
108
- expect(subject.foreign_key).to eq 'relationship_id'
109
- end
110
-
111
- it 'join_table' do
112
- expect(subject.join_table).to eq 'join_table'
113
- end
114
-
115
- end
116
-
117
- describe '#methods -> Array' do
118
-
119
- subject { described_class.new(
120
- methods:
121
- [
122
- ActiveMocker::ModelSchema::Methods.new(name: 'method_name',
123
- arguments: 'argument_array',
124
- type: 'class_method'
125
- )
126
- ]
127
- ).methods.first
128
- }
129
-
130
- it 'name' do
131
- expect(subject.name).to eq 'method_name'
132
- end
133
-
134
- it 'arguments' do
135
- expect(subject.arguments.class).to eq ActiveMocker::ModelSchema::Methods::Arguments
136
- expect(subject.arguments.arguments).to eq 'argument_array'
137
- end
138
-
139
- it 'type' do
140
- expect(subject.type).to eq 'class_method'
141
- end
142
-
143
- end
144
-
145
- end