From 5cb213d8b30751b10751ac4d82ad9892a2005fbe Mon Sep 17 00:00:00 2001 From: Yuriy Ivanenko Date: Thu, 8 Aug 2024 10:20:50 -0400 Subject: [PATCH] Pass all tests --- Gemfile | 3 +- Gemfile.lock | 142 +++++++++++++++++++++++++---------------- app.rb | 19 +++++- app/models/pirate.rb | 17 ++++- app/models/ship.rb | 20 +++++- spec/spec_helper.rb | 6 +- views/pirates/new.erb | 46 ++++++++++++- views/pirates/show.erb | 27 ++++++-- 8 files changed, 211 insertions(+), 69 deletions(-) diff --git a/Gemfile b/Gemfile index ba105d7..00fe556 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,8 @@ source "https://rubygems.org" gem 'sinatra', require: 'sinatra/base' gem 'sinatra-reloader', require: false -gem 'shotgun' +gem 'shotgun', git: 'https://github.com/delonnewman/shotgun.git' +gem 'rack' gem 'pry' gem 'tux' gem 'require_all' diff --git a/Gemfile.lock b/Gemfile.lock index 6a38748..f992640 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,36 +1,61 @@ +GIT + remote: https://github.com/delonnewman/shotgun.git + revision: 600b3987db7f4774e2305247ff374327f1837857 + specs: + shotgun (0.9.2) + rack (>= 1.0) + GEM remote: https://rubygems.org/ specs: - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) - backports (3.11.0) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + base64 (0.2.0) bond (0.5.1) - capybara (2.17.0) + capybara (3.40.0) addressable + matrix mini_mime (>= 0.1.3) - nokogiri (>= 1.3.3) - rack (>= 1.0.0) - rack-test (>= 0.5.4) - xpath (>= 2.0, < 4.0) - coderay (1.1.2) - diff-lcs (1.3) - method_source (0.9.0) - mini_mime (1.0.0) - mini_portile2 (2.3.0) - multi_json (1.13.0) - mustermann (1.0.1) - nokogiri (1.8.1) - mini_portile2 (~> 2.3.0) - pry (0.11.3) - coderay (~> 1.1.0) - method_source (~> 0.9.0) - public_suffix (3.0.1) - rack (2.0.3) - rack-protection (2.0.0) - rack - rack-test (0.8.2) - rack (>= 1.0, < 3) - require_all (1.5.0) + nokogiri (~> 1.11) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) + coderay (1.1.3) + diff-lcs (1.5.1) + matrix (0.4.2) + method_source (1.1.0) + mini_mime (1.1.5) + multi_json (1.15.0) + mustermann (3.0.1) + ruby2_keywords (~> 0.0.1) + nokogiri (1.16.7-aarch64-linux) + racc (~> 1.4) + nokogiri (1.16.7-arm-linux) + racc (~> 1.4) + nokogiri (1.16.7-arm64-darwin) + racc (~> 1.4) + nokogiri (1.16.7-x86-linux) + racc (~> 1.4) + nokogiri (1.16.7-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.16.7-x86_64-linux) + racc (~> 1.4) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + public_suffix (6.0.1) + racc (1.8.1) + rack (3.1.7) + rack-protection (4.0.0) + base64 (>= 0.1.0) + rack (>= 3.0.0, < 4) + rack-session (2.0.0) + rack (>= 3.0.0) + rack-test (2.1.0) + rack (>= 1.3) + regexp_parser (2.9.2) + require_all (3.0.0) ripl (0.7.1) bond (~> 0.5.1) ripl-multi_line (0.3.1) @@ -39,57 +64,62 @@ GEM rack (>= 1.0) rack-test (>= 0.5) ripl (>= 0.3.5) - rspec (3.7.0) - rspec-core (~> 3.7.0) - rspec-expectations (~> 3.7.0) - rspec-mocks (~> 3.7.0) - rspec-core (3.7.1) - rspec-support (~> 3.7.0) - rspec-expectations (3.7.0) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) - rspec-mocks (3.7.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) - rspec-support (3.7.0) - shotgun (0.9.2) - rack (>= 1.0) - sinatra (2.0.0) - mustermann (~> 1.0) - rack (~> 2.0) - rack-protection (= 2.0.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.1) + ruby2_keywords (0.0.5) + sinatra (4.0.0) + mustermann (~> 3.0) + rack (>= 3.0.0, < 4) + rack-protection (= 4.0.0) + rack-session (>= 2.0.0, < 3) + tilt (~> 2.0) + sinatra-contrib (4.0.0) + multi_json (>= 0.0.2) + mustermann (~> 3.0) + rack-protection (= 4.0.0) + sinatra (= 4.0.0) tilt (~> 2.0) - sinatra-contrib (2.0.0) - backports (>= 2.0) - multi_json - mustermann (~> 1.0) - rack-protection (= 2.0.0) - sinatra (= 2.0.0) - tilt (>= 1.3, < 3) sinatra-reloader (1.0) sinatra-contrib - tilt (2.0.8) + tilt (2.4.0) tux (0.3.0) ripl (>= 0.3.5) ripl-multi_line (>= 0.2.4) ripl-rack (>= 0.2.0) sinatra (>= 1.2.1) - xpath (3.0.0) + xpath (3.2.0) nokogiri (~> 1.8) PLATFORMS - ruby + aarch64-linux + arm-linux + arm64-darwin + x86-linux + x86_64-darwin + x86_64-linux DEPENDENCIES capybara pry + rack rack-test require_all rspec - shotgun + shotgun! sinatra sinatra-reloader tux BUNDLED WITH - 1.16.0 + 2.5.15 diff --git a/app.rb b/app.rb index 585554a..c251e87 100644 --- a/app.rb +++ b/app.rb @@ -3,7 +3,24 @@ module FormsLab class App < Sinatra::Base - # code other routes/actions here + get "/" do + erb :root + end + + get "/new" do + erb :"pirates/new" + end + + post "/pirates" do + @pirate = Pirate.new(params[:pirate]) + + params[:pirate][:ships].each do |details| + Ship.new(details) + end + @ships = Ship.all + + erb :"pirates/show" + end end end diff --git a/app/models/pirate.rb b/app/models/pirate.rb index 80a578b..18f6488 100644 --- a/app/models/pirate.rb +++ b/app/models/pirate.rb @@ -1,2 +1,17 @@ class Pirate -end \ No newline at end of file + attr_accessor :name, :weight, :height + + @@pirates = [] + + def initialize(params) + # puts params[:name] + @name = params[:name] + @weight = params[:weight] + @height = params[:height] + @@pirates << self + end + + def self.all + @@pirates + end +end diff --git a/app/models/ship.rb b/app/models/ship.rb index 09d35d6..976dccd 100644 --- a/app/models/ship.rb +++ b/app/models/ship.rb @@ -1,2 +1,20 @@ class Ship -end \ No newline at end of file + attr_accessor :name, :booty, :type + + @@ships = [] + + def initialize(details) + @name = details[:name] + @booty = details[:booty] + @type = details[:type] + @@ships << self + end + + def self.all + @@ships + end + + def self.clear + @@ships = [] + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 28c210f..09ed3c5 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,11 +6,11 @@ RSpec.configure do |config| config.include Capybara::DSL config.include Rack::Test::Methods - config.order = 'default' + # config.order = 'default' end def app - Rack::Builder.parse_file('config.ru').first + Rack::Builder.parse_file('config.ru') end -Capybara.app = app \ No newline at end of file +Capybara.app = app diff --git a/views/pirates/new.erb b/views/pirates/new.erb index f407a19..a73d8b4 100644 --- a/views/pirates/new.erb +++ b/views/pirates/new.erb @@ -1 +1,45 @@ -

Make your form here

+

Welcome to the Nested Forms Lab!

+

Let's navigate to the /new

+ +
+

Pirates

+
+ + +
+
+ + +
+
+ + +
+

Ship 1

+
+ + +
+
+ + +
+
+ + +
+

Ship 2

+
+ + +
+
+ + +
+
+ + +
+ +
diff --git a/views/pirates/show.erb b/views/pirates/show.erb index f7832d2..423b6bc 100644 --- a/views/pirates/show.erb +++ b/views/pirates/show.erb @@ -1,7 +1,24 @@

Display your Pirate here

+

+ <%= @pirate.name %> +

+

+ <%= @pirate.weight %> +

+

+ <%= @pirate.height %> +

- -

Display your first ship here

- - -

Display your second ship here

+<% @ships.each_with_index do |ship, index| %> + <% if index == 0 %> +

Display your first ship here

+

Name: <%= ship.name %>

+

Booty: <%= ship.booty %>

+

Type: <%= ship.type %>

+ <% elsif index == 1 %> +

Display your second ship here

+

Name: <%= ship.name %>

+

Booty: <%= ship.booty %>

+

Type: <%= ship.type %>

+ <% end %> +<% end %>