Module: LargeTextField::Owner::ClassMethods

Defined in:
lib/large_text_field/owner.rb

Instance Method Summary collapse

Instance Method Details

#formatted_integer_value(value) ⇒ Object



176
177
178
# File 'lib/large_text_field/owner.rb', line 176

def formatted_integer_value(value)
  value.to_i.to_s.gsub(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1,")
end

#initialize_large_text_fieldObject



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/large_text_field/owner.rb', line 130

def initialize_large_text_field
  return if initialized # skip if already initialized

  has_many(
    :large_text_fields,
    class_name: large_text_field_class_name,
    as: :owner,
    autosave: true,
    dependent: :destroy,
    inverse_of: :owner
  )
  if large_text_field_deprecated_class_name
    has_many(
      :deprecated_large_text_fields,
      class_name: large_text_field_deprecated_class_name,
      as: :owner,
      autosave: true,
      dependent: :destroy,
      inverse_of: :owner
    )
  end
  self.initialized = true
end

#large_text_field(field_name, maximum: nil, singularize_errors: false) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/large_text_field/owner.rb', line 154

def large_text_field(field_name, maximum: nil, singularize_errors: false)
  initialize_large_text_field # ensure the association is initialized

  field_name = field_name.to_s

  # validate custom maximum
  if maximum
    if !maximum.is_a? Integer
      raise ArgumentError, "maximum must be a number"
    elsif maximum > MAX_LENGTH
      raise ArgumentError, "maximum can't be greater than #{formatted_integer_value(MAX_LENGTH)}"
    elsif maximum.negative?
      raise ArgumentError, "maximum can't be less than 0"
    end
  end

  large_text_field_options[field_name] = { maximum:, singularize_errors: }
  define_method(field_name)              {         get_text_field(field_name)        }
  define_method("#{field_name}=")        { |value| set_text_field(field_name, value) }
  define_method("#{field_name}_changed?") { text_field_changed(field_name) }
end

#large_text_field_class_name_override(value) ⇒ Object



120
121
122
123
# File 'lib/large_text_field/owner.rb', line 120

def large_text_field_class_name_override(value)
  self.large_text_field_class_name = value
  self.large_text_field_class = Object.const_get(value)
end

#large_text_field_deprecated_class_name_override(value) ⇒ Object



125
126
127
128
# File 'lib/large_text_field/owner.rb', line 125

def large_text_field_deprecated_class_name_override(value)
  self.large_text_field_deprecated_class_name = value
  self.large_text_field_deprecated_class = Object.const_get(value)
end