table_warnings 1.0.0 → 1.0.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ 1.0.1 / 2012-06-07
2
+
3
+ * Bug fixes
4
+
5
+ * Fix typo in #warn_if_blanks
6
+
7
+ * Enhancements
8
+
9
+ * Actually test #warn_if_blanks and #warn_unless_size
10
+
1
11
  1.0.0 / 2012-06-07
2
12
 
3
13
  * Breaking changes
@@ -37,11 +37,11 @@ module TableWarnings
37
37
  pool = column_names.map do |column_name|
38
38
  TableWarnings::Column.new self, column_name
39
39
  end
40
- exclusive = TableWarnings.registry.exclusive(self)
40
+ exclusive_warnings = TableWarnings.registry.exclusive(self)
41
41
 
42
42
  assignments = {}
43
43
  # pass 1 - exclusives and covers
44
- exclusive.each do |warning|
44
+ exclusive_warnings.each do |warning|
45
45
  disposition = Disposition.new
46
46
  disposition.exclusives = warning.exclusives pool
47
47
  disposition.covers = warning.covers pool
@@ -55,7 +55,7 @@ module TableWarnings
55
55
  end
56
56
  end
57
57
  # pass 2 - allow regexp matching, but only if somebody else didn't cover it
58
- exclusive.each do |warning|
58
+ exclusive_warnings.each do |warning|
59
59
  disposition = assignments[warning]
60
60
  disposition.matches = warning.matches(pool).select do |match|
61
61
  assignments.except(warning).none? { |_, other| other.covers.include?(match) }
@@ -16,7 +16,7 @@ module TableWarnings
16
16
  table.columns_hash[name].try(:type) == :string
17
17
  end
18
18
 
19
- def blank?(conditions)
19
+ def blanks?(conditions)
20
20
  table.where(conditions).where(["LENGTH(TRIM(#{table.quoted_table_name}.#{name})) = 0"]).count > 0
21
21
  end
22
22
 
@@ -9,9 +9,9 @@ module TableWarnings
9
9
  def message(column)
10
10
  if column.nonexistent_owners?(conditions) or (not allow_null? and column.nulls?(conditions))
11
11
  if conditions.empty?
12
- "Foreign keys#{null_warning} refer to nonexistent values in #{column.name.inspect}"
12
+ "Values in foreign key column #{column.name.inspect}#{null_warning} do not correspond to actual values in foreign table."
13
13
  else
14
- "Foreign keys#{null_warning} refer to nonexistent values in #{column.name.inspect} given #{conditions.inspect}"
14
+ "Values in foreign key column #{column.name.inspect} under condition #{conditions.inspect}#{null_warning} do not correspond to actual values in foreign table."
15
15
  end
16
16
  end
17
17
  end
@@ -24,7 +24,7 @@ module TableWarnings
24
24
 
25
25
  def null_warning
26
26
  if not allow_null?
27
- ' are nil and/or'
27
+ ' are NULL and/or'
28
28
  end
29
29
  end
30
30
  end
@@ -14,9 +14,9 @@ module TableWarnings
14
14
  current_count = effective_count
15
15
  unless allowed_size.include? current_count
16
16
  if conditions.empty?
17
- "Table is not of expected size (expected: #{allowed_size.to_s}, actual: #{current_count})"
17
+ "Row count is expected to be #{allowed_size.to_s}, but is #{current_count}"
18
18
  else
19
- "Table count with conditions #{conditions.inspect} is not of expected size (expected: #{allowed_size.to_s}, actual: #{current_count})"
19
+ "Row count with conditions #{conditions.inspect} is expected to be #{allowed_size.to_s}, but is #{current_count}"
20
20
  end
21
21
  end
22
22
  end
@@ -45,7 +45,7 @@ module TableWarnings
45
45
  100_000..1_000_000
46
46
  when :millions
47
47
  1_000_000..1_000_000_000
48
- when Range
48
+ when ::Range
49
49
  approximate_size
50
50
  when Numeric
51
51
  approximate_size..approximate_size
@@ -1,3 +1,3 @@
1
1
  module TableWarnings
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -67,7 +67,8 @@ class MiniTest::Spec
67
67
  refute hits.many?, "#{model.name} had MULTIPLE warnings like #{expected_warning.inspect}: #{hits.inspect}"
68
68
  end
69
69
 
70
- def assert_no_warning(model, specific_unexpected_warning = nil)
70
+ def refute_warning(model, specific_unexpected_warning = nil)
71
+ raise if block_given?
71
72
  warnings = model.table_warnings
72
73
  if specific_unexpected_warning
73
74
  refute(warnings.any? { |warning| warning =~ specific_unexpected_warning }, "#{model.name} unexpectedly had warning #{specific_unexpected_warning.inspect}")
@@ -79,7 +80,7 @@ class MiniTest::Spec
79
80
  def assert_causes_warning(model, expected_warnings)
80
81
  expected_warnings = [expected_warnings].flatten
81
82
  expected_warnings.each do |expected_warning|
82
- assert_no_warning model, expected_warning
83
+ refute_warning model, expected_warning
83
84
  end
84
85
  warnings_before = model.table_warnings
85
86
  yield
@@ -92,10 +93,10 @@ class MiniTest::Spec
92
93
  refute unexpected_warnings.any?, "#{model.name} unexpectedly ALSO got warnings #{unexpected_warnings.inspect}"
93
94
  end
94
95
 
95
- def assert_does_not_cause_warning(model)
96
- assert_no_warning model
96
+ def refute_causes_warning(model)
97
+ refute_warning model
97
98
  yield
98
- assert_no_warning model
99
+ refute_warning model
99
100
  end
100
101
 
101
102
  end
@@ -60,7 +60,7 @@ describe TableWarnings do
60
60
  end
61
61
  end
62
62
  it "combines a positive regexp with conditions and a negative regexp with conditions" do
63
- assert_does_not_cause_warning PetDelta do
63
+ refute_causes_warning PetDelta do
64
64
  PetDelta.force_create!
65
65
  end
66
66
  PetDelta.delete_all # !
@@ -0,0 +1,17 @@
1
+ require 'helper'
2
+
3
+ class PetDoh < ActiveRecord::Base
4
+ col :gender
5
+ warn_if_blanks :gender
6
+ end
7
+ PetDoh.auto_upgrade!
8
+
9
+ describe TableWarnings do
10
+ describe :warn_if_nulls do
11
+ it "takes a single column" do
12
+ assert_causes_warning PetDoh, /blank.*gender/i do
13
+ PetDoh.force_create!
14
+ end
15
+ end
16
+ end
17
+ end
@@ -32,27 +32,27 @@ describe TableWarnings do
32
32
  Person.force_create! :llc_name => 'My Small Business, LLC'
33
33
  end
34
34
  it "takes a single belongs-to association name" do
35
- assert_causes_warning PetRed, /nonexistent.*handler/i do
35
+ assert_causes_warning PetRed, /handler.*do not correspond/i do
36
36
  PetRed.force_create!
37
37
  end
38
38
  end
39
39
  it "checks the value of foreign keys not just their presence" do
40
- assert_causes_warning PetRed, /nonexistent.*handler/i do
40
+ assert_causes_warning PetRed, /handler.*do not correspond/i do
41
41
  PetRed.force_create! :handler_id => 999999
42
42
  end
43
43
  end
44
44
  it "doesn't raise false warnings" do
45
- assert_does_not_cause_warning PetRed do
45
+ refute_causes_warning PetRed do
46
46
  PetRed.force_create! :handler_id => Person.first.id
47
47
  end
48
48
  end
49
49
  it "regards nulls as nonexistent even if the association primary key column contains nulls" do
50
- assert_causes_warning PetBlue, /nonexistent.*trainer/i do
50
+ assert_causes_warning PetBlue, /trainer.*do not correspond/i do
51
51
  PetBlue.force_create!
52
52
  end
53
53
  end
54
54
  it "allows nulls if explicitly requested" do
55
- assert_does_not_cause_warning PetGreen do
55
+ refute_causes_warning PetGreen do
56
56
  PetGreen.force_create!
57
57
  end
58
58
  end
@@ -38,27 +38,27 @@ describe TableWarnings do
38
38
  Gente.force_create! :llc_name => 'My Small Business, LLC'
39
39
  end
40
40
  it "takes a single belongs-to association name" do
41
- assert_causes_warning PetRojo, /nonexistent.*trainer/i do
41
+ assert_causes_warning PetRojo, /trainer.*do not correspond/i do
42
42
  PetRojo.force_create!
43
43
  end
44
44
  end
45
45
  it "checks the value of foreign keys not just their presence" do
46
- assert_causes_warning PetRojo, /nonexistent.*trainer/i do
46
+ assert_causes_warning PetRojo, /trainer.*do not correspond/i do
47
47
  PetRojo.force_create! :trainer_id => 999999
48
48
  end
49
49
  end
50
50
  it "doesn't raise false warnings" do
51
- assert_does_not_cause_warning PetRojo do
51
+ refute_causes_warning PetRojo do
52
52
  PetRojo.force_create! :trainer_id => Gente.first.llc_name
53
53
  end
54
54
  end
55
55
  it "regards nulls as nonexistent even if the association primary key column contains nulls" do
56
- assert_causes_warning PetAzul, /nonexistent.*handler/i do
56
+ assert_causes_warning PetAzul, /handler.*do not correspond/i do
57
57
  PetAzul.force_create!
58
58
  end
59
59
  end
60
60
  it "allows nulls if explicitly requested" do
61
- assert_does_not_cause_warning PetVerde do
61
+ refute_causes_warning PetVerde do
62
62
  PetVerde.force_create!
63
63
  end
64
64
  end
@@ -79,7 +79,7 @@ describe TableWarnings do
79
79
  end
80
80
  end
81
81
  it "takes a single column and a condition" do
82
- assert_does_not_cause_warning Pet5 do
82
+ refute_causes_warning Pet5 do
83
83
  Pet5.force_create!
84
84
  end
85
85
  assert_causes_warning Pet5, /null.*birthday/i do
@@ -87,7 +87,7 @@ describe TableWarnings do
87
87
  end
88
88
  end
89
89
  it "takes multiple columns and a condition" do
90
- assert_does_not_cause_warning Pet6 do
90
+ refute_causes_warning Pet6 do
91
91
  Pet6.force_create!
92
92
  end
93
93
  assert_causes_warning Pet6, [/null.*birthday/i, /null.*gender/i] do
@@ -95,7 +95,7 @@ describe TableWarnings do
95
95
  end
96
96
  end
97
97
  it "takes a single regexp and a condition" do
98
- assert_does_not_cause_warning Pet7 do
98
+ refute_causes_warning Pet7 do
99
99
  Pet7.force_create!
100
100
  end
101
101
  assert_causes_warning Pet7, /null.*birthday/i do
@@ -103,7 +103,7 @@ describe TableWarnings do
103
103
  end
104
104
  end
105
105
  it "takes multiple regexps and a condition" do
106
- assert_does_not_cause_warning Pet8 do
106
+ refute_causes_warning Pet8 do
107
107
  Pet8.force_create!
108
108
  end
109
109
  assert_causes_warning Pet8, [/null.*birthday/i, /null.*gender/i] do
@@ -70,7 +70,7 @@ describe TableWarnings do
70
70
  end
71
71
  end
72
72
  it "takes multiple columns" do
73
- assert_does_not_cause_warning PetB do
73
+ refute_causes_warning PetB do
74
74
  PetB.force_create!
75
75
  end
76
76
  end
@@ -80,12 +80,12 @@ describe TableWarnings do
80
80
  end
81
81
  end
82
82
  it "takes multiple regexps" do
83
- assert_does_not_cause_warning PetD do
83
+ refute_causes_warning PetD do
84
84
  PetD.force_create!
85
85
  end
86
86
  end
87
87
  it "takes a single column and a condition" do
88
- assert_does_not_cause_warning PetE do
88
+ refute_causes_warning PetE do
89
89
  PetE.force_create!
90
90
  end
91
91
  assert_causes_warning PetE, /null.*gender/i do
@@ -93,7 +93,7 @@ describe TableWarnings do
93
93
  end
94
94
  end
95
95
  it "takes multiple columns and a condition" do
96
- assert_does_not_cause_warning PetF do
96
+ refute_causes_warning PetF do
97
97
  PetF.force_create!
98
98
  end
99
99
  assert_causes_warning PetF, /null.*sire/i do
@@ -101,7 +101,7 @@ describe TableWarnings do
101
101
  end
102
102
  end
103
103
  it "takes a single regexp and a condition" do
104
- assert_does_not_cause_warning PetG do
104
+ refute_causes_warning PetG do
105
105
  PetG.force_create!
106
106
  end
107
107
  assert_causes_warning PetG, /null.*gender/i do
@@ -109,7 +109,7 @@ describe TableWarnings do
109
109
  end
110
110
  end
111
111
  it "takes multiple regexps and a condition" do
112
- assert_does_not_cause_warning PetH do
112
+ refute_causes_warning PetH do
113
113
  PetH.force_create!
114
114
  end
115
115
  assert_causes_warning PetH, /null.*sire/i do
@@ -0,0 +1,33 @@
1
+ require 'helper'
2
+
3
+ class PetOdin < ActiveRecord::Base
4
+ warn_unless_size 0
5
+ end
6
+ PetOdin.auto_upgrade!
7
+
8
+ class PetDva < ActiveRecord::Base
9
+ warn_unless_size 0..1
10
+ end
11
+ PetDva.auto_upgrade!
12
+
13
+ describe TableWarnings do
14
+ describe :warn_unless_size do
15
+ it "takes an exact integer" do
16
+ assert_causes_warning PetOdin, /expected.*0/ do
17
+ PetOdin.force_create!
18
+ end
19
+ end
20
+ it "takes a range" do
21
+ refute_warning PetDva
22
+
23
+ refute_causes_warning PetDva do
24
+ PetDva.force_create!
25
+ end
26
+
27
+ assert_causes_warning PetDva, /expected.*0..1/ do
28
+ PetDva.force_create!
29
+ PetDva.force_create!
30
+ end
31
+ end
32
+ end
33
+ 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: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -168,11 +168,13 @@ files:
168
168
  - table_warnings.gemspec
169
169
  - test/helper.rb
170
170
  - test/test_combinations.rb
171
+ - test/test_warn_if_blanks.rb
171
172
  - test/test_warn_if_nonexistent_owner.rb
172
173
  - test/test_warn_if_nonexistent_owner_except.rb
174
+ - test/test_warn_if_nulls.rb
173
175
  - test/test_warn_if_nulls_except.rb
174
- - test/test_warn_if_nulls_in.rb
175
176
  - test/test_warn_unless_range.rb
177
+ - test/test_warn_unless_size.rb
176
178
  homepage: https://github.com/seamusabshere/table_warnings
177
179
  licenses: []
178
180
  post_install_message:
@@ -201,9 +203,11 @@ summary: It's called validations to remind people of per-record validations, but
201
203
  test_files:
202
204
  - test/helper.rb
203
205
  - test/test_combinations.rb
206
+ - test/test_warn_if_blanks.rb
204
207
  - test/test_warn_if_nonexistent_owner.rb
205
208
  - test/test_warn_if_nonexistent_owner_except.rb
209
+ - test/test_warn_if_nulls.rb
206
210
  - test/test_warn_if_nulls_except.rb
207
- - test/test_warn_if_nulls_in.rb
208
211
  - test/test_warn_unless_range.rb
212
+ - test/test_warn_unless_size.rb
209
213
  has_rdoc: