mirror of
https://github.com/fspc/BikeShed-1.git
synced 2025-02-28 08:43:23 -05:00
BikeCsvImporter: refactor BikeAttrs for methods to receive a single value, not the whole hash
This commit is contained in:
parent
b5e8aa554f
commit
0a338a2485
@ -1,20 +1,33 @@
|
|||||||
class BikeCsvImporter
|
class BikeCsvImporter
|
||||||
module BikeAttrs
|
module BikeAttrs
|
||||||
def bike_attr_fields
|
def bike_attr_fields
|
||||||
%i{ shop_id bike_purpose_id value bike_brand_id bike_model_id model bike_style_id bike_condition_id seat_tube_height bike_wheel_size_id serial_number }
|
{
|
||||||
|
shop_id: 'velocipede number',
|
||||||
|
bike_purpose_id: 'program',
|
||||||
|
#gone: 'gone',
|
||||||
|
value: 'price',
|
||||||
|
bike_brand_id: 'make',
|
||||||
|
bike_model_id: 'model',
|
||||||
|
model: 'model',
|
||||||
|
bike_style_id: nil,
|
||||||
|
bike_condition_id: nil,
|
||||||
|
seat_tube_height: nil,
|
||||||
|
bike_wheel_size_id: nil,
|
||||||
|
serial_number: nil,
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike_attrs(bike_hash)
|
def bike_attrs(bike_hash)
|
||||||
bike_attr_fields.each_with_object({}) do |field, memo|
|
bike_attr_fields.each_with_object({}) do |(model_field, csv_field), memo|
|
||||||
memo[field] = send :"bike_attr_#{ field }", bike_hash
|
memo[model_field] = send :"bike_attr_#{ model_field }", clean_value(bike_hash[csv_field])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike_attr_shop_id(bike_hash)
|
def bike_attr_shop_id(value)
|
||||||
bike_hash['velocipede number'].to_i
|
value.to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike_attr_bike_purpose_id(bike_hash)
|
def bike_attr_bike_purpose_id(value)
|
||||||
map = {
|
map = {
|
||||||
'SALE' => /shop|as(-|\s+)is|safety\s*check/,
|
'SALE' => /shop|as(-|\s+)is|safety\s*check/,
|
||||||
'BUILDBIKE' => /build|bikes.*world/,
|
'BUILDBIKE' => /build|bikes.*world/,
|
||||||
@ -24,35 +37,32 @@ class BikeCsvImporter
|
|||||||
}
|
}
|
||||||
|
|
||||||
default = 'UNDETERMINED'
|
default = 'UNDETERMINED'
|
||||||
test_value = clean_value(bike_hash['program']).try :downcase
|
test_value = value.try :downcase
|
||||||
value = map.find { |_, regexp| regexp.try :match, test_value }.try :first
|
value = map.find { |_, regexp| regexp.try :match, test_value }.try :first
|
||||||
|
|
||||||
cached_bike_purpose(value || default).id
|
cached_bike_purpose(value || default).id
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike_attr_gone(bike_hash)
|
def bike_attr_gone(value)
|
||||||
%w{ yes yeah y }.include? clean_value(bike_hash['gone']).try :downcase
|
%w{ yes yeah y }.include? value.try :downcase
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike_attr_value(bike_hash)
|
def bike_attr_value(value)
|
||||||
clean_value(bike_hash['price']).try(:gsub, /[$]/, '').try :to_i
|
value.try(:gsub, /[$]/, '').try :to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike_attr_bike_brand_id(bike_hash)
|
def bike_attr_bike_brand_id(value)
|
||||||
brand = clean_value(bike_hash['make'])
|
return unless value
|
||||||
return unless brand
|
cached_bike_brand(value).try :id
|
||||||
cached_bike_brand(brand).try :id
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike_attr_bike_model_id(bike_hash)
|
def bike_attr_bike_model_id(value)
|
||||||
model = clean_value(bike_hash['model'])
|
return unless value
|
||||||
return unless model
|
cached_bike_model(value).try :id
|
||||||
cached_bike_model(model).try :id
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike_attr_model(bike_hash)
|
def bike_attr_model(value)
|
||||||
model = clean_value bike_hash['model']
|
value if value && value !~ /unknown/i
|
||||||
model unless model =~ /unknown/i
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def bike_attr_bike_style_id(_)
|
def bike_attr_bike_style_id(_)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user