match_hash 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 +7 -0
- data/.gitignore +21 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +36 -0
- data/README.md +101 -0
- data/Rakefile +7 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/match_hash/match_hash.rb +31 -0
- data/lib/match_hash/sub/match_hash.rb +35 -0
- data/lib/match_hash/version.rb +3 -0
- data/lib/match_hash.rb +3 -0
- data/match_hash.gemspec +40 -0
- data/wercker.yml +27 -0
- metadata +116 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 9444052b2bfb07b0870ee7f202ee53abba6ec312
|
|
4
|
+
data.tar.gz: cc64e3822421f8b999f873ae846933ec872a7111
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: f8d70c66123189688786ecbcf5f3d9d796a405b7a87991c5ef8fce2fee3031d1fbf5ca75215291fe6165ab3efc891b95d8747baa2c71dabc4399ed96e263352f
|
|
7
|
+
data.tar.gz: '095625802374af8d88235c5d0fb2a72678701d41db787bd658934da152fa4bf4f67b403171a7ed08601c2b3b91f05b6d8cd61ecd013f625a39d7bcb821897c62'
|
data/.gitignore
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Ignore bundler config.
|
|
2
|
+
/.bundle
|
|
3
|
+
|
|
4
|
+
# Ignore all logfiles and tempfiles.
|
|
5
|
+
/log/*
|
|
6
|
+
/tmp/*
|
|
7
|
+
!/log/.keep
|
|
8
|
+
!/tmp/.keep
|
|
9
|
+
*.log*
|
|
10
|
+
|
|
11
|
+
# Ignore Byebug command history file.
|
|
12
|
+
.byebug_history
|
|
13
|
+
|
|
14
|
+
# gemは無視
|
|
15
|
+
/vendor/bundle
|
|
16
|
+
.DS_Store
|
|
17
|
+
|
|
18
|
+
# RubyMineが勝手に作ってしまうファイル
|
|
19
|
+
.idea
|
|
20
|
+
|
|
21
|
+
pkg
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
match_hash (0.1.0)
|
|
5
|
+
rspec-expectations (~> 3.0)
|
|
6
|
+
|
|
7
|
+
GEM
|
|
8
|
+
remote: https://rubygems.org/
|
|
9
|
+
specs:
|
|
10
|
+
diff-lcs (1.2.5)
|
|
11
|
+
rake (10.5.0)
|
|
12
|
+
rspec (3.5.0)
|
|
13
|
+
rspec-core (~> 3.5.0)
|
|
14
|
+
rspec-expectations (~> 3.5.0)
|
|
15
|
+
rspec-mocks (~> 3.5.0)
|
|
16
|
+
rspec-core (3.5.4)
|
|
17
|
+
rspec-support (~> 3.5.0)
|
|
18
|
+
rspec-expectations (3.5.0)
|
|
19
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
20
|
+
rspec-support (~> 3.5.0)
|
|
21
|
+
rspec-mocks (3.5.0)
|
|
22
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
23
|
+
rspec-support (~> 3.5.0)
|
|
24
|
+
rspec-support (3.5.0)
|
|
25
|
+
|
|
26
|
+
PLATFORMS
|
|
27
|
+
ruby
|
|
28
|
+
|
|
29
|
+
DEPENDENCIES
|
|
30
|
+
bundler (~> 1.13)
|
|
31
|
+
match_hash!
|
|
32
|
+
rake (~> 10.5.0)
|
|
33
|
+
rspec (~> 3.0)
|
|
34
|
+
|
|
35
|
+
BUNDLED WITH
|
|
36
|
+
1.13.6
|
data/README.md
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# MatchHash
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/rb/match_hash)
|
|
4
|
+
[](https://app.wercker.com/project/byKey/b7b6922e7a90870633ac09993e8aa51b)
|
|
5
|
+
|
|
6
|
+
Easily handle Hash in RSpec.
|
|
7
|
+
|
|
8
|
+
## RSpec
|
|
9
|
+
|
|
10
|
+
match_hash defines one new RSpec matcher:
|
|
11
|
+
|
|
12
|
+
* `match_hash`
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
Add this line to your application's `Gemfile` :
|
|
17
|
+
|
|
18
|
+
```ruby
|
|
19
|
+
gem 'match_hash'
|
|
20
|
+
```
|
|
21
|
+
Add this line to your application's `spec_helper.rb` :
|
|
22
|
+
```ruby
|
|
23
|
+
require 'match_hash'
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
And then execute:
|
|
27
|
+
|
|
28
|
+
$ bundle
|
|
29
|
+
|
|
30
|
+
Or install it yourself as:
|
|
31
|
+
|
|
32
|
+
$ gem install match_hash
|
|
33
|
+
|
|
34
|
+
## Usage
|
|
35
|
+
|
|
36
|
+
The new matcher could be used in RSpec as follows:
|
|
37
|
+
|
|
38
|
+
```ruby
|
|
39
|
+
describe MatchHash do
|
|
40
|
+
|
|
41
|
+
before do
|
|
42
|
+
@A = {
|
|
43
|
+
a11:11,
|
|
44
|
+
a12:{
|
|
45
|
+
b11:21,
|
|
46
|
+
b12:22
|
|
47
|
+
},
|
|
48
|
+
a13:[1,2,3],
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@B = {
|
|
52
|
+
a11:11,
|
|
53
|
+
a12:{
|
|
54
|
+
b11:21,
|
|
55
|
+
b12:22
|
|
56
|
+
},
|
|
57
|
+
a13:[3,2,1],
|
|
58
|
+
}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "A hash match A hash" do
|
|
62
|
+
expect(@A).to match_hash(@A)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "A hash do not match B hash and occured raise_error" do
|
|
66
|
+
expect do
|
|
67
|
+
expect(@A).to match_hash(@B)
|
|
68
|
+
end.to raise_error
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Failure message
|
|
75
|
+
|
|
76
|
+
For example:
|
|
77
|
+
|
|
78
|
+
```ruby
|
|
79
|
+
1) MatchHash A hash match A hash
|
|
80
|
+
Failure/Error: expect(@A).to match_hash(@B)
|
|
81
|
+
|
|
82
|
+
Diff:
|
|
83
|
+
@@ -2,6 +2,6 @@
|
|
84
|
+
:a12 => 12,
|
|
85
|
+
:a13 => 13,
|
|
86
|
+
:a14 => {:b11=>11, :b12=>12},
|
|
87
|
+
-:a15 => [3, 2, 1],
|
|
88
|
+
+:a15 => [1, 2, 3],
|
|
89
|
+
:a16 => 16,
|
|
90
|
+
|
|
91
|
+
# ./spec/match_hash_spec.rb:36:in `block (2 levels) in <top (required)>'
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Contributing
|
|
95
|
+
|
|
96
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/yukihirop/match_hash.
|
|
97
|
+
|
|
98
|
+
## Licence
|
|
99
|
+
|
|
100
|
+
* MIT
|
|
101
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require "bundler/setup"
|
|
4
|
+
require "match_hash"
|
|
5
|
+
|
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
8
|
+
|
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
+
# require "pry"
|
|
11
|
+
# Pry.start
|
|
12
|
+
|
|
13
|
+
require "irb"
|
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# GitHub Gist
|
|
2
|
+
# kroehre/ gist:9cc209bcf43a1d1b001b
|
|
3
|
+
# より引用&一部改造
|
|
4
|
+
|
|
5
|
+
# @abstract json形式のhashのkeyの数と値、hashの構造、keyとvalueのペアの一致(hash完全一致、順不同)
|
|
6
|
+
# をテストする.
|
|
7
|
+
# @params [Hash] expected テストするために用意したhash
|
|
8
|
+
# @example expect(result).to match_hash(data,nil)
|
|
9
|
+
# @note gem 'rspec-rails', '~> 3.5'
|
|
10
|
+
# をGemfileを追加していること
|
|
11
|
+
# @see https://gist.github.com/kroehre/9cc209bcf43a1d1b001b
|
|
12
|
+
RSpec::Matchers.define :match_hash do |expected|
|
|
13
|
+
|
|
14
|
+
include Sub
|
|
15
|
+
match do |actual|
|
|
16
|
+
@is_errors = []
|
|
17
|
+
!match_hash(expected, actual)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# RSpecc::Matchers::ExpectedsForMultipleDiffsは
|
|
21
|
+
# private apiであり、Deprecatedであるが今、diffを取るにはこうするしかない。(2016/12/29現在)
|
|
22
|
+
# @see https://github.com/rspec/rspec-expectations/blob/master/lib/rspec/expectations/fail_with.rb
|
|
23
|
+
# @see https://github.com/rspec/rspec-expectations/blob/master/lib/rspec/matchers/expecteds_for_multiple_diffs.rb
|
|
24
|
+
failure_message do |actual|
|
|
25
|
+
differ = RSpec::Expectations.differ
|
|
26
|
+
@failure_message = RSpec::Matchers::ExpectedsForMultipleDiffs.from(expected).message_with_diff(nil, differ,actual)
|
|
27
|
+
@failure_message
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Sub
|
|
2
|
+
|
|
3
|
+
private
|
|
4
|
+
|
|
5
|
+
def match_hash(expected, actual)
|
|
6
|
+
expected.each do |key, value|
|
|
7
|
+
return true unless actual.has_key?(key)
|
|
8
|
+
@is_errors << match_value(expected[key], actual[key])
|
|
9
|
+
return true if @is_errors.include?(true)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
return true if @is_errors.include?(true)
|
|
13
|
+
actual.each do |key, value|
|
|
14
|
+
return true unless expected.has_key?(key)
|
|
15
|
+
@is_errors << match_value(expected[key], actual[key])
|
|
16
|
+
return true if @is_errors.include?(true)
|
|
17
|
+
end
|
|
18
|
+
@is_errors.include?(true)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def match_array(expected, actual)
|
|
22
|
+
expected.each_with_index do |i|
|
|
23
|
+
match_value(expected[i],actual[i])
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# trueを返すときがエラー
|
|
28
|
+
def match_value(expected, actual)
|
|
29
|
+
match_hash(expected, actual) if expected.is_a?(Hash)
|
|
30
|
+
match_array(expected, actual) if expected.is_a?(Array)
|
|
31
|
+
return false if expected == actual
|
|
32
|
+
return true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
data/lib/match_hash.rb
ADDED
data/match_hash.gemspec
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
|
|
5
|
+
require 'match_hash/version'
|
|
6
|
+
|
|
7
|
+
Gem::Specification.new do |spec|
|
|
8
|
+
spec.name = "match_hash"
|
|
9
|
+
spec.version = MatchHash::VERSION
|
|
10
|
+
spec.authors = ["yukihirop"]
|
|
11
|
+
spec.email = ["te108186@gmail.com"]
|
|
12
|
+
|
|
13
|
+
spec.summary = "This is a Custom Matcher to match hash in RSpec"
|
|
14
|
+
spec.description = "Custom Matcher errors generate from RSpec::Matchers::ExpectedsForMultipleDiffs.from.message_with_diff"
|
|
15
|
+
spec.homepage = "https://github.com/yukihirop/match_hash"
|
|
16
|
+
spec.license = "MIT"
|
|
17
|
+
|
|
18
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
|
19
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
20
|
+
# if spec.respond_to?(:metadata)
|
|
21
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
|
22
|
+
# else
|
|
23
|
+
# raise "RubyGems 2.0 or newer is required to protect against " \
|
|
24
|
+
# "public gem pushes."
|
|
25
|
+
# end
|
|
26
|
+
|
|
27
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
28
|
+
f.match(%r{^(test|spec|features)/})
|
|
29
|
+
end
|
|
30
|
+
spec.bindir = "exe"
|
|
31
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
32
|
+
spec.require_paths = ["lib"]
|
|
33
|
+
|
|
34
|
+
spec.add_runtime_dependency 'rspec-expectations', '~> 3.0'
|
|
35
|
+
|
|
36
|
+
spec.add_development_dependency "bundler", "~> 1.13"
|
|
37
|
+
spec.add_development_dependency "rake", "~> 10.5.0"
|
|
38
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
|
39
|
+
|
|
40
|
+
end
|
data/wercker.yml
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# This references the default Ruby container from
|
|
2
|
+
# the Docker Hub.
|
|
3
|
+
# https://registry.hub.docker.com/_/ruby/
|
|
4
|
+
# If you want to use a specific version you would use a tag:
|
|
5
|
+
# ruby:2.2.2
|
|
6
|
+
box: ruby:2.3.1
|
|
7
|
+
# You can also use services such as databases. Read more on our dev center:
|
|
8
|
+
# http://devcenter.wercker.com/docs/services/index.html
|
|
9
|
+
# services:
|
|
10
|
+
# - postgres
|
|
11
|
+
# http://devcenter.wercker.com/docs/services/postgresql.html
|
|
12
|
+
|
|
13
|
+
# - mongo
|
|
14
|
+
# http://devcenter.wercker.com/docs/services/mongodb.html
|
|
15
|
+
|
|
16
|
+
# This is the build pipeline. Pipelines are the core of wercker
|
|
17
|
+
# Read more about pipelines on our dev center
|
|
18
|
+
# http://devcenter.wercker.com/docs/pipelines/index.html
|
|
19
|
+
build:
|
|
20
|
+
# Steps make up the actions in your pipeline
|
|
21
|
+
# Read more about steps on our dev center:
|
|
22
|
+
# http://devcenter.wercker.com/docs/steps/index.html
|
|
23
|
+
steps:
|
|
24
|
+
- bundle-install
|
|
25
|
+
- script:
|
|
26
|
+
name: rspec
|
|
27
|
+
code: bundle exec rspec
|
metadata
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: match_hash
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- yukihirop
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2017-01-03 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rspec-expectations
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '3.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '3.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: bundler
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '1.13'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '1.13'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rake
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 10.5.0
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 10.5.0
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '3.0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '3.0'
|
|
69
|
+
description: Custom Matcher errors generate from RSpec::Matchers::ExpectedsForMultipleDiffs.from.message_with_diff
|
|
70
|
+
email:
|
|
71
|
+
- te108186@gmail.com
|
|
72
|
+
executables: []
|
|
73
|
+
extensions: []
|
|
74
|
+
extra_rdoc_files: []
|
|
75
|
+
files:
|
|
76
|
+
- ".gitignore"
|
|
77
|
+
- ".rspec"
|
|
78
|
+
- ".travis.yml"
|
|
79
|
+
- CHANGELOG.md
|
|
80
|
+
- Gemfile
|
|
81
|
+
- Gemfile.lock
|
|
82
|
+
- README.md
|
|
83
|
+
- Rakefile
|
|
84
|
+
- bin/console
|
|
85
|
+
- bin/setup
|
|
86
|
+
- lib/match_hash.rb
|
|
87
|
+
- lib/match_hash/match_hash.rb
|
|
88
|
+
- lib/match_hash/sub/match_hash.rb
|
|
89
|
+
- lib/match_hash/version.rb
|
|
90
|
+
- match_hash.gemspec
|
|
91
|
+
- wercker.yml
|
|
92
|
+
homepage: https://github.com/yukihirop/match_hash
|
|
93
|
+
licenses:
|
|
94
|
+
- MIT
|
|
95
|
+
metadata: {}
|
|
96
|
+
post_install_message:
|
|
97
|
+
rdoc_options: []
|
|
98
|
+
require_paths:
|
|
99
|
+
- lib
|
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - ">="
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: '0'
|
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '0'
|
|
110
|
+
requirements: []
|
|
111
|
+
rubyforge_project:
|
|
112
|
+
rubygems_version: 2.6.8
|
|
113
|
+
signing_key:
|
|
114
|
+
specification_version: 4
|
|
115
|
+
summary: This is a Custom Matcher to match hash in RSpec
|
|
116
|
+
test_files: []
|