From bfefa26ac08d139df354d5be9f87b744f6462c32 Mon Sep 17 00:00:00 2001 From: Jocelyn Wang Date: Tue, 18 Feb 2020 11:41:01 -0800 Subject: [PATCH 1/7] completed first wave - created planet class and method to call from main.rb --- main.rb | 18 ++++++++++++++++++ planet.rb | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 main.rb create mode 100644 planet.rb diff --git a/main.rb b/main.rb new file mode 100644 index 00000000..31cc6c1f --- /dev/null +++ b/main.rb @@ -0,0 +1,18 @@ +require 'pry' +require_relative 'planet' + +def main + earth = Planet.new('Earth', 'blue-green', 5.972e24, 1.496e8, 'Only planet known to support life') + + venus = Planet.new('Venus', 'White', 6.392e24, 2.982e9, 'Sister planet to Earth') + + puts earth.summary() + puts earth.name + puts earth.fun_fact + + puts venus.summary() + puts venus.name + puts venus.fun_fact +end + +puts main \ No newline at end of file diff --git a/planet.rb b/planet.rb new file mode 100644 index 00000000..679448f4 --- /dev/null +++ b/planet.rb @@ -0,0 +1,16 @@ +require 'pry' + +class Planet + attr_reader :name, :color, :mass_kg, :distance_from_sun_km, :fun_fact + def initialize(name, color, mass_kg, distance_from_sun_km, fun_fact) + @name = name + @color = color + @mass_kg = mass_kg + @distance_from_sun_km = distance_from_sun_km + @fun_fact = fun_fact + end + + def summary() + return "#{@name} is our home! We love how #{color} it is! #{@name} is #{mass_kg} kg and #{distance_from_sun_km} km from the sun. You might be surprised to find that #{fun_fact}." + end +end \ No newline at end of file From 94f3e5a564323a379904fded28e7c74f0a3c6aaf Mon Sep 17 00:00:00 2001 From: Jocelyn Wang Date: Tue, 18 Feb 2020 11:45:50 -0800 Subject: [PATCH 2/7] completed wave 2, created SolarSystem class and related features --- main.rb | 19 +++++++++++++------ solar_system.rb | 31 +++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 solar_system.rb diff --git a/main.rb b/main.rb index 31cc6c1f..ab5c4048 100644 --- a/main.rb +++ b/main.rb @@ -1,18 +1,25 @@ require 'pry' require_relative 'planet' +require_relative 'solar_system' def main + solar_system = SolarSystem.new('Sol') + earth = Planet.new('Earth', 'blue-green', 5.972e24, 1.496e8, 'Only planet known to support life') + solar_system.add_planet(earth) venus = Planet.new('Venus', 'White', 6.392e24, 2.982e9, 'Sister planet to Earth') + solar_system.add_planet(venus) + + list = solar_system.list_planets + puts list + + found_planet = solar_system.find_planet_by_name('Earth') - puts earth.summary() - puts earth.name - puts earth.fun_fact + puts found_planet + puts found_planet.summary() - puts venus.summary() - puts venus.name - puts venus.fun_fact + distance_btwn_planet = solar_system.distance_between('Earth','Venus') end puts main \ No newline at end of file diff --git a/solar_system.rb b/solar_system.rb new file mode 100644 index 00000000..a281f23f --- /dev/null +++ b/solar_system.rb @@ -0,0 +1,31 @@ +require 'pry' + +class SolarSystem + attr_reader :name, :color, :mass_kg, :distance_from_sun_km, :fun_fact, :star_name, :planets + + def initialize(star_name) + @star_name = star_name + @planets = [] + end + + def add_planet(planet) + @planets << planet + end + + def list_planets() + planets_string = @planets.each_with_index.map {|planet,index| + "#{index + 1}. #{planet.name}"} + planets_string.unshift("Planets orbiting #{@star_name}:\n") + + return planets_string + end + + def find_planet_by_name(planet_name) + @planets.detect {|planet| planet.name.downcase.include? planet_name.downcase} + end + + def distance_between(planet_one, planet_two) + return (find_planet_by_name(planet_one).distance_from_sun_km - find_planet_by_name(planet_two).distance_from_sun_km).abs + end +end + From ddf26ab51015d63b9650a643044ac2a4dd4cadc6 Mon Sep 17 00:00:00 2001 From: Jocelyn Wang Date: Tue, 18 Feb 2020 11:51:09 -0800 Subject: [PATCH 3/7] completed wave 3, changed main.rb to be a control panel for user to select actions --- main.rb | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 61 insertions(+), 8 deletions(-) diff --git a/main.rb b/main.rb index ab5c4048..2199da79 100644 --- a/main.rb +++ b/main.rb @@ -2,6 +2,46 @@ require_relative 'planet' require_relative 'solar_system' +def display(solar_system) + puts "Which planet would you like to see?" + display_planet = gets.chomp.downcase + begin + puts solar_system.find_planet_by_name(display_planet).summary() + rescue NoMethodError => e + puts "Planet not in solar systen. Please enter a different planet or add new planet to the solar system." + end +end + +def user_create_planet(solar_system) + puts "What is the name of the planet?" + user_planet_name = gets.chomp.capitalize + + puts "What color is #{user_planet_name}?" + user_planet_color = gets.chomp.downcase + + puts "What is its mass in kilograms?" + user_planet_masskg = gets.chomp.to_f + + puts "What distance is the planet from the sun (in kilometers)?" + user_planet_distance = gets.chomp.to_f + + puts "Can you share a fun fact about #{user_planet_name}?" + user_planet_fun_fact = gets.chomp.capitalize + + user_planet = Planet.new(user_planet_name,user_planet_color, user_planet_masskg,user_planet_distance,user_planet_fun_fact) + solar_system.add_planet(user_planet) +end + +def display_distance_between(solar_system) + puts "Please enter the name of the first planet." + planet_one = gets.chomp + + puts "Please enter the name of the second planet." + planet_two = gets.chomp + + puts "The distance between #{planet_one} and #{planet_two} is #{solar_system.distance_between(planet_one, planet_two)} km." +end + def main solar_system = SolarSystem.new('Sol') @@ -11,15 +51,28 @@ def main venus = Planet.new('Venus', 'White', 6.392e24, 2.982e9, 'Sister planet to Earth') solar_system.add_planet(venus) - list = solar_system.list_planets - puts list - - found_planet = solar_system.find_planet_by_name('Earth') - - puts found_planet - puts found_planet.summary() + puts "What action would you like to take?" + user_control = gets.chomp.downcase + + until user_control == 'exit' + case user_control + when 'list planets' + list = solar_system.list_planets + puts list + when 'planet details' + display(solar_system) + when 'add planet' + user_create_planet(solar_system) + when 'find distance' + display_distance_between(solar_system) + else + puts "Please enter a valid option." + end + + puts "What action would you like to take next?" + user_control = gets.chomp.downcase + end - distance_btwn_planet = solar_system.distance_between('Earth','Venus') end puts main \ No newline at end of file From 60b3bae10daba5a74564557b9118adec8d511d32 Mon Sep 17 00:00:00 2001 From: Jocelyn Wang Date: Tue, 18 Feb 2020 13:46:22 -0800 Subject: [PATCH 4/7] added functionality to check that mass and distance are positive numbers --- main.rb | 16 ++++++++++++---- planet.rb | 30 +++++++++++++++++++++++++++--- solar_system.rb | 3 ++- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/main.rb b/main.rb index 2199da79..883c032c 100644 --- a/main.rb +++ b/main.rb @@ -12,6 +12,14 @@ def display(solar_system) end end +def verify_number(data_to_verify) + until (Float(data_to_verify) rescue nil) != nil && data_to_verify.to_f > 0 + puts "Input not accepted, please enter a number:" + data_to_verify = gets.chomp + end + data_to_verify.to_f +end + def user_create_planet(solar_system) puts "What is the name of the planet?" user_planet_name = gets.chomp.capitalize @@ -20,15 +28,15 @@ def user_create_planet(solar_system) user_planet_color = gets.chomp.downcase puts "What is its mass in kilograms?" - user_planet_masskg = gets.chomp.to_f + user_planet_mass = verify_number(gets.chomp) puts "What distance is the planet from the sun (in kilometers)?" - user_planet_distance = gets.chomp.to_f + user_planet_distance = verify_number(gets.chomp) puts "Can you share a fun fact about #{user_planet_name}?" user_planet_fun_fact = gets.chomp.capitalize - user_planet = Planet.new(user_planet_name,user_planet_color, user_planet_masskg,user_planet_distance,user_planet_fun_fact) + user_planet = Planet.new(user_planet_name,user_planet_color, user_planet_mass,user_planet_distance,user_planet_fun_fact) solar_system.add_planet(user_planet) end @@ -75,4 +83,4 @@ def main end -puts main \ No newline at end of file +main \ No newline at end of file diff --git a/planet.rb b/planet.rb index 679448f4..87e28be2 100644 --- a/planet.rb +++ b/planet.rb @@ -1,16 +1,40 @@ require 'pry' class Planet - attr_reader :name, :color, :mass_kg, :distance_from_sun_km, :fun_fact + attr_reader :name, :color, :fun_fact + attr_accessor :mass_kg, :distance_from_sun_km def initialize(name, color, mass_kg, distance_from_sun_km, fun_fact) @name = name @color = color - @mass_kg = mass_kg - @distance_from_sun_km = distance_from_sun_km + self.mass_kg = mass_kg + self.distance_from_sun_km = distance_from_sun_km @fun_fact = fun_fact end def summary() return "#{@name} is our home! We love how #{color} it is! #{@name} is #{mass_kg} kg and #{distance_from_sun_km} km from the sun. You might be surprised to find that #{fun_fact}." end + + def mass_kg=(value) + begin + value > 0 + @mass_kg=(value) + rescue + puts "Mass entered is not in number format, please enter as a number." + user_input = gets.chomp.to_f + @mass_kg = user_input + end + end + + def distance_from_sun_km=(value) + begin + value > 0 + @distance_from_sun_km=(value) + rescue + puts "Distance entered is not in number format, please enter as a number." + user_input = gets.chomp.to_f + @distance_from_sun_km = user_input + end + end + end \ No newline at end of file diff --git a/solar_system.rb b/solar_system.rb index a281f23f..220b6de5 100644 --- a/solar_system.rb +++ b/solar_system.rb @@ -21,7 +21,8 @@ def list_planets() end def find_planet_by_name(planet_name) - @planets.detect {|planet| planet.name.downcase.include? planet_name.downcase} + @planets.detect {|planet| + planet.name.downcase.include? planet_name.downcase} end def distance_between(planet_one, planet_two) From 229a625a7c4162a422c877c911267004b0bd5d34 Mon Sep 17 00:00:00 2001 From: Jocelyn Wang Date: Tue, 18 Feb 2020 13:51:24 -0800 Subject: [PATCH 5/7] refined the language for summary --- planet.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planet.rb b/planet.rb index 87e28be2..c2ae8049 100644 --- a/planet.rb +++ b/planet.rb @@ -12,7 +12,7 @@ def initialize(name, color, mass_kg, distance_from_sun_km, fun_fact) end def summary() - return "#{@name} is our home! We love how #{color} it is! #{@name} is #{mass_kg} kg and #{distance_from_sun_km} km from the sun. You might be surprised to find that #{fun_fact}." + return "#{@name} is a wonderful planet! It is a beautiful #{color} color! #{@name} has a mass of #{mass_kg} kg and is #{distance_from_sun_km} km from the sun. You might be surprised to find that: #{fun_fact}." end def mass_kg=(value) From 30ee846166a5c7bc16fc5d3e6090c7eef6cefbc1 Mon Sep 17 00:00:00 2001 From: Jocelyn Wang Date: Tue, 18 Feb 2020 13:58:58 -0800 Subject: [PATCH 6/7] removed the Planet attributes from attr_reader in Solar System --- solar_system.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solar_system.rb b/solar_system.rb index 220b6de5..d98830aa 100644 --- a/solar_system.rb +++ b/solar_system.rb @@ -1,7 +1,7 @@ require 'pry' class SolarSystem - attr_reader :name, :color, :mass_kg, :distance_from_sun_km, :fun_fact, :star_name, :planets + attr_reader :star_name, :planets def initialize(star_name) @star_name = star_name From 7f308ae4d9e779409861f9da892928c8ed8ffec6 Mon Sep 17 00:00:00 2001 From: Jocelyn Wang Date: Thu, 20 Feb 2020 08:48:46 -0800 Subject: [PATCH 7/7] Added in comments --- main.rb | 11 ++++++++--- planet.rb | 8 ++++++-- solar_system.rb | 11 ++++++++--- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/main.rb b/main.rb index 883c032c..3299f00c 100644 --- a/main.rb +++ b/main.rb @@ -2,6 +2,7 @@ require_relative 'planet' require_relative 'solar_system' +# Returns the details for the planet using method from Solar System def display(solar_system) puts "Which planet would you like to see?" display_planet = gets.chomp.downcase @@ -12,6 +13,7 @@ def display(solar_system) end end +# Verifies that the data is a number def verify_number(data_to_verify) until (Float(data_to_verify) rescue nil) != nil && data_to_verify.to_f > 0 puts "Input not accepted, please enter a number:" @@ -20,6 +22,7 @@ def verify_number(data_to_verify) data_to_verify.to_f end +# Prompts for user input to create a new Planet def user_create_planet(solar_system) puts "What is the name of the planet?" user_planet_name = gets.chomp.capitalize @@ -40,6 +43,7 @@ def user_create_planet(solar_system) solar_system.add_planet(user_planet) end +# Finds distance between two planets using Solar System def display_distance_between(solar_system) puts "Please enter the name of the first planet." planet_one = gets.chomp @@ -50,10 +54,11 @@ def display_distance_between(solar_system) puts "The distance between #{planet_one} and #{planet_two} is #{solar_system.distance_between(planet_one, planet_two)} km." end +# Control panel to call in methods for user to select options def main solar_system = SolarSystem.new('Sol') - earth = Planet.new('Earth', 'blue-green', 5.972e24, 1.496e8, 'Only planet known to support life') + earth = Planet.new('Earth', 'blue-green', 5.972e24, 4.769e9, 'Only planet known to support life') solar_system.add_planet(earth) venus = Planet.new('Venus', 'White', 6.392e24, 2.982e9, 'Sister planet to Earth') @@ -62,11 +67,11 @@ def main puts "What action would you like to take?" user_control = gets.chomp.downcase + # Prompts user for options until they choose to exit until user_control == 'exit' case user_control when 'list planets' - list = solar_system.list_planets - puts list + puts solar_system.list_planets when 'planet details' display(solar_system) when 'add planet' diff --git a/planet.rb b/planet.rb index c2ae8049..e32f63e7 100644 --- a/planet.rb +++ b/planet.rb @@ -1,8 +1,9 @@ require 'pry' class Planet - attr_reader :name, :color, :fun_fact - attr_accessor :mass_kg, :distance_from_sun_km + attr_reader :name, :color, :fun_fact, :mass_kg, :distance_from_sun_km + + # Creates constructor for planet attributes def initialize(name, color, mass_kg, distance_from_sun_km, fun_fact) @name = name @color = color @@ -11,10 +12,12 @@ def initialize(name, color, mass_kg, distance_from_sun_km, fun_fact) @fun_fact = fun_fact end + # Creates summary using details about the planet def summary() return "#{@name} is a wonderful planet! It is a beautiful #{color} color! #{@name} has a mass of #{mass_kg} kg and is #{distance_from_sun_km} km from the sun. You might be surprised to find that: #{fun_fact}." end + # Verifies that mass is in numbers def mass_kg=(value) begin value > 0 @@ -26,6 +29,7 @@ def mass_kg=(value) end end + # Verifies that distance is in numbers def distance_from_sun_km=(value) begin value > 0 diff --git a/solar_system.rb b/solar_system.rb index d98830aa..eb52ecf2 100644 --- a/solar_system.rb +++ b/solar_system.rb @@ -3,28 +3,33 @@ class SolarSystem attr_reader :star_name, :planets + # Creates constructor for solar system attributes def initialize(star_name) @star_name = star_name @planets = [] end + # Adds a planet object to solar system def add_planet(planet) @planets << planet end + # Lists out all planets in the solar system def list_planets() - planets_string = @planets.each_with_index.map {|planet,index| + planets_list = @planets.each_with_index.map {|planet,index| "#{index + 1}. #{planet.name}"} - planets_string.unshift("Planets orbiting #{@star_name}:\n") + planets_list.unshift("Planets orbiting #{@star_name}:\n").to_s - return planets_string + return planets_list end + # Returns the planet object by name def find_planet_by_name(planet_name) @planets.detect {|planet| planet.name.downcase.include? planet_name.downcase} end + # Calculates the distance between two planets def distance_between(planet_one, planet_two) return (find_planet_by_name(planet_one).distance_from_sun_km - find_planet_by_name(planet_two).distance_from_sun_km).abs end