active_mocker 1.1.5 → 1.1.6

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: fee89ae476ccff5a47b1f6c15c4a0036f5e9d3b2
4
- data.tar.gz: 5002d95f09b0d38c150c4a588c7be78ba500916a
3
+ metadata.gz: 5d68198a21ac2738734c94c5565127480b8772d8
4
+ data.tar.gz: 55577fbc878b514b20b2c6a4ed8169e273fd610d
5
5
  SHA512:
6
- metadata.gz: e864d32a9f5f989aa7a314b70d262b1750320b04edbd22efd11c50810d44f8164c0461fedd3a19e3ae0ad18c1dfb8fc19ad50764779614baab9678f00d667342
7
- data.tar.gz: 316f7e5f90edd75801a1cd2c11ea676e6eddb379eb9a419a74099589c8557e0b757d3843bc18019ea26c597337fa4e66dcaa7cc953939cf1477569b46466d5ec
6
+ metadata.gz: d3d812eeae5501c118b19293b99f405bcdf6683c692b4a6aadebda619d5a9d0eaf13351db8787058f1a84ff5b0da46aa78077ca18e0d9238f9a8aaa8d71f14d2
7
+ data.tar.gz: cebef904a1a20c104b27bf005ea1bd263354bd4215536da28930fb6c3fee6a202ced8354350b511242d93159ddcce0cfe737526d961e28c242c2f6dab7350f97
@@ -27,10 +27,12 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "rake", "~>10.1"
28
28
  spec.add_development_dependency "rspec", "~>2.14"
29
29
  spec.add_development_dependency "i18n", "~>0.6"
30
+ spec.add_development_dependency "activerecord", "~>4.0"
31
+ spec.add_development_dependency "sqlite3", "~>1.3"
30
32
 
31
- if ENV['DEBUG'] == '1'
33
+ # if ENV['DEBUG'] == '1'
32
34
  spec.add_development_dependency "debase", "~>0.0"
33
35
  spec.add_development_dependency "ruby-debug-ide", "~>0.4"
34
- end
36
+ # end
35
37
 
36
38
  end
@@ -5,7 +5,7 @@ module ActiveHash
5
5
  module FindBy
6
6
 
7
7
  def find_by(options = {})
8
- send("find_by_#{options.keys.first}", options.values.first)
8
+ send(:where, options).first
9
9
  end
10
10
 
11
11
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveMocker
2
- VERSION = "1.1.5"
2
+ VERSION = "1.1.6"
3
3
  end
@@ -0,0 +1,3 @@
1
+ class Person < ActiveRecord::Base
2
+ belongs_to :zip_code
3
+ end
@@ -0,0 +1,2 @@
1
+ class ZipCode < ActiveRecord::Base
2
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+
4
+ ActiveRecord::Base.establish_connection({
5
+ :adapter => "sqlite3",
6
+ database: ":memory:"
7
+ })
8
+ require_relative 'db/schema'
9
+ project_root = File.dirname(File.absolute_path(__FILE__))
10
+ Dir.glob(project_root + "/app/models/*.rb").each{|f| require f }
@@ -0,0 +1,38 @@
1
+ ActiveRecord::Schema.define(version: 20140327205359) do
2
+
3
+ create_table "people", force: true do |t|
4
+ t.integer "company_id"
5
+ t.string "first_name", limit: 128
6
+ t.string "middle_name", limit: 128
7
+ t.string "last_name", limit: 128
8
+ t.string "address_1", limit: 200
9
+ t.string "address_2", limit: 100
10
+ t.string "city", limit: 100
11
+ t.integer "state_id"
12
+ t.integer "zip_code_id"
13
+ t.string "title", limit: 150
14
+ t.string "department", limit: 150
15
+ t.string "person_email", limit: 150
16
+ t.string "work_phone", limit: 20
17
+ t.string "cell_phone", limit: 20
18
+ t.string "home_phone", limit: 20
19
+ t.string "fax", limit: 20
20
+ t.integer "user_id_assistant"
21
+ t.date "birth_date"
22
+ t.boolean "needs_review"
23
+ t.datetime "created_at"
24
+ t.datetime "updated_at"
25
+
26
+ end
27
+
28
+ create_table "zip_codes", force: true do |t|
29
+ t.string "zip_code", limit: 9
30
+ t.integer "state_id"
31
+ t.integer "cola_by_fip_id"
32
+ t.string "city_name", limit: 100
33
+ t.string "County_name", limit: 100
34
+ t.decimal "City_Latitude", precision: 8, scale: 4
35
+ t.decimal "City_Longitude", precision: 8, scale: 4
36
+ end
37
+
38
+ end
@@ -0,0 +1,167 @@
1
+ require 'rspec'
2
+ project_root = File.expand_path('../../../', __FILE__)
3
+ require "#{project_root}/lib/active_record/ar"
4
+ require "#{project_root}/lib/active_mocker"
5
+
6
+ describe 'Comparing ActiveMocker Api to ActiveRecord Api' do
7
+
8
+ before(:each) do
9
+ ActiveMocker::Base.configure do |config|
10
+ # Required Options
11
+ config.schema_file = project_root + '/lib/active_record/db/schema.rb'
12
+ 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
24
+ end
25
+ ActiveMocker::Base.mock('Person')
26
+ end
27
+
28
+ after(:each) do
29
+ PersonMock.destroy_all
30
+ Person.destroy_all
31
+ end
32
+
33
+ let(:attributes){{first_name: 'Dustin', last_name: 'Zeisler'}}
34
+
35
+ describe '::superclass' do
36
+
37
+ it 'mock has super of active hash' do
38
+ expect(PersonMock.superclass.name).to eq "ActiveHash::Base"
39
+ end
40
+
41
+ it 'ar has super of ar' do
42
+ expect(Person.superclass.name).to eq "ActiveRecord::Base"
43
+
44
+ end
45
+
46
+ end
47
+
48
+ describe '::create' do
49
+
50
+ let(:create_attributes){attributes}
51
+
52
+ it 'mock will take all attributes that AR takes' do
53
+
54
+ person = Person.create(create_attributes)
55
+ person_mock = PersonMock.create(create_attributes)
56
+
57
+ end
58
+
59
+ end
60
+
61
+ describe '#attributes' do
62
+
63
+ let(:person_ar){Person.new(attributes)}
64
+ let(:person_mock){PersonMock.new(attributes)}
65
+
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)
76
+ end
77
+
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
+ end
91
+
92
+ describe 'associations' do
93
+
94
+ let(:zip_code){ZipCode.create(zip_code: '97023')}
95
+ let(:create_attributes){attributes.merge({zip_code: zip_code})}
96
+
97
+ let(:person_ar){Person.new(create_attributes)}
98
+ let(:person_mock){PersonMock.new(create_attributes)}
99
+
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"})
106
+ end
107
+
108
+ it 'Ar will not include associations in attributes' do
109
+ 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"=>2, "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})
110
+ end
111
+
112
+ end
113
+
114
+ describe 'column_names' do
115
+
116
+ 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
+
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')
124
+ end
125
+
126
+ end
127
+
128
+ describe '::find_by' do
129
+
130
+ let!(:ar_record){Person.create(attributes)}
131
+ let!(:mock_record){PersonMock.create(attributes)}
132
+ let!(:mock_record_2){PersonMock.create(attributes.merge({title: 'Developer'}))}
133
+
134
+ it 'AR' do
135
+ expect(ar_record).to eq Person.find_by(first_name: 'Dustin', last_name: 'Zeisler')
136
+ end
137
+
138
+ it 'Mock' do
139
+ PersonMock.create(first_name: 'Dustin', last_name: 'Zeisler', title: 'Developer')
140
+ expect(PersonMock.create(title: 'Developer', first_name: 'Dustin', last_name: 'Adams')).to eq PersonMock.find_by(title: 'Developer', last_name: 'Adams')
141
+ end
142
+
143
+ end
144
+
145
+ describe '::where' do
146
+
147
+ let(:ar_record){Person.create(attributes)}
148
+ let(:mock_record){PersonMock.create(attributes)}
149
+ let(:mock_record_2){PersonMock.create(attributes.merge(title: 'Developer'))}
150
+
151
+ it 'AR' do
152
+ expect([ar_record]).to eq Person.where(first_name: 'Dustin', last_name: 'Zeisler')
153
+ end
154
+
155
+ it 'Mock' do
156
+ expect([mock_record]).to eq PersonMock.where(first_name: 'Dustin', last_name: 'Zeisler')
157
+ end
158
+
159
+ it 'Mock will not take sql string needs to be mocked' do
160
+ PersonMock.create(first_name: 'Dustin', last_name: 'Zeisler', title: 'Developer')
161
+ expect{PersonMock.where("first_name = 'Dustin'")}.to raise_error
162
+ end
163
+
164
+ end
165
+
166
+
167
+ 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.5
4
+ version: 1.1.6
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-04 00:00:00.000000000 Z
11
+ date: 2014-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -94,6 +94,62 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.6'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activerecord
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '4.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '4.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.3'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.3'
125
+ - !ruby/object:Gem::Dependency
126
+ name: debase
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: ruby-debug-ide
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.4'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.4'
97
153
  description: Create mocks from active record models without loading rails or running
98
154
  a database. The Mock's methods have the same arguments as the AR model and if they
99
155
  change you get a error in your test.
@@ -132,12 +188,17 @@ files:
132
188
  - lib/active_mocker/schema_reader.rb
133
189
  - lib/active_mocker/table.rb
134
190
  - lib/active_mocker/version.rb
191
+ - lib/active_record/app/models/person.rb
192
+ - lib/active_record/app/models/zip_code.rb
193
+ - lib/active_record/ar.rb
194
+ - lib/active_record/db/schema.rb
135
195
  - lib/file_reader.rb
136
196
  - lib/string_reader.rb
137
197
  - spec/lib/active_mocker/active_record/schema_spec.rb
138
198
  - spec/lib/active_mocker/base_spec.rb
139
199
  - spec/lib/active_mocker/model_reader_spec.rb
140
200
  - spec/lib/active_mocker/schema_reader_spec.rb
201
+ - spec/lib/compare_mocker_and_record_spec.rb
141
202
  - spec/lib/model.rb
142
203
  - spec/lib/person.rb
143
204
  - spec/lib/schema.rb
@@ -171,6 +232,7 @@ test_files:
171
232
  - spec/lib/active_mocker/base_spec.rb
172
233
  - spec/lib/active_mocker/model_reader_spec.rb
173
234
  - spec/lib/active_mocker/schema_reader_spec.rb
235
+ - spec/lib/compare_mocker_and_record_spec.rb
174
236
  - spec/lib/model.rb
175
237
  - spec/lib/person.rb
176
238
  - spec/lib/schema.rb