Sha256: 998d2ba02fd1998f60134ebcce53716c0a8244d1660f8d0353797fd816ca90f5

Contents?: true

Size: 1.1 KB

Versions: 1

Compression:

Stored size: 1.1 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 attributes=(params)
    set_rails_dates(params)
    super
  end

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

  private

  # set Date and DateTime attributes by "name(1i)" style params
  def set_rails_dates(params)
    self.class.attribute_set.select do |a|
      a.type.primitive <= Date && params.has_key?("#{a.name}(1i)")
    end.each do |a|
      set_date(a.name, params)
    end
  end

  def set_date(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
    errors.add(attribute, I18n.t("errors.messages.invalid_date"))
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
roqua-core-api-0.0.26 lib/roqua/core_api/models/active_virtus.rb