table_warnings 0.0.5 → 0.0.6

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,3 +1,3 @@
1
1
  module TableWarnings
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1,13 @@
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
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -2,6 +2,7 @@ module TableWarnings
2
2
  class Warning
3
3
  autoload :Blank, 'table_warnings/warning/blank'
4
4
  autoload :Size, 'table_warnings/warning/size'
5
+ autoload :Arbitrary, 'table_warnings/warning/arbitrary'
5
6
 
6
7
  attr_reader :table
7
8
 
@@ -37,6 +37,12 @@ module TableWarnings
37
37
  warning = ::TableWarnings::Warning::Size.new :table => self, :approximate_size => approximate_size
38
38
  ::TableWarnings.config.warnings[self].add warning
39
39
  end
40
+
41
+ # An arbitrary warning.
42
+ def warn(&blk)
43
+ warning = ::TableWarnings::Warning::Arbitrary.new :table => self, :blk => blk
44
+ ::TableWarnings.config.warnings[self].add warning
45
+ end
40
46
  end
41
47
 
42
48
  unless ::ActiveRecord::Base.method_defined? :table_warnings
@@ -18,7 +18,11 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ['lib']
21
+
22
+ s.add_runtime_dependency 'activerecord'
23
+
21
24
  s.add_development_dependency 'fastercsv'
22
- s.add_development_dependency 'earth'
23
- s.add_dependency 'activerecord'
25
+ s.add_development_dependency 'rake'
26
+ s.add_development_dependency 'mini_record'
27
+ s.add_development_dependency 'sqlite3'
24
28
  end
data/test/helper.rb CHANGED
@@ -4,6 +4,7 @@ Bundler.setup
4
4
  require 'test/unit'
5
5
  require 'active_support/all'
6
6
  require 'active_record'
7
+ require 'mini_record'
7
8
  # thanks authlogic!
8
9
  ActiveRecord::Schema.verbose = false
9
10
  begin
@@ -11,8 +12,12 @@ begin
11
12
  rescue ArgumentError
12
13
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
13
14
  end
14
- require 'earth'
15
- Earth.init :automobile, :apply_schemas => true
15
+
16
+ # require 'logger'
17
+ # logger = Logger.new $stdout
18
+ # logger.level = Logger::DEBUG
19
+ # ActiveRecord::Base.logger = logger
20
+
16
21
  $LOAD_PATH.unshift(File.dirname(__FILE__))
17
22
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
18
23
  require 'table_warnings'
@@ -1,18 +1,33 @@
1
1
  require 'helper'
2
2
 
3
3
  class AutomobileMake < ActiveRecord::Base
4
+ col :name
5
+ col :fuel_efficiency, :type => :float
6
+ col :fuel_efficiency_units
7
+
4
8
  warn_if_blanks_in :name
5
9
  warn_if_blanks_in :fuel_efficiency
6
10
  warn_unless_size_is :hundreds
7
- warn_unless_size_is 100..1000
11
+ warn do
12
+ if exists? ['fuel_efficiency < ?', 0]
13
+ "That's a strange looking fuel efficiency"
14
+ end
15
+ end
8
16
  end
9
17
 
10
18
  class AutomobileFuelType < ActiveRecord::Base
19
+ col :name
20
+ col :code
21
+ col :fuel_efficiency, :type => :float
22
+ col :fuel_efficiency_units
23
+
11
24
  warn_if_any_blanks
12
- warn_unless_size_is :few
13
25
  warn_unless_size_is 1..6
14
26
  end
15
27
 
28
+ AutomobileMake.auto_upgrade!
29
+ AutomobileFuelType.auto_upgrade!
30
+
16
31
  class TestTableWarnings < Test::Unit::TestCase
17
32
  def setup
18
33
  AutomobileMake.delete_all
@@ -22,22 +37,28 @@ class TestTableWarnings < Test::Unit::TestCase
22
37
  def test_001_warn_for_blanks_in_specific_columns
23
38
  AutomobileMake.create! :name => ' ', :fuel_efficiency => nil, :fuel_efficiency_units => 'kilometres_per_litre'
24
39
  AutomobileMake.create! :name => 'Alfa Romeo', :fuel_efficiency => 10.4075, :fuel_efficiency_units => 'kilometres_per_litre'
25
- assert AutomobileMake.table_warnings.one? { |w| w =~ /blanks in.*name.*column/ }
26
- assert AutomobileMake.table_warnings.one? { |w| w =~ /blanks in.*fuel_efficiency.*column/ }
40
+ assert AutomobileMake.table_warnings.one? { |w| w =~ /blanks.*name.*column/ }
41
+ assert AutomobileMake.table_warnings.one? { |w| w =~ /blanks.*fuel_efficiency.*column/ }
27
42
  end
28
43
 
29
44
  def test_002_warn_of_size
30
- assert_equal 0, AutomobileMake.count
31
- assert AutomobileMake.table_warnings.many? { |w| w =~ /expected.*size/ }
45
+ assert AutomobileMake.table_warnings.one? { |w| w =~ /expected.*100\.\.1000/ }
46
+ assert AutomobileFuelType.table_warnings.one? { |w| w =~ /expected.*1\.\.6/ }
32
47
  end
33
48
 
34
49
  def test_003_warn_for_blanks_in_any_column
35
50
  AutomobileFuelType.create! :name => 'gas'
36
- assert AutomobileFuelType.table_warnings.one? { |w| w =~ /blanks in.*code.*column/ }
51
+ assert AutomobileFuelType.table_warnings.one? { |w| w =~ /blanks.*code.*column/ }
52
+ assert AutomobileFuelType.table_warnings.many? { |w| w =~ /blanks.*fuel_efficiency.*column/ }
37
53
  end
38
54
 
39
55
  def test_004_dont_treat_0_as_blank
40
56
  AutomobileMake.create! :name => 'Acme', :fuel_efficiency => 0
41
- assert !AutomobileMake.table_warnings.any? { |w| w =~ /blanks in.*fuel_efficiency.*column/ }
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/ }
42
63
  end
43
64
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_warnings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-06-24 00:00:00.000000000Z
12
+ date: 2011-09-22 00:00:00.000000000Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: &2154426760 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2154426760
14
25
  - !ruby/object:Gem::Dependency
15
26
  name: fastercsv
16
- requirement: &2153873040 !ruby/object:Gem::Requirement
27
+ requirement: &2154426340 !ruby/object:Gem::Requirement
17
28
  none: false
18
29
  requirements:
19
30
  - - ! '>='
@@ -21,10 +32,10 @@ dependencies:
21
32
  version: '0'
22
33
  type: :development
23
34
  prerelease: false
24
- version_requirements: *2153873040
35
+ version_requirements: *2154426340
25
36
  - !ruby/object:Gem::Dependency
26
- name: earth
27
- requirement: &2153872620 !ruby/object:Gem::Requirement
37
+ name: rake
38
+ requirement: &2154425920 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,18 +43,29 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *2153872620
46
+ version_requirements: *2154425920
36
47
  - !ruby/object:Gem::Dependency
37
- name: activerecord
38
- requirement: &2153872200 !ruby/object:Gem::Requirement
48
+ name: mini_record
49
+ requirement: &2154425500 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
42
53
  - !ruby/object:Gem::Version
43
54
  version: '0'
44
- type: :runtime
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2154425500
58
+ - !ruby/object:Gem::Dependency
59
+ name: sqlite3
60
+ requirement: &2154425080 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
45
67
  prerelease: false
46
- version_requirements: *2153872200
68
+ version_requirements: *2154425080
47
69
  description: Validate an entire [ActiveRecord] table, checking for things like blank
48
70
  rows or total number of rows
49
71
  email:
@@ -60,6 +82,7 @@ files:
60
82
  - lib/table_warnings/config.rb
61
83
  - lib/table_warnings/version.rb
62
84
  - lib/table_warnings/warning.rb
85
+ - lib/table_warnings/warning/arbitrary.rb
63
86
  - lib/table_warnings/warning/blank.rb
64
87
  - lib/table_warnings/warning/size.rb
65
88
  - table_warnings.gemspec
@@ -85,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
108
  version: '0'
86
109
  requirements: []
87
110
  rubyforge_project: table_warnings
88
- rubygems_version: 1.8.5
111
+ rubygems_version: 1.8.6
89
112
  signing_key:
90
113
  specification_version: 3
91
114
  summary: It's called validations to remind people of per-record validations, but it