Class: GeneratedSchemaValidations::Table
- Inherits:
-
Object
- Object
- GeneratedSchemaValidations::Table
- Defined in:
- lib/generated_schema_validations/table.rb
Defined Under Namespace
Classes: Validation
Instance Attribute Summary collapse
-
#table_name ⇒ Object
readonly
Returns the value of attribute table_name.
Instance Method Summary collapse
- #bigint(name, column_options = {}) ⇒ Object
- #binary(name, column_options = {}) ⇒ Object
- #boolean(name, column_options = {}) ⇒ Object
- #date(name, column_options = {}) ⇒ Object
- #datetime(name, column_options = {}) ⇒ Object
- #decimal(name, column_options = {}) ⇒ Object
- #float(name, column_options = {}) ⇒ Object
- #index(names, index_options = {}) ⇒ Object
-
#initialize(table_name, &block) ⇒ Table
constructor
A new instance of Table.
- #integer(name, column_options = {}) ⇒ Object
- #json(name, column_options = {}) ⇒ Object
- #jsonb(name, column_options = {}) ⇒ Object
- #null_validation(datatype, name, column_options) ⇒ Object
- #string(name, column_options = {}) ⇒ Object
- #text(name, column_options = {}) ⇒ Object
- #to_s ⇒ Object
- #uuid(name, column_options = {}) ⇒ Object
- #validates(attribute, validator, options = {}) ⇒ Object
- #xml(name, column_options = {}) ⇒ Object
Constructor Details
#initialize(table_name, &block) ⇒ Table
Returns a new instance of Table.
12 13 14 15 16 17 18 19 20 21 |
# File 'lib/generated_schema_validations/table.rb', line 12 def initialize(table_name, &block) @table_name = table_name @column_names = [] @possible_belongs_to_not_null_columns = [] @bad_indexes = [] @unique_indexes = [] @validations = [] instance_eval(&block) end |
Instance Attribute Details
#table_name ⇒ Object (readonly)
Returns the value of attribute table_name.
10 11 12 |
# File 'lib/generated_schema_validations/table.rb', line 10 def table_name @table_name end |
Instance Method Details
#bigint(name, column_options = {}) ⇒ Object
57 58 59 60 61 |
# File 'lib/generated_schema_validations/table.rb', line 57 def bigint(name, = {}) null_validation(:bigint, name, ) validates name, :numericality, allow_nil: true end |
#binary(name, column_options = {}) ⇒ Object
93 94 95 |
# File 'lib/generated_schema_validations/table.rb', line 93 def binary(name, = {}) null_validation(:binary, name, ) end |
#boolean(name, column_options = {}) ⇒ Object
89 90 91 |
# File 'lib/generated_schema_validations/table.rb', line 89 def boolean(name, = {}) null_validation(:boolean, name, ) end |
#date(name, column_options = {}) ⇒ Object
84 85 86 87 |
# File 'lib/generated_schema_validations/table.rb', line 84 def date(name, = {}) null_validation(:date, name, ) validates name, :date_in_db_range end |
#datetime(name, column_options = {}) ⇒ Object
79 80 81 82 |
# File 'lib/generated_schema_validations/table.rb', line 79 def datetime(name, = {}) null_validation(:datetime, name, ) validates name, :date_time_in_db_range end |
#decimal(name, column_options = {}) ⇒ Object
113 114 115 116 117 118 119 120 |
# File 'lib/generated_schema_validations/table.rb', line 113 def decimal(name, = {}) null_validation(:decimal, name, ) return if [:array] return if [:precision].blank? || [:scale].blank? limit = 10**([:precision] - ([:scale] || 0)) validates name, :numericality, allow_nil: true, greater_than: -limit, less_than: limit end |
#float(name, column_options = {}) ⇒ Object
122 123 124 125 126 127 |
# File 'lib/generated_schema_validations/table.rb', line 122 def float(name, = {}) null_validation(:float, name, ) return if [:array] validates name, :numericality, allow_nil: true end |
#index(names, index_options = {}) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/generated_schema_validations/table.rb', line 137 def index(names, = {}) names = [names] unless names.is_a?(Array) return unless [:unique] return unless names.all? { |name| name.to_s.in?(@column_names) } if defined?(Rails::Railtie) && (Rails.env.development? || Rails.env.test?) && [:where] @bad_indexes.push(names.map(&:to_s)) else @unique_indexes.push(names.map(&:to_s)) end end |
#integer(name, column_options = {}) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/generated_schema_validations/table.rb', line 63 def integer(name, = {}) null_validation(:integer, name, ) return if [:array] integer_range = ::ActiveRecord::Type::Integer.new.send(:range) = { allow_nil: true, only_integer: true, greater_than_or_equal_to: integer_range.begin } if integer_range.exclude_end? [:less_than] = integer_range.end else [:less_than_or_equal_to] = integer_range.end end validates name, :numericality, end |
#json(name, column_options = {}) ⇒ Object
101 102 103 |
# File 'lib/generated_schema_validations/table.rb', line 101 def json(name, = {}) null_validation(:json, name, ) end |
#jsonb(name, column_options = {}) ⇒ Object
105 106 107 |
# File 'lib/generated_schema_validations/table.rb', line 105 def jsonb(name, = {}) null_validation(:jsonb, name, ) end |
#null_validation(datatype, name, column_options) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/generated_schema_validations/table.rb', line 40 def null_validation(datatype, name, ) @column_names.push(name.to_s) return if [:null] != false @possible_belongs_to_not_null_columns.push(name.to_sym) if datatype.in?(%i[bigint integer uuid]) if datatype == :boolean validates name, :inclusion, in: [true, false], message: :blank else validates name, :presence end end |
#string(name, column_options = {}) ⇒ Object
97 98 99 |
# File 'lib/generated_schema_validations/table.rb', line 97 def string(name, = {}) text(name, ) end |
#text(name, column_options = {}) ⇒ Object
129 130 131 132 133 134 135 |
# File 'lib/generated_schema_validations/table.rb', line 129 def text(name, = {}) null_validation(:text, name, ) return if [:array] return if [:limit].blank? validates name, :length, allow_nil: true, maximum: [:limit] end |
#to_s ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/generated_schema_validations/table.rb', line 23 def to_s string = "\n" string += "def dbv_#{table_name}_validations\n" if @possible_belongs_to_not_null_columns.present? string += " belongs_to_presence_validations_for(#{@possible_belongs_to_not_null_columns.inspect})\n" end string += " bad_uniqueness_validations_for(#{@bad_indexes.inspect})\n" if @bad_indexes.present? string += " belongs_to_uniqueness_validations_for(#{@unique_indexes.inspect})\n" if @unique_indexes.present? string += " uniqueness_validations_for(#{@unique_indexes.inspect})\n" if @unique_indexes.present? string += @validations.uniq.map { |v| " #{v}\n" }.join "#{string}end\n" end |
#uuid(name, column_options = {}) ⇒ Object
53 54 55 |
# File 'lib/generated_schema_validations/table.rb', line 53 def uuid(name, = {}) null_validation(:uuid, name, ) end |
#validates(attribute, validator, options = {}) ⇒ Object
36 37 38 |
# File 'lib/generated_schema_validations/table.rb', line 36 def validates(attribute, validator, = {}) @validations.push(Validation.new(attribute, validator, )) end |
#xml(name, column_options = {}) ⇒ Object
109 110 111 |
# File 'lib/generated_schema_validations/table.rb', line 109 def xml(name, = {}) null_validation(:xml, name, ) end |