rspec-request_snapshot 0.5.0 → 0.6.0

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
- SHA256:
3
- metadata.gz: ebce346679cd3afa78a14b57d9483e9afdfa936daa9f154324f5e4e0b46faf84
4
- data.tar.gz: 8df3dcbfaaeff8d973c8595e91238bd361a8a740d532dc3df4a6c5aebf151c12
2
+ SHA1:
3
+ metadata.gz: 8f2c9dc8612a821675811ac7621e84a9da8bb54d
4
+ data.tar.gz: d09a1183cc112880e8f4fbb61fd34a6be5d6dd91
5
5
  SHA512:
6
- metadata.gz: a9fa5861c5387b50d73d2348210b270282129ea7fe68825a3c6ccef21418e3df42200de04fbb2714258ccbd26fcc449216534c7ae0d16e82263056470dff489a
7
- data.tar.gz: 63303ef240dce2b6872152903fc514297fc393004301a91e5016cc8863421dac9425750b6793cee700d60e8677bbb7fec90e6b52d60d354ac6596f99d0fa56a7
6
+ metadata.gz: ea9601e44240f191364333687fc2e3541887d01ca7e965b488d58a3ed62048747bcaa08104a338397e3fffb6101a8330d8fef2fcc5a172acf71d69971640aa10
7
+ data.tar.gz: 2f2cb89d4effa9f238d112f19743c81ec7bbef73ee55123574398130c906fb4059c8e6540019fb8eedd9357a8379e9b14a27ef5384d4b87810ae3d042e0da464
data/.circleci/config.yml CHANGED
@@ -2,7 +2,7 @@ version: 2
2
2
  jobs:
3
3
  build:
4
4
  docker:
5
- - image: circleci/ruby:2.5-node-browsers
5
+ - image: circleci/ruby:2.1
6
6
 
7
7
  working_directory: ~/repo
8
8
 
data/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # Changelog
2
+
3
+ ## [v0.6.0]
4
+
5
+ ### Fixed
6
+ - Removed code that made gem compatible only with ruby >= 2.3
7
+
8
+ ### Added
9
+ - Added support for regex on dynamic attributes
10
+ - Added a CHANGELOG.md file
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-request_snapshot (0.5.0)
4
+ rspec-request_snapshot (0.6.0)
5
5
  rspec (~> 3.0)
6
6
 
7
7
  GEM
@@ -40,4 +40,4 @@ DEPENDENCIES
40
40
  simplecov (~> 0.16.1)
41
41
 
42
42
  BUNDLED WITH
43
- 1.16.6
43
+ 1.17.3
data/README.md CHANGED
@@ -80,6 +80,19 @@ Notice that **all** nodes matching those (nested or not) will be ignored. Usage:
80
80
  expect(response.body).to match_snapshot("api/resources_index", dynamic_attributes: %w(confirmed_at relation_id))
81
81
  ```
82
82
 
83
+ ##### dynamic_attributes with regex
84
+
85
+ Sometimes you don't want to fully ignore an attribute. For example, you want to make sure
86
+ that `generated_id` is present and following a given pattern, but that attribute can change
87
+ randonly, use `dynamic_attributes` with object/regex notation:
88
+
89
+ ```ruby
90
+ # Example generated_id: ABC-001
91
+ expect(response.body).to match_snapshot("api/resources_index", dynamic_attributes: [{ generated_id: /^\w{3}-\d{3}$/ }])
92
+ ```
93
+
94
+ **Note:** Partial matches are also possible, so use the start/end of line characters for a strict match
95
+
83
96
  ##### ignore_order
84
97
 
85
98
  It is possible to use the `ignore_order` inline option to mark which array nodes are unsorted and that elements position
@@ -2,18 +2,37 @@
2
2
 
3
3
  module Rspec::RequestSnapshot::Handlers
4
4
  class Base
5
+ attr_reader :dynamic_attributes_with_regex
6
+
5
7
  def initialize(options = {})
6
8
  @options = options
7
9
  end
8
10
 
9
11
  def dynamic_attributes
10
- @dynamic_attributes ||= RSpec.configuration.request_snapshots_dynamic_attributes |
11
- Array(@options[:dynamic_attributes])
12
+ @dynamic_attributes ||= begin
13
+ list = RSpec.configuration.request_snapshots_dynamic_attributes | Array(@options[:dynamic_attributes])
14
+ strip_attributes_with_regex(list)
15
+ end
12
16
  end
13
17
 
14
18
  def ignore_order
15
19
  @ignore_order ||= RSpec.configuration.request_snapshots_ignore_order |
16
20
  Array(@options[:ignore_order])
17
21
  end
22
+
23
+ private
24
+
25
+ def strip_attributes_with_regex(list)
26
+ @dynamic_attributes_with_regex = {}
27
+ list.map do |element|
28
+ if element.is_a?(String)
29
+ element
30
+ else
31
+ key = element.keys.first.to_s
32
+ @dynamic_attributes_with_regex[key] = element.values.first
33
+ key
34
+ end
35
+ end
36
+ end
18
37
  end
19
38
  end
@@ -18,7 +18,7 @@ class Rspec::RequestSnapshot::Handlers::JSON < Rspec::RequestSnapshot::Handlers:
18
18
  def deep_transform_values(hash)
19
19
  hash.each_key do |key|
20
20
  if dynamic_attributes.include?(key)
21
- hash[key] = "REPLACED"
21
+ handle_dynamic_attribute(hash, key)
22
22
  next
23
23
  end
24
24
 
@@ -42,4 +42,12 @@ class Rspec::RequestSnapshot::Handlers::JSON < Rspec::RequestSnapshot::Handlers:
42
42
  def sort_elements(hash, key)
43
43
  hash[key].first.is_a?(Hash) ? hash[key].sort_by! { |e| e.keys.map { |k| e[k] } } : hash[key].sort!
44
44
  end
45
+
46
+ def handle_dynamic_attribute(hash, key)
47
+ if dynamic_attributes_with_regex.key?(key)
48
+ hash[key] = dynamic_attributes_with_regex[key] if dynamic_attributes_with_regex[key].match(hash[key].to_s)
49
+ else
50
+ hash[key] = "IGNORED"
51
+ end
52
+ end
45
53
  end
@@ -32,7 +32,7 @@ module Rspec::RequestSnapshot
32
32
  end
33
33
 
34
34
  def format
35
- @options[:format]&.to_sym || RSpec.configuration.request_snapshots_default_format
35
+ (@options[:format] && @options[:format].to_sym) || RSpec.configuration.request_snapshots_default_format
36
36
  end
37
37
 
38
38
  def handler
@@ -3,7 +3,7 @@
3
3
  # rubocop:disable Style/ClassAndModuleChildren
4
4
  module Rspec
5
5
  module RequestSnapshot
6
- VERSION = "0.5.0"
6
+ VERSION = "0.6.0"
7
7
  end
8
8
  end
9
9
  # rubocop:enable Style/ClassAndModuleChildren
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-request_snapshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Campos
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-06 00:00:00.000000000 Z
11
+ date: 2019-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.16'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.16'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: simplecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 0.16.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.16.1
69
69
  description: Make sure API behavior is not changing by taking and storing a snapshot
@@ -74,12 +74,13 @@ executables: []
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
- - ".circleci/config.yml"
78
- - ".codeclimate.yml"
79
- - ".gitignore"
80
- - ".rspec"
81
- - ".rubocop.yml"
82
- - ".ruby-version"
77
+ - .circleci/config.yml
78
+ - .codeclimate.yml
79
+ - .gitignore
80
+ - .rspec
81
+ - .rubocop.yml
82
+ - .ruby-version
83
+ - CHANGELOG.md
83
84
  - Gemfile
84
85
  - Gemfile.lock
85
86
  - LICENSE.txt
@@ -105,17 +106,17 @@ require_paths:
105
106
  - lib
106
107
  required_ruby_version: !ruby/object:Gem::Requirement
107
108
  requirements:
108
- - - ">="
109
+ - - '>='
109
110
  - !ruby/object:Gem::Version
110
111
  version: '0'
111
112
  required_rubygems_version: !ruby/object:Gem::Requirement
112
113
  requirements:
113
- - - ">="
114
+ - - '>='
114
115
  - !ruby/object:Gem::Version
115
116
  version: '0'
116
117
  requirements: []
117
118
  rubyforge_project:
118
- rubygems_version: 2.7.3
119
+ rubygems_version: 2.0.14.1
119
120
  signing_key:
120
121
  specification_version: 4
121
122
  summary: Gold master testing for RSpec API request specs