From 4aed82cf803ea3aaa562b930e2a07f0697e77516 Mon Sep 17 00:00:00 2001 From: Jason Denney Date: Sat, 19 Oct 2013 15:37:01 -0400 Subject: [PATCH] Make wheel size an combobox option on bikes --- app/components/bikes.rb | 4 +- app/models/bike.rb | 10 +++-- app/models/bike_wheel_size.rb | 11 ++++++ .../20131019150459_create_bike_wheel_sizes.rb | 22 +++++++++++ .../20131019170248_alter_bike_wheel_to_id.rb | 34 +++++++++++++++++ db/schema.rb | 27 ++++++++++---- db/seed/sql/common_wheel_sizes.sql | 37 +++++++++++++++++++ spec/factories/bikes.rb | 2 +- 8 files changed, 133 insertions(+), 14 deletions(-) create mode 100644 app/models/bike_wheel_size.rb create mode 100644 db/migrate/20131019150459_create_bike_wheel_sizes.rb create mode 100644 db/migrate/20131019170248_alter_bike_wheel_to_id.rb create mode 100644 db/seed/sql/common_wheel_sizes.sql diff --git a/app/components/bikes.rb b/app/components/bikes.rb index 9e6f42b..599565e 100644 --- a/app/components/bikes.rb +++ b/app/components/bikes.rb @@ -23,7 +23,7 @@ class Bikes < Netzke::Basepack::Grid { :id => :bike_style__style, :name => :bike_style__style, :text => 'Style' }, { :name => :seat_tube_height, :text => 'Seat Tube (in)'}, { :name => :top_tube_length, :text => 'Top Tube (in)'}, - { :name => :wheel_size, :text => 'Wheel Size (in)'}, + { :name => :bike_wheel_size__display_string, :text => 'Wheel Size'}, :value, { :id => :bike_condition__condition, :name => :bike_condition__condition, :text => 'Condition'}, { :id => :bike_purpose__purpose, :name => :bike_purpose__purpose, :text => 'Purpose'}, @@ -53,7 +53,7 @@ class Bikes < Netzke::Basepack::Grid { :name => :bike_style__style, :field_label => 'Style', :min_chars => 1}, { :name => :seat_tube_height, :field_label => 'Seat Tube (in)'}, { :name => :top_tube_length, :field_label => 'Top Tube (in)'}, - { :name => :wheel_size, :field_label => 'Wheel Size (in)'}, + { :name => :bike_wheel_size__display_string, :field_label => 'Wheel Size'}, { :name => :value, :field_label => 'Value'}, { :name => :bike_condition__condition, :field_label => 'Condition', :min_chars => 1}, { :name => :bike_purpose__purpose, :field_label => 'Purpose', :min_chars => 1} diff --git a/app/models/bike.rb b/app/models/bike.rb index e1fa08b..b21fb18 100644 --- a/app/models/bike.rb +++ b/app/models/bike.rb @@ -1,7 +1,7 @@ class Bike < ActiveRecord::Base acts_as_loggable attr_accessible :shop_id, :serial_number, :bike_brand_id, :model, :color, :bike_style_id, :seat_tube_height, - :top_tube_length, :wheel_size, :value, :bike_condition_id, :bike_purpose_id + :top_tube_length, :bike_wheel_size_id, :value, :bike_condition_id, :bike_purpose_id has_many :transactions @@ -11,6 +11,7 @@ class Bike < ActiveRecord::Base belongs_to :bike_style belongs_to :bike_condition belongs_to :bike_purpose + belongs_to :bike_wheel_size validates :shop_id, :presence => true, :uniqueness => true, :numericality => { :only_integer => true } validates :serial_number, :length => { :minimum => 3 } @@ -20,8 +21,7 @@ class Bike < ActiveRecord::Base validates :bike_style_id, :presence => true validates :seat_tube_height, :presence => true validates :top_tube_length, :presence => true - validates :wheel_size, :presence => true - #validates :value, :presence => true + validates :bike_wheel_size_id, :presence => true validates :bike_condition_id, :presence => true validates :bike_purpose_id, :presence => true @@ -45,6 +45,10 @@ class Bike < ActiveRecord::Base self.bike_purpose end + def wheel_size + self.bike_wheel_size + end + def to_s "#{brand} - #{model} - #{style}" end diff --git a/app/models/bike_wheel_size.rb b/app/models/bike_wheel_size.rb new file mode 100644 index 0000000..2d2364c --- /dev/null +++ b/app/models/bike_wheel_size.rb @@ -0,0 +1,11 @@ +class BikeWheelSize < ActiveRecord::Base + belongs_to :bike + + def display_string + ["#{twmm}-#{rdmm}", "#{rdin}x#{twin}", "#{rdfr}x#{twfr}", description].join(" | ") + end + + def to_s + "#{twmm}-#{rdmm} #{rdin}x#{twin} #{rdfr}x#{twfr} '#{description}' #{tire_common_score}" + end +end diff --git a/db/migrate/20131019150459_create_bike_wheel_sizes.rb b/db/migrate/20131019150459_create_bike_wheel_sizes.rb new file mode 100644 index 0000000..6b22502 --- /dev/null +++ b/db/migrate/20131019150459_create_bike_wheel_sizes.rb @@ -0,0 +1,22 @@ +class CreateBikeWheelSizes < ActiveRecord::Migration + def up + create_table(:bike_wheel_sizes) do |t| + t.string :twmm + t.string :rdmm + t.string :twin + t.string :rdin + t.string :twfr + t.string :rdfr + t.string :description + t.string :tire_common_score + end + + #create the default undetermined wheel size record + BikeWheelSize.create( twmm: 0, rdmm: 0, rdin: 0, twin: 0, rdfr: 0, twfr: 0, description: "UNDETERMINED", tire_common_score: 0) + ActiveRecord::Base.connection.execute(IO.read(File.join(Rails.root, "db", "seed", "sql", "common_wheel_sizes.sql"))) + end + + def down + drop_table :bike_wheel_sizes + end +end diff --git a/db/migrate/20131019170248_alter_bike_wheel_to_id.rb b/db/migrate/20131019170248_alter_bike_wheel_to_id.rb new file mode 100644 index 0000000..9ed6330 --- /dev/null +++ b/db/migrate/20131019170248_alter_bike_wheel_to_id.rb @@ -0,0 +1,34 @@ +class AlterBikeWheelToId < ActiveRecord::Migration + def up + add_column :bikes, :bike_wheel_size_id, :integer + + undetermined_id = BikeWheelSize.find_by_rdin("0") + Bike.find_each do |bike| + wheel_size = BikeWheelSize.find_by_rdin(bike.wheel_size.to_s) + + if wheel_size.nil? + wheel_size_id = undetermined_id + else + wheel_size_id = wheel_size.id + end + bike.bike_wheel_size_id = wheel_size_id + bike.save + end + + remove_column :bikes, :wheel_size + end + + def down + + add_column :bikes, :wheel_size, :integer + + Bike.find_each do |bike| + wheel_size = BikeWheelSize.find_by_id(bike.bike_wheel_size_id) + bike.wheel_size = wheel_size.rdin.to_i + bike.save + end + + remove_column :bikes, :bike_wheel_size_id + + end +end diff --git a/db/schema.rb b/db/schema.rb index dd20d89..8ef32cf 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20131019023429) do +ActiveRecord::Schema.define(:version => 20131019170248) do create_table "bike_actions", :force => true do |t| t.string "action", :limit => 128, :null => false @@ -46,22 +46,33 @@ ActiveRecord::Schema.define(:version => 20131019023429) do t.datetime "updated_at", :null => false end + create_table "bike_wheel_sizes", :force => true do |t| + t.string "twmm" + t.string "rdmm" + t.string "twin" + t.string "rdin" + t.string "twfr" + t.string "rdfr" + t.string "description" + t.string "tire_common_score" + end + create_table "bikes", :force => true do |t| t.string "serial_number" - t.integer "bike_brand_id", :null => false + t.integer "bike_brand_id", :null => false t.integer "bike_model_id" t.string "color" - t.integer "bike_style_id", :null => false + t.integer "bike_style_id", :null => false t.float "seat_tube_height" t.float "top_tube_length" - t.integer "wheel_size" t.float "value" - t.integer "bike_condition_id", :null => false - t.integer "bike_purpose_id", :null => false - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.integer "bike_condition_id", :null => false + t.integer "bike_purpose_id", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "model" t.integer "shop_id" + t.integer "bike_wheel_size_id" end create_table "credit_conversions", :force => true do |t| diff --git a/db/seed/sql/common_wheel_sizes.sql b/db/seed/sql/common_wheel_sizes.sql new file mode 100644 index 0000000..2369454 --- /dev/null +++ b/db/seed/sql/common_wheel_sizes.sql @@ -0,0 +1,37 @@ +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (54,110,'8 1/2','2','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (62,203,'12','1/2 x 2 1/4','320 ','57','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (47,305,'16','1,75 [x 2]','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (32,369,'16','1 1/4','','','Moulton',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (47,355,'18','1,75 [ x 2]','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (28,406,'20','1 1/8','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (37,406,'20','1 3/8','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (47,406,'20','1,75 [ x 2]','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (47,507,'24','1,75 [ x 2]','600 ','50C','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (37,540,'24','1 3/8 A','600 ','35A','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (25,559,'26','1','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (32,559,'26','1,3','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (37,559,'26','1,5','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (40,559,'26','1,6','','','MTB',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (44,559,'26','1,6','','','City/trekking',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (47,559,'26','1,75 [ x 2]','650 ','50','City/Trekking',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (NULL,NULL,'26','1,9','','','MTB',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (50,'559','26','1,9','','','City/Trekking',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (NULL,NULL,'26','2','','','MTB',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (54,559,'26','2,1','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (57,559,'26','2,3 [2,125]','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (20,571,'','','650 ','20C','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (23,571,'','','650 ','23C','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (28,584,'26','1 1/8 x 1 1/2 B','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (37,584,'26','1 3/8 x 1 1/2 B','650 ','38A','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (37,590,'26','1 3/8','650 [','35] A','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (20,622,'','','700 ','20C','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (23,622,'','','700 ','23C','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (25,622,'','','700 ','25C','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (28,622,'28','1 5/8 x 1 3/8','700 ','28C [700C]','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (32,622,'28','1 1/4 x 1 3/4','700 ','32C [700C Course]','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (37,622,'28','1 3/8 x 1 5/8','700 ','37C [35C]','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (42,622,'28','1,6','700 ','42C [40C]','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (47,622,'28','1,75','700 ','47C [45C]','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (28,630,'27','1 1/8 [1 1/4 fifty]','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (32,630,'27','1 1/4','','','',1); +INSERT INTO bike_wheel_sizes (TWMM, RDMM,RDIN,TWIN,RDFR,TWFR,DESCRIPTION,tire_common_score) values (40,635,'28','1 1/2 [1 3/8]','700 ','38B [35B]','',1); diff --git a/spec/factories/bikes.rb b/spec/factories/bikes.rb index 98629d7..ed8c0d0 100644 --- a/spec/factories/bikes.rb +++ b/spec/factories/bikes.rb @@ -12,7 +12,7 @@ FactoryGirl.define do bike_style_id 1 seat_tube_height 5 top_tube_length 6 - wheel_size 27 + bike_wheel_size_id 1 value 100 bike_condition_id 1 bike_purpose_id 1