lib/beerdb/models/brand.rb in beerdb-0.6.15 vs lib/beerdb/models/brand.rb in beerdb-0.7.0

- old
+ new

@@ -2,18 +2,59 @@ 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