Dictionary show action for letters, alphabetical links helper
This commit is contained in:
parent
6202a6e778
commit
c5cbffb4e5
1
Gemfile
1
Gemfile
@ -51,6 +51,7 @@ group :development, :test do
|
||||
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
|
||||
gem "debug", platforms: %i[ mri windows ]
|
||||
gem "rspec-rails"
|
||||
gem "capybara"
|
||||
gem "rails-controller-testing"
|
||||
gem "factory_bot_rails"
|
||||
end
|
||||
|
14
Gemfile.lock
14
Gemfile.lock
@ -83,6 +83,15 @@ GEM
|
||||
bootsnap (1.16.0)
|
||||
msgpack (~> 1.2)
|
||||
builder (3.2.4)
|
||||
capybara (3.39.2)
|
||||
addressable
|
||||
matrix
|
||||
mini_mime (>= 0.1.3)
|
||||
nokogiri (~> 1.8)
|
||||
rack (>= 1.6.0)
|
||||
rack-test (>= 0.6.3)
|
||||
regexp_parser (>= 1.5, < 3.0)
|
||||
xpath (~> 3.2)
|
||||
concurrent-ruby (1.2.2)
|
||||
connection_pool (2.4.1)
|
||||
crass (1.0.6)
|
||||
@ -145,6 +154,7 @@ GEM
|
||||
net-pop
|
||||
net-smtp
|
||||
marcel (1.0.2)
|
||||
matrix (0.4.2)
|
||||
mini_mime (1.1.5)
|
||||
minitest (5.20.0)
|
||||
msgpack (1.7.2)
|
||||
@ -216,6 +226,7 @@ GEM
|
||||
rake (13.0.6)
|
||||
rdoc (6.5.0)
|
||||
psych (>= 4.0.0)
|
||||
regexp_parser (2.8.2)
|
||||
reline (0.3.9)
|
||||
io-console (~> 0.5)
|
||||
responders (3.1.1)
|
||||
@ -274,6 +285,8 @@ GEM
|
||||
websocket-driver (0.7.6)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.5)
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
zeitwerk (2.6.12)
|
||||
|
||||
PLATFORMS
|
||||
@ -283,6 +296,7 @@ PLATFORMS
|
||||
|
||||
DEPENDENCIES
|
||||
bootsnap
|
||||
capybara
|
||||
debug
|
||||
devise
|
||||
factory_bot_rails
|
||||
|
@ -3,4 +3,9 @@ class DictionaryController < ApplicationController
|
||||
@parts_of_speech = PartOfSpeech.all
|
||||
@words = Word.all
|
||||
end
|
||||
|
||||
def show
|
||||
@letter = params[:id]
|
||||
@words = Word.where('substr(word, 1, 1) = ?', @letter)
|
||||
end
|
||||
end
|
||||
|
@ -1,2 +1,10 @@
|
||||
module DictionaryHelper
|
||||
LETTERS = ['i', 'u', 'e', 'o', 'a', 'm', 'n', 'p', 't', 'k', 's', 'w', 'l', 'j'].sort
|
||||
|
||||
def alphabetical_links
|
||||
|
||||
LETTERS.map do |l|
|
||||
link_to l.to_s, dictionary_path(l)
|
||||
end.join("\n")
|
||||
end
|
||||
end
|
||||
|
@ -1,6 +1,8 @@
|
||||
<h1>Dictionary#index</h1>
|
||||
<p>Find me in app/views/dictionary/index.html.erb</p>
|
||||
|
||||
<%= sanitize alphabetical_links, tags: ["a"] %>
|
||||
|
||||
<p><%= @parts_of_speech.count %> parts of speech entries in database</p>
|
||||
<h1>Parts of Speech</h1>
|
||||
<table>
|
||||
|
9
app/views/dictionary/show.html.erb
Normal file
9
app/views/dictionary/show.html.erb
Normal file
@ -0,0 +1,9 @@
|
||||
<div>
|
||||
<%= @letter.to_s %>
|
||||
</div>
|
||||
|
||||
<% @words.each do |word| %>
|
||||
<div>
|
||||
<h1><%= word.word %></h1>
|
||||
</div>
|
||||
<% end %>
|
@ -1,7 +1,7 @@
|
||||
Rails.application.routes.draw do
|
||||
devise_for :users
|
||||
#get 'dictionary/index'
|
||||
resources :dictionary, only: [:index]
|
||||
resources :dictionary, only: [:index, :show]
|
||||
resources :words, only: [:index, :show]
|
||||
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
|
||||
|
||||
|
36
spec/helpers/dictionary_helper_spec.rb
Normal file
36
spec/helpers/dictionary_helper_spec.rb
Normal file
@ -0,0 +1,36 @@
|
||||
require 'rails_helper'
|
||||
|
||||
include Capybara::RSpecMatchers
|
||||
|
||||
# Specs in this file have access to a helper object that includes
|
||||
# the DictionaryHelper. For example:
|
||||
#
|
||||
# describe DictionaryHelper do
|
||||
# describe "string concat" do
|
||||
# it "concats two strings with spaces" do
|
||||
# expect(helper.concat_strings("this","that")).to eq("this that")
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
RSpec.describe DictionaryHelper, type: :helper do
|
||||
|
||||
describe "#alphabetical_links" do
|
||||
|
||||
it "generates fourteen letter-links" do
|
||||
expect(helper.alphabetical_links).to have_selector(%(a), count: 14)
|
||||
end
|
||||
|
||||
it "generates links for all fourteen letters" do
|
||||
output = helper.alphabetical_links
|
||||
letters = ['i', 'u', 'e', 'o', 'a', 'm', 'n', 'p', 't', 'k', 's', 'w', 'l', 'j']
|
||||
|
||||
letters.each do |l|
|
||||
expect(output).to have_link(l, href: dictionary_path(l))
|
||||
end
|
||||
end
|
||||
|
||||
it "sorts the toki pona alphabet" do
|
||||
expect(DictionaryHelper::LETTERS).to eql(DictionaryHelper::LETTERS.sort)
|
||||
end
|
||||
end
|
||||
end
|
@ -7,4 +7,21 @@ RSpec.describe "Dictionary", type: :request do
|
||||
expect(response).to render_template(:index)
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET /show" do
|
||||
it 'renders the show template' do
|
||||
get "/dictionary/a"
|
||||
expect(response).to render_template(:show)
|
||||
end
|
||||
|
||||
it "sets @letter instance variable" do
|
||||
get "/dictionary/a"
|
||||
expect(assigns(:letter)).to be_a(String)
|
||||
end
|
||||
|
||||
it "sets @words instance variable" do
|
||||
get "/dictionary/a"
|
||||
expect(assigns(:words)).to be_a(ActiveRecord::Relation)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user