rspec-golden-files 0.1.0 → 0.1.1

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
  SHA256:
3
- metadata.gz: b1c393bc388b86d3741692619898b67ddffd186fa167a4d5caf453efe8830dd5
4
- data.tar.gz: 23132b6702d2da10b1604eb1713e822543f0a3e3d4553b6396c1fe86be40cc4e
3
+ metadata.gz: a98878d75b0018ab0a1a8860e07fc9f5dcbffbe5cfd079e87e7afc42af82f6bc
4
+ data.tar.gz: 2554850a7dc5b799613fd40558949ae709d8210c14df3754571058a95431c56d
5
5
  SHA512:
6
- metadata.gz: fb60190f4c79728c99d75b57d42f304015fbb3b87dc356ab1096cbec0b0bf74b45624df5af920a7890dc90548e491c5d6e42a577bee083f74b9de16f86c598a0
7
- data.tar.gz: 7c679d6bf09b62be815736e9083eb35726f42c8e0febdd97543534fba32c91d555f1f71115ba4035ea38b1809ff8f8087f408f5004defee61d0b56bd79b447b6
6
+ metadata.gz: 4d4e6054cf62ef5cef0496f5209f1d548522bfe9f703904f8b59bf9fd08a835e20ca954ff8df47c4263230758156ab8ea3993c9135e22c6a087d6b58a556fad4
7
+ data.tar.gz: d976117750b9e7c5834164e15d63edb1953328191c9294e0571cb42d907083149a821ad08206dc1a9f73e0ab9f46bf0e1a72ddae5db5d4d65e0e0a6208ef162a
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # RSpec::Matchers::GoldenFiles
1
+ # RSpec::GoldenFiles
2
2
 
3
3
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/rspec/golden/files`. To experiment with that code, run `bin/console` for an interactive prompt.
4
4
 
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tempfile'
4
+ require 'erb'
5
+ require 'ostruct'
6
+
7
+ module RSpec
8
+ module GoldenFiles
9
+ VERSION = '0.1.1'.freeze
10
+
11
+ class SimpleFileReader
12
+ def initialize(filename)
13
+ @filename = filename
14
+ @file_contents = File.read(@filename)
15
+ end
16
+
17
+ def filename
18
+ @filename
19
+ end
20
+
21
+ def expected_value
22
+ @file_contents
23
+ end
24
+
25
+ def close; end
26
+ end
27
+
28
+ class ErbFileReader < SimpleFileReader
29
+ # HACK: Make hash keys usable in templates
30
+ # due to ERB's poor `#result_with_hash` usefulness.
31
+ class TemplateStruct < OpenStruct
32
+ def render(template)
33
+ template.result(binding)
34
+ end
35
+ end
36
+
37
+ def initialize(filename, template_vars)
38
+ plain_file_contents = File.read(filename)
39
+ template = ERB.new(plain_file_contents)
40
+ template_struct = TemplateStruct.new(template_vars)
41
+
42
+ @file_contents = template_struct.render(template)
43
+
44
+ @tmpfile = Tempfile.new('expected')
45
+ @tmpfile.write(@file_contents)
46
+ @tmpfile.close(false)
47
+
48
+ @filename = @tmpfile.path
49
+ end
50
+
51
+ def close
52
+ @tmpfile.delete
53
+ end
54
+ end
55
+
56
+ class GoldenFilesMatcher
57
+ def initialize(filename, file_reader_type, template_vars)
58
+ @filename = filename
59
+ @file_reader_type = file_reader_type
60
+ @template_vars = template_vars
61
+ end
62
+
63
+ def matches?(value)
64
+ unless File.exist?(@filename)
65
+ raise ArgumentError "golden file '#{@filename}' not found"
66
+ end
67
+
68
+ @value = value
69
+
70
+ actual_tmpfile = Tempfile.new('actual')
71
+ actual_tmpfile.write(value.to_s)
72
+ actual_tmpfile.close(false)
73
+
74
+ file_reader = case @file_reader_type.to_sym
75
+ when :simple
76
+ SimpleFileReader.new(@filename)
77
+ when :erb
78
+ ErbFileReader.new(@filename, @template_vars)
79
+ else
80
+ raise ArgumentError "unknown file reader type #{@file_reader_type}. `simple` and `erb` are supported"
81
+ end
82
+
83
+ @expected_value = file_reader.expected_value
84
+ system("diff #{actual_tmpfile.path} #{file_reader.filename} > /dev/null")
85
+ is_successful = $CHILD_STATUS.to_i.zero?
86
+
87
+ file_reader.close
88
+ actual_tmpfile.delete
89
+
90
+ is_successful
91
+ end
92
+
93
+ def actual
94
+ @value
95
+ end
96
+
97
+ def expected
98
+ @expected_value
99
+ end
100
+
101
+ def description
102
+ "be matching golden file with name #{@filename}"
103
+ end
104
+
105
+ def diffable?
106
+ true
107
+ end
108
+
109
+ def failure_message
110
+ "expected #{@value.inspect} does not match golden file '#{@filename}'"
111
+ end
112
+
113
+ def failure_message_when_negated
114
+ "expected #{@value.inspect} matches golden file '#{@filename}'"
115
+ end
116
+ end
117
+ end
118
+
119
+ def match_golden_file(filename, file_reader_type: 'simple', template_vars: {})
120
+ RSpec::Matchers::GoldenFiles::GoldenFilesMatcher.new(filename, file_reader_type, template_vars)
121
+ end
122
+ end
@@ -1,11 +1,11 @@
1
1
 
2
2
  lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require_relative 'lib/golden_files.rb'
4
+ require 'rspec-golden-files'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "rspec-golden-files"
8
- spec.version = RSpec::Matchers::GoldenFiles::VERSION
8
+ spec.version = RSpec::GoldenFiles::VERSION
9
9
  spec.authors = ["Anton Antonov"]
10
10
  spec.email = ["anton.synd.antonov@gmail.com"]
11
11
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-golden-files
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Antonov
@@ -64,7 +64,7 @@ files:
64
64
  - Gemfile
65
65
  - LICENSE
66
66
  - README.md
67
- - lib/golden_files.rb
67
+ - lib/rspec-golden-files.rb
68
68
  - rspec-golden-files.gemspec
69
69
  homepage: https://github.com/syndbg/rspec-golden-files
70
70
  licenses:
data/lib/golden_files.rb DELETED
@@ -1,124 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'tempfile'
4
- require 'erb'
5
- require 'ostruct'
6
-
7
- module RSpec
8
- module Matchers
9
- module GoldenFiles
10
- VERSION = '0.1.0'.freeze
11
-
12
- class SimpleFileReader
13
- def initialize(filename)
14
- @filename = filename
15
- @file_contents = File.read(@filename)
16
- end
17
-
18
- def filename
19
- @filename
20
- end
21
-
22
- def expected_value
23
- @file_contents
24
- end
25
-
26
- def close; end
27
- end
28
-
29
- class ErbFileReader < SimpleFileReader
30
- # HACK: Make hash keys usable in templates
31
- # due to ERB's poor `#result_with_hash` usefulness.
32
- class TemplateStruct < OpenStruct
33
- def render(template)
34
- template.result(binding)
35
- end
36
- end
37
-
38
- def initialize(filename, template_vars)
39
- plain_file_contents = File.read(filename)
40
- template = ERB.new(plain_file_contents)
41
- template_struct = TemplateStruct.new(template_vars)
42
-
43
- @file_contents = template_struct.render(template)
44
-
45
- @tmpfile = Tempfile.new('expected')
46
- @tmpfile.write(@file_contents)
47
- @tmpfile.close(false)
48
-
49
- @filename = @tmpfile.path
50
- end
51
-
52
- def close
53
- @tmpfile.delete
54
- end
55
- end
56
-
57
- class GoldenFilesMatcher
58
- def initialize(filename, file_reader_type, template_vars)
59
- @filename = filename
60
- @file_reader_type = file_reader_type
61
- @template_vars = template_vars
62
- end
63
-
64
- def matches?(value)
65
- unless File.exist?(@filename)
66
- raise ArgumentError "golden file '#{@filename}' not found"
67
- end
68
-
69
- @value = value
70
-
71
- actual_tmpfile = Tempfile.new('actual')
72
- actual_tmpfile.write(value.to_s)
73
- actual_tmpfile.close(false)
74
-
75
- file_reader = case @file_reader_type.to_sym
76
- when :simple
77
- SimpleFileReader.new(@filename)
78
- when :erb
79
- ErbFileReader.new(@filename, @template_vars)
80
- else
81
- raise ArgumentError "unknown file reader type #{@file_reader_type}. `simple` and `erb` are supported"
82
- end
83
-
84
- @expected_value = file_reader.expected_value
85
- system("diff #{actual_tmpfile.path} #{file_reader.filename} > /dev/null")
86
- is_successful = $CHILD_STATUS.to_i.zero?
87
-
88
- file_reader.close
89
- actual_tmpfile.delete
90
-
91
- is_successful
92
- end
93
-
94
- def actual
95
- @value
96
- end
97
-
98
- def expected
99
- @expected_value
100
- end
101
-
102
- def description
103
- "be matching golden file with name #{@filename}"
104
- end
105
-
106
- def diffable?
107
- true
108
- end
109
-
110
- def failure_message
111
- "expected #{@value.inspect} does not match golden file '#{@filename}'"
112
- end
113
-
114
- def failure_message_when_negated
115
- "expected #{@value.inspect} matches golden file '#{@filename}'"
116
- end
117
- end
118
- end
119
-
120
- def match_golden_file(filename, file_reader_type: 'simple', template_vars: {})
121
- RSpec::Matchers::GoldenFiles::GoldenFilesMatcher.new(filename, file_reader_type, template_vars)
122
- end
123
- end
124
- end