nice_hash 1.12.14 → 1.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -0
  3. data/lib/nice_hash.rb +44 -32
  4. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c04f2f984651321da92e9adab8820cb92334b4e719d800830f0d9a6cee052238
4
- data.tar.gz: 9c9dff7d8107996236770e99aeaf8bd7e995a76738bfa2cd3b6e3a126ac23bb6
3
+ metadata.gz: 6c67eecf89013b5b500ad264434c9dd8a08c64f75817e753533029d5a96c7584
4
+ data.tar.gz: 7a2d166ff3256b3f08068995720e9f2cac083be298ddd7ba8d1462b728c8b2d0
5
5
  SHA512:
6
- metadata.gz: d6059cb29c2f15b07bd83f50dd17959461ab3e208de0d196c67bacabd70d92ba29b12017f640977dea5819e8b2ebf72899fb4098a965372e84644441021d460e
7
- data.tar.gz: '09f8201012b7715473c62715eca70b96161c0e30c6b9ce403b5ab6c861567ac1bb6d095e6c6ac6317510f3eb1e427d47f1d22a59c67de720dfd6480ce3dbda76'
6
+ metadata.gz: 82647a827b924e6f3d7a470b63a88eeb9c2be871c38014ef6726632e2eb7c6f97a00541e5d4df083faa99cfb20e96bc17f1ba96e7b3ed52340e16290a9d7f91c
7
+ data.tar.gz: 610ecaa35046b9107b8551cdf6fae2c0547092cb8ffb5a1cd44359320149718d0eb5ff5e651173979484931e0465d1b583a22660b7cece3673a95cb973fa12c4
data/README.md CHANGED
@@ -736,6 +736,22 @@ Another example that will return false since customer key is missing on first va
736
736
 
737
737
  Also you can use a third parameter, compare_only_if_exist_key (Boolean), by default false. If true, in case an element exist on structure but doesn't exist on replica won't be verified.
738
738
 
739
+
740
+
741
+ The last parameter (patterns) allow you to add verification of data values following the patterns supplied on a one level hash.
742
+
743
+ Valid patterns:
744
+ - a regular expression
745
+ - any string_pattern, more info: string_pattern project: https://github.com/MarioRuiz/string_pattern
746
+ - Boolean: specifying Boolean will check if the value is TrueClass or FalseClass
747
+ - ranges: Any kind of numeric ranges, for example:
748
+ - 10..400
749
+ - 20..50
750
+ - 60.0..500.0
751
+ - 10.. (from 10 to infinite) Only from Ruby 2.6
752
+ - DateTime: it will verify if the value is following Time stamp string '2019-06-20T12:01:09.971Z' or if the object is a Time, Date or DateTime class
753
+ - selectors, one of the values. Example: "uno|dos|tres"
754
+
739
755
  ### Other useful methods
740
756
 
741
757
  In case you need the time stamp, we added the method `stamp` to the `Time` class
data/lib/nice_hash.rb CHANGED
@@ -411,29 +411,29 @@ class NiceHash
411
411
  if v.is_a?(Hash)
412
412
  ret = NiceHash.generate(v, select_hash_key, expected_errors: expected_errors)
413
413
  else
414
- ret = NiceHash.generate({doit: v}, select_hash_key, expected_errors: expected_errors)
414
+ ret = NiceHash.generate({ doit: v }, select_hash_key, expected_errors: expected_errors)
415
415
  ret = ret[:doit] if ret.is_a?(Hash) and ret.key?(:doit)
416
416
  end
417
- ret = v if ret.kind_of?(Hash) and ret.size == 0
417
+ ret = v if ret.kind_of?(Hash) and ret.size == 0
418
418
  value_ret << ret
419
419
  }
420
420
  hashv[key] = value_ret
421
421
  end
422
422
  elsif value.kind_of?(Range)
423
423
  if expected_errors.empty?
424
- hashv[key] = rand(value)
424
+ hashv[key] = rand(value)
425
425
  else
426
426
  hashv[key] = rand(value)
427
427
  expected_errors.each do |er|
428
428
  if er == :min_length
429
- hashv[key] = rand((value.first-value.last)..value.first-1)
429
+ hashv[key] = rand((value.first - value.last)..value.first - 1)
430
430
  elsif er == :max_length
431
- hashv[key] = rand((value.last+1)..(value.last*2))
431
+ hashv[key] = rand((value.last + 1)..(value.last * 2))
432
432
  elsif er == :length
433
- if rand.round==1
434
- hashv[key] = rand((value.first-value.last)..value.first-1)
433
+ if rand.round == 1
434
+ hashv[key] = rand((value.first - value.last)..value.first - 1)
435
435
  else
436
- hashv[key] = rand((value.last+1)..(value.last*2))
436
+ hashv[key] = rand((value.last + 1)..(value.last * 2))
437
437
  end
438
438
  elsif er == :value
439
439
  hashv[key] = :"1-10:N/L/".gen
@@ -451,13 +451,13 @@ class NiceHash
451
451
  elsif er == :max_length
452
452
  hashv[key] = hashv[key] + "Z"
453
453
  elsif er == :length
454
- if rand.round==1
454
+ if rand.round == 1
455
455
  hashv[key] = hashv[key].chop
456
456
  else
457
457
  hashv[key] = hashv[key] + "Z"
458
458
  end
459
459
  elsif er == :value
460
- hashv[key][rand(hashv[key].size-1)] = '1:L'.gen
460
+ hashv[key][rand(hashv[key].size - 1)] = "1:L".gen
461
461
  end
462
462
  end
463
463
  end
@@ -468,7 +468,7 @@ class NiceHash
468
468
  hashv[key] = (rand.round == 0)
469
469
  expected_errors.each do |er|
470
470
  if er == :value
471
- hashv[key] = '1-10:L'.gen
471
+ hashv[key] = "1-10:L".gen
472
472
  end
473
473
  end
474
474
  end
@@ -591,8 +591,10 @@ class NiceHash
591
591
  results[key] = false
592
592
  end
593
593
  elsif value.kind_of?(Class) and value == DateTime
594
- if values[key].size == 24
595
- d = Date.strptime(values[key], '%Y-%m-%dT%H:%M:%S.%LZ') rescue results[key] = false
594
+ if values[key].is_a?(String) and values[key].size == 24
595
+ d = Date.strptime(values[key], "%Y-%m-%dT%H:%M:%S.%LZ") rescue results[key] = false
596
+ elsif values[key].is_a?(Time) or values[key].is_a?(Date) or values[key].is_a?(DateTime)
597
+ # correct
596
598
  else
597
599
  results[key] = false
598
600
  end
@@ -620,14 +622,14 @@ class NiceHash
620
622
  unless array_pattern or results.include?(key)
621
623
  if value.size == 1 and values[key].size > 1
622
624
  # for the case value == ['Ford|Newton|Seat'] and values == ['Ford', 'Newton', 'Ford']
623
- i= 0
625
+ i = 0
624
626
  if values[key].class == value.class
625
627
  values[key].each do |v|
626
628
  if value[0].is_a?(Hash)
627
629
  res = NiceHash.validate([value[0], select_hash_key], v, only_patterns: only_patterns)
628
630
  else
629
631
  # for the case {cars: ['Ford|Newton|Seat']}
630
- res = NiceHash.validate([{key => value[0]}, select_hash_key], {key => v}, only_patterns: only_patterns)
632
+ res = NiceHash.validate([{ key => value[0] }, select_hash_key], { key => v }, only_patterns: only_patterns)
631
633
  #res = {key => res[:doit]} if res.is_a?(Hash) and res.key?(:doit)
632
634
  array_pattern = true
633
635
  end
@@ -647,7 +649,7 @@ class NiceHash
647
649
  res = NiceHash.validate([v, select_hash_key], values[key][i], only_patterns: only_patterns)
648
650
  else
649
651
  # for the case {cars: ['Ford|Newton|Seat']}
650
- res = NiceHash.validate([{key => v}, select_hash_key], {key => values[key][i]}, only_patterns: only_patterns)
652
+ res = NiceHash.validate([{ key => v }, select_hash_key], { key => values[key][i] }, only_patterns: only_patterns)
651
653
  array_pattern = true
652
654
  end
653
655
  if res.size > 0
@@ -658,7 +660,7 @@ class NiceHash
658
660
  }
659
661
  end
660
662
  end
661
- unless array_pattern or only_patterns or results.include?(key) or complex_data
663
+ unless array_pattern or only_patterns or results.include?(key) or complex_data
662
664
  results[key] = false unless value == values[key]
663
665
  end
664
666
  else
@@ -863,6 +865,7 @@ class NiceHash
863
865
  # @param structure [Array] [Hash] Contains the structure that should follow the replica. It can be a nested combination of arrays and hashes.
864
866
  # @param replica [Array] [Hash] Contains the element to be verified on following the supplied structure. It can be a nested combination of arrays and hashes.
865
867
  # @param compare_only_if_exist_key [Boolean] (Default false) If true, in case an element exist on structure but doesn't exist on replica won't be verified.
868
+ # @param patterns [Hash] add verification of data values following the patterns supplied on a one level hash
866
869
  #
867
870
  # @return [Boolean] true in case replica follows the structure supplied
868
871
  #
@@ -879,39 +882,49 @@ class NiceHash
879
882
  # NiceHash.compare_structure(my_structure, my_replica)
880
883
  # #>true
881
884
  ##################################################
882
- def NiceHash.compare_structure(structure, replica, compare_only_if_exist_key = false)
885
+ def NiceHash.compare_structure(structure, replica, compare_only_if_exist_key = false, patterns = {})
883
886
  unless structure.class == replica.class or
884
- ((structure.is_a?(TrueClass) or structure.is_a?(FalseClass)) and (replica.is_a?(TrueClass) or replica.is_a?(FalseClass)))
887
+ ((structure.is_a?(TrueClass) or structure.is_a?(FalseClass)) and (replica.is_a?(TrueClass) or replica.is_a?(FalseClass)))
885
888
  puts "NiceHash.compare_structure: different object type #{structure.class} is not #{replica.class}. expected: #{structure.inspect}. found: #{replica.inspect}."
886
889
  return false
887
890
  end
891
+ success = true
888
892
  if structure.is_a?(Hash)
889
893
  structure.each do |key, value|
894
+ if patterns.key?(key) and replica.key?(key)
895
+ unless (patterns[key].is_a?(Array) and replica[key].is_a?(Array) and replica[key].empty?) or
896
+ {key => patterns[key]}.validate({key => replica[key]}).empty?
897
+ puts "NiceHash.compare_structure: key :#{key} not following pattern #{patterns[key]}. value: #{replica[key]}"
898
+ success = false
899
+ end
900
+ end
901
+
890
902
  if compare_only_if_exist_key and replica.key?(key)
891
- unless compare_structure(value, replica[key], compare_only_if_exist_key)
903
+ unless compare_structure(value, replica[key], compare_only_if_exist_key, patterns)
892
904
  puts "NiceHash.compare_structure: key :#{key} different."
893
- return false
905
+ success = false
894
906
  end
895
907
  elsif compare_only_if_exist_key == false
896
908
  unless replica.key?(key)
897
- puts "NiceHash.compare_structure: key :#{key} different."
898
- return false
899
- end
900
- unless compare_structure(value, replica[key], compare_only_if_exist_key)
901
- puts "NiceHash.compare_structure: key :#{key} different."
902
- return false
909
+ puts "NiceHash.compare_structure: key :#{key} missing."
910
+ success = false
911
+ else
912
+ unless compare_structure(value, replica[key], compare_only_if_exist_key, patterns)
913
+ puts "NiceHash.compare_structure: key :#{key} different."
914
+ success = false
915
+ end
903
916
  end
904
917
  end
905
918
  end
906
919
  elsif structure.is_a?(Array)
907
920
  # compare all elements of replica with the structure of the first element on structure
908
921
  replica.each do |elem|
909
- unless compare_structure(structure[0], elem, compare_only_if_exist_key)
910
- return false
922
+ unless compare_structure(structure[0], elem, compare_only_if_exist_key, patterns)
923
+ success = false
911
924
  end
912
925
  end
913
926
  end
914
- return true
927
+ return success
915
928
  end
916
929
 
917
930
  ##################################################
@@ -957,7 +970,7 @@ class NiceHash
957
970
  # #>[:uno, :dos, :tres]
958
971
  ##################################################
959
972
  def self.get_all_keys(h)
960
- h.each_with_object([]) do |(k,v),keys|
973
+ h.each_with_object([]) do |(k, v), keys|
961
974
  keys << k
962
975
  keys.concat(get_all_keys(v)) if v.is_a? Hash
963
976
  if v.is_a?(Array)
@@ -967,7 +980,6 @@ class NiceHash
967
980
  end
968
981
  end
969
982
  end
970
-
971
983
 
972
984
  ##################################################
973
985
  # Deletes the supplied key
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nice_hash
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.12.14
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-21 00:00:00.000000000 Z
11
+ date: 2019-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string_pattern
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '2.1'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 2.1.3
22
+ version: 2.1.4
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '2.1'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 2.1.3
32
+ version: 2.1.4
33
33
  description: 'NiceHash creates hashes following certain patterns so your testing will
34
34
  be much easier. Parse and filter JSON. You can easily generate all the hashes you
35
35
  want following the criteria you specify. Many other features coming to Hash class