simple_approvals-rspec 1.0.1 → 1.0.2

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: 2a51d82a022a6e84e8aaf9ff114cea20d3c514aa
4
- data.tar.gz: 73ee8e2d6c0470bbda063095cd59d69446688425
3
+ metadata.gz: 814f75f6418ca6f93bcb761ef3e3ad6589c5584a
4
+ data.tar.gz: a7d45f22b4751d8afd90ace0623d0cb897282c59
5
5
  SHA512:
6
- metadata.gz: 360e703a519796166e7c817bb0fee99e192d0fd698a32699888dcffeb66709604a5daaf9902fafcb629446b0021e401e97c7c44f532780a70395988e91801555
7
- data.tar.gz: 9ac38624579b13149acbfe87f9210344ef18380764d54d0969197c91ba2d9a53dbe50ab5ada381cda7158dc66a21a954f0e32a71dc3056d1bc93c4cd77f2de31
6
+ metadata.gz: cf1e5b00dd26c840d45d495ce0da9bffbda755c5ad3ab5798fde864a4dbf1482014bf7350852237a95f594ee1073d7019a29206fc45de03d5534f464cc5661ce
7
+ data.tar.gz: da4e6c6e613f3501382dc853f121e84771118ba7f0ec74cfd84c9c4fc27d9776155023bcc532e7401fa790b197e5703ba29a9eb6a4b11cc7a920a2814bf7179c
@@ -0,0 +1,2 @@
1
+ require 'simple_approvals/rspec/approvals'
2
+ require 'simple_approvals/rspec/matchers'
@@ -0,0 +1,68 @@
1
+ # Top-level class to provide approval test support (inspired by http://approvaltests.com/)
2
+ class Approvals
3
+ class << self
4
+ def verify(rendered_content, approved_path, **options)
5
+ scrubbed_content = apply_optional_scrubber(rendered_content, options)
6
+ pre_approve_if_asked(approved_path, scrubbed_content, options)
7
+
8
+ expected_content = load_expected_content(approved_path, **options)
9
+ received_path = received_path_for approved_path
10
+
11
+ if scrubbed_content.strip.empty?
12
+ raise_verify_error_with_diff(approved_path, received_path, scrubbed_content, **options) unless options[:allow_empty]
13
+ elsif scrubbed_content.strip == expected_content.strip
14
+ handle_match(received_path, scrubbed_content, **options)
15
+ else
16
+ raise_verify_error_with_diff(approved_path, received_path, scrubbed_content, **options)
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def apply_optional_scrubber(content, **options)
23
+ if options.key?(:scrubber) && options[:scrubber]
24
+ options[:scrubber].call(content)
25
+ else
26
+ content
27
+ end
28
+ end
29
+
30
+ def pre_approve_if_asked(approved_path, scrubbed_content, **options)
31
+ File.write(approved_path, scrubbed_content) if options[:approve_all] || options[:accept_all]
32
+ end
33
+
34
+ def handle_match(received_path, received_content, **options)
35
+ if options[:keep_received_file] == true
36
+ File.write(received_path, received_content)
37
+ elsif File.file?(received_path)
38
+ File.delete received_path
39
+ end
40
+ end
41
+
42
+ def received_path_for(approved_path)
43
+ "#{approved_path}.received"
44
+ end
45
+
46
+ def load_expected_content(approved_path, **options)
47
+ if File.file? approved_path
48
+ File.read(approved_path)
49
+ else
50
+ File.open(approved_path, 'w') { |f| f.write('') } if options[:create_if_missing]
51
+ ''
52
+ end
53
+ end
54
+
55
+ def raise_verify_error_with_diff(approved_path, received_path, received_content, **options)
56
+ File.write(received_path, received_content)
57
+
58
+ # and generate a diff for the console
59
+ message = options[:message_override] || %(Approval failed to match "#{approved_path}")
60
+ message << "\n"
61
+ message << %(- writing received content to: "#{received_path}")
62
+ message << "\n"
63
+
64
+ expected_content = load_expected_content(approved_path)
65
+ ::RSpec::Expectations.fail_with message, expected_content, received_content
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,9 @@
1
+ require 'rspec/expectations'
2
+
3
+ RSpec::Matchers.define :match_hash do |expected|
4
+ match do |actual|
5
+ expect(JSON.pretty_generate(actual).strip).to eq(JSON.pretty_generate(expected).strip)
6
+ end
7
+
8
+ diffable
9
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_approvals-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Alpert
@@ -115,13 +115,10 @@ executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
- - ".editorconfig"
119
- - ".gitignore"
120
- - ".rubocop.yml"
121
- - Gemfile
122
118
  - README.md
123
- - VERSION
124
- - rakefile.rb
119
+ - lib/simple_approvals/rspec.rb
120
+ - lib/simple_approvals/rspec/approvals.rb
121
+ - lib/simple_approvals/rspec/matchers.rb
125
122
  homepage: https://github.com/davidalpert/simple_approvals-rspec/
126
123
  licenses: []
127
124
  metadata: {}
data/.editorconfig DELETED
@@ -1,15 +0,0 @@
1
- # top-most EditorConfig file
2
- root = true
3
-
4
- # Unix-style newlines with a newline ending every file
5
- [*]
6
- end_of_line = lf
7
- insert_final_newline = true
8
-
9
- [*.rb]
10
- indent_style = space
11
- indent_size = 2
12
-
13
- [*.json]
14
- indent_style = space
15
- indent_size = 2
data/.gitignore DELETED
@@ -1,29 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- InstalledFiles
7
- _yardoc
8
- coverage
9
- doc/
10
- lib/bundler/man
11
- pkg
12
- rdoc
13
- spec/reports
14
- test/tmp
15
- test/version_tmp
16
- tmp
17
- .idea/*
18
- *.swp
19
- *Gemfile.lock
20
- .DS_Store
21
- .gradle/
22
- archive*
23
- build/*
24
- *.pyc
25
- node_modules/
26
- rubocop.html
27
- tags
28
- .fingerprint
29
- LOGFILE_*
data/.rubocop.yml DELETED
@@ -1,33 +0,0 @@
1
- # encoding: utf-8
2
- AllCops:
3
- Exclude:
4
- - 'vendor/**/*'
5
- - 'spec/fixtures/**/*'
6
- - 'spec/spec_helper.rb'
7
- - 'rakefile.rb'
8
- # - 'simple_approvals.gemspec'
9
- # - 'Gemfile'
10
- # - 'example/rakefile.rb'
11
- # - 'example/Gemfile'
12
- # - 'example/**/*'
13
- # - 'spec/**/*'
14
- Style/Encoding:
15
- Enabled: true
16
-
17
- SignalException:
18
- EnforcedStyle: only_raise
19
-
20
- CaseIndentation:
21
- EnforcedStyle: end
22
-
23
- Metrics/ClassLength:
24
- Enabled: false
25
-
26
- Metrics/MethodLength:
27
- Enabled: false
28
-
29
- Metrics/LineLength:
30
- Enabled: false
31
-
32
- Metrics/ParameterLists:
33
- Max: 6
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.0.1
data/rakefile.rb DELETED
@@ -1,27 +0,0 @@
1
- # encoding: utf-8
2
- $: << './'
3
-
4
- require 'rubygems'
5
- require 'bundler/setup'
6
-
7
- require 'version_bumper'
8
- require 'bundler'
9
- require 'bundler/gem_helper'
10
- require 'geminabox_client'
11
-
12
- module SimpleApprovals
13
- # Helper for setting version
14
- module RSpec
15
- # Helper for setting version
16
- class GemHelper < Bundler::GemHelper
17
- def reload_version
18
- @gemspec.version = SimpleApprovals::RSpec.gem_version
19
- end
20
- end
21
-
22
- # The current version of the gem
23
- def self.gem_version
24
- File.read('VERSION').strip
25
- end
26
- end
27
- end