Sha256: 6755b27dfb198ad4dd969d359f6db02b0f5cb8bd15f228ef0df21979748ba7c1

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

class Rivendell::DB::Cart
  include DataMapper::Resource
  storage_names[:default] = 'CART'

  property :number, Integer, :key => true
  property :type, Integer, :default => 1, :required => true
  property :group_name, String, :length => 10, :required => true
  property :title, String, :required => true
  property :artist, String
  property :album, String
  property :year, Date

  property :average_length, Integer

  belongs_to :group, :child_key => [ :group_name ], :parent_key => [ :name ]
  has n, :cuts, :child_key => [ :cart_number ], :parent_key => [ :number ]

  before :valid?, :use_free_number

  def use_free_number(context = :default)
    self.number ||= group.free_cart_number if group
  end

  def self.duplicated(*fields)
    sql_fields = fields.join(", ")
    query = "select GROUP_CONCAT(NUMBER) as numbers, #{sql_fields} from CART group by #{sql_fields} having count(NUMBER) > 1;"

    repository(:default).adapter.select(query).map do |duplicated_group|
      field_values = fields.inject({}) { |map, field| map[field] = duplicated_group.send(field); map }
      numbers = duplicated_group.numbers.split(",").map(&:to_i)
      { :numbers => numbers, :fields => field_values }
    end
  end

  property :sched_codes, String

  def scheduler_codes
    if sched_codes
      sched_codes.scan(/.{11}/).map(&:strip)
    else
      []
    end
  end

  def scheduler_codes=(scheduler_codes)
    self.sched_codes =
      if scheduler_codes and !scheduler_codes.empty?
        scheduler_codes.uniq.sort.map { |c| c.ljust(11) }.join + "."
      else
        ""
      end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rivendell-db-0.3 lib/rivendell/db/cart.rb