table_warnings 0.0.7 → 1.0.0

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.
@@ -1,11 +0,0 @@
1
- require 'singleton'
2
- require 'set'
3
- module TableWarnings
4
- class Config
5
- include ::Singleton
6
-
7
- def warnings
8
- @warnings ||= ::Hash.new { |hash, key| hash[key] = ::Set.new }
9
- end
10
- end
11
- end
@@ -1,13 +0,0 @@
1
- module TableWarnings
2
- class Warning
3
- class Arbitrary < Warning
4
- attr_reader :blk
5
-
6
- def messages
7
- if m = blk.call
8
- [m].flatten.select(&:present?)
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,25 +0,0 @@
1
- module TableWarnings
2
- class Warning
3
- class Blank < Warning
4
- def column_name
5
- @column_name.to_s
6
- end
7
-
8
- def columns_hash
9
- if column_name.present?
10
- table.columns_hash.slice column_name
11
- else
12
- table.columns_hash
13
- end
14
- end
15
-
16
- def messages
17
- columns_hash.map do |_, c|
18
- if table.count(:conditions => { c.name => nil }) > 0 or (c.text? and table.count(:conditions => [ "TRIM(#{table.quoted_table_name}.#{c.name}) = ''"]) > 0)
19
- "There are blanks in the `#{c.name}` column."
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,34 +0,0 @@
1
- module TableWarnings
2
- class Warning
3
- class Size < Warning
4
- attr_reader :approximate_size
5
-
6
- def allowed_range
7
- case approximate_size
8
- when :few
9
- 1..10
10
- when :dozens, :tens
11
- 10..100
12
- when :hundreds
13
- 100..1_000
14
- when :thousands
15
- 1_000..99_000
16
- when :hundreds_of_thousands
17
- 100_000..1_000_000
18
- when :millions
19
- 1_000_000..1_000_000_000
20
- when Range
21
- approximate_size
22
- when Numeric
23
- approximate_size..approximate_size
24
- end
25
- end
26
-
27
- def messages
28
- unless allowed_range.include? table.count
29
- "Table is not of expected size (expected: #{allowed_range.to_s}, actual: #{table.count})"
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,30 +0,0 @@
1
- module TableWarnings
2
- class Warning
3
- autoload :Blank, 'table_warnings/warning/blank'
4
- autoload :Size, 'table_warnings/warning/size'
5
- autoload :Arbitrary, 'table_warnings/warning/arbitrary'
6
-
7
- attr_reader :table
8
-
9
- def initialize(options = {})
10
- options.each do |k, v|
11
- instance_variable_set "@#{k}", v
12
- end
13
- end
14
-
15
- def to_hash
16
- instance_variables.sort.inject({}) do |memo, ivar_name|
17
- memo[ivar_name.to_s.sub('@', '')] = instance_variable_get ivar_name
18
- memo
19
- end
20
- end
21
-
22
- def hash
23
- to_hash.hash
24
- end
25
-
26
- def eql?(other)
27
- other.is_a?(Warning) and self.to_hash == other.to_hash
28
- end
29
- end
30
- end
@@ -1,64 +0,0 @@
1
- require 'helper'
2
-
3
- class AutomobileMake < ActiveRecord::Base
4
- col :name
5
- col :fuel_efficiency, :type => :float
6
- col :fuel_efficiency_units
7
-
8
- warn_if_blanks_in :name
9
- warn_if_blanks_in :fuel_efficiency
10
- warn_unless_size_is :hundreds
11
- warn do
12
- if exists? ['fuel_efficiency < ?', 0]
13
- "That's a strange looking fuel efficiency"
14
- end
15
- end
16
- end
17
-
18
- class AutomobileFuelType < ActiveRecord::Base
19
- col :name
20
- col :code
21
- col :fuel_efficiency, :type => :float
22
- col :fuel_efficiency_units
23
-
24
- warn_if_any_blanks
25
- warn_unless_size_is 1..6
26
- end
27
-
28
- AutomobileMake.auto_upgrade!
29
- AutomobileFuelType.auto_upgrade!
30
-
31
- class TestTableWarnings < Test::Unit::TestCase
32
- def setup
33
- AutomobileMake.delete_all
34
- AutomobileFuelType.delete_all
35
- end
36
-
37
- def test_001_warn_for_blanks_in_specific_columns
38
- AutomobileMake.create! :name => ' ', :fuel_efficiency => nil, :fuel_efficiency_units => 'kilometres_per_litre'
39
- AutomobileMake.create! :name => 'Alfa Romeo', :fuel_efficiency => 10.4075, :fuel_efficiency_units => 'kilometres_per_litre'
40
- assert AutomobileMake.table_warnings.one? { |w| w =~ /blanks.*name.*column/ }
41
- assert AutomobileMake.table_warnings.one? { |w| w =~ /blanks.*fuel_efficiency.*column/ }
42
- end
43
-
44
- def test_002_warn_of_size
45
- assert AutomobileMake.table_warnings.one? { |w| w =~ /expected.*100\.\.1000/ }
46
- assert AutomobileFuelType.table_warnings.one? { |w| w =~ /expected.*1\.\.6/ }
47
- end
48
-
49
- def test_003_warn_for_blanks_in_any_column
50
- AutomobileFuelType.create! :name => 'gas'
51
- assert AutomobileFuelType.table_warnings.one? { |w| w =~ /blanks.*code.*column/ }
52
- assert AutomobileFuelType.table_warnings.many? { |w| w =~ /blanks.*fuel_efficiency.*column/ }
53
- end
54
-
55
- def test_004_dont_treat_0_as_blank
56
- AutomobileMake.create! :name => 'Acme', :fuel_efficiency => 0
57
- assert !AutomobileMake.table_warnings.any? { |w| w =~ /blanks.*fuel_efficiency.*column/ }
58
- end
59
-
60
- def test_005_warn_if_arbitrary_block
61
- AutomobileMake.create! :name => 'Acme', :fuel_efficiency => -5
62
- assert AutomobileMake.table_warnings.one? { |w| w =~ /strange looking fuel efficiency/ }
63
- end
64
- end