active_mocker 1.1.6 → 1.1.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d68198a21ac2738734c94c5565127480b8772d8
4
- data.tar.gz: 55577fbc878b514b20b2c6a4ed8169e273fd610d
3
+ metadata.gz: 5fb5d2c18e0123bbfcd1e6e34e9ce6f323a29324
4
+ data.tar.gz: dbe134929a21a543e9f72ea5ff773bcbb1601f97
5
5
  SHA512:
6
- metadata.gz: d3d812eeae5501c118b19293b99f405bcdf6683c692b4a6aadebda619d5a9d0eaf13351db8787058f1a84ff5b0da46aa78077ca18e0d9238f9a8aaa8d71f14d2
7
- data.tar.gz: cebef904a1a20c104b27bf005ea1bd263354bd4215536da28930fb6c3fee6a202ced8354350b511242d93159ddcce0cfe737526d961e28c242c2f6dab7350f97
6
+ metadata.gz: 1edf9a047d35d844d8382192dce7e368afe325a86adaa825196a4d30082d9171998bb3dcc37e9e97aea70e3fde04a89e95dee15f77a88154367b75d51060382c
7
+ data.tar.gz: 20bc1b6439aacc5de848ea444463d9477cbf567a4b67f860f5618a2a7726e1800a8717feda70fe0074b7ecb30a5497778158bdb41f0492209f1f11c5c968560d
File without changes
data/README.md CHANGED
@@ -3,7 +3,6 @@
3
3
 
4
4
  Create mocks from active record models without loading rails or running a database.
5
5
 
6
-
7
6
  ## Installation
8
7
 
9
8
  Add this line to your application's Gemfile:
@@ -51,7 +50,7 @@ Or install it yourself as:
51
50
 
52
51
  require 'active_mocker'
53
52
 
54
- ActiveMocker::Base.configure do |config|
53
+ ActiveMocker.configure do |config|
55
54
  # Required Options
56
55
  config.schema_file = "#{APP_ROOT}/db/schema.rb"
57
56
  config.model_dir = "#{APP_ROOT}/app/models"
@@ -65,13 +64,13 @@ Or install it yourself as:
65
64
  config.log_level = Logger::WARN #default
66
65
  end
67
66
 
68
- ActiveMocker::Base.mock('Person')
67
+ ActiveMocker.mock('Person')
69
68
  => PersonMock
70
69
 
71
70
  PersonMock.column_names
72
71
  => ["account_id", "first_name", "last_name", "address", "city"]
73
72
 
74
- person_mock = PersonMock.new(first_name: "Dustin", last_name: "Zeisler", account: mocker.mock('Account').new)
73
+ person_mock = PersonMock.new(first_name: "Dustin", last_name: "Zeisler", account: ActiveMocker.mock('Account').new)
75
74
  => #<PersonMock @first_name="Dustin", @last_name="Zeisler">
76
75
 
77
76
  person_mock.first_name
@@ -106,14 +105,14 @@ Or install it yourself as:
106
105
  => RuntimeError: #bar is not Implemented for Class: PersonMock
107
106
 
108
107
 
109
- mock_class.mock_instance_method(:bar) do |name, type=nil|
108
+ person_mock.mock_instance_method(:bar) do |name, type=nil|
110
109
  "Now implemented with #{name} and #{type}"
111
110
  end
112
111
 
113
- mock_class.new.bar('foo', 'type')
112
+ person_mock.new.bar('foo', 'type')
114
113
  => "Now implemented with foo and type"
115
114
 
116
- mock_class.mock_class_method(:baz) do
115
+ person_mock.mock_class_method(:baz) do
117
116
  "Now implemented"
118
117
  end
119
118
 
@@ -130,7 +129,7 @@ Or install it yourself as:
130
129
 
131
130
  end
132
131
 
133
- mock_class.new.bar('foo', 'type')
132
+ person_mock.new.bar('foo', 'type')
134
133
  => ArgumentError: wrong number of arguments (2 for 1)
135
134
 
136
135
 
@@ -145,7 +144,7 @@ Or install it yourself as:
145
144
 
146
145
  end
147
146
 
148
- mock_class.mock_instance_method(:bar) do |name, type=nil|
147
+ person_mock.mock_instance_method(:bar) do |name, type=nil|
149
148
  "Now implemented with #{name} and #{type}"
150
149
  end
151
150
  => NameError: undefined method `bar' for class `PersonMock'
@@ -155,11 +154,11 @@ ActiveHash is a simple base class that allows you to use a ruby hash as a readon
155
154
  [zilkey/active_hash](https://github.com/zilkey/active_hash)
156
155
 
157
156
 
158
- ActiveMocker::Base.configure do |config|
157
+ ActiveMocker.configure do |config|
159
158
  config.active_hash_as_base = true
160
159
  end
161
160
 
162
- ActiveMocker::Base.mock('Person').superclass
161
+ ActiveMocker.mock('Person').superclass
163
162
  => ActiveHash::Base
164
163
 
165
164
  dustin = PersonMock.create(first_name: 'Dustin')
@@ -174,7 +173,7 @@ ActiveHash is a simple base class that allows you to use a ruby hash as a readon
174
173
  dustin.save
175
174
  => true
176
175
 
177
- ### Additional ActiveHash extentions for matching ActiveRecord
176
+ ### Additional ActiveHash extensions for matching ActiveRecord
178
177
 
179
178
 
180
179
  #### #update method
@@ -209,6 +208,9 @@ ActiveHash is a simple base class that allows you to use a ruby hash as a readon
209
208
  * **::mock** model names and table names must follow the default ActiveRecord naming pattern.
210
209
  * Included/extended module methods will not be included on the mock.
211
210
 
211
+ ## Inspiration
212
+ Thanks to Jeff Olfert for being my original inspiration for this project.
213
+
212
214
  ## Contributing
213
215
 
214
216
  1. Fork it ( http://github.com/zeisler/active_mocker/fork )
@@ -1,12 +1,14 @@
1
1
  require_relative 'destroy_all'
2
2
  require_relative 'update'
3
3
  require_relative 'find_by'
4
+ require_relative 'init'
4
5
 
5
6
  module ActiveHash
6
7
 
7
8
  module ARApi
8
9
 
9
10
  include ARApi::Update
11
+ include ARApi::Init
10
12
 
11
13
  def self.included(base)
12
14
  base.extend(ClassMethods)
@@ -0,0 +1,33 @@
1
+ require 'active_support/core_ext/hash/indifferent_access'
2
+ module ActiveHash
3
+
4
+ module ARApi
5
+
6
+ module Init
7
+
8
+ attr_reader :associations
9
+
10
+ def initialize(attributes = {})
11
+ filter_associations(HashWithIndifferentAccess.new(attributes))
12
+ @attributes.dup.merge(@associations.dup).each do |key, value|
13
+ send "#{key}=", value
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def filter_associations(attributes)
20
+ @attributes = attributes.select do |k, v|
21
+ self.class.send(:attribute_names).include? k.to_sym
22
+ end
23
+ @attributes = self.class.send(:attribute_template).merge(@attributes)
24
+ @associations = attributes.select do |k, v|
25
+ self.class.send(:association_names).include? k.to_sym
26
+ end
27
+ @associations = self.class.send(:association_template).merge(associations)
28
+ end
29
+
30
+ end
31
+ end
32
+
33
+ end
@@ -1,11 +1,13 @@
1
1
  require "active_mocker/version"
2
2
  $:.unshift File.expand_path('../../', __FILE__)
3
+ require 'singleton'
3
4
  require 'logger'
4
5
  require 'active_mocker/logger'
5
6
  require 'active_support/all'
6
7
  require 'active_mocker/table'
7
8
  require 'active_mocker/field'
8
9
  require 'file_reader'
10
+ require 'active_mocker/public_methods'
9
11
  require 'active_mocker/config'
10
12
  require 'active_mocker/reparameterize'
11
13
  require 'active_mocker/active_record'
@@ -17,6 +19,5 @@ require 'active_mocker/active_record'
17
19
  require 'active_mocker/model_reader'
18
20
  require 'active_mocker/reparameterize'
19
21
  require 'active_hash/ar_api'
20
- module ActiveMocker
21
22
 
22
- end
23
+
@@ -14,7 +14,6 @@ module ActiveMocker
14
14
  :model_file_reader,
15
15
  :schema_file_reader
16
16
 
17
-
18
17
  attr_reader :model_name, :klass
19
18
 
20
19
  def initialize(model_name)
@@ -28,7 +27,7 @@ module ActiveMocker
28
27
  end
29
28
 
30
29
  def self.mock(model_name)
31
- self.new(model_name).klass
30
+ self.send(:new, model_name).klass
32
31
  end
33
32
 
34
33
  def model_definition
@@ -48,56 +47,76 @@ module ActiveMocker
48
47
  end
49
48
 
50
49
  def active_hash_mock_class
51
-
52
- add_column_names_method
50
+ fill_templates
53
51
  klass = create_klass
54
- fields = table_definition.column_names + model_definition.relationships
52
+ fields = table_definition.column_names
55
53
  klass.class_eval do
56
54
  klass.fields(*fields)
57
55
  end
58
56
 
57
+ add_relationships_methods
58
+ add_column_names_method
59
59
  add_method_mock_of
60
60
  if model_methods
61
61
  add_class_methods
62
62
  add_instance_methods
63
63
  end
64
-
65
64
  end
66
65
 
67
66
  def plain_mock_class
67
+ fill_templates
68
68
  add_method_mock_of
69
69
  if model_methods
70
70
  add_class_methods
71
71
  add_instance_methods
72
72
  end
73
- add_relationships if model_relationships
74
- add_column_names_method if schema_attributes
75
73
  add_table_attributes if schema_attributes
74
+ add_relationships_methods if model_relationships
75
+ add_column_names_method if schema_attributes
76
76
  create_initializer if mass_assignment
77
77
  end
78
78
 
79
79
  def create_initializer
80
80
  klass = create_klass
81
- klass.instance_eval do
82
- define_method('initialize') do |options={}|
83
- options.each {|method, value| send("#{method}=", value)}
81
+ klass.class_eval <<-'eos', __FILE__, __LINE__+1
82
+ def initialize(options={})
83
+ options.each {|method, value| write_attribute(method, value) }
84
84
  end
85
- end
85
+ eos
86
+ end
87
+
88
+ def fill_templates
89
+ klass = create_klass
90
+ klass.send(:association_names=, model_definition.relationships)
91
+ klass.send(:attribute_names=, table_definition.column_names)
86
92
  end
87
93
 
88
94
  def add_relationships
89
95
  klass = create_klass
90
96
  model_definition.relationships.each do |m|
91
- klass.instance_variable_set("@#{m}", nil)
92
- klass.class_eval { attr_accessor m }
97
+ klass.send(:schema_attributes_template)[m] = nil
98
+ begin
99
+ klass.class_eval <<-eos, __FILE__, __LINE__+1
100
+ def #{m}
101
+ read_attribute(#{m.inspect})
102
+ end
103
+
104
+ def #{m}=(value)
105
+ write_attribute(#{m.inspect}, value)
106
+ end
107
+ eos
108
+ rescue SyntaxError
109
+ Logger_.debug "ActiveMocker :: Can't create accessor methods for #{m}.\n #{caller}"
110
+ end
93
111
  end
94
112
  end
95
113
 
96
114
  def add_method_mock_of
97
115
  klass = create_klass
98
- klass.class_variable_set(:@@model_name, model_name)
116
+ m_name = model_name
117
+ klass.instance_variable_set(:@model_class, model_definition.klass)
99
118
  klass.instance_eval do
100
- define_method(:mock_of) {klass.class_variable_get :@@model_name}
119
+ define_method(:mock_of) {m_name}
101
120
  end
102
121
  end
103
122
 
@@ -106,19 +125,43 @@ module ActiveMocker
106
125
  table_definition.column_names.each do |m|
107
126
 
108
127
  klass.send(:schema_attributes_template)[m] = nil
128
+ begin
129
+ klass.class_eval <<-eos, __FILE__, __LINE__+1
130
+ def #{m}
131
+ read_attribute(#{m.inspect})
132
+ end
133
+
134
+ def #{m}=(value)
135
+ write_attribute(#{m.inspect}, value)
136
+ end
137
+ eos
138
+ rescue SyntaxError
139
+ Logger_.debug "ActiveMocker :: Can't create accessor methods for #{m}.\n #{caller}"
140
+ end
141
+ end
142
+ end
109
143
 
110
- klass.class_eval <<-eos, __FILE__, __LINE__+1 unless m =~ /^\d/
111
- def #{m}
112
- read_attribute(#{m.inspect})
113
- end
114
-
115
- def #{m}=(value)
116
- write_attribute(#{m.inspect}, value)
117
- end
118
- eos
144
+ def add_relationships_methods
145
+ klass = create_klass
146
+ model_definition.relationships.each do |m|
147
+ klass.send(:schema_attributes_template)[m] = nil
148
+ begin
149
+ klass.class_eval <<-eos, __FILE__, __LINE__+1
150
+ def #{m}
151
+ read_attribute(#{m.inspect})
152
+ end
153
+
154
+ def #{m}=(value)
155
+ write_attribute(#{m.inspect}, value)
156
+ end
157
+ eos
158
+ rescue SyntaxError
159
+ Logger_.debug "ActiveMocker :: Can't create accessor methods for #{m}.\n #{caller}"
160
+ end
119
161
  end
120
162
  end
121
163
 
164
+
122
165
  def add_instance_methods
123
166
  klass = create_klass
124
167
  model_definition.instance_methods_with_arguments.each do |method|
@@ -130,7 +173,8 @@ module ActiveMocker
130
173
 
131
174
  klass.class_eval <<-eos, __FILE__, __LINE__+1
132
175
  def #{m}(#{params})
133
- model_instance_methods[#{m.inspect}].call(#{params_pass})
176
+ block = model_instance_methods[#{m.inspect}].to_proc
177
+ instance_exec(*[#{params_pass}], &block)
134
178
  end
135
179
  eos
136
180
  end
@@ -142,19 +186,18 @@ module ActiveMocker
142
186
  m = method.keys.first
143
187
  params = Reparameterize.call(method.values.first)
144
188
  params_pass = Reparameterize.call(method.values.first, true)
145
-
146
189
  klass.send(:model_class_methods)[m] = eval_lambda(params, %Q[raise "::#{m} is not Implemented for Class: #{klass.name}"])
147
-
148
190
  klass.class_eval <<-eos, __FILE__, __LINE__+1
149
191
  def self.#{m}(#{params})
150
- model_class_methods[#{m.inspect}].call(#{params_pass})
192
+ block = model_class_methods[#{m.inspect}].to_proc
193
+ instance_exec(*[#{params_pass}], &block)
151
194
  end
152
195
  eos
153
196
  end
154
197
  end
155
198
 
156
199
  def eval_lambda(arguments, block)
157
- eval(%Q[ ->(#{arguments}){ #{block} }])
200
+ eval(%Q[ ->(#{arguments}){ #{block} }],binding, __FILE__, __LINE__)
158
201
  end
159
202
 
160
203
  def add_column_names_method
@@ -214,13 +257,22 @@ module ActiveMocker
214
257
 
215
258
  private
216
259
 
260
+ def delegate_to_model_instance(method, *args)
261
+ self.class.send(:delegate_to_model_instance, method, *args)
262
+ end
263
+
264
+ def delegate_to_model_class(method, *args)
265
+ self.class.send(:delegate_to_model_class, method, *args)
266
+ end
267
+
217
268
  def model_instance_methods
218
269
  @model_instance_methods ||= self.class.send(:model_methods_template).dup
219
270
  end
220
271
 
221
272
  def schema_attributes
222
- @schema_attributes ||= self.class.send(:schema_attributes_template).dup
273
+ @schema_attributes ||= self.class.send(:attribute_template).dup
223
274
  end
275
+
224
276
  end
225
277
 
226
278
  module ModelClassMethods
@@ -239,6 +291,14 @@ module ActiveMocker
239
291
 
240
292
  private
241
293
 
294
+ def delegate_to_model_instance(method, *args)
295
+ model_class_instance.send(method, *args)
296
+ end
297
+
298
+ def delegate_to_model_class(method, *args)
299
+ model_class.send(method, *args)
300
+ end
301
+
242
302
  def model_class_methods
243
303
  @model_class_methods ||= HashWithIndifferentAccess.new
244
304
  end
@@ -251,6 +311,44 @@ module ActiveMocker
251
311
  @schema_attributes_template ||= HashWithIndifferentAccess.new
252
312
  end
253
313
 
314
+ def model_class
315
+ @model_class
316
+ end
317
+
318
+ def model_class_instance
319
+ @model_class_instance ||= model_class.new
320
+ end
321
+
322
+ def attribute_names
323
+ @attribute_names
324
+ end
325
+
326
+ def attribute_names=(attributes)
327
+ @attribute_names = attributes.map{|a| a.to_sym}
328
+ end
329
+
330
+ def attribute_template
331
+ return @attribute_template unless @attribute_template.nil?
332
+ @attribute_template = HashWithIndifferentAccess.new
333
+ attribute_names.each {|a| @attribute_template[a] = nil}
334
+ return @attribute_template
335
+ end
336
+
337
+ def association_names
338
+ @association_names
339
+ end
340
+
341
+ def association_names=(associations)
342
+ @association_names = associations.map{|a| a.to_sym}
343
+ end
344
+
345
+ def association_template
346
+ return @association_template unless @association_template.nil?
347
+ @association_template = HashWithIndifferentAccess.new
348
+ association_names.each {|a| @association_template[a] = nil}
349
+ return @association_template
350
+ end
351
+
254
352
  end
255
353
 
256
354
  end
@@ -0,0 +1,11 @@
1
+ module ActiveMocker
2
+
3
+ def self.mock(model_name)
4
+ Base.mock(model_name)
5
+ end
6
+
7
+ def self.configure(&block)
8
+ Base.configure(&block)
9
+ end
10
+
11
+ end
@@ -12,6 +12,8 @@ module ActiveMocker
12
12
  def search(model_name)
13
13
  @model_name = model_name
14
14
  @table = search_schema_file
15
+ @table.fields.unshift Field.new('id', :integer, {})
16
+ @table
15
17
  end
16
18
 
17
19
  private
@@ -1,3 +1,3 @@
1
1
  module ActiveMocker
2
- VERSION = "1.1.6"
2
+ VERSION = "1.1.7"
3
3
  end
@@ -1,8 +1,10 @@
1
1
  require 'rspec'
2
2
  $:.unshift File.expand_path('../../', __FILE__)
3
+ require 'singleton'
3
4
  require 'logger'
4
5
  require 'active_mocker/logger'
5
6
  require 'string_reader'
7
+ require 'active_mocker/public_methods'
6
8
  require 'active_mocker/table'
7
9
  require 'active_mocker/config'
8
10
  require 'active_mocker/reparameterize'
@@ -18,7 +20,7 @@ require 'active_hash/ar_api'
18
20
  describe ActiveMocker::Base do
19
21
 
20
22
  before(:each) do
21
- ActiveMocker::Base.configure do |config|
23
+ ActiveMocker.configure do |config|
22
24
  # Required Options
23
25
  config.schema_file = 'file is being inject as string'
24
26
  config.model_dir = 'file is being inject as string'
@@ -38,7 +40,7 @@ describe ActiveMocker::Base do
38
40
  end
39
41
 
40
42
  let(:mock_class){
41
- described_class.mock('Person')
43
+ ActiveMocker.mock('Person')
42
44
  }
43
45
 
44
46
  after(:each) do
@@ -72,7 +74,7 @@ describe ActiveMocker::Base do
72
74
  describe '::column_names' do
73
75
 
74
76
  it 'returns an array of column names found from the schema.rb file' do
75
- expect(mock_class.column_names).to eq(["account_id", "first_name", "last_name", "address", "city", "800_number"])
77
+ expect(mock_class.column_names).to eq(["id", "account_id", "first_name", "last_name", "address", "city", "800_number"])
76
78
  end
77
79
 
78
80
  end
@@ -104,18 +106,6 @@ describe ActiveMocker::Base do
104
106
 
105
107
  end
106
108
 
107
- context 'set to false' do
108
-
109
- it 'will fail' do
110
- described_class.mass_assignment = false
111
- person = described_class.mock("Person")
112
- expect{
113
- person.new(first_name: "Sam", last_name: 'Walton')
114
- }.to raise_error ArgumentError
115
- end
116
-
117
- end
118
-
119
109
  end
120
110
 
121
111
  describe '#mock_class' do
@@ -208,6 +198,9 @@ describe ActiveMocker::Base do
208
198
  class Person < ActiveRecord::Base
209
199
  def bar(name, type=nil)
210
200
  end
201
+
202
+ def baz
203
+ end
211
204
  end
212
205
  eos
213
206
  }
@@ -230,6 +223,65 @@ describe ActiveMocker::Base do
230
223
 
231
224
  end
232
225
 
226
+ it 'can reference another mock' do
227
+
228
+ mock_class.mock_instance_method(:bar) do |name, type=nil|
229
+ "Now implemented with #{name} and #{type}"
230
+ end
231
+
232
+ mock_class.mock_instance_method(:baz) do
233
+ bar("name", 'type')
234
+ end
235
+
236
+ expect(mock_class.new.bar("name", 'type')).to eq "Now implemented with name and type"
237
+ expect(mock_class.new.baz).to eq "Now implemented with name and type"
238
+ end
239
+
240
+ context 'can call real code by delegating to model' do
241
+
242
+ let(:model_file){
243
+ StringReader.new <<-eos
244
+ class Person < ActiveRecord::Base
245
+ def bar(name, type=nil)
246
+ name + ' bar' + foo + ' ' +type
247
+ end
248
+
249
+ def foo
250
+ 'foo'
251
+ end
252
+
253
+ def baz
254
+ end
255
+
256
+ def self.foobar
257
+ 'foobar'
258
+ end
259
+ end
260
+ eos
261
+ }
262
+
263
+ it 'can delegate instance method to models instance method' do
264
+
265
+ mock_class.mock_instance_method(:bar) do |name, type=nil|
266
+ delegate_to_model_instance(:bar, name, type)
267
+ end
268
+
269
+ expect(mock_class.new.bar('name','type')).to eq "name barfoo type"
270
+
271
+ end
272
+
273
+ it 'can delegate class method to models class method' do
274
+
275
+ mock_class.mock_class_method(:foobar) do
276
+ delegate_to_model_class(:foobar)
277
+ end
278
+
279
+ expect(mock_class.foobar).to eq "foobar"
280
+
281
+ end
282
+
283
+ end
284
+
233
285
  end
234
286
 
235
287
  describe 'class methods' do
@@ -311,7 +363,7 @@ describe ActiveMocker::Base do
311
363
  end
312
364
 
313
365
  it '::column_names' do
314
- expect(mock_class.column_names).to eq(["account_id", "first_name", "last_name", "address", "city","800_number"])
366
+ expect(mock_class.column_names).to eq(["id", "account_id", "first_name", "last_name", "address", "city","800_number"])
315
367
  end
316
368
 
317
369
  it '#mock_of' do
@@ -1,5 +1,6 @@
1
1
  require 'rspec'
2
2
  $:.unshift File.expand_path('../../', __FILE__)
3
+ require 'singleton'
3
4
  require 'logger'
4
5
  require 'active_mocker/logger'
5
6
  require 'string_reader'
@@ -64,7 +64,7 @@ describe ActiveMocker::SchemaReader do
64
64
  it 'let not read a file but return a string instead to be evaluated' do
65
65
  people = subject.search('people')
66
66
  expect(people.name).to eq 'people'
67
- expect(people.fields[1].to_h).to eq({:name=>"first_name", :type=>:string, :options=>[{:limit=>128}]})
67
+ expect(people.fields[2].to_h).to eq({:name=>"first_name", :type=>:string, :options=>[{:limit=>128}]})
68
68
  expect(subject.search('zip_codes').name).to eq 'zip_codes'
69
69
  end
70
70
 
@@ -89,7 +89,7 @@ describe ActiveMocker::SchemaReader do
89
89
 
90
90
  it 'returns an array of columns from the schema.rb' do
91
91
  expect(people_search.name).to eq 'people'
92
- expect(people_search.column_names).to eq ["company_id", "first_name", "middle_name", "last_name", "address_1", "address_2", "city", "state_id", "zip_code_id", "title", "department", "person_email", "work_phone", "cell_phone", "home_phone", "fax", "user_id_assistant", "birth_date", "needs_review", "created_at", "updated_at"]
92
+ expect(people_search.column_names).to eq ["id", "company_id", "first_name", "middle_name", "last_name", "address_1", "address_2", "city", "state_id", "zip_code_id", "title", "department", "person_email", "work_phone", "cell_phone", "home_phone", "fax", "user_id_assistant", "birth_date", "needs_review", "created_at", "updated_at"]
93
93
  end
94
94
 
95
95
  end
@@ -97,7 +97,7 @@ describe ActiveMocker::SchemaReader do
97
97
  describe '#fields' do
98
98
 
99
99
  it 'returns all fields from schema' do
100
- expect(people_search.fields.first.to_h).to eq({:name=>"company_id", :type=>:integer, :options=>[]})
100
+ expect(people_search.fields[1].to_h).to eq({:name=>"company_id", :type=>:integer, :options=>[]})
101
101
  end
102
102
 
103
103
  end
@@ -7,20 +7,12 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
7
7
 
8
8
  before(:each) do
9
9
  ActiveMocker::Base.configure do |config|
10
- # Required Options
11
10
  config.schema_file = project_root + '/lib/active_record/db/schema.rb'
12
11
  config.model_dir = project_root + '/lib/active_record/app/models'
13
- # Additional Options
14
- # Dependency injection
15
- config.schema_file_reader = nil
16
- config.model_file_reader = nil
17
- config.active_hash_as_base = true #default
18
- #config.schema_attributes = true #default
19
- #config.model_relationships = true #default
20
- #config.model_methods = true #default
21
- #config.mass_assignment = true #default
22
- # Logging
23
- config.log_level = Logger::WARN #default
12
+ config.schema_file_reader = nil
13
+ config.model_file_reader = nil
14
+ config.active_hash_as_base = true
15
+ config.log_level = Logger::WARN
24
16
  end
25
17
  ActiveMocker::Base.mock('Person')
26
18
  end
@@ -63,30 +55,10 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
63
55
  let(:person_ar){Person.new(attributes)}
64
56
  let(:person_mock){PersonMock.new(attributes)}
65
57
 
66
- # DO NOT depend on the fact that attributes to be the same as AR
67
- # Work Around: seed all unused values with nil
68
- # Implementation Fix: On init give all values nil
69
-
70
- it 'the mock will exclude any attributes with nil and have a symbol and string version' do
71
- expect(person_mock.attributes).to eq({:first_name=>"Dustin", :last_name=>"Zeisler", "first_name"=>"Dustin", "last_name"=>"Zeisler"})
72
- end
73
-
74
- it 'can still ask for attribute that is nil on mock' do
75
- expect(person_mock[:middle_name]).to eq(nil)
58
+ it 'they are the same' do
59
+ expect(person_mock.attributes).to eq person_ar.attributes
76
60
  end
77
61
 
78
- it 'ar will include values with nil' do
79
- expect(person_ar.attributes).to eq({"id"=>nil, "company_id"=>nil, "first_name"=>"Dustin", "middle_name"=>nil, "last_name"=>"Zeisler", "address_1"=>nil, "address_2"=>nil, "city"=>nil, "state_id"=>nil, "zip_code_id"=>nil, "title"=>nil, "department"=>nil, "person_email"=>nil, "work_phone"=>nil, "cell_phone"=>nil, "home_phone"=>nil, "fax"=>nil, "user_id_assistant"=>nil, "birth_date"=>nil, "needs_review"=>nil, "created_at"=>nil, "updated_at"=>nil})
80
- end
81
-
82
- it 'compare access to attribute' do
83
- expect(person_mock.first_name).to eq person_ar.first_name
84
- expect(person_mock[:first_name]).to eq person_ar.first_name
85
- expect(person_mock['first_name']).to eq person_ar.first_name
86
- expect(person_ar[:first_name]).to eq person_mock.first_name
87
- end
88
-
89
-
90
62
  end
91
63
 
92
64
  describe 'associations' do
@@ -97,12 +69,9 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
97
69
  let(:person_ar){Person.new(create_attributes)}
98
70
  let(:person_mock){PersonMock.new(create_attributes)}
99
71
 
100
- # DO NOT Depend on this or your code will break in production
101
- # Work Around: To access associations call method
102
- # Implementation Fix: remove association from fields and make getter and setter method
103
-
104
- it 'The Mock will include associations in attributes' do
105
- expect(person_mock.attributes).to eq({:first_name=>"Dustin", :last_name=>"Zeisler", zip_code: zip_code, "first_name"=>"Dustin", "last_name"=>"Zeisler"})
72
+ it 'the Mock when adding an association will not set the _id attribute, do it manually' do
73
+ expect(person_mock.attributes).to eq({"id"=>nil, "company_id"=>nil, "first_name"=>"Dustin", "middle_name"=>nil, "last_name"=>"Zeisler", "address_1"=>nil, "address_2"=>nil, "city"=>nil, "state_id"=>nil, "zip_code_id"=>nil, "title"=>nil, "department"=>nil, "person_email"=>nil, "work_phone"=>nil, "cell_phone"=>nil, "home_phone"=>nil, "fax"=>nil, "user_id_assistant"=>nil, "birth_date"=>nil, "needs_review"=>nil, "created_at"=>nil, "updated_at"=>nil})
74
+ expect(person_mock.zip_code).to eq zip_code
106
75
  end
107
76
 
108
77
  it 'Ar will not include associations in attributes' do
@@ -115,12 +84,8 @@ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
115
84
 
116
85
  let(:column_names){["company_id", "first_name", "middle_name", "last_name", "address_1", "address_2", "city", "state_id", "zip_code_id", "title", "department", "person_email", "work_phone", "cell_phone", "home_phone", "fax", "user_id_assistant", "birth_date", "needs_review", "created_at", "updated_at"]}
117
86
 
118
- it 'mock does not include id column' do
119
- expect(PersonMock.column_names).to eq column_names
120
- end
121
-
122
- it 'AR does include id column' do
123
- expect(Person.column_names).to eq column_names.unshift('id')
87
+ it 'they are the same' do
88
+ expect(PersonMock.column_names).to eq Person.column_names
124
89
  end
125
90
 
126
91
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_mocker
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin Zeisler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-08 00:00:00.000000000 Z
11
+ date: 2014-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -160,6 +160,7 @@ extensions: []
160
160
  extra_rdoc_files: []
161
161
  files:
162
162
  - ".gitignore"
163
+ - ".hound.yml"
163
164
  - ".travis.yml"
164
165
  - Gemfile
165
166
  - LICENSE.txt
@@ -169,6 +170,7 @@ files:
169
170
  - lib/active_hash/ar_api.rb
170
171
  - lib/active_hash/destroy_all.rb
171
172
  - lib/active_hash/find_by.rb
173
+ - lib/active_hash/init.rb
172
174
  - lib/active_hash/update.rb
173
175
  - lib/active_mocker.rb
174
176
  - lib/active_mocker/active_record.rb
@@ -184,6 +186,7 @@ files:
184
186
  - lib/active_mocker/field.rb
185
187
  - lib/active_mocker/logger.rb
186
188
  - lib/active_mocker/model_reader.rb
189
+ - lib/active_mocker/public_methods.rb
187
190
  - lib/active_mocker/reparameterize.rb
188
191
  - lib/active_mocker/schema_reader.rb
189
192
  - lib/active_mocker/table.rb
@@ -236,3 +239,4 @@ test_files:
236
239
  - spec/lib/model.rb
237
240
  - spec/lib/person.rb
238
241
  - spec/lib/schema.rb
242
+ has_rdoc: