deep_class_compare 1.0.0 → 1.0.5

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: 2d6ac496cda304c04b72071ae99e82d37ce712c4b874cfe78884bb9f4bde9947
4
- data.tar.gz: e6ad9ac0181d691f99573f48162d0153d022ced019b448854f59f0a746fd92fc
3
+ metadata.gz: 9e4a39770406d2618f204e92471cebb3301c26d9b4411d4ba255f2519d837e7a
4
+ data.tar.gz: d40b863de536c102413da9504935ad56583237fcfc2cb8f21e41f27581eb87bb
5
5
  SHA512:
6
- metadata.gz: a414def2db0fd5b83a7fd844d9354cfb0bf2ee9e76f235c818aa91e069227964d9439e2b846559ae1de9551ae1a0e44939ca1f258d2ddf50441e04eb50fb3649
7
- data.tar.gz: 744872740bde0a8b23470d1317a6b5098136a8b6a175b8e638e72819862b11ab02a1dcf2915f17c1331379ef2af204fcdec9e8b881b6f7ede92e57d8cb7ed3ed
6
+ metadata.gz: 767e854946452405b65c3fa10b803c9e851eece40dce9c14e7d7fa89f2e9855d4d8490ff945ee4e7e498d6f962ca53c773e4c964a3ed205d2cbdff1bbdcc9e1a
7
+ data.tar.gz: 5404354e2c4539fd886f3a69801bb02a5e3f58061382c42a1c94e5022c78617d338191a15e3efbed02f27b87c690f2ad0211126ac04ac956c6d5ce693540e575
data/README.md CHANGED
@@ -22,7 +22,7 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- ```
25
+ ```ruby
26
26
  # Could compare container and value class with simple pattern
27
27
  ['string', 'string'].like_a? Array.of(String) => true
28
28
  [1, 2].like_a? Array.of(Hash) => false
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/deep_class_compare/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "deep_class_compare"
7
+ spec.version = DeepClassCompare::VERSION
8
+ spec.authors = ["Koten"]
9
+ spec.email = ["koten0224@gmail.com"]
10
+
11
+ spec.summary = "Deep class compare"
12
+ spec.description = "A container class extend gem that could compare the values class in it easily, clearly, and more colloquialism."
13
+ spec.homepage = "https://github.com/koten0224/deep_class_compare"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 2.2.0"
16
+
17
+ spec.metadata["allowed_push_host"] = "https://rubygems.org/"
18
+
19
+ spec.metadata["homepage_uri"] = spec.homepage
20
+ spec.metadata["source_code_uri"] = "https://github.com/koten0224/deep_class_compare"
21
+ spec.metadata["changelog_uri"] = "https://github.com/koten0224/deep_class_compare/CHANGELOG.md"
22
+
23
+ # Specify which files should be added to the gem when it is released.
24
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
26
+ `git ls-files -z`.split("\x0").reject do |f|
27
+ (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
28
+ end
29
+ end
30
+ spec.bindir = "exe"
31
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
+ spec.require_paths = ["lib"]
33
+
34
+ # Uncomment to register a new dependency of your gem
35
+ # spec.add_dependency "example-gem", "~> 1.0"
36
+
37
+ # For more information and examples about making a new gem, check out our
38
+ # guide at: https://bundler.io/guides/creating_gem.html
39
+ end
@@ -1,5 +1,3 @@
1
- require "./lib/deep_class_compare/matcher.rb"
2
- require "./lib/deep_class_compare/container_comparable.rb"
3
1
  module DeepClassCompare
4
2
  class ArrayMatcher < Matcher
5
3
  include ContainerComparable
@@ -8,23 +6,24 @@ module DeepClassCompare
8
6
  end
9
7
 
10
8
  def match?(array)
11
- # p @chain
12
9
  super && compare_array_with_chain(array)
13
10
  end
14
11
 
15
12
  def of(*comparable)
16
13
  dup.tap do |matcher|
17
- matcher.instance_eval do
18
- @chain = if @chain.nil?
19
- parse_comparable_to_chain(comparable.first)
20
- elsif @chain.is_a?(Matcher)
21
- @chain.of(*comparable)
22
- end
23
- raise_pattern_error! if @chain.nil?
24
- end
14
+ matcher.build_chain(*comparable)
25
15
  end
26
16
  end
27
17
 
18
+ def build_chain(*comparable)
19
+ @chain = if @chain.nil?
20
+ parse_comparable_to_chain(comparable.first)
21
+ elsif @chain.is_a?(Matcher)
22
+ @chain.of(*comparable)
23
+ end
24
+ raise_pattern_error! if @chain.nil?
25
+ end
26
+
28
27
  private
29
28
  def compare_array_with_chain(array)
30
29
  array.all? do |value|
@@ -13,7 +13,8 @@ module DeepClassCompare
13
13
  case comparable
14
14
  when Matcher then comparable
15
15
  when Array then parse_array_to_chain(comparable)
16
- when Class then parse_class_to_matcher(comparable)
16
+ when Class then Matcher.build(comparable)
17
+ else raise_pattern_error!
17
18
  end
18
19
  end
19
20
 
@@ -27,12 +28,5 @@ module DeepClassCompare
27
28
  end
28
29
  end
29
30
  end
30
-
31
- def parse_class_to_matcher(klass)
32
- if klass == Array then ArrayMatcher.new
33
- elsif klass == Hash then HashMatcher.new
34
- else Matcher.new(klass)
35
- end
36
- end
37
31
  end
38
32
  end
@@ -1,9 +1,6 @@
1
- require "./lib/deep_class_compare/matcher.rb"
2
- require "./lib/deep_class_compare/container_comparable.rb"
3
1
  module DeepClassCompare
4
2
  class HashMatcher < Matcher
5
3
  include ContainerComparable
6
-
7
4
  def initialize
8
5
  super(Hash)
9
6
  end
@@ -13,16 +10,18 @@ module DeepClassCompare
13
10
  end
14
11
 
15
12
  def of(key_comparable, value_comparable = nil)
16
- key_comparable, value_comparable = Object, key_comparable if value_comparable.nil?
13
+ raise_pattern_error! unless @key_chain.nil? && @value_chain.nil?
17
14
  dup.tap do |matcher|
18
- matcher.instance_eval do
19
- raise_pattern_error! unless @key_chain.nil? && @value_chain.nil?
20
- @key_chain = parse_comparable_to_chain(key_comparable)
21
- @value_chain = parse_comparable_to_chain(value_comparable)
22
- end
15
+ matcher.build_chain(key_comparable, value_comparable)
23
16
  end
24
17
  end
25
18
 
19
+ def build_chain(key_comparable, value_comparable = nil)
20
+ key_comparable, value_comparable = Object, key_comparable if value_comparable.nil?
21
+ @key_chain = parse_comparable_to_chain(key_comparable)
22
+ @value_chain = parse_comparable_to_chain(value_comparable)
23
+ end
24
+
26
25
  private
27
26
  def compare_hash_with_chain(hash)
28
27
  hash.all? do |key, value|
@@ -1,6 +1,12 @@
1
-
2
1
  module DeepClassCompare
3
2
  class Matcher
3
+ def self.build(klass)
4
+ if klass == Array then ArrayMatcher.new
5
+ elsif klass == Hash then HashMatcher.new
6
+ else new(klass)
7
+ end
8
+ end
9
+
4
10
  def initialize(base)
5
11
  @base = base
6
12
  raise_class_required_error! unless @base.is_a?(Class)
@@ -16,7 +22,7 @@ module DeepClassCompare
16
22
  end
17
23
 
18
24
  def raise_pattern_error!
19
- raise TypeError.new("invlid pattern of compare chain")
25
+ raise TypeError.new("invalid pattern of compare chain")
20
26
  end
21
27
  end
22
28
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DeepClassCompare
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.5"
5
5
  end
@@ -1,9 +1,9 @@
1
- # frozen_string_literal: true
1
+ require "deep_class_compare/version"
2
+ require "deep_class_compare/matcher"
3
+ require "deep_class_compare/container_comparable"
4
+ require "deep_class_compare/array_matcher"
5
+ require "deep_class_compare/hash_matcher"
2
6
 
3
- require_relative "deep_class_compare/version"
4
- require_relative "deep_class_compare/matcher"
5
- require_relative "deep_class_compare/array_matcher"
6
- require_relative "deep_class_compare/hash_matcher"
7
7
  module DeepClassCompare
8
8
  class Error < StandardError; end
9
9
  class TypeError < Error; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deep_class_compare
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koten
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-24 00:00:00.000000000 Z
11
+ date: 2021-12-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A container class extend gem that could compare the values class in it
14
14
  easily, clearly, and more colloquialism.
@@ -27,6 +27,7 @@ files:
27
27
  - Rakefile
28
28
  - bin/console
29
29
  - bin/setup
30
+ - deep_class_compare.gemspec
30
31
  - lib/deep_class_compare.rb
31
32
  - lib/deep_class_compare/array_matcher.rb
32
33
  - lib/deep_class_compare/container_comparable.rb
@@ -50,7 +51,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
50
51
  requirements:
51
52
  - - ">="
52
53
  - !ruby/object:Gem::Version
53
- version: 2.6.0
54
+ version: 2.2.0
54
55
  required_rubygems_version: !ruby/object:Gem::Requirement
55
56
  requirements:
56
57
  - - ">="