Class: AmazonTransparencyCode

Inherits:
ApplicationRecord show all
Includes:
Models::Auditable
Defined in:
app/models/amazon_transparency_code.rb

Overview

== Schema Information

Table name: amazon_transparency_codes
Database name: primary

id :integer not null, primary key
claimed_on :datetime
code :string(100) not null
created_at :datetime
updated_at :datetime
creator_id :integer
item_id :integer not null
updater_id :integer

Indexes

index_amazon_transparency_codes_on_claimed_on (claimed_on)
index_amazon_transparency_codes_on_code (code) UNIQUE
index_amazon_transparency_codes_on_item_id (item_id)

Foreign Keys

fk_rails_... (item_id => items.id) ON DELETE => cascade

Defined Under Namespace

Classes: CodeAlreadyClaimed, CodeNotAvailable

Constant Summary

Constants included from Models::Auditable

Models::Auditable::ALWAYS_IGNORED

Constants included from Models::Schedulable

Models::Schedulable::SIMPLE_FORM_OPTIONS

Instance Attribute Summary collapse

Belongs to collapse

Methods included from Models::Auditable

#creator, #updater

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Models::Auditable

#all_skipped_columns, #audit_reference_data, #should_not_save_version, #stamp_record

Methods inherited from ApplicationRecord

ransackable_associations, ransackable_attributes, ransackable_scopes, ransortable_attributes, #to_relation

Methods included from Models::Schedulable

config

Methods included from Models::AfterCommittable

#after_commit

Methods included from Models::EventPublishable

#publish_event

Instance Attribute Details

#codeString (readonly)

Returns:

  • (String)


33
# File 'app/models/amazon_transparency_code.rb', line 33

validates :item_id, :code, presence: true

#item_idInteger (readonly)

Returns:

  • (Integer)


33
# File 'app/models/amazon_transparency_code.rb', line 33

validates :item_id, :code, presence: true

Class Method Details

.claim(item_id, how_many = 1) ⇒ Array<String>

Claims unclaimed transparency codes for an item.

Parameters:

  • item_id (Integer)

    item to claim codes for

  • how_many (Integer) (defaults to: 1)

    number of codes to claim

Returns:

  • (Array<String>)

    claimed codes

Raises:



67
68
69
70
71
72
73
74
75
# File 'app/models/amazon_transparency_code.rb', line 67

def self.claim(item_id, how_many = 1)
  atcs = unclaimed.where(item_id: item_id).limit(how_many)
  raise CodeNotAvailable, "Unable to claim requested quantity, only #{atcs.size} available" if atcs.size != how_many

  transaction do
    atcs.each(&:claim!)
  end
  atcs.map(&:code)
end

.unclaimedActiveRecord::Relation<AmazonTransparencyCode>

A relation of AmazonTransparencyCodes that are unclaimed. Active Record Scope

Returns:

See Also:



37
# File 'app/models/amazon_transparency_code.rb', line 37

scope :unclaimed, -> { where(claimed_on: nil).order(:created_at) }

Instance Method Details

#claim!Boolean

Marks the code as claimed now.

Returns:

  • (Boolean)

Raises:



51
52
53
54
55
# File 'app/models/amazon_transparency_code.rb', line 51

def claim!
  raise CodeAlreadyClaimed, "#{code} already claimed!" if claimed_on.present?

  update_attribute(:claimed_on, Time.current)
end

#claimed?Boolean

Returns:

  • (Boolean)


45
46
47
# File 'app/models/amazon_transparency_code.rb', line 45

def claimed?
  claimed_on.present?
end

#itemItem?

Returns:



30
# File 'app/models/amazon_transparency_code.rb', line 30

belongs_to :item, inverse_of: :amazon_transparency_codes, optional: true

#unclaim!Boolean

Clears the claimed timestamp.

Returns:

  • (Boolean)


59
60
61
# File 'app/models/amazon_transparency_code.rb', line 59

def unclaim!
  update_attribute(:claimed_on, nil)
end