rspec-request_snapshot 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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