activerecord-databasevalidations 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4aea1bc84aef567070fd2cb3febe2bdb6895daf
4
- data.tar.gz: 2e8257b79b80d5b84d791b3ec7dfcffe3d115ea4
3
+ metadata.gz: 608512afb0bd466e2129b4ff11b4c6a03d6a69f5
4
+ data.tar.gz: 5ec035ae1221a5519ce1acad4ac5855e402e909a
5
5
  SHA512:
6
- metadata.gz: f7359255dd4cd2ad194d62aca4c6b7c19ffb26c999cb77a8d453b4fc28f7617f4bb4b30e520180a7a3cbf190fccccd08d31ca0d3e776d2d153ef6b4dcb9d41ff
7
- data.tar.gz: 320f2a3744403023282bb9399fcc720a6592913142283dd8b3c3ec9e82146de6e7974e78b9678c4cc2e1ac924eb250f9acbe8adb70d9dcb56257b0d492bf96b8
6
+ metadata.gz: 82727638c4003d042fd9466879f40ada27259903efb1c9e939a8398508f8f7e5e29038d667314f929e2af5bd547be68554ad94fe74f0b342ee84e00895b24071
7
+ data.tar.gz: c98d2eea1a40164736f2f6830971b72f4d7b3710f7c0597d2890e53e9628c6746b679a964b2db9b51b0ea7acbe5324f83a7807746bf981f88a102859967c351f
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module DatabaseValidations
3
- VERSION = "0.2.0"
3
+ VERSION = "0.2.1"
4
4
  end
5
5
  end
@@ -14,7 +14,7 @@ module ActiveRecord
14
14
 
15
15
  limit = StringTruncator.mysql_textual_column_limit(column)
16
16
  value = self[field].to_s
17
- if value.length > limit
17
+ if limit && value.length > limit
18
18
  self[field] = value.slice(0, limit)
19
19
  end
20
20
  return true # to make sure the callback chain doesn't halt
@@ -28,7 +28,7 @@ module ActiveRecord
28
28
  limit = StringTruncator.mysql_textual_column_limit(column)
29
29
  value = self[field].to_s
30
30
  value.encode!('utf-8') if value.encoding != Encoding::UTF_8
31
- if value.bytesize > limit
31
+ if limit && value.bytesize > limit
32
32
  self[field] = value.mb_chars.limit(limit).to_s
33
33
  end
34
34
  return true # to make sure the callback chain doesn't halt
@@ -41,7 +41,10 @@ module ActiveRecord
41
41
  @mysql_textual_column_limits ||= {}
42
42
  @mysql_textual_column_limits[column] ||= begin
43
43
  raise ArgumentError, "Only UTF-8 textual columns are supported." unless column.text? && column.collation =~ /\Autf8_/
44
- column.limit
44
+
45
+ column_type = column.sql_type.sub(/\(.*\z/, '').gsub(/\s/, '_').to_sym
46
+ type_limit = ActiveRecord::Validations::DatabaseConstraintsValidator::TYPE_LIMITS.fetch(column_type, {})
47
+ column.limit || type_limit[:default_maximum]
45
48
  end
46
49
  end
47
50
  end
@@ -5,6 +5,7 @@ ActiveRecord::Migration.suppress_messages do
5
5
  ActiveRecord::Migration.create_table("magical_creatures", force: true, options: "CHARACTER SET utf8mb3") do |t|
6
6
  t.string :string, limit: 255
7
7
  t.text :tinytext, limit: 255
8
+ t.text :text
8
9
  end
9
10
  end
10
11
 
@@ -13,6 +14,7 @@ class MagicalCreature < ActiveRecord::Base
13
14
 
14
15
  before_validation truncate_string(:string)
15
16
  before_validation truncate_string(:tinytext)
17
+ before_validation truncate_string(:text)
16
18
 
17
19
  validates :string, :tinytext, database_constraints: :size
18
20
  end
@@ -55,4 +57,10 @@ class StringTruncatorTest < Minitest::Test
55
57
  assert_equal 'ü' * 127, u4.tinytext
56
58
  assert_equal Encoding::UTF_8, u4.tinytext.encoding
57
59
  end
60
+
61
+ def test_knows_limits_of_standard_types
62
+ u5 = MagicalCreature.new(text: 'a' * 65536)
63
+ assert u5.valid?
64
+ assert_equal 'a' * 65535, u5.text
65
+ end
58
66
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-databasevalidations
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen