Sha256: 85bb0f9a479c947fd70f45ebda69c4dcd71fddc7f150dd7f5f7ab08dedd30f9b

Contents?: true

Size: 1.24 KB

Versions: 10

Compression:

Stored size: 1.24 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
    errors.add(attribute, I18n.t("errors.messages.invalid_date"))
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
roqua-core-api-0.3.1 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.3.0 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.2.4 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.2.3 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.2.2 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.2.1 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.2.0 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.1.1 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.1.0 lib/roqua/core_api/models/active_virtus.rb
roqua-core-api-0.0.39 lib/roqua/core_api/models/active_virtus.rb