assert_generator 0.1.3 → 0.1.4
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 +4 -4
 - data/lib/assert_generator.rb +31 -9
 - metadata +20 -6
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: ccd94537b7e844452c6b6cedd7322dce6dbe867566f4e7a6cb61c6bf489b451a
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: d776744f117e30458eb37e417f7d88c102772fb21776c2051df539fef379a560
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 92de98db446541f10e121582584635776dbb059a30ce51160455ad593840ffcc4745ac8a62a54c4eb5e5993e14cf7a0e381ad9a1ca95f2d5d8e88a8520a66ffd
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 459757fe20cd990c11db825ae5e821e75c6172d2cde093f4dd994a94e4cb69b33a19552dc02fdd4e5852117b31a9bb07f14f008604c57df5c19530530264daa1
         
     | 
    
        data/lib/assert_generator.rb
    CHANGED
    
    | 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'date'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'binding_of_caller'
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            module AssertGenerator
         
     | 
| 
       6 
7 
     | 
    
         
             
              # Generate asserts based on some actual output from an object under test
         
     | 
| 
         @@ -19,16 +20,18 @@ module AssertGenerator 
     | 
|
| 
       19 
20 
     | 
    
         
             
              #     to access the object
         
     | 
| 
       20 
21 
     | 
    
         
             
              #   @param relative_dates [String] adjust dates to be relative to the supplied date as a string expression
         
     | 
| 
       21 
22 
     | 
    
         
             
              #     - use with date dependent fixtures
         
     | 
| 
      
 23 
     | 
    
         
            +
              #   @param numeric_precision [Integer] compare BigDecimal and Float using this level of precision
         
     | 
| 
      
 24 
     | 
    
         
            +
              #     in `assert_in_delta, set to nil for an `assert_equal` compare
         
     | 
| 
       22 
25 
     | 
    
         
             
              #   @yield a block which when evaluated returns the source object
         
     | 
| 
       23 
26 
     | 
    
         
             
              #
         
     | 
| 
       24 
     | 
    
         
            -
              def self.generate_asserts(source = nil, source_expr = nil, relative_dates: nil, &block)
         
     | 
| 
       25 
     | 
    
         
            -
                AssertGenerator::Klass.new.send(:generate_asserts, source, source_expr, relative_dates, block)
         
     | 
| 
      
 27 
     | 
    
         
            +
              def self.generate_asserts(source = nil, source_expr = nil, relative_dates: nil, numeric_precision: 2, &block)
         
     | 
| 
      
 28 
     | 
    
         
            +
                AssertGenerator::Klass.new.send(:generate_asserts, source, source_expr, relative_dates, numeric_precision, block)
         
     | 
| 
       26 
29 
     | 
    
         
             
              end
         
     | 
| 
       27 
30 
     | 
    
         | 
| 
       28 
31 
     | 
    
         
             
              class Klass
         
     | 
| 
       29 
     | 
    
         
            -
                attr_accessor :relative_dates, :relative_date_today
         
     | 
| 
      
 32 
     | 
    
         
            +
                attr_accessor :relative_dates, :relative_date_today, :numeric_precision
         
     | 
| 
       30 
33 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                def generate_asserts(source, source_expr, relative_dates, block)
         
     | 
| 
      
 34 
     | 
    
         
            +
                def generate_asserts(source, source_expr, relative_dates, numeric_precision, block)
         
     | 
| 
       32 
35 
     | 
    
         
             
                  if block
         
     | 
| 
       33 
36 
     | 
    
         
             
                    unless !defined?(Rails) || Rails.env.test?
         
     | 
| 
       34 
37 
     | 
    
         
             
                      raise 'AssertGenerator must only be used in the test context'
         
     | 
| 
         @@ -45,14 +48,14 @@ module AssertGenerator 
     | 
|
| 
       45 
48 
     | 
    
         
             
                  end
         
     | 
| 
       46 
49 
     | 
    
         | 
| 
       47 
50 
     | 
    
         
             
                  if relative_dates
         
     | 
| 
       48 
     | 
    
         
            -
                    raise 'relative_dates needs block syntax' unless block
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
51 
     | 
    
         
             
                    self.relative_dates = relative_dates
         
     | 
| 
       51 
52 
     | 
    
         
             
                    # rubocop:disable Security/Eval
         
     | 
| 
       52 
     | 
    
         
            -
                    self.relative_date_today = eval(relative_dates, block. 
     | 
| 
      
 53 
     | 
    
         
            +
                    self.relative_date_today = eval(relative_dates, block&.binding ||  binding.of_caller(1))
         
     | 
| 
       53 
54 
     | 
    
         
             
                    # rubocop:enable Security/Eval
         
     | 
| 
       54 
55 
     | 
    
         
             
                  end
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
      
 57 
     | 
    
         
            +
                  self.numeric_precision = numeric_precision
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
       56 
59 
     | 
    
         
             
                  if source.is_a?(Hash)
         
     | 
| 
       57 
60 
     | 
    
         
             
                    generate_asserts_hash(source, source_expr)
         
     | 
| 
       58 
61 
     | 
    
         
             
                    return self
         
     | 
| 
         @@ -111,7 +114,7 @@ module AssertGenerator 
     | 
|
| 
       111 
114 
     | 
    
         
             
                  accessor = make_accessor.call(*accessor_params)
         
     | 
| 
       112 
115 
     | 
    
         | 
| 
       113 
116 
     | 
    
         
             
                  if drillable_object(v)
         
     | 
| 
       114 
     | 
    
         
            -
                    return generate_asserts(v, accessor,  
     | 
| 
      
 117 
     | 
    
         
            +
                    return generate_asserts(v, accessor, relative_dates, numeric_precision, nil)
         
     | 
| 
       115 
118 
     | 
    
         
             
                  end
         
     | 
| 
       116 
119 
     | 
    
         | 
| 
       117 
120 
     | 
    
         
             
                  if v.nil?
         
     | 
| 
         @@ -121,10 +124,12 @@ module AssertGenerator 
     | 
|
| 
       121 
124 
     | 
    
         
             
                  elsif v.is_a?(false.class)
         
     | 
| 
       122 
125 
     | 
    
         
             
                    out "refute #{accessor}"
         
     | 
| 
       123 
126 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
                  elsif  
     | 
| 
      
 127 
     | 
    
         
            +
                  elsif is_timey?(v)
         
     | 
| 
       125 
128 
     | 
    
         
             
                    generate_date_time_assert(v, accessor)
         
     | 
| 
       126 
129 
     | 
    
         
             
                  elsif v.is_a?(Date)
         
     | 
| 
       127 
130 
     | 
    
         
             
                    generate_date_assert(v, accessor)
         
     | 
| 
      
 131 
     | 
    
         
            +
                  elsif v.is_a?(Float) || v.is_a?(BigDecimal)
         
     | 
| 
      
 132 
     | 
    
         
            +
                    generate_numeric_assert(v, accessor)
         
     | 
| 
       128 
133 
     | 
    
         
             
                  else
         
     | 
| 
       129 
134 
     | 
    
         
             
                    out "assert_equal #{v.inspect}, #{make_accessor.call(*accessor_params)}"
         
     | 
| 
       130 
135 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -155,5 +160,22 @@ module AssertGenerator 
     | 
|
| 
       155 
160 
     | 
    
         
             
                  out "assert_equal DateTime.new(#{v.year}, #{v.month}, #{v.day}, " \
         
     | 
| 
       156 
161 
     | 
    
         
             
                         + "#{v.hour}, #{v.min}, #{v.sec}, '#{v.zone}'), #{accessor}"
         
     | 
| 
       157 
162 
     | 
    
         
             
                end
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                def generate_numeric_assert(v, accessor)
         
     | 
| 
      
 165 
     | 
    
         
            +
                  if numeric_precision
         
     | 
| 
      
 166 
     | 
    
         
            +
                    delta = 10.0 ** -numeric_precision
         
     | 
| 
      
 167 
     | 
    
         
            +
                    assert_code = "assert_in_delta #{v.to_f.round(numeric_precision)}, #{accessor}, #{delta}"
         
     | 
| 
      
 168 
     | 
    
         
            +
                  else
         
     | 
| 
      
 169 
     | 
    
         
            +
                    assert_code = "assert_equal #{v}, #{accessor}"
         
     | 
| 
      
 170 
     | 
    
         
            +
                  end
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                  out assert_code
         
     | 
| 
      
 173 
     | 
    
         
            +
                end
         
     | 
| 
      
 174 
     | 
    
         
            +
             
     | 
| 
      
 175 
     | 
    
         
            +
                private
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                def is_timey?(v)
         
     | 
| 
      
 178 
     | 
    
         
            +
                  v.is_a?(DateTime) || (defined?(ActiveSupport::TimeWithZone) && v.is_a?(ActiveSupport::TimeWithZone))
         
     | 
| 
      
 179 
     | 
    
         
            +
                end
         
     | 
| 
       158 
180 
     | 
    
         
             
              end
         
     | 
| 
       159 
181 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: assert_generator
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Richard Parratt
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2020- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2020-06-08 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -56,16 +56,16 @@ dependencies: 
     | 
|
| 
       56 
56 
     | 
    
         
             
              name: rake
         
     | 
| 
       57 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       58 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
     | 
    
         
            -
                - - " 
     | 
| 
      
 59 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       60 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 61 
     | 
    
         
            +
                    version: '13.0'
         
     | 
| 
       62 
62 
     | 
    
         
             
              type: :development
         
     | 
| 
       63 
63 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       64 
64 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       65 
65 
     | 
    
         
             
                requirements:
         
     | 
| 
       66 
     | 
    
         
            -
                - - " 
     | 
| 
      
 66 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 68 
     | 
    
         
            +
                    version: '13.0'
         
     | 
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
70 
     | 
    
         
             
              name: shoulda
         
     | 
| 
       71 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -80,6 +80,20 @@ dependencies: 
     | 
|
| 
       80 
80 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       81 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
82 
     | 
    
         
             
                    version: '3.6'
         
     | 
| 
      
 83 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 84 
     | 
    
         
            +
              name: binding_of_caller
         
     | 
| 
      
 85 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 86 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 87 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 88 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 89 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 90 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 91 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 92 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 93 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 94 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 95 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 96 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       83 
97 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
98 
     | 
    
         
             
              name: rubocop
         
     | 
| 
       85 
99 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     |