active_mocker 2.3.4 → 2.4.0.pre1

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: 8e8f5e3980719ae11507a108cf844c937e1771cb
4
- data.tar.gz: 0394d2fc047f12289c0441335f5a932142be3c1b
3
+ metadata.gz: d76ea3471b67a416239349d655e5e3e9061e2cf3
4
+ data.tar.gz: 1f10949f52554aa237ae3cf60ed7e7b56cc0c2fd
5
5
  SHA512:
6
- metadata.gz: e13cd71a327adc9561ee54499982d07446f9096f14a82a87b4552e76c88a57cf88dd72271fd0114ed6fa6cdd4bc05cc06d84c10f136e264011a63792ee679f31
7
- data.tar.gz: ceb03ee2172a1db9ed5976615a55019aa13188ba46252d82d0dd2bcfb3e9c9fea7188450475c5bedcfc12af627d8f0b57583b94518084946790204a1fa02877a
6
+ metadata.gz: 357f966e759449cf9ae50fba27ac6f319ddee7d06f719a3c5311c33666f6b385ed0291238c2f516b20d3baf9d171b96c6ae0030865839ff94379b0039882423e
7
+ data.tar.gz: f056acf32872ddcb7ec7c3f349241c7a93c459b8abf70cc14b3da61de3d1f0f5e982c4d97ddd33bc69d6ba9775f99ebdf38dd5f7b8e49bafb064eec0eef0cdc2
data/CHANGELOG.md CHANGED
@@ -1,10 +1,27 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
- ## 2.3.4 - 2016-10-21
5
- ### Fix
6
- - Passing a single record when to collection association now causes a failure.
7
-
4
+ ## 2.4.0.pre1 - 2016-10-13
5
+ ### Enhancement
6
+ - Option to delete all records before each example
7
+ It can be enabled for specific test context.
8
+ ```ruby
9
+ before(:all) { active_mocker.features.enable(:delete_all_before_example) }
10
+ after(:all) { active_mocker.features.disable(:delete_all_before_example) }
11
+ ```
12
+
13
+ Or it can be enabled as the default
14
+
15
+ ```ruby
16
+ ActiveMocker::LoadedMocks.features.enable(:delete_all_before_example)
17
+ ```
18
+
19
+ - Option to enable timestamps
20
+
21
+ ```ruby
22
+ ActiveMocker::LoadedMocks.features.enable(:timestamps)
23
+ ```
24
+
8
25
  ## 2.3.3 - 2016-10-13
9
26
  ### Enhancement
10
27
  - Auto stubbing of ActiveRecord::RecordNotFound with requiring "active_mocker/rspec_helper"
data/README.md CHANGED
@@ -25,6 +25,7 @@ Examples from a real apps
25
25
  * [Generate](#generate_mocks)
26
26
  * [Dependencies](#dependencies)
27
27
  * [Usage](#usage)
28
+ * [Optional Features](#optional-features)
28
29
  * [Mocking Methods](#mocking-methods)
29
30
  * [Managing Mocks](#managing-mocks)
30
31
  * [ActiveRecord supported methods](#activerecord-supported-methods)
@@ -188,6 +189,21 @@ This give the full query API (ie. find_by, where, etc).
188
189
  This is not feature available in ActiveRecord as such do not include this where you intend to swap in ActiveRecord.
189
190
 
190
191
 
192
+ ## Optional Features
193
+
194
+ Use theses defaults if you are starting fresh
195
+
196
+ ```ruby
197
+ ActiveMocker::LoadedMocks.features.enable(:timestamps)
198
+ ActiveMocker::LoadedMocks.features.enable(:delete_all_before_example)
199
+ ```
200
+
201
+ ### timestamps
202
+ Enables created_at and updated_at to be update on save and create
203
+
204
+ ### delete_all_before_example
205
+ When using "active_mocker/rspec_helper" it delete all records from all mocks before each example.
206
+
191
207
  ## Mocking Methods
192
208
 
193
209
  #### Rspec 3 Mocks - verify double
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
+ require_relative "loaded_mocks/features"
3
+
2
4
  module ActiveMocker
3
5
  class LoadedMocks
4
6
  class << self
@@ -25,6 +27,10 @@ module ActiveMocker
25
27
  # @deprecated Use {#delete_all} instead of this method.
26
28
  alias clear_all delete_all
27
29
 
30
+ def features
31
+ @features ||= Features.instance
32
+ end
33
+
28
34
  class Collection
29
35
  include Enumerable
30
36
 
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+ require "singleton"
3
+
4
+ module ActiveMocker
5
+ class LoadedMocks
6
+ class Features
7
+ include Singleton
8
+ DEFAULTS = {
9
+ timestamps: false,
10
+ delete_all_before_example: false,
11
+ }.freeze
12
+
13
+ def initialize
14
+ reset
15
+ end
16
+
17
+ def each(&block)
18
+ @features.each(&block)
19
+ end
20
+
21
+ def enable(feature)
22
+ update(feature, true)
23
+ end
24
+
25
+ def disable(feature)
26
+ update(feature, false)
27
+ end
28
+
29
+ def [](feature)
30
+ @features[feature]
31
+ end
32
+
33
+ def reset
34
+ @features = DEFAULTS.dup
35
+ end
36
+
37
+ def to_h
38
+ @features
39
+ end
40
+
41
+ private
42
+
43
+ def update(feature, value)
44
+ if @features.key?(feature)
45
+ @features[feature] = value
46
+ else
47
+ raise KeyError, "#{feature} is not an available feature."
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -37,7 +37,9 @@ module ActiveMocker
37
37
  attributes.collect { |attr| create(attr, &block) }
38
38
  else
39
39
  record = new(id: attributes.delete(:id) || attributes.delete("id"))
40
+
40
41
  record.save
42
+ record.touch(:created_at, :created_on) if ActiveMocker::LoadedMocks.features[:timestamps]
41
43
  record.assign_attributes(attributes, &block)
42
44
  record._create_caller_locations = caller_locations
43
45
  record
@@ -228,11 +230,27 @@ module ActiveMocker
228
230
 
229
231
  def save(*_args)
230
232
  self.class.send(:insert, self) unless self.class.exists?(self)
233
+ touch if ActiveMocker::LoadedMocks.features[:timestamps]
231
234
  true
232
235
  end
233
236
 
234
237
  alias save! save
235
238
 
239
+ def touch(*names)
240
+ raise ActiveMocker::Error, "cannot touch on a new record object" unless persisted?
241
+
242
+ attributes = [:updated_at, :update_on]
243
+ attributes.concat(names)
244
+
245
+ current_time = Time.now.utc
246
+
247
+ attributes.each do |column|
248
+ column = column.to_s
249
+ write_attribute(column, current_time) if self.class.attribute_names.include?(column)
250
+ end
251
+ true
252
+ end
253
+
236
254
  def records
237
255
  self.class.send(:records)
238
256
  end
@@ -9,7 +9,7 @@ module ActiveMocker
9
9
  alias distinct uniq
10
10
 
11
11
  def initialize(collection = [])
12
- @collection = collection
12
+ @collection = [*collection]
13
13
  end
14
14
 
15
15
  def <<(*records)
@@ -19,4 +19,12 @@ RSpec.configure do |config|
19
19
  config.before(:all, active_mocker: true) do
20
20
  ActiveMocker::LoadedMocks.delete_all
21
21
  end
22
+
23
+ config.after(:each, active_mocker: true) do
24
+ ActiveMocker::LoadedMocks.delete_all if active_mocker.features[:delete_all_before_example]
25
+ end
26
+
27
+ config.before(:each, active_mocker: true) do
28
+ ActiveMocker::LoadedMocks.delete_all if active_mocker.features[:delete_all_before_example]
29
+ end
22
30
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ActiveMocker
3
- VERSION = "2.3.4"
3
+ VERSION = "2.4.0.pre1"
4
4
  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: 2.3.4
4
+ version: 2.4.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin Zeisler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-21 00:00:00.000000000 Z
11
+ date: 2016-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -202,6 +202,7 @@ files:
202
202
  - lib/active_mocker/inspectable/struct.rb
203
203
  - lib/active_mocker/inspectable/time.rb
204
204
  - lib/active_mocker/loaded_mocks.rb
205
+ - lib/active_mocker/loaded_mocks/features.rb
205
206
  - lib/active_mocker/mock.rb
206
207
  - lib/active_mocker/mock/alias_attribute.rb
207
208
  - lib/active_mocker/mock/association.rb
@@ -256,9 +257,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
256
257
  version: '2.1'
257
258
  required_rubygems_version: !ruby/object:Gem::Requirement
258
259
  requirements:
259
- - - ">="
260
+ - - ">"
260
261
  - !ruby/object:Gem::Version
261
- version: '0'
262
+ version: 1.3.1
262
263
  requirements: []
263
264
  rubyforge_project:
264
265
  rubygems_version: 2.5.1