Sha256: 6942b0b3171a5e085f8b66b953ca9ccc6d8bd8641b8f6ed01e2334dda95b4150

Contents?: true

Size: 1.97 KB

Versions: 6

Compression:

Stored size: 1.97 KB

Contents

# encoding: UTF-8

module BeerDb::Models

class Brand < ActiveRecord::Base

  # NB: use extend - is_<type>? become class methods e.g. self.is_<type>?
  extend TextUtils::ValueHelper  # e.g. self.find_key_n_title, self.is_year?, self.is_region?, is_address?, is_taglist? etc.

  belongs_to :country, :class_name => 'WorldDb::Models::Country', :foreign_key => 'country_id'
  belongs_to :region,  :class_name => 'WorldDb::Models::Region',  :foreign_key => 'region_id'
  belongs_to :city,    :class_name => 'WorldDb::Models::City',    :foreign_key => 'city_id'

  belongs_to :brewery, :class_name => 'BeerDb::Models::Brewery',  :foreign_key => 'brewery_id'

  has_many   :beers,   :class_name => 'BeerDb::Models::Beer',     :foreign_key => 'brand_id'

  validates :key, :format => { :with => /^[a-z][a-z0-9]+$/, :message => 'expected two or more lowercase letters a-z or 0-9 digits' }


  def self.create_or_update_from_values( values, more_attribs = {} )
    attribs, more_values = find_key_n_title( values )
    attribs = attribs.merge( more_attribs )

    Brand.create_or_update_from_attribs( attribs, more_values )
  end

  # convenience helper Brand.create_or_update_from_title
  def self.create_or_update_from_title( title, more_attribs = {} )
    values = [title]
    Brand.create_or_update_from_values( values, more_attribs )
  end


  def self.create_or_update_from_attribs( attribs, values )

    ## fix: add/configure logger for ActiveRecord!!!
    logger = LogKernel::Logger.root

    ## check for grades (e.g. ***/**/*) in titles (will add attribs[:grade] to hash)
    ## if grade missing; set default to 4; lets us update overwrite 1,2,3 values on update
    attribs[:grade] ||= 4

    rec = Brand.find_by_key( attribs[:key] )

    if rec.present?
      logger.debug "update Brand #{rec.id}-#{rec.key}:"
    else
      logger.debug "create Brand:"
      rec = Brand.new
    end
      
    logger.debug attribs.to_json

    rec.update_attributes!( attribs )
  end

end # class Brand

end # module BeerDb::Models

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
beerdb-0.8.2 lib/beerdb/models/brand.rb
beerdb-0.8.1 lib/beerdb/models/brand.rb
beerdb-0.8.0 lib/beerdb/models/brand.rb
beerdb-0.7.2 lib/beerdb/models/brand.rb
beerdb-0.7.1 lib/beerdb/models/brand.rb
beerdb-0.7.0 lib/beerdb/models/brand.rb