lib/beerdb/reader.rb in beerdb-0.9.1 vs lib/beerdb/reader.rb in beerdb-0.9.2

- old
+ new

@@ -11,10 +11,13 @@ def match_beers_for_country_n_region( name, &blk ) match_xxx_for_country_n_region( name, 'beers', &blk ) end + ## todo: add match_brewpubs ??? + ## - autoadd brewpub flag!! use more_attribs?? + def match_breweries_for_country( name, &blk ) match_xxx_for_country( name, 'breweries', &blk ) end def match_breweries_for_country_n_region( name, &blk ) @@ -140,14 +143,49 @@ more_attribs[ :txt ] = name # store source ref load_beers_worker( name, more_attribs ) end + def load_beers_worker( name, more_attribs={} ) reader = ValuesReaderV2.new( name, include_path, more_attribs ) + ### todo: cleanup - check if [] works for build_title... + # better cleaner way ??? + if more_attribs[:region_id].present? + known_breweries_source = Brewery.where( region_id: more_attribs[:region_id] ) + elsif more_attribs[:country_id].present? + known_breweries_source = Brewery.where( country_id: more_attribs[:country_id] ) + else + logger.warn "no region or country specified; use empty brewery ary for header mapper" + known_breweries_source = [] + end + + known_breweries = TextUtils.build_title_table_for( known_breweries_source ) + + reader.each_line do |new_attributes, values| + + ## note: check for header attrib; if present remove + ### todo: cleanup code later + ## fix: add to new_attributes hash instead of values ary + ## - fix: match_brewery() move region,city code out of values loop for reuse at the end + if new_attributes[:header].present? + brewery_line = new_attributes[:header].dup # note: make sure we make a copy; will use in-place string ops + new_attributes.delete(:header) ## note: do NOT forget to remove from hash! + + logger.debug " trying to find brewery in line >#{brewery_line}<" + ## todo: check what map_titles_for! returns (nothing ???) + TextUtils.map_titles_for!( 'brewery', brewery_line, known_breweries ) + brewery_key = TextUtils.find_key_for!( 'brewery', brewery_line ) + logger.debug " brewery_key = >#{brewery_key}<" + unless brewery_key.nil? + ## bingo! add brewery_id upfront, that is, as first value in ary + values = values.unshift "by:#{brewery_key}" + end + end + Beer.create_or_update_from_attribs( new_attributes, values ) end # each_line end @@ -185,9 +223,19 @@ def load_breweries_worker( name, more_attribs={} ) reader = ValuesReaderV2.new( name, include_path, more_attribs ) reader.each_line do |new_attributes, values| + + ####### + # fix: move to (inside) + # Brewery.create_or_update_from_attribs |||| + ## note: group header not used for now; do NOT forget to remove from hash! + if new_attributes[:header].present? + logger.warn "removing unused group header #{new_attributes[:header]}" + new_attributes.delete(:header) ## note: do NOT forget to remove from hash! + end + Brewery.create_or_update_from_attribs( new_attributes, values ) end # each_line end end # class Reader