Sha256: 4be562365d444d36629efde8bb28f7558ac58871e3eb4bd015ea6fd634e36306

Contents?: true

Size: 1.25 KB

Versions: 4

Compression:

Stored size: 1.25 KB

Contents

require 'virtus'

class Roqua::CoreApi::Models::ActiveVirtus
  extend  ActiveModel::Naming
  extend  ActiveModel::Translation
  include ActiveModel::Validations
  include ActiveModel::Conversion
  include ActiveModel::Serialization
  include Virtus.model

  def initialize(params = nil)
    super
    dates_from_xi(params)
  end

  def attributes=(params)
    dates_from_xi(params)
    super
  end

  def assign_attributes(params = {})
    self.attributes = params
  end

  private

  # set Date and DateTime attributes by "name(1i)" style params
  def dates_from_xi(params)
    return unless params
    dates_to_change = self.class.attribute_set.select do |a|
      a.type.primitive <= Date && params["#{a.name}(1i)"].present?
    end
    dates_to_change.each do |a|
      date_from_xi(a.name, params)
    end
  end

  def date_from_xi(attribute, params)
    self[attribute] = {
      year:  params.fetch("#{attribute}(1i)"),
      month: params.fetch("#{attribute}(2i)", 1),
      day:   params.fetch("#{attribute}(3i)", 1),
      hour:  params.fetch("#{attribute}(4i)", 0),
      min:   params.fetch("#{attribute}(5i)", 0),
      sec:   params.fetch("#{attribute}(6i)", 0)
    }
  rescue StandardError
    errors.add(attribute, I18n.t("errors.messages.invalid_date"))
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
roqua-core-api-0.7.0 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.6.0 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.5.0 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.4.0 lib/roqua/core_api/models/active_virtus.rb