active_interaction 0.5.0 → 0.6.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 +4 -4
- data/CHANGELOG.md +27 -3
- data/README.md +8 -6
- data/lib/active_interaction.rb +5 -3
- data/lib/active_interaction/active_model.rb +29 -0
- data/lib/active_interaction/base.rb +82 -116
- data/lib/active_interaction/errors.rb +79 -5
- data/lib/active_interaction/filter.rb +195 -21
- data/lib/active_interaction/filters.rb +26 -0
- data/lib/active_interaction/filters/array_filter.rb +22 -25
- data/lib/active_interaction/filters/boolean_filter.rb +12 -12
- data/lib/active_interaction/filters/date_filter.rb +32 -5
- data/lib/active_interaction/filters/date_time_filter.rb +34 -7
- data/lib/active_interaction/filters/file_filter.rb +12 -9
- data/lib/active_interaction/filters/float_filter.rb +13 -11
- data/lib/active_interaction/filters/hash_filter.rb +36 -17
- data/lib/active_interaction/filters/integer_filter.rb +13 -11
- data/lib/active_interaction/filters/model_filter.rb +15 -15
- data/lib/active_interaction/filters/string_filter.rb +19 -8
- data/lib/active_interaction/filters/symbol_filter.rb +29 -0
- data/lib/active_interaction/filters/time_filter.rb +38 -16
- data/lib/active_interaction/method_missing.rb +18 -0
- data/lib/active_interaction/overload_hash.rb +1 -0
- data/lib/active_interaction/validation.rb +19 -0
- data/lib/active_interaction/version.rb +1 -1
- data/spec/active_interaction/active_model_spec.rb +33 -0
- data/spec/active_interaction/base_spec.rb +54 -48
- data/spec/active_interaction/errors_spec.rb +99 -0
- data/spec/active_interaction/filter_spec.rb +12 -20
- data/spec/active_interaction/filters/array_filter_spec.rb +50 -28
- data/spec/active_interaction/filters/boolean_filter_spec.rb +15 -15
- data/spec/active_interaction/filters/date_filter_spec.rb +30 -18
- data/spec/active_interaction/filters/date_time_filter_spec.rb +31 -19
- data/spec/active_interaction/filters/file_filter_spec.rb +7 -7
- data/spec/active_interaction/filters/float_filter_spec.rb +13 -11
- data/spec/active_interaction/filters/hash_filter_spec.rb +38 -29
- data/spec/active_interaction/filters/integer_filter_spec.rb +18 -8
- data/spec/active_interaction/filters/model_filter_spec.rb +24 -20
- data/spec/active_interaction/filters/string_filter_spec.rb +14 -8
- data/spec/active_interaction/filters/symbol_filter_spec.rb +24 -0
- data/spec/active_interaction/filters/time_filter_spec.rb +33 -69
- data/spec/active_interaction/filters_spec.rb +21 -0
- data/spec/active_interaction/i18n_spec.rb +0 -15
- data/spec/active_interaction/integration/array_interaction_spec.rb +2 -22
- data/spec/active_interaction/integration/hash_interaction_spec.rb +5 -25
- data/spec/active_interaction/integration/symbol_interaction_spec.rb +5 -0
- data/spec/active_interaction/method_missing_spec.rb +69 -0
- data/spec/active_interaction/validation_spec.rb +55 -0
- data/spec/spec_helper.rb +6 -0
- data/spec/support/filters.rb +168 -14
- data/spec/support/interactions.rb +11 -13
- metadata +31 -13
- data/lib/active_interaction/filter_method.rb +0 -13
- data/lib/active_interaction/filter_methods.rb +0 -26
- data/lib/active_interaction/filters/abstract_date_time_filter.rb +0 -25
- data/spec/active_interaction/filter_method_spec.rb +0 -43
- data/spec/active_interaction/filter_methods_spec.rb +0 -30
| @@ -1,29 +1,21 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 4 | 
            -
              TestFilter = Class.new(Filter)
         | 
| 5 | 
            -
            end
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            describe ActiveInteraction::Filter do
         | 
| 8 | 
            -
              it_behaves_like 'a filter'
         | 
| 9 | 
            -
             | 
| 10 | 
            -
              describe '.factory(type)' do
         | 
| 11 | 
            -
                let(:result) { described_class.factory(type) }
         | 
| 3 | 
            +
            class ActiveInteraction::TestFilter < ActiveInteraction::Filter; end
         | 
| 12 4 |  | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 5 | 
            +
            describe ActiveInteraction::Filter, :filter do
         | 
| 6 | 
            +
              include_context 'filters'
         | 
| 15 7 |  | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                   | 
| 8 | 
            +
              describe '.slug' do
         | 
| 9 | 
            +
                it 'raises an error' do
         | 
| 10 | 
            +
                  expect {
         | 
| 11 | 
            +
                    described_class.slug
         | 
| 12 | 
            +
                  }.to raise_error ActiveInteraction::InvalidClassError
         | 
| 19 13 | 
             
                end
         | 
| 14 | 
            +
              end
         | 
| 20 15 |  | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 16 | 
            +
              context ActiveInteraction::TestFilter do
         | 
| 17 | 
            +
                it_behaves_like 'a filter'
         | 
| 23 18 |  | 
| 24 | 
            -
             | 
| 25 | 
            -
                    expect { result }.to raise_error NoMethodError
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
                end
         | 
| 19 | 
            +
                let(:described_class) { ActiveInteraction::TestFilter }
         | 
| 28 20 | 
             
              end
         | 
| 29 21 | 
             
            end
         | 
| @@ -1,55 +1,77 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe ActiveInteraction::ArrayFilter do
         | 
| 3 | 
            +
            describe ActiveInteraction::ArrayFilter, :filter do
         | 
| 4 4 | 
             
              include_context 'filters'
         | 
| 5 5 | 
             
              it_behaves_like 'a filter'
         | 
| 6 6 |  | 
| 7 | 
            -
               | 
| 7 | 
            +
              context 'with multiple nested filters' do
         | 
| 8 | 
            +
                let(:block) { Proc.new { array; array } }
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                it 'raises an error' do
         | 
| 11 | 
            +
                  expect { filter }.to raise_error ActiveInteraction::InvalidFilterError
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              context 'with a nested name' do
         | 
| 16 | 
            +
                let(:block) { Proc.new { array :a } }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                it 'raises an error' do
         | 
| 19 | 
            +
                  expect { filter }.to raise_error ActiveInteraction::InvalidFilterError
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              context 'with a nested default' do
         | 
| 24 | 
            +
                let(:block) { Proc.new { array default: nil } }
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                it 'raises an error' do
         | 
| 27 | 
            +
                  expect { filter }.to raise_error ActiveInteraction::InvalidDefaultError
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              describe '#cast' do
         | 
| 8 32 | 
             
                context 'with an Array' do
         | 
| 9 33 | 
             
                  let(:value) { [] }
         | 
| 10 34 |  | 
| 11 35 | 
             
                  it 'returns the Array' do
         | 
| 12 | 
            -
                    expect( | 
| 36 | 
            +
                    expect(filter.cast(value)).to eq value
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                context 'with a heterogenous Array' do
         | 
| 41 | 
            +
                  let(:value) { [[], false, 0.0, {}, 0, '', :''] }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  it 'returns the Array' do
         | 
| 44 | 
            +
                    expect(filter.cast(value)).to eq value
         | 
| 13 45 | 
             
                  end
         | 
| 14 46 | 
             
                end
         | 
| 15 47 |  | 
| 16 | 
            -
                context 'with a  | 
| 48 | 
            +
                context 'with a nested filter' do
         | 
| 17 49 | 
             
                  let(:block) { Proc.new { array } }
         | 
| 18 50 |  | 
| 19 | 
            -
                  context 'with an Array | 
| 20 | 
            -
                    let(:value) { [ | 
| 51 | 
            +
                  context 'with an Array' do
         | 
| 52 | 
            +
                    let(:value) { [] }
         | 
| 21 53 |  | 
| 22 54 | 
             
                    it 'returns the Array' do
         | 
| 23 | 
            -
                      expect( | 
| 55 | 
            +
                      expect(filter.cast(value)).to eq value
         | 
| 24 56 | 
             
                    end
         | 
| 25 57 | 
             
                  end
         | 
| 26 58 |  | 
| 27 | 
            -
                  context 'with an Array of  | 
| 28 | 
            -
                    let(:value) { [ | 
| 59 | 
            +
                  context 'with an Array of Arrays' do
         | 
| 60 | 
            +
                    let(:value) { [[]] }
         | 
| 29 61 |  | 
| 30 | 
            -
                    it ' | 
| 31 | 
            -
                      expect  | 
| 32 | 
            -
                        result
         | 
| 33 | 
            -
                      }.to raise_error ActiveInteraction::InvalidNestedValue
         | 
| 62 | 
            +
                    it 'returns the Array' do
         | 
| 63 | 
            +
                      expect(filter.cast(value)).to eq value
         | 
| 34 64 | 
             
                    end
         | 
| 35 65 | 
             
                  end
         | 
| 36 | 
            -
                end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                context 'with a nested block' do
         | 
| 39 | 
            -
                  let(:block) { Proc.new { array { array } } }
         | 
| 40 | 
            -
                  let(:value) { [[[]]] }
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                  it 'returns the Array' do
         | 
| 43 | 
            -
                    expect(result).to eql value
         | 
| 44 | 
            -
                  end
         | 
| 45 | 
            -
                end
         | 
| 46 66 |  | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
                  let(:value) { [] }
         | 
| 67 | 
            +
                  context 'with a heterogenous Array' do
         | 
| 68 | 
            +
                    let(:value) { [[], false, 0.0, {}, 0, '', :''] }
         | 
| 50 69 |  | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 70 | 
            +
                    it 'raises an error' do
         | 
| 71 | 
            +
                      expect{
         | 
| 72 | 
            +
                        filter.cast(value)
         | 
| 73 | 
            +
                      }.to raise_error ActiveInteraction::InvalidValueError
         | 
| 74 | 
            +
                    end
         | 
| 53 75 | 
             
                  end
         | 
| 54 76 | 
             
                end
         | 
| 55 77 | 
             
              end
         | 
| @@ -1,31 +1,23 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe ActiveInteraction::BooleanFilter do
         | 
| 3 | 
            +
            describe ActiveInteraction::BooleanFilter, :filter do
         | 
| 4 4 | 
             
              include_context 'filters'
         | 
| 5 5 | 
             
              it_behaves_like 'a filter'
         | 
| 6 6 |  | 
| 7 | 
            -
              describe ' | 
| 8 | 
            -
                context 'with true' do
         | 
| 9 | 
            -
                  let(:value) { true }
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  it 'returns true' do
         | 
| 12 | 
            -
                    expect(result).to eql true
         | 
| 13 | 
            -
                  end
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
             | 
| 7 | 
            +
              describe '#cast' do
         | 
| 16 8 | 
             
                context 'with false' do
         | 
| 17 9 | 
             
                  let(:value) { false }
         | 
| 18 10 |  | 
| 19 11 | 
             
                  it 'returns false' do
         | 
| 20 | 
            -
                    expect( | 
| 12 | 
            +
                    expect(filter.cast(value)).to be_false
         | 
| 21 13 | 
             
                  end
         | 
| 22 14 | 
             
                end
         | 
| 23 15 |  | 
| 24 | 
            -
                context 'with  | 
| 25 | 
            -
                  let(:value) {  | 
| 16 | 
            +
                context 'with true' do
         | 
| 17 | 
            +
                  let(:value) { true }
         | 
| 26 18 |  | 
| 27 19 | 
             
                  it 'returns true' do
         | 
| 28 | 
            -
                    expect( | 
| 20 | 
            +
                    expect(filter.cast(value)).to be_true
         | 
| 29 21 | 
             
                  end
         | 
| 30 22 | 
             
                end
         | 
| 31 23 |  | 
| @@ -33,7 +25,15 @@ describe ActiveInteraction::BooleanFilter do | |
| 33 25 | 
             
                  let(:value) { '0' }
         | 
| 34 26 |  | 
| 35 27 | 
             
                  it 'returns false' do
         | 
| 36 | 
            -
                    expect( | 
| 28 | 
            +
                    expect(filter.cast(value)).to be_false
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                context 'with "1"' do
         | 
| 33 | 
            +
                  let(:value) { '1' }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  it 'returns true' do
         | 
| 36 | 
            +
                    expect(filter.cast(value)).to be_true
         | 
| 37 37 | 
             
                  end
         | 
| 38 38 | 
             
                end
         | 
| 39 39 | 
             
              end
         | 
| @@ -1,48 +1,60 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe ActiveInteraction::DateFilter do
         | 
| 3 | 
            +
            describe ActiveInteraction::DateFilter, :filter do
         | 
| 4 4 | 
             
              include_context 'filters'
         | 
| 5 5 | 
             
              it_behaves_like 'a filter'
         | 
| 6 6 |  | 
| 7 | 
            -
               | 
| 7 | 
            +
              shared_context 'with format' do
         | 
| 8 | 
            +
                let(:format) { '%d/%m/%Y' }
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                before do
         | 
| 11 | 
            +
                  options.merge!(format: format)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              describe '#cast' do
         | 
| 8 16 | 
             
                context 'with a Date' do
         | 
| 9 | 
            -
                  let(:value) { Date. | 
| 17 | 
            +
                  let(:value) { Date.new }
         | 
| 10 18 |  | 
| 11 19 | 
             
                  it 'returns the Date' do
         | 
| 12 | 
            -
                    expect( | 
| 20 | 
            +
                    expect(filter.cast(value)).to eq value
         | 
| 13 21 | 
             
                  end
         | 
| 14 22 | 
             
                end
         | 
| 15 23 |  | 
| 16 | 
            -
                context 'with a  | 
| 17 | 
            -
                  let(:value) { ' | 
| 24 | 
            +
                context 'with a String' do
         | 
| 25 | 
            +
                  let(:value) { '2011-12-13' }
         | 
| 18 26 |  | 
| 19 | 
            -
                  it ' | 
| 20 | 
            -
                    expect( | 
| 27 | 
            +
                  it 'returns a Date' do
         | 
| 28 | 
            +
                    expect(filter.cast(value)).to eq Date.parse(value)
         | 
| 21 29 | 
             
                  end
         | 
| 22 30 |  | 
| 23 | 
            -
                  context 'with  | 
| 24 | 
            -
                     | 
| 31 | 
            +
                  context 'with format' do
         | 
| 32 | 
            +
                    include_context 'with format'
         | 
| 25 33 |  | 
| 26 | 
            -
                     | 
| 34 | 
            +
                    let(:value) { '13/12/2011' }
         | 
| 27 35 |  | 
| 28 | 
            -
                    it ' | 
| 29 | 
            -
                      expect( | 
| 36 | 
            +
                    it 'returns a Date' do
         | 
| 37 | 
            +
                      expect(filter.cast(value)).to eq Date.strptime(value, format)
         | 
| 30 38 | 
             
                    end
         | 
| 31 39 | 
             
                  end
         | 
| 32 40 | 
             
                end
         | 
| 33 41 |  | 
| 34 42 | 
             
                context 'with an invalid String' do
         | 
| 35 | 
            -
                  let(:value) { ' | 
| 43 | 
            +
                  let(:value) { 'invalid' }
         | 
| 36 44 |  | 
| 37 45 | 
             
                  it 'raises an error' do
         | 
| 38 | 
            -
                    expect { | 
| 46 | 
            +
                    expect {
         | 
| 47 | 
            +
                      filter.cast(value)
         | 
| 48 | 
            +
                    }.to raise_error ActiveInteraction::InvalidValueError
         | 
| 39 49 | 
             
                  end
         | 
| 40 50 |  | 
| 41 | 
            -
                  context 'with  | 
| 42 | 
            -
                     | 
| 51 | 
            +
                  context 'with format' do
         | 
| 52 | 
            +
                    include_context 'with format'
         | 
| 43 53 |  | 
| 44 54 | 
             
                    it 'raises an error' do
         | 
| 45 | 
            -
                      expect { | 
| 55 | 
            +
                      expect {
         | 
| 56 | 
            +
                        filter.cast(value)
         | 
| 57 | 
            +
                      }.to raise_error ActiveInteraction::InvalidValueError
         | 
| 46 58 | 
             
                    end
         | 
| 47 59 | 
             
                  end
         | 
| 48 60 | 
             
                end
         | 
| @@ -1,48 +1,60 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe ActiveInteraction::DateTimeFilter do
         | 
| 3 | 
            +
            describe ActiveInteraction::DateTimeFilter, :filter do
         | 
| 4 4 | 
             
              include_context 'filters'
         | 
| 5 5 | 
             
              it_behaves_like 'a filter'
         | 
| 6 6 |  | 
| 7 | 
            -
               | 
| 8 | 
            -
                 | 
| 9 | 
            -
             | 
| 7 | 
            +
              shared_context 'with format' do
         | 
| 8 | 
            +
                let(:format) { '%d/%m/%Y %H:%M:%S %:z' }
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                before do
         | 
| 11 | 
            +
                  options.merge!(format: format)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              describe '#cast' do
         | 
| 16 | 
            +
                context 'with a Datetime' do
         | 
| 17 | 
            +
                  let(:value) { DateTime.new }
         | 
| 10 18 |  | 
| 11 19 | 
             
                  it 'returns the DateTime' do
         | 
| 12 | 
            -
                    expect( | 
| 20 | 
            +
                    expect(filter.cast(value)).to eq value
         | 
| 13 21 | 
             
                  end
         | 
| 14 22 | 
             
                end
         | 
| 15 23 |  | 
| 16 | 
            -
                context 'with a  | 
| 17 | 
            -
                  let(:value) { ' | 
| 24 | 
            +
                context 'with a String' do
         | 
| 25 | 
            +
                  let(:value) { '2011-12-13T14:15:16+17:18' }
         | 
| 18 26 |  | 
| 19 | 
            -
                  it ' | 
| 20 | 
            -
                    expect( | 
| 27 | 
            +
                  it 'returns a DateTime' do
         | 
| 28 | 
            +
                    expect(filter.cast(value)).to eq DateTime.parse(value)
         | 
| 21 29 | 
             
                  end
         | 
| 22 30 |  | 
| 23 | 
            -
                  context 'with  | 
| 24 | 
            -
                     | 
| 31 | 
            +
                  context 'with format' do
         | 
| 32 | 
            +
                    include_context 'with format'
         | 
| 25 33 |  | 
| 26 | 
            -
                     | 
| 34 | 
            +
                    let(:value) { '13/12/2011 14:15:16 +17:18' }
         | 
| 27 35 |  | 
| 28 | 
            -
                    it ' | 
| 29 | 
            -
                      expect( | 
| 36 | 
            +
                    it 'returns a DateTime' do
         | 
| 37 | 
            +
                      expect(filter.cast(value)).to eq DateTime.strptime(value, format)
         | 
| 30 38 | 
             
                    end
         | 
| 31 39 | 
             
                  end
         | 
| 32 40 | 
             
                end
         | 
| 33 41 |  | 
| 34 42 | 
             
                context 'with an invalid String' do
         | 
| 35 | 
            -
                  let(:value) { ' | 
| 43 | 
            +
                  let(:value) { 'invalid' }
         | 
| 36 44 |  | 
| 37 45 | 
             
                  it 'raises an error' do
         | 
| 38 | 
            -
                    expect { | 
| 46 | 
            +
                    expect {
         | 
| 47 | 
            +
                      filter.cast(value)
         | 
| 48 | 
            +
                    }.to raise_error ActiveInteraction::InvalidValueError
         | 
| 39 49 | 
             
                  end
         | 
| 40 50 |  | 
| 41 | 
            -
                  context 'with  | 
| 42 | 
            -
                     | 
| 51 | 
            +
                  context 'with format' do
         | 
| 52 | 
            +
                    include_context 'with format'
         | 
| 43 53 |  | 
| 44 54 | 
             
                    it 'raises an error' do
         | 
| 45 | 
            -
                      expect { | 
| 55 | 
            +
                      expect {
         | 
| 56 | 
            +
                        filter.cast(value)
         | 
| 57 | 
            +
                      }.to raise_error ActiveInteraction::InvalidValueError
         | 
| 46 58 | 
             
                    end
         | 
| 47 59 | 
             
                  end
         | 
| 48 60 | 
             
                end
         | 
| @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe ActiveInteraction::FileFilter do
         | 
| 3 | 
            +
            describe ActiveInteraction::FileFilter, :filter do
         | 
| 4 4 | 
             
              include_context 'filters'
         | 
| 5 5 | 
             
              it_behaves_like 'a filter'
         | 
| 6 6 |  | 
| 7 | 
            -
              describe ' | 
| 7 | 
            +
              describe '#cast' do
         | 
| 8 8 | 
             
                context 'with a File' do
         | 
| 9 | 
            -
                  let(:value) { File. | 
| 9 | 
            +
                  let(:value) { File.new(__FILE__) }
         | 
| 10 10 |  | 
| 11 11 | 
             
                  it 'returns the File' do
         | 
| 12 | 
            -
                    expect( | 
| 12 | 
            +
                    expect(filter.cast(value)).to eq value
         | 
| 13 13 | 
             
                  end
         | 
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| @@ -17,15 +17,15 @@ describe ActiveInteraction::FileFilter do | |
| 17 17 | 
             
                  let(:value) { Tempfile.new(SecureRandom.hex) }
         | 
| 18 18 |  | 
| 19 19 | 
             
                  it 'returns the Tempfile' do
         | 
| 20 | 
            -
                    expect( | 
| 20 | 
            +
                    expect(filter.cast(value)).to eq value
         | 
| 21 21 | 
             
                  end
         | 
| 22 22 | 
             
                end
         | 
| 23 23 |  | 
| 24 | 
            -
                context 'with  | 
| 24 | 
            +
                context 'with an object that responds to #tempfile' do
         | 
| 25 25 | 
             
                  let(:value) { double(tempfile: Tempfile.new(SecureRandom.hex)) }
         | 
| 26 26 |  | 
| 27 27 | 
             
                  it 'returns the Tempfile' do
         | 
| 28 | 
            -
                    expect( | 
| 28 | 
            +
                    expect(filter.cast(value)).to eq value.tempfile
         | 
| 29 29 | 
             
                  end
         | 
| 30 30 | 
             
                end
         | 
| 31 31 | 
             
              end
         | 
| @@ -1,39 +1,41 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 | 
            -
            describe ActiveInteraction::FloatFilter do
         | 
| 3 | 
            +
            describe ActiveInteraction::FloatFilter, :filter do
         | 
| 4 4 | 
             
              include_context 'filters'
         | 
| 5 5 | 
             
              it_behaves_like 'a filter'
         | 
| 6 6 |  | 
| 7 | 
            -
              describe ' | 
| 7 | 
            +
              describe '#cast' do
         | 
| 8 8 | 
             
                context 'with a Float' do
         | 
| 9 9 | 
             
                  let(:value) { rand }
         | 
| 10 10 |  | 
| 11 11 | 
             
                  it 'returns the Float' do
         | 
| 12 | 
            -
                    expect( | 
| 12 | 
            +
                    expect(filter.cast(value)).to eq value
         | 
| 13 13 | 
             
                  end
         | 
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| 16 | 
            -
                context 'with  | 
| 16 | 
            +
                context 'with a Numeric' do
         | 
| 17 17 | 
             
                  let(:value) { rand(1 << 16) }
         | 
| 18 18 |  | 
| 19 | 
            -
                  it ' | 
| 20 | 
            -
                    expect( | 
| 19 | 
            +
                  it 'returns a Float' do
         | 
| 20 | 
            +
                    expect(filter.cast(value)).to eq value.to_f
         | 
| 21 21 | 
             
                  end
         | 
| 22 22 | 
             
                end
         | 
| 23 23 |  | 
| 24 | 
            -
                context 'with a  | 
| 24 | 
            +
                context 'with a String' do
         | 
| 25 25 | 
             
                  let(:value) { rand.to_s }
         | 
| 26 26 |  | 
| 27 | 
            -
                  it ' | 
| 28 | 
            -
                    expect( | 
| 27 | 
            +
                  it 'returns a Float' do
         | 
| 28 | 
            +
                    expect(filter.cast(value)).to eq Float(value)
         | 
| 29 29 | 
             
                  end
         | 
| 30 30 | 
             
                end
         | 
| 31 31 |  | 
| 32 32 | 
             
                context 'with an invalid String' do
         | 
| 33 | 
            -
                  let(:value) { ' | 
| 33 | 
            +
                  let(:value) { 'invalid' }
         | 
| 34 34 |  | 
| 35 35 | 
             
                  it 'raises an error' do
         | 
| 36 | 
            -
                    expect { | 
| 36 | 
            +
                    expect {
         | 
| 37 | 
            +
                      filter.cast(value)
         | 
| 38 | 
            +
                    }.to raise_error ActiveInteraction::InvalidValueError
         | 
| 37 39 | 
             
                  end
         | 
| 38 40 | 
             
                end
         | 
| 39 41 | 
             
              end
         |