diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 00000000..6c59502d --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,17 @@ +AllCops: + RunRailsCops: true + Exclude: + - "bin/**/*" + - "db/migrate/**/*" + - "db/schema.rb" + - "vendor/**/*" + - "gemfiles/vendor/**/*" + +Metrics/LineLength: + Max: 90 + +Metrics/AbcSize: + Max: 20 + +Metrics/MethodLength: + Max: 17 \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 50b1d22a..cc5c588c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,4 +30,6 @@ before_script: - cp config/database.yml.travis config/database.yml - psql -c 'create database travis_ci_test;' -U postgres -script: "bundle exec rake test:$TEST_SUITE" +script: + - bundle exec rake test:$TEST_SUITE + - bundle exec rubocop diff --git a/Gemfile b/Gemfile index c1ce9fd3..d3aaaaf1 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source 'https://rubygems.org' gem 'rails', '4.1.0' gem 'jquery-rails' -gem 'sass-rails', '~> 4.0.3', :require => 'sass' +gem 'sass-rails', '~> 4.0.3', require: 'sass' gem 'coffee-rails', '~> 4.0.0' gem 'paperclip', '~> 4.2.0' gem 'rmagick' @@ -25,8 +25,9 @@ end group :test, :development do gem 'capybara' gem 'selenium-webdriver' - gem 'coveralls', :require => false - gem 'simplecov', :require => false + gem 'coveralls', require: false + gem 'simplecov', require: false + gem 'rubocop', require: false gem 'sqlite3' gem 'tzinfo-data' # addresses a bug when working on Windows end diff --git a/Gemfile.lock b/Gemfile.lock index 42331f24..778500c1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -28,6 +28,9 @@ GEM thread_safe (~> 0.1) tzinfo (~> 1.1) arel (5.0.1.20140414130214) + ast (2.0.0) + astrolabe (1.3.0) + parser (>= 2.2.0.pre.3, < 3.0) aws-sdk (1.63.0) aws-sdk-v1 (= 1.63.0) aws-sdk-v1 (1.63.0) @@ -97,9 +100,12 @@ GEM activesupport (>= 3.0.0) cocaine (~> 0.5.3) mime-types + parser (2.2.0.3) + ast (>= 1.1, < 3.0) pg (0.18.1) pg (0.18.1-x86-mingw32) polyglot (0.3.5) + powerpack (0.1.0) rack (1.5.2) rack-test (0.6.3) rack (>= 1.0) @@ -118,6 +124,7 @@ GEM activesupport (= 4.1.0) rake (>= 0.8.7) thor (>= 0.18.1, < 2.0) + rainbow (2.0.0) rake (10.4.2) ref (1.0.5) rest-client (1.7.3) @@ -128,6 +135,13 @@ GEM mime-types (>= 1.16, < 3.0) netrc (~> 0.7) rmagick (2.13.4) + rubocop (0.29.1) + astrolabe (~> 1.3) + parser (>= 2.2.0.1, < 3.0) + powerpack (~> 0.1) + rainbow (>= 1.99.1, < 3.0) + ruby-progressbar (~> 1.4) + ruby-progressbar (1.7.1) rubyzip (1.1.7) sass (3.2.19) sass-rails (4.0.5) @@ -196,6 +210,7 @@ DEPENDENCIES pg rails (= 4.1.0) rmagick + rubocop sass-rails (~> 4.0.3) selenium-webdriver simplecov diff --git a/Rakefile b/Rakefile index ba6b733d..ce8d8ca6 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,6 @@ # Add your own tasks in files placed in lib/tasks ending in .rake, -# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. +# for example lib/tasks/capistrano.rake, and they will automatically +# be available to Rake. require File.expand_path('../config/application', __FILE__) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index f258403b..032465a5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,160 +1,143 @@ +# Superclass for all model controllers class ApplicationController < ActionController::Base protect_from_forgery helper :html helper :my_content - + helper_method :nl2br - + helper_method :universe_filter - # Rails changed cookie format in rails 4, so log out all old users so they get the new version + # Rails changed cookie format in rails 4, so log out all old users so that + # they get the new version rescue_from JSON::ParserError, with: :force_user_logout def force_user_logout reset_session redirect_to login_path end - + # View Helpers def nl2br(string) - #simple_format string - string.gsub("\n\r","
").gsub("\r", "").gsub("\n", "
").html_safe + # simple_format string + string.gsub("\n\r", '
').gsub("\r", '').gsub("\n", '
').html_safe end - - def universe_filter - universes = Universe.where(user_id: session[:user]) - return if universes.length == 0 - - unless @selected_universe_filter - @selected_universe_filter = 'All universes' - end - - html = '' - html << '' - html << '' - html << '' - return html.html_safe + def universe_filter + return if Universe.where(user_id: session[:user]).length.zero? + return if @selected_universe_filter + @selected_universe_filter = t(:all_universes) end - + # Authentication - def is_logged_in? + def log_in(user) + session[:user] = user.id + end + + def logged_in? session && session[:user] end - + def redirect_if_not_logged_in - unless is_logged_in? - redirect_to signup_path, :notice => "You must be logged in to do that!" - end + return if logged_in? + redirect_to signup_path, notice: t(:must_be_logged_in) end def create_anonymous_account_if_not_logged_in - unless is_logged_in? - id = rand(10000000).to_s + rand(10000000).to_s # lol - @user = User.new(:name => 'Anonymous-' + id.to_s, :email => id.to_s + '@localhost', :password => id.to_s) + return if logged_in? - if @user.save - session[:user] = @user.id - session[:anon_user] = true - else - create_anonymous_account_if_not_logged_in - end + @user = create_anonymous_user + + if @user.save + session[:user] = @user.id + session[:anon_user] = true + else + # layman's collision detection + create_anonymous_account_if_not_logged_in end end - + + # Require ownership + def require_ownership_of_character - character = Character.find(params[:id]) - unless session[:user] and session[:user] == character.user.id - redirect_to character_list_path, :notice => "You don't have permission to do that!" - end + redirect_if_not_owned Character.find(params[:id]), character_list_path end - + def require_ownership_of_equipment - equipment = Equipment.find(params[:id]) - unless session[:user] and session[:user] == equipment.user.id - redirect_to equipment_list_path, :notice => "You don't have permission to do that!" - end + redirect_if_not_owned Equipment.find(params[:id]), equipment_list_path end - + def require_ownership_of_language - language = Language.find(params[:id]) - unless session[:user] and session[:user] == language.user.id - redirect_to language_list_path, :notice => "You don't have permission to do that!" - end + redirect_if_not_owned Language.find(params[:id]), language_list_path end - + def require_ownership_of_location - location = Location.find(params[:id]) - unless session[:user] and session[:user] == location.user.id - redirect_to location_list_path, :notice => "You don't have permission to do that!" - end + redirect_if_not_owned Location.find(params[:id]), location_list_path end - + def require_ownership_of_magic - magic = Magic.find(params[:id]) - unless session[:user] and session[:user] == magic.user.id - redirect_to magic_list_path, :notice => "You don't have permission to do that!" - end + redirect_if_not_owned Magic.find(params[:id]), magic_list_path end - + def require_ownership_of_universe - universe = Universe.find(params[:id]) - unless session[:user] and session[:user] == universe.user.id - redirect_to universe_list_path, :notice => "You don't have permission to do that!" - end + redirect_if_not_owned Universe.find(params[:id]), universe_list_path end + # Hide, if private + def hide_private_universe - universe = Universe.find(params[:id]) - unless (session[:user] and session[:user] == universe.user.id) or universe.privacy.downcase == 'public' - redirect_to universe_list_path, :notice => "You don't have permission to view that!" - end + return if Universe.find(params[:id]).privacy.downcase == 'public' + redirect_to universe_list_path, notice: t(:no_view_permission) end def hide_private_character - character = Character.find(params[:id]) - unless (session[:user] and session[:user] == character.user.id) or (character.universe and character.universe.privacy.downcase == 'public') - redirect_to character_list_path, :notice => "You don't have permission to view that!" - end + redirect_if_private Character.find(params[:id]), character_list_path end def hide_private_equipment - equipment = Equipment.find(params[:id]) - unless (session[:user] and session[:user] == equipment.user.id) or (equipment.universe and equipment.universe.privacy.downcase == 'public') - redirect_to equipment_list_path, :notice => "You don't have permission to view that!" - end + redirect_if_private Equipment.find(params[:id]), equipment_list_path end def hide_private_language - language = Language.find(params[:id]) - unless (session[:user] and session[:user] == language.user.id) or (language.universe and language.universe.privacy.downcase == 'public') - redirect_to language_list_path, :notice => "You don't have permission to view that!" - end + redirect_if_private Language.find(params[:id]), language_list_path end def hide_private_location - location = Location.find(params[:id]) - unless (session[:user] and session[:user] == location.user.id) or (location.universe and location.universe.privacy.downcase == 'public') - redirect_to location_list_path, :notice => "You don't have permission to view that!" - end + redirect_if_private Location.find(params[:id]), location_list_path end def hide_private_magic - magic = Magic.find(params[:id]) - unless (session[:user] and session[:user] == magic.user.id) or (magic.universe and magic.universe.privacy.downcase == 'public') - redirect_to magic_list_path, :notice => "You don't have permission to view that!" - end + redirect_if_private Magic.find(params[:id]), magic_list_path end + private + def create_anonymous_user + # TODO: guarantee anonymous id is random (or just let db assign it?) + id = rand(10_000_000).to_s + rand(10_000_000).to_s # lol + User.new( + name: 'Anonymous-' + id.to_s, + email: id.to_s + '@localhost', + password: id.to_s) + end + def redirect_if_not_owned(object_to_check, redirect_path) + return if owned_by_current_user? object_to_check + redirect_to redirect_path, notice: t(:no_do_permission) + end + + def redirect_if_private(object_to_check, redirect_path) + return if public? object_to_check + redirect_to redirect_path, notice: t(:no_view_permission) + end + + def owned_by_current_user?(object) + session[:user] && session[:user] == object.user.id + end + + def public?(object) + (owned_by_current_user? object) || \ + (object.universe && object.universe.privacy.downcase == 'public') + end end diff --git a/app/controllers/characters_controller.rb b/app/controllers/characters_controller.rb index 9504d547..2f254386 100644 --- a/app/controllers/characters_controller.rb +++ b/app/controllers/characters_controller.rb @@ -1,24 +1,17 @@ +# Controller for the Character model class CharactersController < ApplicationController - before_filter :create_anonymous_account_if_not_logged_in, :only => [:edit, :create, :update] - before_filter :require_ownership_of_character, :only => [:update, :edit, :destroy] - before_filter :hide_private_character, :only => [:show] + before_action :create_anonymous_account_if_not_logged_in, + only: [:edit, :create, :update] + before_action :require_ownership_of_character, + only: [:update, :edit, :destroy] + before_action :hide_private_character, only: [:show] # GET /characters # GET /characters.json def index @characters = Character.where(user_id: session[:user]) - - if @characters.length == 0 - @characters = [] - end - - if params[:universe] - @universe = Universe.where(user_id: session[:user]).where(name: params[:universe].strip).first - @characters = @characters.where(universe_id: @universe.id) if @characters.length > 0 - @selected_universe_filter = @universe.name - end - - @characters = @characters.sort { |a, b| a.name.downcase <=> b.name.downcase } + .order(:name).presence || [] + populate_universe_fields if params[:universe] respond_to do |format| format.html # index.html.erb @@ -56,42 +49,38 @@ class CharactersController < ApplicationController # POST /characters # POST /characters.json def create - @character = Character.create(character_params) - @character.user_id = session[:user] - @character.universe = Universe.where(user_id: session[:user]).where(name: params[:character][:universe].strip).first + @character = create_character_from_params + # rubocop:disable LineLength, AbcSize respond_to do |format| if @character.save - format.html { redirect_to @character, notice: 'Character was successfully created.' } + format.html { render_html_success t(:create_success, model_name: Character.model_name.human) } format.json { render json: @character, status: :created, location: @character } else - format.html { render action: "new" } - format.json { render json: @character.errors, status: :unprocessable_entity } + format.html { render action: 'new' } + format.json { render_json_error_unprocessable } end end + # rubocop:enable LineLength, AbcSize end # PUT /characters/1 # PUT /characters/1.json + # rubocop:disable LineLength, AbcSize def update - @character = Character.find(params[:id]) - - if params[:character][:universe].empty? - params[:character][:universe] = nil - else - params[:character][:universe] = Universe.where(user_id: session[:user]).where(name: params[:character][:universe].strip).first - end + @character = update_character_from_params respond_to do |format| if @character.update_attributes(character_params) - format.html { redirect_to @character, notice: 'Character was successfully updated.' } + format.html { render_html_success t(:update_success, model_name: Character.model_name.human) } format.json { head :no_content } else - format.html { render action: "edit" } - format.json { render json: @character.errors, status: :unprocessable_entity } + format.html { render action: 'edit' } + format.json { render_json_error_unprocessable } end end end + # rubocop:enable LineLength, AbcSize # DELETE /characters/1 # DELETE /characters/1.json @@ -103,18 +92,50 @@ class CharactersController < ApplicationController format.json { head :no_content } end end - + private - def character_params - params.require(:character).permit( - :universe_id, :user_id, - :name, :age, :role, :gender, :age, - :height, :weight, :haircolor, :facialhair, :eyecolor, :race, :skintone, :bodytype, :identmarks, - :bestfriend, :religion, :politics, :prejudices, :occupation, :pets, - :mannerisms, - :birthday, :birthplace, :education, :background, - :fave_color, :fave_food, :fave_possession, :fave_weapon, :fave_animal, - :father, :mother, :spouse, :siblings, :archenemy, - :notes, :private_notes) - end + + def character_params + params.require(:character).permit( + :universe_id, :user_id, + :name, :age, :role, :gender, :age, :height, :weight, :haircolor, + :facialhair, :eyecolor, :race, :skintone, :bodytype, :identmarks, + :bestfriend, :religion, :politics, :prejudices, :occupation, :pets, + :mannerisms, :birthday, :birthplace, :education, :background, + :fave_color, :fave_food, :fave_possession, :fave_weapon, :fave_animal, + :father, :mother, :spouse, :siblings, :archenemy, :notes, :private_notes) + end + + def populate_universe_fields + @universe = Universe.where(user_id: session[:user], + name: params[:universe].strip).first + @characters = + @characters.where(universe_id: @universe.id) if @characters.blank? + @selected_universe_filter = @universe.name + end + + def universe_from_character_params + Universe.where(user_id: session[:user], + name: params[:character][:universe].strip).first.presence + end + + def create_character_from_params + character = Character.create(character_params) + character.user_id = session[:user] + character.universe = universe_from_character_params + character + end + + def update_character_from_params + params[:character][:universe] = universe_from_character_params + Character.find(params[:id]) + end + + def render_json_error_unprocessable + render json: @character.errors, status: :unprocessable_entity + end + + def render_html_success(notice) + redirect_to @character, notice: notice + end end diff --git a/app/controllers/characters_generator_controller.rb b/app/controllers/characters_generator_controller.rb new file mode 100644 index 00000000..4d9e6a0d --- /dev/null +++ b/app/controllers/characters_generator_controller.rb @@ -0,0 +1,90 @@ +# Generates random Character values +class CharactersGeneratorController < ApplicationController + def age + @upper_limit = 100 + @lower_limit = 2 + + render json: rand(@lower_limit...@upper_limit) + end + + def bodytype + @possible_types = t(:body_types) + + render json: @possible_types.sample + end + + def eyecolor + @possible_colors = t(:eye_colors) + + render json: @possible_colors.sample + end + + def facialhair + @possible_styles = t(:facial_hair_styles) + + render json: @possible_styles.sample + end + + def haircolor + @possible_colors = t(:hair_colors) + + render json: @possible_colors.sample + end + + def hairstyle + @possible_styles = t(:hair_styles) + + render json: @possible_styles.sample + end + + def height + @upper_foot_limit = 6 + @lower_foot_limit = 2 + @upper_inch_limit = 11 + @lower_inch_limit = 0 + + render json: [ + rand(@lower_foot_limit...@upper_foot_limit), "'", + rand(@lower_inch_limit...@upper_inch_limit), '"' + ].join + end + + def identifyingmark + @possible_marks = t(:identifying_marks) + @possible_locations = t(:identifying_mark_locations) + + render json: [ + @possible_marks.sample, t(:on_the), @possible_locations.sample + ].join(' ') .capitalize + end + + def name + @male_first_names = t(:male_first_names) + @female_first_names = t(:female_first_names) + @last_names = t(:last_names) + + @all_first_names = [] + @male_first_names + @female_first_names + @all_last_names = [] + @last_names + + render json: [@all_first_names.sample, @all_last_names.sample].join(' ') + end + + def race + @possible_races = t(:character_races) + + render json: @possible_races.sample + end + + def skintone + @possible_tones = t(:skin_tones) + + render json: @possible_tones.sample + end + + def weight + @upper_limit = 240 + @lower_limit = 80 + + render json: rand(@lower_limit...@upper_limit) + end +end diff --git a/app/controllers/equipment_controller.rb b/app/controllers/equipment_controller.rb index 4aa300d6..b1f22ff4 100644 --- a/app/controllers/equipment_controller.rb +++ b/app/controllers/equipment_controller.rb @@ -1,16 +1,17 @@ +# Controller for the Equipment model class EquipmentController < ApplicationController - before_filter :create_anonymous_account_if_not_logged_in, :only => [:edit, :create, :update] - before_filter :require_ownership_of_equipment, :only => [:update, :edit, :destroy] - before_filter :hide_private_equipment, :only => [:show] + before_action :create_anonymous_account_if_not_logged_in, + only: [:edit, :create, :update] + + before_action :require_ownership_of_equipment, + only: [:update, :edit, :destroy] + + before_action :hide_private_equipment, only: [:show] def index - @equipment = Equipment.where(user_id: session[:user]) - - if @equipment.size == 0 - @equipment = [] - end - - @equipment = @equipment.sort { |a, b| a.name.downcase <=> b.name.downcase } + @equipment = Equipment + .where(user_id: session[:user]) + .order(:name).presence || [] respond_to do |format| format.html # index.html.erb @@ -41,39 +42,35 @@ class EquipmentController < ApplicationController end def create - @equipment = Equipment.create(equipment_params) - @equipment.user_id = session[:user] - @equipment.universe = Universe.where(user_id: session[:user]).where(name: params[:equipment][:universe].strip).first + @equipment = create_equipment_from_params + # rubocop:disable LineLength respond_to do |format| if @equipment.save - format.html { redirect_to @equipment, notice: 'Equipment was successfully created.' } + format.html { redirect_to @equipment, notice: t(:create_success, model_name: Equipment.model_name.human) } format.json { render json: @equipment, status: :created, location: @equipment } else - format.html { render action: "new" } + format.html { render action: 'new' } format.json { render json: @equipment.errors, status: :unprocessable_entity } end end + # rubocop:enable LineLength end def update - @equipment = Equipment.find(params[:id]) - - if params[:equipment][:universe].empty? - params[:equipment][:universe] = nil - else - params[:equipment][:universe] = Universe.where(user_id: session[:user]).where(name: params[:equipment][:universe].strip).first - end + @equipment = update_equipment_from_params + # rubocop:disable LineLength respond_to do |format| if @equipment.update_attributes(equipment_params) - format.html { redirect_to @equipment, notice: 'Equipment was successfully updated.' } + format.html { redirect_to @equipment, notice: t(:update_success, model_name: Equipment.model_name.human) } format.json { head :no_content } else - format.html { render action: "edit" } + format.html { render action: 'edit' } format.json { render json: @equipment.errors, status: :unprocessable_entity } end end + # rubocop:enable LineLength end def destroy @@ -85,15 +82,48 @@ class EquipmentController < ApplicationController format.json { head :no_content } end end - + private - def equipment_params - params.require(:equipment).permit( - :universe_id, :user_id, - :name, :equip_type, - :description, :weight, - :original_owner, :current_owner, :made_by, :materials, :year_made, - :magic, - :notes, :private_notes) - end + + def equipment_params + params.require(:equipment).permit( + :universe_id, :user_id, + :name, :equip_type, + :description, :weight, + :original_owner, :current_owner, :made_by, :materials, :year_made, + :magic, + :notes, :private_notes) + end + + def populate_universe_fields + @universe = Universe.where(user_id: session[:user], + name: params[:universe].strip).first + @equipment = + @equipment.where(universe_id: @universe.id) if @equipment.blank? + end + + def universe_from_equipment_params + Equipment.where(user_id: session[:user], + name: params[:equipment][:universe].strip).first.presence + end + + def create_equipment_from_params + equipment = Equipment.create(equipment_params) + equipment.user_id = session[:user] + equipment.universe = universe_from_equipment_params + equipment + end + + def update_equipment_from_params + params[:equipment][:universe] = universe_from_equipment_params + Equipment.find(params[:id]) + end + + def render_json_error_unprocessable + render json: @equipment.errors, status: :unprocessable_entity + end + + def render_html_success(notice) + redirect_to @equipment, notice: notice + end end diff --git a/app/controllers/equipment_generator_controller.rb b/app/controllers/equipment_generator_controller.rb new file mode 100644 index 00000000..d9692eb1 --- /dev/null +++ b/app/controllers/equipment_generator_controller.rb @@ -0,0 +1,76 @@ +# Generates random Equipment values +class EquipmentGeneratorController < ApplicationController + def armor + # TODO: just make this an aggregate of armor, and + # pick randomly from the different ones + render json: {} + end + + def armor_shield + @shield_types = t(:shield_types) + + render json: @shield_types.sample + end + + def weapon + # TODO: just make this an aggregate, and + # pick randomly from the different weapon generators + @weapon_types = t(:weapon_types) + + render json: @weapon_types.sample + end + + def weapon_axe + @axe_types = t(:axe_types) + + render json: @axe_types.sample + end + + def weapon_bow + @bow_types = t(:bow_types) + + render json: @bow_types.sample + end + + def weapon_club + @club_types = t(:club_types) + + render json: @club_types.sample + end + + def weapon_fist + @fist_weapon_types = t(:fist_weapon_types) + + render json: @fist_weapon_types.sample + end + + def weapon_flexible + @flexible_types = t(:flexible_weapon_types) + + render json: @flexible_types.sample + end + + def weapon_thrown + @thrown_types = t(:thrown_weapon_types) + + render json: @thrown_types.sample + end + + def weapon_polearm + @polearm_types = t(:polearm_types) + + render json: @polearm_types.sample + end + + def weapon_shortsword + @shortsword_types = t(:shortsword_types) + + render json: @shortsword_types.sample + end + + def weapon_sword + @sword_types = t(:sword_types) + + render json: @sword_types.sample + end +end diff --git a/app/controllers/generator_controller.rb b/app/controllers/generator_controller.rb deleted file mode 100644 index f8f74f44..00000000 --- a/app/controllers/generator_controller.rb +++ /dev/null @@ -1,219 +0,0 @@ -class GeneratorController < ApplicationController - - # Character - - def character_age - @upper_limit = 100 - @lower_limit = 2 - - render :json => rand(@upper_limit - @lower_limit + 1) + @lower_limit - end - - def character_bodytype - @possible_types = ["Delicate", "Flat", "Fragile", "Lean", "Lightly muscled", "Small-shouldered", "Thin", "Athletic", "Hourglass", "Bodybuilder", "Rectangular", "Muscular", "Thick-skinned", "Big-boned", "Round physique", "Pear-shaped"] - - render :json => @possible_types[rand(@possible_types.length)] - end - - def character_eyecolor - @possible_colors = ["Amber", "Black", "Arctic blue", "Baby blue", "China blue", "Cornflower blue", "Crystal blue", "Denim blue", "Electric blue", "Indigo", "Sapphire blue", "Sky blue", "Champagne brown", "Chestnut brown", "Chocolate brown", "Golden brown", "Honey brown", "Topaz", "Charcoal grey", "Cloudy grey", "Steel grey", "Chartreuse", "Emerald green", "Forest green", "Grass green", "Jade green", "Leaf green", "Sea green", "Hazel", "Amethyst", "Hyacinth", "Ultramarine blue", "One green, one blue", "One blue, one brown", "One brown, one blue", "One brown, one green", "Light violet", "Dark violet"] - - render :json => @possible_colors[rand(@possible_colors.length)] - end - - def character_facialhair - @possible_styles = ["Beard, long", "Beard, short", "Chin curtain", "Chinstrap", "Fu Manchu, short", "Fu Manchu, long", "Goatee", "Handlebar mustache", "Horseshoe mustache", "Mustache", "Mutton chops, thin", "Mutton chops, thick", "Neckbeard", "Pencil mustache", "Shenandoah", "Sideburns", "Soul patch", "Light stubble", "Thick stubble", "Toothbrush mustache", "Van Dyke beard", "Patchy beard", "Patchy mustache"] - - render :json => @possible_styles[rand(@possible_styles.length)] - end - - def character_haircolor - @possible_colors = ["Blonde", "Black", "Brown", "Red", "Bald", "White", "Grey", "Balding", "Greying", "Bleached", "Blue", "Green", "Purple", "Orange", "Auburn", "Strawberry", "Chestnut", "Dirty Blonde", "Rainbow", "Black tips", "Jet black", "Raven black"] - - render :json => @possible_colors[rand(@possible_colors.length)] - end - - def character_hairstyle - @possible_styles = ["Afro", "Bald", "Balding", "Bob cut", "Bowl cut", "Bouffant", "Braided", "Bun", "Butch", "Buzz cut", "Chignon", "Chonmage", "Comb over", "Cornrows", "Crew cut", "Dreadlocks", "Emo", "Fauxhawk", "Feathered", "Flattop", "Fringe", "Liberty Spikes", "Long hair, straight", "Long hair, curly", "Long hair, wavy", "Mohawk", "Mop-top", "Odango", "Pageboy", "Parted", "Pigtails", "Pixie cut", "Pompadour", "Ponytail", "Rattail", "Rocker", "Slicked back", "Spiky, short", "Spiky, long", "Short, curly", "Short, wavy", "Short, thin", "Short, straight"] - - render :json => @possible_styles[rand(@possible_styles.length)] - end - - def character_height - @upper_foot_limit = 6 - @lower_foot_limit = 2 - @upper_inch_limit = 11 - @lower_inch_limit = 0 - - render :json => [ - rand(@upper_foot_limit - @lower_foot_limit + 1) + @lower_foot_limit, - "'", - rand(@upper_inch_limit - @lower_inch_limit + 1) + @lower_inch_limit, - '"' - ].join - end - - def character_identifyingmark - @possible_marks = ["minor scar", "large scar", "mole", "fleshy growth", "tattoo", "discoloration"] - @possible_locations = ["left eye", "right eye", "left thigh", "right thigh", "left shin", "right shin", "left foot", "right foot", "big toe", "hip", "stomach", "lower back", "chest", "upper back", "left shoulder", "right shoulder", "left bicep", "right bicep", "left tricep", "right tricep", "left hand", "right hand", "pointer finger", "thumb", "neck", "scalp", "above lip", "nose", "left ear", "right ear", "forehead", "left cheek", "right cheek", "left temple", "right temple", "chin", "beneath chin"] - - render :json => [ - @possible_marks[rand(@possible_marks.length)], - @possible_locations[rand(@possible_locations.length)] - ].join(' on the ').capitalize - end - - def character_name - @male_first_names = ["James", "John", "Robert", "Michael", "William", "David", "Richard", "Charles", "Joseph", "Thomas", "Christopher", "Daniel", "Paul", "Mark", "Donald", "George", "Kenneth", "Steven", "Edward", "Brian", "Ronald", "Anthony", "Kevin", "Jason", "Matthew", "Gary", "Timothy", "Jose", "Larry", "Jeffrey", "Frank", "Scott", "Eric", "Stephen", "Andrew", "Raymond", "Gregory"] - @female_first_names = ["Mary", "Patricia", "Linda", "Barbara", "Elizabeth", "Jennifer", "Maria", "Susan", "Margaret", "Margret", "Dorothy", "Lisa", "Nancy", "Karen", "Betty", "Helen", "Sandra", "Donna", "Carol", "Ruth", "Sharon", "Michelle", "Laura", "Sarah", "Kimberly", "Deborah", "Jessica", "Shirley", "Cynthia", "Angela", "Melissa", "Brenda", "Amy", "Anna", "Rebecca", "Virginia", "Kathleen", "Pamela"] - @last_names = ["Smith", "Brown", "Lee", "Wilson", "Martin", "Patel", "Taylor", "Wong", "Campbell", "Williams", "Thompson", "Jones", "Johnson", "Miller", "Davis", "Garcia", "Rodriguez", "Martinez", "Anderson", "Jackson", "White", "Green", "Lee", "Harris", "Clark", "Lewis", "Robinson", "Walker", "Hall", "Young", "Allen", "Sanchez", "Wright", "King", "Scott", "Roberts", "Carter", "Phillips", "Evans", "Turner", "Torres", "Parker", "Collins", "Stewart", "Flores", "Morris", "Nguyen", "Murphy", "Rivera", "Cook", "Morgan", "Peterson", "Cooper", "Gomez", "Ward"] - - @all_first_names = [] + @male_first_names + @female_first_names - @all_last_names = [] + @last_names - - render :json => [ - @all_first_names[rand(@all_first_names.length)], - @all_last_names[rand(@all_last_names.length)] - ].join(' ') - end - - def character_race - @possible_races = ["Android", "Angel", "Animal", "Arachnoid", "Bird", "Construct", "Dark Elf", "Dwarf", "Elemental", "Elf", "Fairy", "Fey", "Genie", "Gnome", "Half-Dwarf", "Half-Elf", "Half-Orc", "Halfling", "Human", "Insectoid", "Orc", "Reptilian", "Robot", "Spirit", "Vampire", "Werewolf"] - - render :json => @possible_races[rand(@possible_races.length)] - end - - def character_skintone - @possible_tones = ["Albino", "Light", "Pale white", "Fair", "White", "Medium", "Olive", "Moderate brown", "Brown", "Dark brown", "Black"] - - render :json => @possible_tones[rand(@possible_tones.length)] - end - - def character_weight - @upper_limit = 240 - @lower_limit = 80 - - render :json => rand(@upper_limit - @lower_limit + 1) + @lower_limit - end - - # Location - - def location_name - @prefixes = ["New", "Los", "Fort", "City of", "El", "Saint", "Des", "Little", "Big", "North", "East", "South", "West", "Round", "The", "Broken", "Santa"] - @postfixes = ["Port", "City", "Grove", "Pines", "Falls", "Heights", "Oaks", "Rapids", "Valley", "Mountains", "Peaks", "Arbor", "Mesa", "Gardens", "Palms", "Beach", "Bend", "Ruins"] - @syllables = ["lo", "chi", "ca", "go", "hou", "ston", "nix", "pho", "an", "ant", "ton", "io", "san", "die", "dia", "dal", "las", "son", "vil", "pol", "ral", "polis", "na", "aus", "tin", "fran", "cis", "co", "col", "umb", "bus", "cha", "mem", "phis", "sea", "wor", "the", "tha", "den", "was", "bal", "ti", "mo", "ash", "wau", "kee", "ki", "ru", "lu", "cest", "pro", "ora", "ode", "mu", "ill", "ville", "vil"] - - @prefix_occurrence = 0.15 - @postfix_occurrence = 0.15 - @syllables_upper_limit = 4 - @syllables_lower_limit = 2 - - # Generate root name - @root_name = "" - syllables = rand(@syllables_upper_limit - @syllables_lower_limit + 1) + @syllables_lower_limit - syllables.times do |i| - @root_name = @root_name + @syllables[rand(@syllables.length)] - end - @root_name = @root_name.titleize - - # Add prefix/postfix - added = false - trigger = rand(100) - if trigger <= @prefix_occurrence * 100 - added = true - @root_name = @prefixes[rand(@prefixes.length)] + " " + @root_name - end - - trigger = rand(100) - if trigger <= @postfix_occurrence * 100 and not added - added = true - @root_name = @root_name + " " + @postfixes[rand(@postfixes.length)] - end - - render :json => @root_name - end - - # Equipment - - def equipment_armor - # TODO just make this an aggregate of armor and pick randomly from the different ones - render :json => {} - end - - def equipment_armor_shield - @shield_types = ["Greek aspis", "Buckler", "Heater shield", "Heraldic shield", "Leather shield", "Hide shield", "Hoplon shield", "Kite shield", "Scutum", "Targe"] - - render :json => @shield_types[rand(@shield_types.length)] - end - - def equipment_weapon - #TODO just make this an aggregate and pick randomly from the different weapon generators - @weapon_types = ["Bastard sword", "Battleaxe", "Bolas", "Bow & Arrow", "Bowstaff", "Brass knuckles", "Broom", "Chainsaw", "Club", "Dagger", "Darts", "Falchion", "Flail", "Gauntlet", "Glaive", "Greataxe", "Greatsword", "Halberd", "Handaxe", "Hand crossbow", "Heavy crossbow", "Javelin", "Kama", "Kukri", "Lance", "Longbow", "Longsword", "Madu", "Morningstar", "Net", "Nunchaku", "Pocket knife", "Quarterstaff", "Ranseur", "Rapier", "Repeating crossbow", "Sai", "Sap", "Scimitar", "Scythe", "Shortsword", "Shortbow", "Shortspear", "Shuriken", "Siangham", "Sickle", "Sling", "Spear", "Throwing axe", "Trident", "Warhammer", "Whip"] - - render :json => @weapon_types[rand(@weapon_types.length)] - end - - def equipment_weapon_axe - @axe_types = ["Bardiche", "Battleaxe", "Broadaxe", "Handaxe", "Hatchet", "Long-bearded axe", "Tomahawk"] - - render :json => @axe_types[rand(@axe_types.length)] - end - - def equipment_weapon_bow - @bow_types = ["Longbow", "Sling", "Blowgun", "Flatbow", "Composite bow", "Yumi", "Gungdo", "Shortbow", "Arbalest", "Crossbow", "Repeating crossbow"] - - render :json => @bow_types[rand(@bow_types.length)] - end - - def equipment_weapon_club - @club_types = ["Boomerang", "Frying pan", "Hammer", "Brick", "Mace", "Morningstar", "Sai", "Scepter", "Sledgehammer", "Lamp", "Glass bottle", "Warhammer", "Wrench", "Crowbar"] - - render :json => @club_types[rand(@club_types.length)] - end - - def equipment_weapon_fist - @fist_weapon_types = ["Bahh nakh, tiger claws", "Brass knuckles", "Cestus", "Deer horn knives", "Finger knife", "Gauntlets", "Katar", "Korean fan", "Madu, buckhorn stick", "Pata sword gauntlet", "Push dagger", "Roman scissor", "War fan", "Wind and fire wheels", "Emei daggers", "Large stone", "Brick"] - - render :json => @fist_weapon_types[rand(@fist_weapon_types.length)] - end - - def equipment_weapon_flexible - @flexible_types = ["Bullwhip", "Cat o' nine tails", "Chain whip", "Lasso", "Nunchaku", "Flail", "Meteor hammer"] - - render :json => @flexible_types[rand(@flexible_types.length)] - end - - def equipment_weapon_thrown - @thrown_types = ["Harpoon", "Bolas", "Javelin", "Pilum", "Woomera", "Angon", "Chakram", "Kunai", "Boomerang", "Throwing knife", "Thrown darts", "Swiss arrow", "Francisca", "Tomahawk", "Shuriken", "Stones"] - - render :json => @thrown_types[rand(@thrown_types.length)] - end - - def equipment_weapon_polearm - @polearm_types = ["Bo", "Taiji staff", "Quarterstaff", "Staff", "Spear", "Lance", "Pike", "Pitchfork", "Qiang", "Ranseur", "Spetum", "Swordstaff", "Trident", "Bardiche", "Bill", "Glaive", "Halberd", "Lochaber axe", "Naginata", "Partizan", "Scythe", "Voulge", "War scythe"] - - render :json => @polearm_types[rand(@polearm_types.length)] - end - - def equipment_weapon_shortsword - @shortsword_types = ["Dagger", "Fireplace poker", "Small sword", "Xiphos shortsword", "Aikuchi shortsword", "Kodachi shortsword", "Pinuti shortsword", "Wakizashi shortsword"] - - render :json => @shortsword_types[rand(@shortsword_types.length)] - end - - def equipment_weapon_sword - @sword_types = ["Cutlass", "Dao", "Dha", "Falchion", "Hunting sword", "Kukri", "Pulwar", "Sabre", "Scimitar", "Shamshir", "Talwar", "Epee", "Flamberge", "Longsword", "Ninjato", "Rapier", "Katana", "Claymore", "Dadao", "Executioner's sword", "Flambard", "Greatsword", "Nodachi", "Falcata", "Machete", "Yatagan"] - - render :json => @sword_types[rand(@sword_types.length)] - end - -end - - - - - - - - - diff --git a/app/controllers/languages_controller.rb b/app/controllers/languages_controller.rb index 01a1df51..eef2706c 100644 --- a/app/controllers/languages_controller.rb +++ b/app/controllers/languages_controller.rb @@ -1,16 +1,16 @@ +# Controller for the Language model class LanguagesController < ApplicationController - before_filter :create_anonymous_account_if_not_logged_in, :only => [:edit, :create, :update] - before_filter :require_ownership_of_language, :only => [:update, :edit, :destroy] - before_filter :hide_private_language, :only => [:show] + before_action :create_anonymous_account_if_not_logged_in, + only: [:edit, :create, :update] + + before_action :require_ownership_of_language, + only: [:update, :edit, :destroy] + + before_action :hide_private_language, only: [:show] def index - @languages = Language.where(user_id: session[:user]) - - if @languages.size == 0 - @languages = [] - end - - @languages = @languages.sort { |a, b| a.name.downcase <=> b.name.downcase } + @languages = Language.where(user_id: session[:user]) + .order(:name).presence || [] respond_to do |format| format.html # index.html.erb @@ -41,59 +41,72 @@ class LanguagesController < ApplicationController end def create - @language = Language.new(language_params) - @language.user_id = session[:user] - @language.universe = Universe.where(user_id: session[:user]).where(name: params[:language][:universe].strip).first + @language = create_language_from_params + # rubocop:disable LineLength respond_to do |format| if @language.save - format.html { redirect_to @language, notice: 'Language was successfully created.' } + notice = t :create_success, model_name: Language.model_name.human + format.html { redirect_to @language, notice: notice } format.json { render json: @language, status: :created, location: @language } else - format.html { render action: "new" } + format.html { render action: 'new' } format.json { render json: @language.errors, status: :unprocessable_entity } end end + # rubocop:enable LineLength end def update - @language = Language.find(params[:id]) - if params[:language][:universe].empty? - params[:language][:universe] = nil - else - params[:language][:universe] = Universe.where(user_id: session[:user]).where(name: params[:language][:universe].strip).first - end + @language = update_language_from_params respond_to do |format| if @language.update_attributes(language_params) - format.html { redirect_to @language, notice: 'Language was successfully updated.' } + notice = t :update_success, model_name: Language.model_name.human + format.html { redirect_to @language, notice: notice } format.json { head :no_content } else - format.html { render action: "edit" } + format.html { render action: 'edit' } format.json { render json: @language.errors, status: :unprocessable_entity } end end end def destroy - @language = Language.find(params[:id]) - @language.destroy + @language = Language.find(params[:id]).destroy respond_to do |format| format.html { redirect_to language_list_url } format.json { head :no_content } end end - + private - def language_params - params.require(:language).permit( - :user_id, :universe_id, - :name, - :words, - :established_year, :established_location, - :characters, :locations, - :notes) - end - + + def language_params + params.require(:language).permit( + :user_id, :universe_id, + :name, + :words, + :established_year, :established_location, + :characters, :locations, + :notes) + end + + def update_language_from_params + params[:language][:universe] = universe_from_language_params + Language.find(params[:id]) + end + + def create_language_from_params + language = Language.create(language_params) + language.user_id = session[:user] + language.universe = universe_from_language_params + language + end + + def universe_from_language_params + Universe.where(user_id: session[:user], + name: params[:language][:universe].strip).first.presence + end end diff --git a/app/controllers/locations_controller.rb b/app/controllers/locations_controller.rb index 1ccfdae3..c30441d4 100644 --- a/app/controllers/locations_controller.rb +++ b/app/controllers/locations_controller.rb @@ -1,16 +1,16 @@ +# Controller for the Location model class LocationsController < ApplicationController - before_filter :create_anonymous_account_if_not_logged_in, :only => [:edit, :create, :update] - before_filter :require_ownership_of_location, :only => [:update, :edit, :destroy] - before_filter :hide_private_location, :only => [:show] + before_action :create_anonymous_account_if_not_logged_in, + only: [:edit, :create, :update] + + before_action :require_ownership_of_location, + only: [:update, :edit, :destroy] + + before_action :hide_private_location, only: [:show] def index @locations = Location.where(user_id: session[:user]) - - if @locations.size == 0 - @locations = [] - end - - @locations = @locations.sort { |a, b| a.name.downcase <=> b.name.downcase } + .order(:name).presence || [] respond_to do |format| format.html # index.html.erb @@ -40,61 +40,55 @@ class LocationsController < ApplicationController @location = Location.find(params[:id]) end + # rubocop:disable LineLength def create - @location = Location.new(location_params) - @location.user_id = session[:user] - @location.universe = Universe.where(user_id: session[:user]).where(name: params[:location][:universe].strip).first - - notice = '' + @location = create_location_from_params respond_to do |format| begin if @location.save - if notice == '' - notice = 'Location was successfully created.' - end - + notice = t(:create_success, model_name: Location.model_name.human) if notice.blank? format.html { redirect_to @location, notice: notice } format.json { render json: @location, status: :created, location: @location } else - format.html { render action: "new" } + format.html { render action: 'new' } format.json { render json: @location.errors, status: :unprocessable_entity } end rescue Errno::ECONNRESET - # Connection was reset, probably because of the file upload. Try again without it. + # Connection was reset, probably because of the file upload. + # Try again without it. @location.map = nil - notice = 'Location was created, but your map did not upload. Please try again.' + notice = t :location_create_upload_map_error retry end end end + # rubocop:enable LineLength + # rubocop:disable LineLength def update - @location = Location.find(params[:id]) - - if params[:location][:universe].empty? - params[:location][:universe] = nil - else - params[:location][:universe] = Universe.where(user_id: session[:user]).where(name: params[:location][:universe].strip).first - end + @location = update_location_from_params respond_to do |format| begin if @location.update_attributes(location_params) - format.html { redirect_to @location, notice: 'Location was successfully updated.' } + notice = t :update_success, model_name: Location.model_name.human if notice.blank? + format.html { redirect_to @location, notice: notice } format.json { head :no_content } else - format.html { render action: "edit" } + format.html { render action: 'edit' } format.json { render json: @location.errors, status: :unprocessable_entity } end rescue Errno::ECONNRESET - # Connection was reset, probably because of the file upload. Try again without it. + # Connection was reset, probably because of the file upload. + # Try again without it. @location.map = nil - notice = 'Location was created, but your map did not upload. Please try again.' + notice = t :location_update_upload_map_error retry end end end + # rubocop:enable LineLength def destroy @location = Location.find(params[:id]) @@ -105,17 +99,31 @@ class LocationsController < ApplicationController format.json { head :no_content } end end - + private - def location_params - params.require(:location).permit( - :universe_id, :user_id, - :name, :type_of, :description, - :map, - :population, :currency, :motto, - :capital, :largest_city, :notable_cities, - :area, :crops, :located_at, - :stablishment_year, :notable_wars, - :notes, :private_notes) - end + + def location_params + params.require(:location).permit( + :universe_id, :user_id, :name, :type_of, :description, :map, + :population, :currency, :motto, :capital, :largest_city, :notable_cities, + :area, :crops, :located_at, :stablishment_year, :notable_wars, + :notes, :private_notes) + end + + def create_location_from_params + location = Location.new(location_params) + location.user_id = session[:user] + location.universe = universe_from_location_params + location + end + + def update_location_from_params + params[:location][:universe] = universe_from_location_params + Location.find(params[:id]) + end + + def universe_from_location_params + Universe.where(user_id: session[:user], + name: params[:location][:universe].strip).first + end end diff --git a/app/controllers/locations_generator_controller.rb b/app/controllers/locations_generator_controller.rb new file mode 100644 index 00000000..21d2cfe4 --- /dev/null +++ b/app/controllers/locations_generator_controller.rb @@ -0,0 +1,38 @@ +# Generates random Location values +class LocationsGeneratorController < ApplicationController + before_action :load_common_fields + + def name + @root_name = add_fixes_to base_name + + render json: @root_name + end + + private + + def base_name + @syllables + .sample(rand(@syllables_lower_limit...@syllables_upper_limit)) + .join + end + + def add_fixes_to(base) + if rand <= @prefix_occurrence + return @prefixes.sample + ' ' + base + elsif rand <= @postfix_occurrence + return base + ' ' + @postfixes.sample + else + return base + end + end + + def load_common_fields + @prefix_occurrence = 0.15 + @postfix_occurrence = 0.15 + @syllables_upper_limit = 4 + @syllables_lower_limit = 2 + @prefixes = t(:location_name_prefixes) + @postfixes = t(:location_name_suffixes) + @syllables = t(:location_name_syllables) + end +end diff --git a/app/controllers/magic_controller.rb b/app/controllers/magic_controller.rb index c0c22f6b..099d10f4 100644 --- a/app/controllers/magic_controller.rb +++ b/app/controllers/magic_controller.rb @@ -1,16 +1,15 @@ +# Controller for the Magic model class MagicController < ApplicationController - before_filter :create_anonymous_account_if_not_logged_in, :only => [:edit, :create, :update] - before_filter :require_ownership_of_magic, :only => [:edit, :destroy] - before_filter :hide_private_magic, :only => [:show] + before_action :create_anonymous_account_if_not_logged_in, + only: [:edit, :create, :update] + + before_action :require_ownership_of_magic, + only: [:edit, :destroy] + + before_action :hide_private_magic, only: [:show] def index - @magics = Magic.where(user_id: session[:user]) - - if @magics.size == 0 - @magics = [] - end - - @magics = @magics.sort { |a, b| a.name.downcase <=> b.name.downcase } + @magics = Magic.where(user_id: session[:user]).order(:name).presence || [] respond_to do |format| format.html # index.html.erb @@ -41,16 +40,15 @@ class MagicController < ApplicationController end def create - @magic = Magic.new(magic_params) - @magic.user_id = session[:user] - @magic.universe = Universe.where(user_id: session[:user]).where(name: params[:magic][:universe].strip).first + @magic = create_magic_from_params respond_to do |format| if @magic.save - format.html { redirect_to @magic, notice: 'Magic was successfully created.' } + notice = t :create_success, model_name: Magic.model_name.human + format.html { redirect_to @magic, notice: notice } format.json { render json: @magic, status: :created, location: @magic } else - format.html { render action: "new" } + format.html { render action: 'new' } format.json { render json: @magic.errors, status: :unprocessable_entity } end end @@ -59,18 +57,13 @@ class MagicController < ApplicationController def update @magic = Magic.find(params[:id]) - if params[:magic][:universe].empty? - params[:magic][:universe] = nil - else - params[:magic][:universe] = Universe.where(user_id: session[:user]).where(name: params[:magic][:universe].strip).first - end - respond_to do |format| if @magic.update_attributes(magic_params) - format.html { redirect_to @magic, notice: 'Magic was successfully updated.' } + notice = t :update_success, model_name: Magic.model_name.human + format.html { redirect_to @magic, notice: notice } format.json { head :no_content } else - format.html { render action: "edit" } + format.html { render action: 'edit' } format.json { render json: @magic.errors, status: :unprocessable_entity } end end @@ -85,16 +78,29 @@ class MagicController < ApplicationController format.json { head :no_content } end end - + private - def magic_params - params.require(:magic).permit( - :universe_id, :user_id, - :name, :type_of, - :manifestation, :symptoms, - :element, :diety, - :harmfulness, :helpfulness, :neutralness, - :resource, :skill_level, :limitations, - :notes, :private_notes) - end + + def magic_params + params.require(:magic).permit( + :universe_id, :user_id, + :name, :type_of, + :manifestation, :symptoms, + :element, :diety, + :harmfulness, :helpfulness, :neutralness, + :resource, :skill_level, :limitations, + :notes, :private_notes) + end + + def create_magic_from_params + magic = Magic.new(magic_params) + magic.user_id = session[:user] + magic.universe = universe_from_magic_params + magic + end + + def universe_from_magic_params + Universe.where(user_id: session[:user], + name: params[:magic][:universe].strip).first + end end diff --git a/app/controllers/main_controller.rb b/app/controllers/main_controller.rb index 45e7156e..6196420f 100644 --- a/app/controllers/main_controller.rb +++ b/app/controllers/main_controller.rb @@ -1,12 +1,11 @@ +# Controller for top-level pages of the site that do not have +# an associated model class MainController < ApplicationController - before_filter :redirect_if_not_logged_in, :only => [:dashboard] - + before_action :redirect_if_not_logged_in, only: [:dashboard] def index - if session && session[:user] - redirect_to :dashboard - end + redirect_to :dashboard if session && session[:user] end - + def comingsoon end @@ -15,16 +14,17 @@ class MainController < ApplicationController def attribution end - + def dashboard - @characters = Character.where(user_id: session[:user]) - @equipment = Equipment.where(user_id: session[:user]) - @languages = Language.where(user_id: session[:user]) - @locations = Location.where(user_id: session[:user]) - @magics = Magic.where(user_id: session[:user]) - @universes = Universe.where(user_id: session[:user]) - - @things = [ @characters.length, @equipment.length, @languages.length, - @locations.length, @magics.length, @universes.length ].sum + user = User.where(id: session[:user]).first + + @characters = user.characters + @equipment = user.equipment + @languages = user.languages + @locations = user.locations + @magics = user.magics + @universes = user.universes + + @things = user.content_count end end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 021b1cd1..0f7c0311 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -1,3 +1,4 @@ +# Controller for user Sessions class SessionsController < ApplicationController # GET /sessions/new # GET /sessions/new.json @@ -13,22 +14,19 @@ class SessionsController < ApplicationController # POST /sessions # POST /sessions.json def create - login = Session.new(session_params) - hash = SessionsController.create_password_digest login.username, login.password - user = User.where(name: login.username, password: hash) - if user.length < 1 - redirect_to login_path, notice: 'Username or password incorrect' + user = user_from_params + + if user.nil? + redirect_to login_path, notice: t(:username_password_incorrect) return end - - session[:user] = user[0].id - session.delete(:anon_user) + + build_session_for user respond_to do |format| - format.html { redirect_to dashboard_path, notice: 'Login successful.' } + format.html { redirect_to dashboard_path, notice: t(:login_successful) } format.json { render json: true, status: :created } end - end # GET /logout @@ -37,18 +35,32 @@ class SessionsController < ApplicationController session.delete(:anon_user) respond_to do |format| - format.html { redirect_to homepage_path, notice: 'Logged out!' } + format.html { redirect_to homepage_path, notice: t(:logged_out) } format.json { head :no_content } end end - + def self.create_password_digest(username, password) require 'digest' - return Digest::MD5.hexdigest(username + "'s password IS... " + password + " (lol!)") + Digest::MD5.hexdigest( + username + "'s password IS... " + password + ' (lol!)') end - + private - def session_params - params.require(:session).permit(:username, :password) - end + + def user_from_params + login = Session.new(session_params) + hash = SessionsController.create_password_digest(login.username, + login.password) + User.where(name: login.username, password: hash).first + end + + def build_session_for(user) + session[:user] = user.id + session.delete(:anon_user) + end + + def session_params + params.require(:session).permit(:username, :password) + end end diff --git a/app/controllers/universes_controller.rb b/app/controllers/universes_controller.rb index 8e6b4934..eb1ab452 100644 --- a/app/controllers/universes_controller.rb +++ b/app/controllers/universes_controller.rb @@ -1,16 +1,15 @@ +# Controller for the Universe model class UniversesController < ApplicationController - before_filter :create_anonymous_account_if_not_logged_in, :only => [:edit, :create, :update] - before_filter :require_ownership_of_universe, :only => [:edit, :update, :destroy] - before_filter :hide_private_universe, :only => [:show] + before_action :create_anonymous_account_if_not_logged_in, + only: [:edit, :create, :update] + + before_action :require_ownership_of_universe, + only: [:edit, :update, :destroy] + + before_action :hide_private_universe, only: [:show] def index - @universes = Universe.where(user_id: session[:user]) - - if @universes.size == 0 - @universes = [] - end - - @universes = @universes.sort { |a, b| a.name.downcase <=> b.name.downcase } + @universes = Universe.where(user_id: session[:user]).order(:name).presence || [] respond_to do |format| format.html # index.html.erb @@ -46,10 +45,11 @@ class UniversesController < ApplicationController respond_to do |format| if @universe.save - format.html { redirect_to @universe, notice: 'Universe was successfully created.' } + notice = t :create_success, model_name: Universe.model_name.human + format.html { redirect_to @universe, notice: notice } format.json { render json: @universe, status: :created, location: @universe } else - format.html { render action: "new" } + format.html { render action: 'new' } format.json { render json: @universe.errors, status: :unprocessable_entity } end end @@ -60,10 +60,11 @@ class UniversesController < ApplicationController respond_to do |format| if @universe.update_attributes(universe_params) - format.html { redirect_to @universe, notice: 'Universe was successfully updated.' } + notice = t :update_success, model_name: Universe.model_name.human + format.html { redirect_to @universe, notice: notice } format.json { head :no_content } else - format.html { render action: "edit" } + format.html { render action: 'edit' } format.json { render json: @universe.errors, status: :unprocessable_entity } end end @@ -78,14 +79,15 @@ class UniversesController < ApplicationController format.json { head :no_content } end end - + private - def universe_params - params.require(:universe).permit( - :user_id, - :name, :description, - :history, - :privacy, - :notes, :private_notes) - end + + def universe_params + params.require(:universe).permit( + :user_id, + :name, :description, + :history, + :privacy, + :notes, :private_notes) + end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1824d5dd..31b08532 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,6 +1,7 @@ +# Controller for the User model class UsersController < ApplicationController - before_filter :redirect_if_not_logged_in, :only => [:edit, :update] - + before_action :redirect_if_not_logged_in, only: [:edit, :update] + # GET /users/new # GET /users/new.json def new @@ -21,22 +22,22 @@ class UsersController < ApplicationController # POST /users.json def create @user = User.new(user_params) + respond_to do |format| if @user.save - session[:user] = @user.id - format.html { redirect_to homepage_path, notice: 'User was successfully created.' } + log_in @user + notice = t(:create_success, model_name: User.model_name.human) + format.html { redirect_to homepage_path, notice: notice } format.json { render json: @user, status: :created } else - format.html { render action: "new" } + format.html { render action: 'new' } format.json { render json: @user.errors, status: :unprocessable_entity } end end end def anonymous_login - # todo guarantee anonymous id is random (or just let db assign it?) - id = rand(10000000).to_s + rand(10000000).to_s - @user = User.new(:name => 'Anonymous-' + id.to_s, :email => id.to_s + '@localhost', :password => id.to_s) + @user = create_anonymous_user respond_to do |format| if @user.save @@ -45,7 +46,7 @@ class UsersController < ApplicationController format.html { redirect_to dashboard_path } format.json { render json: @user, status: :created } else - format.html { render action: "new" } + format.html { render action: 'new' } format.json { render json: @user.errors, status: :unprocessable_entity } end end @@ -62,17 +63,18 @@ class UsersController < ApplicationController format.html { redirect_to homepage_path, notice: 'Successfully updated.' } format.json { head :no_content } else - format.html { render action: "edit" } + format.html { render action: 'edit' } format.json { render json: @user.errors, status: :unprocessable_entity } end end end - + def anonymous end private - def user_params - params.require(:user).permit(:name, :password, :email) - end + + def user_params + params.require(:user).permit(:name, :password, :email) + end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 789d7968..bab831a5 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,44 +1,40 @@ +# Helps generate HTML constructs for object owned by the user module ApplicationHelper + # Will output a link to the item if it exists and is owned by the + # current logged-in user. Otherwise will just print a text title + def link_if_present(name, type) + return name unless session[:user] + userid = User.where(id: session[:user]).first.id - # Will output a link to the item if it exists and is owned by the current logged-in user - # Otherwise will just print a text title - def link_if_present(name, type) - if not session[:user] - return name - end + type = type.downcase + result = find_by_name_and_type name, type, userid - result = nil - type = type.downcase + result.nil? ? name : link_to(name, result) + end - case type - when "character" - result = Character.where(:name => name, :user_id => session[:user]) - when "equipment" - result = Equipment.where(:name => name, :user_id => session[:user]) - when "language" - result = Language.where(:name => name, :user_id => session[:user]) - when "location" - result = Location.where(:name => name, :user_id => session[:user]) - when "magic" - result = Magic.where(:name => name, :user_id => session[:user]) - # Plot stuff - when "universe" - result = Universe.where(:name => name, :user_id => session[:user]) - end + def find_by_name_and_type(name, type, userid) + model = find_model_by_type type - if result and result.length > 0 - return link_to name, result.first - else - return name - end - end + model.where(name: name, user_id: userid).first unless model.nil? + end - def print_property(title, value, type = "") - return unless value and value.length > 0 + def find_model_by_type(type) # rubocop:disable Metrics/CyclomaticComplexity + case type + when 'character' then return Character + when 'equipment' then return Equipment + when 'language' then return Language + when 'location' then return Location + when 'magic' then return Magic + when 'universe' then return Universe + end + end - return [ - "
", title, ":
", - "
", simple_format(link_if_present(value, type)), "
" - ].join("").to_s.html_safe - end + def print_property(title, value, type = '') + return unless value && value.length > 0 + + [ + '
', title, ':
', + '
', simple_format(link_if_present(value, type)), '
' + ].join('').to_s.html_safe + end end diff --git a/app/helpers/characters_helper.rb b/app/helpers/characters_helper.rb deleted file mode 100644 index 8acbd185..00000000 --- a/app/helpers/characters_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module CharactersHelper -end diff --git a/app/helpers/equipment_helper.rb b/app/helpers/equipment_helper.rb deleted file mode 100644 index b3ce05f9..00000000 --- a/app/helpers/equipment_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module EquipmentHelper -end diff --git a/app/helpers/form_helper.rb b/app/helpers/form_helper.rb index 2351778d..cd14db89 100644 --- a/app/helpers/form_helper.rb +++ b/app/helpers/form_helper.rb @@ -1,17 +1,18 @@ +# Helps to generate forms and buttons module FormHelper def generate_form_row_for(form_handler, field, label_override = nil, toolbox = {}) label = (label_override.nil? ? field : label_override.titleize) [ '
', - '
', - form_handler.label(label, :class => 'control-label'), - '
', - '
', - form_handler.text_field(field, :class => 'form-control'), - '
', - '
', - toolbox.map { |config| toolbox_button_for(config) }, - '
', + '
', + form_handler.label(label, class: 'control-label'), + '
', + '
', + form_handler.text_field(field, class: 'form-control'), + '
', + '
', + toolbox.map { |config| toolbox_button_for(config) }, + '
', '
' ].join("\n").html_safe end @@ -23,10 +24,9 @@ module FormHelper else [ "" + "", + '' ].join("\n").html_safe end end - end diff --git a/app/helpers/generator_helper.rb b/app/helpers/generator_helper.rb deleted file mode 100644 index 5dc633db..00000000 --- a/app/helpers/generator_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module GeneratorHelper -end diff --git a/app/helpers/html_helper.rb b/app/helpers/html_helper.rb index feb06e80..8a4f5f37 100644 --- a/app/helpers/html_helper.rb +++ b/app/helpers/html_helper.rb @@ -1,3 +1,4 @@ +# Helps generate small HTML constructs module HtmlHelper def picker_from_type(content_type) case content_type @@ -18,15 +19,16 @@ module HtmlHelper return if content_array.length == 0 [ '', - '', - '', + '', + '', '' ].join("\n").html_safe end @@ -34,21 +36,20 @@ module HtmlHelper def character_picker generate_picker_code_for(my_characters, 'user') end - + def universe_picker generate_picker_code_for(my_universes, 'globe') end - + def equipment_picker generate_picker_code_for(my_equipment, 'gift') end - + def language_picker generate_picker_code_for(my_languages, 'comment') end - + def location_picker generate_picker_code_for(my_locations, 'road') end - end diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb deleted file mode 100644 index 24686681..00000000 --- a/app/helpers/languages_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module LanguagesHelper -end diff --git a/app/helpers/main_helper.rb b/app/helpers/main_helper.rb deleted file mode 100644 index 826effed..00000000 --- a/app/helpers/main_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module MainHelper -end diff --git a/app/helpers/my_content_helper.rb b/app/helpers/my_content_helper.rb index ce5c73c3..df5209e2 100644 --- a/app/helpers/my_content_helper.rb +++ b/app/helpers/my_content_helper.rb @@ -1,21 +1,22 @@ +# Helps to get content owned by the current user module MyContentHelper def my_characters - return Character.where(user_id: session[:user]) + Character.where(user_id: session[:user]) end def my_universes - return Universe.where(user_id: session[:user]) + Universe.where(user_id: session[:user]) end - + def my_equipment - return Equipment.where(user_id: session[:user]) + Equipment.where(user_id: session[:user]) end - + def my_languages - return Language.where(user_id: session[:user]) + Language.where(user_id: session[:user]) end - + def my_locations - return Location.where(user_id: session[:user]) + Location.where(user_id: session[:user]) end end diff --git a/app/helpers/sessions_helper.rb b/app/helpers/sessions_helper.rb deleted file mode 100644 index 309f8b2e..00000000 --- a/app/helpers/sessions_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module SessionsHelper -end diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb deleted file mode 100644 index 2310a240..00000000 --- a/app/helpers/users_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module UsersHelper -end diff --git a/app/models/character.rb b/app/models/character.rb index 88814168..9e819311 100644 --- a/app/models/character.rb +++ b/app/models/character.rb @@ -1,6 +1,21 @@ +## +# = char-ac-ter +# == /'kerekter/ +# _noun_ +# +# 1. a person in a User's story. +# +# exists within a Universe. class Character < ActiveRecord::Base - validates_presence_of :name - + include Comparable + include NilsBlankUniverse + + validates :name, presence: true + belongs_to :user belongs_to :universe + + def <=>(other) + name.downcase <=> other.name.downcase + end end diff --git a/app/models/concerns/nils_blank_universe.rb b/app/models/concerns/nils_blank_universe.rb new file mode 100644 index 00000000..80b4b69c --- /dev/null +++ b/app/models/concerns/nils_blank_universe.rb @@ -0,0 +1,14 @@ +require 'active_support/concern' + +# Model will set its Universe attribute to nil if the string is blank +module NilsBlankUniverse + extend ActiveSupport::Concern + + included do + before_save :nil_blank_universe + end + + def nil_blank_universe + self.universe = nil if blank? + end +end diff --git a/app/models/equipment.rb b/app/models/equipment.rb index 78783cd2..01cec053 100644 --- a/app/models/equipment.rb +++ b/app/models/equipment.rb @@ -1,6 +1,21 @@ +## +# = e-quip-ment +# == /e'kwipment/ +# _noun_ +# +# 1. the necessary items for a particular purpose. +# +# exists within a Universe. class Equipment < ActiveRecord::Base - validates_presence_of :name - + include Comparable + include NilsBlankUniverse + + validates :name, presence: true + belongs_to :user belongs_to :universe + + def <=>(other) + name.downcase <=> other.name.downcase + end end diff --git a/app/models/language.rb b/app/models/language.rb index 6cf232b8..96953ece 100644 --- a/app/models/language.rb +++ b/app/models/language.rb @@ -1,6 +1,17 @@ +## +# = lang-guage +# == /'laNGgqwij/ +# _noun_ +# +# 1. the method of communication, either spoken or written, consisting of the +# use of words in a structured and conventional way. +# +# spoken within a Universe class Language < ActiveRecord::Base - validates_presence_of :name - + include NilsBlankUniverse + + validates :name, presence: true + belongs_to :user belongs_to :universe end diff --git a/app/models/location.rb b/app/models/location.rb index 1506f04c..baa8dbcf 100644 --- a/app/models/location.rb +++ b/app/models/location.rb @@ -1,8 +1,19 @@ +## +# = lo-ca-tion +# == /lo'kaSH(e)n/ +# _noun_ +# +# 1. a particular place or position +# +# exists within a Universe class Location < ActiveRecord::Base - has_attached_file :map, :styles => { :original => "1920x1080>", :thumb => "200x200>" } - validates_attachment_content_type :map, :content_type => /\Aimage\/.*\Z/ - validates_presence_of :name - + include NilsBlankUniverse + + has_attached_file :map, styles: { original: '1920x1080>', thumb: '200x200>' } + validates_attachment_content_type :map, content_type: /\Aimage\/.*\Z/ + + validates :name, presence: true + belongs_to :user belongs_to :universe end diff --git a/app/models/magic.rb b/app/models/magic.rb index 7f47797e..3ff30f4d 100644 --- a/app/models/magic.rb +++ b/app/models/magic.rb @@ -1,6 +1,19 @@ +## +# = mag-ic +# == /'majik/ +# _noun_ +# +# 1. the power of apparently influencing the course of events by using +# mysterious or supernatural forces. +# +# used within a universe +# +# "do you believe in magic?" class Magic < ActiveRecord::Base - validates_presence_of :name - + include NilsBlankUniverse + + validates :name, presence: true + belongs_to :user belongs_to :universe end diff --git a/app/models/session.rb b/app/models/session.rb index 619022a7..ed10cfd7 100644 --- a/app/models/session.rb +++ b/app/models/session.rb @@ -1,3 +1,6 @@ +## +# A currently-logged-in User class Session < ActiveRecord::Base - validates_presence_of :username, :password + validates :username, presence: true + validates :password, presence: true end diff --git a/app/models/universe.rb b/app/models/universe.rb index 38c6b810..bf5b57c3 100644 --- a/app/models/universe.rb +++ b/app/models/universe.rb @@ -1,20 +1,27 @@ +## +# = u-ni-verse +# == /'yoone,vers/ +# +# 1. a particular sphere of activity, interest, or experience +# +# contains all canonically-related content created by Users class Universe < ActiveRecord::Base - validates_presence_of :name - + validates :name, presence: true + belongs_to :user has_many :characters has_many :equipment has_many :languages has_many :locations has_many :magics - + def content_count [ characters.length, equipment.length, languages.length, locations.length, - magics.length, + magics.length ].sum end end diff --git a/app/models/user.rb b/app/models/user.rb index edb31440..d5d9274a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,6 +1,10 @@ +## +# a person using the Indent web application. Owns all other content. class User < ActiveRecord::Base - validates_presence_of :name, :password, :email - + validates :name, presence: true + validates :password, presence: true + validates :email, presence: true + before_save :hash_password has_many :characters @@ -9,30 +13,31 @@ class User < ActiveRecord::Base has_many :locations has_many :magics has_many :universes - + def hash_password require 'digest' - self.password = Digest::MD5.hexdigest(self.name + "'s password IS... " + self.password + " (lol!)") + self.password = Digest::MD5.hexdigest( + name + "'s password IS... " + password + ' (lol!)') end - + def content { - :characters => characters, - :equipment => equipment, - :languages => languages, - :locations => locations, - :magics => magics, - :universes => universes + characters: characters, + equipment: equipment, + languages: languages, + locations: locations, + magics: magics, + universes: universes } end - + def content_count [ - characters.length, - equipment.length, - languages.length, - locations.length, - magics.length, + characters.length, + equipment.length, + languages.length, + locations.length, + magics.length, universes.length ].sum end diff --git a/app/views/characters/index.html.erb b/app/views/characters/index.html.erb index 0a3e9f4f..af6bc20e 100644 --- a/app/views/characters/index.html.erb +++ b/app/views/characters/index.html.erb @@ -5,7 +5,7 @@

Your characters <% if Universe.where(user_id: session[:user]).length > 0 %> - from <%= universe_filter %> + from <%= render 'universes/picker' %> <% end %>

diff --git a/app/views/equipment/index.html.erb b/app/views/equipment/index.html.erb index 613a750b..f873c381 100644 --- a/app/views/equipment/index.html.erb +++ b/app/views/equipment/index.html.erb @@ -3,7 +3,7 @@

Your equipment <% if false and Universe.where(user_id: session[:user]).length > 0 %> - from <%= universe_filter %> + from <%= render 'universes/picker' %> <% end %>

diff --git a/app/views/languages/index.html.erb b/app/views/languages/index.html.erb index 8ef3b6d8..05ef4237 100644 --- a/app/views/languages/index.html.erb +++ b/app/views/languages/index.html.erb @@ -4,7 +4,7 @@

Languages <% if false and Universe.where(user_id: session[:user]).length > 0 %> - spoken in <%= universe_filter %> + spoken in <%= render 'universes/picker' %> <% end %>

diff --git a/app/views/locations/index.html.erb b/app/views/locations/index.html.erb index e25c8c2c..f19b53fe 100644 --- a/app/views/locations/index.html.erb +++ b/app/views/locations/index.html.erb @@ -8,7 +8,7 @@

Your locations <% if false and Universe.where(user_id: session[:user]).length > 0 %> - from <%= universe_filter %> + from <%= render 'universes/picker' %> <% end %>

diff --git a/app/views/magic/index.html.erb b/app/views/magic/index.html.erb index ae92d212..4e13f519 100644 --- a/app/views/magic/index.html.erb +++ b/app/views/magic/index.html.erb @@ -4,7 +4,7 @@

Magic <% if false and Universe.where(user_id: session[:user]).length > 0 %> - from <%= universe_filter %> + from <%= render 'universes/picker' %> <% end %>

diff --git a/app/views/universes/_picker.html.erb b/app/views/universes/_picker.html.erb new file mode 100644 index 00000000..8d438e77 --- /dev/null +++ b/app/views/universes/_picker.html.erb @@ -0,0 +1,12 @@ + + + + diff --git a/bin/rails b/bin/rails index 7feb6a30..b82341c9 100755 --- a/bin/rails +++ b/bin/rails @@ -1,6 +1,6 @@ #!/usr/bin/env ruby begin - load File.expand_path("../spring", __FILE__) + load File.expand_path('../spring', __FILE__) rescue LoadError end APP_PATH = File.expand_path('../../config/application', __FILE__) diff --git a/bin/rake b/bin/rake index 8017a027..2e9ece45 100755 --- a/bin/rake +++ b/bin/rake @@ -1,6 +1,6 @@ #!/usr/bin/env ruby begin - load File.expand_path("../spring", __FILE__) + load File.expand_path('../spring', __FILE__) rescue LoadError end require_relative '../config/boot' diff --git a/bin/spring b/bin/spring index 253ec37c..ec62a658 100755 --- a/bin/spring +++ b/bin/spring @@ -4,15 +4,15 @@ # It gets overwritten when you run the `spring binstub` command unless defined?(Spring) - require "rubygems" - require "bundler" + require 'rubygems' + require 'bundler' if match = Bundler.default_lockfile.read.match(/^GEM$.*?^ spring \((.*?)\)$.*?^$/m) - ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR) - ENV["GEM_HOME"] = "" + ENV['GEM_PATH'] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR) + ENV['GEM_HOME'] = '' Gem.paths = ENV - gem "spring", match[1] - require "spring/binstub" + gem 'spring', match[1] + require 'spring/binstub' end end diff --git a/config/application.rb b/config/application.rb index 42446113..9019ef92 100644 --- a/config/application.rb +++ b/config/application.rb @@ -8,16 +8,22 @@ Bundler.require(*Rails.groups) module PlanCharacters class Application < Rails::Application - # Settings in config/environments/* take precedence over those specified here. + # Settings in config/environments/* take precedence over those + # specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. - # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. - # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # Set Time.zone default to the specified zone and make Active Record auto- + # convert to this zone. Run "rake -D time" for a list of tasks for finding + # time zone names. Default is UTC. + # # config.time_zone = 'Central Time (US & Canada)' - # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. - # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # The default locale is :en and all translations + # from config/locales/*.rb,yml are auto loaded. + # + # config.i18n.load_path += Dir[Rails.root.join( + # 'my', 'locales', '*.{rb,yml}').to_s] # config.i18n.default_locale = :de end end diff --git a/config/environments/development.rb b/config/environments/development.rb index 051d4065..cb6a141c 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -28,13 +28,12 @@ PlanCharacters::Application.configure do # DEVELOPMENT S3 settings for Paperclip uploads ON DEVELOPMENT config.paperclip_defaults = { - :storage => :s3, - :s3_protocol => 'http', - :s3_credentials => { - :bucket => ENV['AWS_BUCKET'], - :access_key_id => ENV['AWS_ACCESS_KEY_ID'], - :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] + storage: :s3, + s3_protocol: 'http', + s3_credentials: { + bucket: ENV['AWS_BUCKET'], + access_key_id: ENV['AWS_ACCESS_KEY_ID'], + secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] } } - end diff --git a/config/environments/production.rb b/config/environments/production.rb index 1f3dabfe..c6316329 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -29,7 +29,8 @@ Rails.application.configure do # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx - # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # Force all access to the app over SSL, use Strict-Transport-Security, and + # use secure cookies. # config.force_ssl = true # Set to :debug to see everything in the log. @@ -47,7 +48,8 @@ Rails.application.configure do # Enable serving of images, stylesheets, and JavaScripts from an asset server # config.action_controller.asset_host = "http://assets.example.com" - # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) + # Precompile additional assets (application.js, application.css, and all non- + # JS/CSS are already added) # config.assets.precompile += %w( search.js ) # Disable delivery errors, bad email addresses will be ignored @@ -65,16 +67,16 @@ Rails.application.configure do # S3 settings for Paperclip uploads config.paperclip_defaults = { - :storage => :s3, - :s3_protocol => 'http', - :s3_credentials => { - :bucket => ENV['AWS_BUCKET'], - :access_key_id => ENV['AWS_ACCESS_KEY_ID'], - :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] + storage: :s3, + s3_protocol: 'http', + s3_credentials: { + bucket: ENV['AWS_BUCKET'], + access_key_id: ENV['AWS_ACCESS_KEY_ID'], + secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'] } } # Do not dump schema after migrations. - #todo double check this + # TODO: double check this config.active_record.dump_schema_after_migration = false end diff --git a/config/environments/test.rb b/config/environments/test.rb index dbf48793..aa5e9f37 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -9,7 +9,7 @@ Rails.application.configure do # Configure static asset server for tests with Cache-Control for performance config.serve_static_assets = true - config.static_cache_control = "public, max-age=3600" + config.static_cache_control = 'public, max-age=3600' config.eager_load = false # Log error messages when you accidentally call methods on nil @@ -30,7 +30,6 @@ Rails.application.configure do # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test - # Print deprecation notices to the stderr config.active_support.deprecation = :stderr end diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb index 59385cdf..cf74fe3d 100644 --- a/config/initializers/backtrace_silencers.rb +++ b/config/initializers/backtrace_silencers.rb @@ -1,7 +1,9 @@ # Be sure to restart your server when you modify this file. -# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# You can add backtrace silencers for libraries that you're using but don't +# wish to see in your backtraces. # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } -# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# You can also remove all the silencers if you're trying to debug a problem +# that might stem from framework code. # Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/cookies_serializer.rb b/config/initializers/cookies_serializer.rb index 90baf619..54516e3f 100644 --- a/config/initializers/cookies_serializer.rb +++ b/config/initializers/cookies_serializer.rb @@ -1,3 +1,3 @@ # Be sure to restart your server when you modify this file. -Rails.application.config.action_dispatch.cookies_serializer = :hybrid \ No newline at end of file +Rails.application.config.action_dispatch.cookies_serializer = :hybrid diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb index ad92acca..5e7b822f 100644 --- a/config/initializers/secret_token.rb +++ b/config/initializers/secret_token.rb @@ -4,4 +4,6 @@ # If you change this key, all old signed cookies will become invalid! # Make sure the secret is at least 30 characters and all random, # no regular words or you'll be exposed to dictionary attacks. -PlanCharacters::Application.config.secret_token = 'c3e5363c63e6014335eb03ad9d295daf0fa8314fd588b076b9ed746f325da910d8225639c4bae290ca02b94888421060ebcfa3ebeb0f7555a1c0b37758a8c1ca' +PlanCharacters::Application.config.secret_token = + 'c3e5363c63e6014335eb03ad9d295daf0fa8314fd588b076b9ed746f325da910d8225639c4ba\ + e290ca02b94888421060ebcfa3ebeb0f7555a1c0b37758a8c1ca' diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb index 2704a7b3..2f1b8c12 100644 --- a/config/initializers/session_store.rb +++ b/config/initializers/session_store.rb @@ -1,6 +1,8 @@ # Be sure to restart your server when you modify this file. -PlanCharacters::Application.config.session_store :cookie_store, key: '_plan_characters_session' +PlanCharacters::Application + .config.session_store :cookie_store, + key: '_plan_characters_session' # Use the database for sessions instead of the cookie-based default, # which shouldn't be used to store highly confidential information diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb index 369b465f..9c730834 100644 --- a/config/initializers/wrap_parameters.rb +++ b/config/initializers/wrap_parameters.rb @@ -3,8 +3,8 @@ # This file contains settings for ActionController::ParamsWrapper which # is enabled by default. -# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +# Enable parameter wrapping for JSON. You can disable this by setting :format +# to an empty array. ActiveSupport.on_load(:action_controller) do wrap_parameters format: [:json] end - diff --git a/config/locales/en.yml b/config/locales/en.yml index 3cb873ca..2709f167 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,9 +1,734 @@ -# Sample localization file for English. Add more files in this directory for other locales. -# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. +# Localization file for English. +# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale +# for starting points. en: hello: "Hello world" - - quote_1: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante." + + quote_1: > + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere + erat a ante. quote_author_1: "Someone famous" quote_source_1: "Source Title" + + no_view_permission: "You don't have permission to view that!" + no_do_permission: "You don't have permission to do that!" + must_be_logged_in: "You must be logged-in to do that!" + + username_password_incorrect: "Username or password incorrect" + login_successful: "Login successful." + logged_out: "Logged out!" + + all_universes: "All universes" + + activerecord: + models: + character: "Character" + equipment: "Equipment" + language: "Language" + location: "Location" + magic: "Magic" + session: "Session" + universe: "Universe" + user: "User" + attributes: + location: + map: "Map" + + create_success: "%{model_name} was successfully created." + update_success: "%{model_name} was successfully updated." + + location_create_upload_map_error: > + Location was created, but your map did not upload. Please try again. + + location_update_upload_map_error: > + Location was updated, but your map did not upload. Please try again. + + body_types: + - "Delicate" + - "Flat" + - "Fragile" + - "Lean" + - "Lightly muscled" + - "Small-shouldered" + - "Thin" + - "Athletic" + - "Hourglass" + - "Bodybuilder" + - "Rectangular" + - "Muscular" + - "Thick-skinned" + - "Big-boned" + - "Round physique" + - "Pear-shaped" + + eye_colors: + - "Amber" + - "Black" + - "Arctic blue" + - "Baby blue" + - "China blue" + - "Cornflower blue" + - "Crystal blue" + - "Denim blue" + - "Electric blue" + - "Indigo" + - "Sapphire blue" + - "Sky blue" + - "Champagne brown" + - "Chestnut brown" + - "Chocolate brown" + - "Golden brown" + - "Honey brown" + - "Topaz" + - "Charcoal grey" + - "Cloudy grey" + - "Steel grey" + - "Chartreuse" + - "Emerald green" + - "Forest green" + - "Grass green" + - "Jade green" + - "Leaf green" + - "Sea green" + - "Hazel" + - "Amethyst" + - "Hyacinth" + - "Ultramarine blue" + - "One green, one blue" + - "One blue, one brown" + - "One brown, one blue" + - "One brown, one green" + - "Light violet" + - "Dark violet" + + facial_hair_styles: + - "Beard, long" + - "Beard, short" + - "Chin curtain" + - "Chinstrap" + - "Fu Manchu, short" + - "Fu Manchu, long" + - "Goatee" + - "Handlebar mustache" + - "Horseshoe mustache" + - "Mustache" + - "Mutton chops, thin" + - "Mutton chops, thick" + - "Neckbeard" + - "Pencil mustache" + - "Shenandoah" + - "Sideburns" + - "Soul patch" + - "Light stubble" + - "Thick stubble" + - "Toothbrush mustache" + - "Van Dyke beard" + - "Patchy beard" + - "Patchy mustache" + + hair_colors: + - "Blonde" + - "Black" + - "Brown" + - "Red" + - "Bald" + - "White" + - "Grey" + - "Balding" + - "Greying" + - "Bleached" + - "Blue" + - "Green" + - "Purple" + - "Orange" + - "Auburn" + - "Strawberry" + - "Chestnut" + - "Dirty Blonde" + - "Rainbow" + - "Black tips" + - "Jet black" + - "Raven black" + + hair_styles: + - "Afro" + - "Bald" + - "Balding" + - "Bob cut" + - "Bowl cut" + - "Bouffant" + - "Braided" + - "Bun" + - "Butch" + - "Buzz cut" + - "Chignon" + - "Chonmage" + - "Comb over" + - "Cornrows" + - "Crew cut" + - "Dreadlocks" + - "Emo" + - "Fauxhawk" + - "Feathered" + - "Flattop" + - "Fringe" + - "Liberty Spikes" + - "Long hair, straight" + - "Long hair, curly" + - "Long hair, wavy" + - "Mohawk" + - "Mop-top" + - "Odango" + - "Pageboy" + - "Parted" + - "Pigtails" + - "Pixie cut" + - "Pompadour" + - "Ponytail" + - "Rattail" + - "Rocker" + - "Slicked back" + - "Spiky, short" + - "Spiky, long" + - "Short, curly" + - "Short, wavy" + - "Short, thin" + - "Short, straight" + + identifying_marks: + - "minor scar" + - "large scar" + - "mole" + - "fleshy growth" + - "tattoo" + - "discoloration" + + on_the: "on the" + + identifying_mark_locations: + - "left eye" + - "right eye" + - "left thigh" + - "right thigh" + - "left shin" + - "right shin" + - "left foot" + - "right foot" + - "big toe" + - "hip" + - "stomach" + - "lower back" + - "chest" + - "upper back" + - "left shoulder" + - "right shoulder" + - "left bicep" + - "right bicep" + - "left tricep" + - "right tricep" + - "left hand" + - "right hand" + - "pointer finger" + - "thumb" + - "neck" + - "scalp" + - "above lip" + - "nose" + - "left ear" + - "right ear" + - "forehead" + - "left cheek" + - "right cheek" + - "left temple" + - "right temple" + - "chin" + - "beneath chin" + + male_first_names: + - "James" + - "John" + - "Robert" + - "Michael" + - "William" + - "David" + - "Richard" + - "Charles" + - "Joseph" + - "Thomas" + - "Christopher" + - "Daniel" + - "Paul" + - "Mark" + - "Donald" + - "George" + - "Kenneth" + - "Steven" + - "Edward" + - "Brian" + - "Ronald" + - "Anthony" + - "Kevin" + - "Jason" + - "Matthew" + - "Gary" + - "Timothy" + - "Jose" + - "Larry" + - "Jeffrey" + - "Frank" + - "Scott" + - "Eric" + - "Stephen" + - "Andrew" + - "Raymond" + - "Gregory" + + female_first_names: + - "Mary" + - "Patricia" + - "Linda" + - "Barbara" + - "Elizabeth" + - "Jennifer" + - "Maria" + - "Susan" + - "Margaret" + - "Margret" + - "Dorothy" + - "Lisa" + - "Nancy" + - "Karen" + - "Betty" + - "Helen" + - "Sandra" + - "Donna" + - "Carol" + - "Ruth" + - "Sharon" + - "Michelle" + - "Laura" + - "Sarah" + - "Kimberly" + - "Deborah" + - "Jessica" + - "Shirley" + - "Cynthia" + - "Angela" + - "Melissa" + - "Brenda" + - "Amy" + - "Anna" + - "Rebecca" + - "Virginia" + - "Kathleen" + - "Pamela" + + last_names: + - "Smith" + - "Brown" + - "Lee" + - "Wilson" + - "Martin" + - "Patel" + - "Taylor" + - "Wong" + - "Campbell" + - "Williams" + - "Thompson" + - "Jones" + - "Johnson" + - "Miller" + - "Davis" + - "Garcia" + - "Rodriguez" + - "Martinez" + - "Anderson" + - "Jackson" + - "White" + - "Green" + - "Lee" + - "Harris" + - "Clark" + - "Lewis" + - "Robinson" + - "Walker" + - "Hall" + - "Young" + - "Allen" + - "Sanchez" + - "Wright" + - "King" + - "Scott" + - "Roberts" + - "Carter" + - "Phillips" + - "Evans" + - "Turner" + - "Torres" + - "Parker" + - "Collins" + - "Stewart" + - "Flores" + - "Morris" + - "Nguyen" + - "Murphy" + - "Rivera" + - "Cook" + - "Morgan" + - "Peterson" + - "Cooper" + - "Gomez" + - "Ward" + + character_races: + - "Android" + - "Angel" + - "Animal" + - "Arachnoid" + - "Bird" + - "Construct" + - "Dark Elf" + - "Dwarf" + - "Elemental" + - "Elf" + - "Fairy" + - "Fey" + - "Genie" + - "Gnome" + - "Half-Dwarf" + - "Half-Elf" + - "Half-Orc" + - "Halfling" + - "Human" + - "Insectoid" + - "Orc" + - "Reptilian" + - "Robot" + - "Spirit" + - "Vampire" + - "Werewolf" + + skin_tones: + - "Albino" + - "Light" + - "Pale white" + - "Fair" + - "White" + - "Medium" + - "Olive" + - "Moderate brown" + - "Brown" + - "Dark brown" + - "Black" + + location_name_prefixes: + - "New" + - "Los" + - "Fort" + - "City of" + - "El" + - "Saint" + - "Des" + - "Little" + - "Big" + - "North" + - "East" + - "South" + - "West" + - "Round" + - "The" + - "Broken" + - "Santa" + + location_name_suffixes: + - "Port" + - "City" + - "Grove" + - "Pines" + - "Falls" + - "Heights" + - "Oaks" + - "Rapids" + - "Valley" + - "Mountains" + - "Peaks" + - "Arbor" + - "Mesa" + - "Gardens" + - "Palms" + - "Beach" + - "Bend" + - "Ruins" + + location_name_syllables: + - "lo" + - "chi" + - "ca" + - "go" + - "hou" + - "ston" + - "nix" + - "pho" + - "an" + - "ant" + - "ton" + - "io" + - "san" + - "die" + - "dia" + - "dal" + - "las" + - "son" + - "vil" + - "pol" + - "ral" + - "polis" + - "na" + - "aus" + - "tin" + - "fran" + - "cis" + - "co" + - "col" + - "umb" + - "bus" + - "cha" + - "mem" + - "phis" + - "sea" + - "wor" + - "the" + - "tha" + - "den" + - "was" + - "bal" + - "ti" + - "mo" + - "ash" + - "wau" + - "kee" + - "ki" + - "ru" + - "lu" + - "cest" + - "pro" + - "ora" + - "ode" + - "mu" + - "ill" + - "ville" + - "vil" + + shield_types: + - "Greek aspis" + - "Buckler" + - "Heater shield" + - "Heraldic shield" + - "Leather shield" + - "Hide shield" + - "Hoplon shield" + - "Kite shield" + - "Scutum" + - "Targe" + + weapon_types: + - "Bastard sword" + - "Battleaxe" + - "Bolas" + - "Bow & Arrow" + - "Bowstaff" + - "Brass knuckles" + - "Broom" + - "Chainsaw" + - "Club" + - "Dagger" + - "Darts" + - "Falchion" + - "Flail" + - "Gauntlet" + - "Glaive" + - "Greataxe" + - "Greatsword" + - "Halberd" + - "Handaxe" + - "Hand crossbow" + - "Heavy crossbow" + - "Javelin" + - "Kama" + - "Kukri" + - "Lance" + - "Longbow" + - "Longsword" + - "Madu" + - "Morningstar" + - "Net" + - "Nunchaku" + - "Pocket knife" + - "Quarterstaff" + - "Ranseur" + - "Rapier" + - "Repeating crossbow" + - "Sai" + - "Sap" + - "Scimitar" + - "Scythe" + - "Shortsword" + - "Shortbow" + - "Shortspear" + - "Shuriken" + - "Siangham" + - "Sickle" + - "Sling" + - "Spear" + - "Throwing axe" + - "Trident" + - "Warhammer" + - "Whip" + + axe_types: + - "Bardiche" + - "Battleaxe" + - "Broadaxe" + - "Handaxe" + - "Hatchet" + - "Long-bearded axe" + - "Tomahawk" + + bow_types: + - "Longbow" + - "Sling" + - "Blowgun" + - "Flatbow" + - "Composite bow" + - "Yumi" + - "Gungdo" + - "Shortbow" + - "Arbalest" + - "Crossbow" + - "Repeating crossbow" + + club_types: + - "Boomerang" + - "Frying pan" + - "Hammer" + - "Brick" + - "Mace" + - "Morningstar" + - "Sai" + - "Scepter" + - "Sledgehammer" + - "Lamp" + - "Glass bottle" + - "Warhammer" + - "Wrench" + - "Crowbar" + + fist_weapon_types: + - "Bahh nakh, tiger claws" + - "Brass knuckles" + - "Cestus" + - "Deer horn knives" + - "Finger knife" + - "Gauntlets" + - "Katar" + - "Korean fan" + - "Madu, buckhorn stick" + - "Pata sword gauntlet" + - "Push dagger" + - "Roman scissor" + - "War fan" + - "Wind and fire wheels" + - "Emei daggers" + - "Large stone" + - "Brick" + + flexible_weapon_types: + - "Bullwhip" + - "Cat o' nine tails" + - "Chain whip" + - "Lasso" + - "Nunchaku" + - "Flail" + - "Meteor hammer" + + thrown_weapon_types: + - "Harpoon" + - "Bolas" + - "Javelin" + - "Pilum" + - "Woomera" + - "Angon" + - "Chakram" + - "Kunai" + - "Boomerang" + - "Throwing knife" + - "Thrown darts" + - "Swiss arrow" + - "Francisca" + - "Tomahawk" + - "Shuriken" + - "Stones" + + polearm_types: + - "Bo" + - "Taiji staff" + - "Quarterstaff" + - "Staff" + - "Spear" + - "Lance" + - "Pike" + - "Pitchfork" + - "Qiang" + - "Ranseur" + - "Spetum" + - "Swordstaff" + - "Trident" + - "Bardiche" + - "Bill" + - "Glaive" + - "Halberd" + - "Lochaber axe" + - "Naginata" + - "Partizan" + - "Scythe" + - "Voulge" + - "War scythe" + + shortsword_types: + - "Dagger" + - "Fireplace poker" + - "Small sword" + - "Xiphos shortsword" + - "Aikuchi shortsword" + - "Kodachi shortsword" + - "Pinuti shortsword" + - "Wakizashi shortsword" + + sword_types: + - "Cutlass" + - "Dao" + - "Dha" + - "Falchion" + - "Hunting sword" + - "Kukri" + - "Pulwar" + - "Sabre" + - "Scimitar" + - "Shamshir" + - "Talwar" + - "Epee" + - "Flamberge" + - "Longsword" + - "Ninjato" + - "Rapier" + - "Katana" + - "Claymore" + - "Dadao" + - "Executioner's sword" + - "Flambard" + - "Greatsword" + - "Nodachi" + - "Falcata" + - "Machete" + - "Yatagan" diff --git a/config/routes.rb b/config/routes.rb index 401fa71e..01cc6c08 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,184 +1,187 @@ PlanCharacters::Application.routes.draw do + # rubocop:disable LineLength # Main pages - root :to => 'main#index', :as => :homepage + root to: 'main#index', as: :homepage # Info pages scope '/about' do - get '/anon-login', :to => 'main#anoninfo', :as => :anon_info - get '/privacy', :to => 'main#privacyinfo', :as => :privacy_info - get '/attribution', :to => 'main#attribution', :as => :attribution_info + get '/anon-login', to: 'main#anoninfo', as: :anon_info + get '/privacy', to: 'main#privacyinfo', as: :privacy_info + get '/attribution', to: 'main#attribution', as: :attribution_info end - + # User-centric stuff scope '/my' do - get '/content', :to => 'main#dashboard', :as => :dashboard - get '/submissions', :to => 'main#comingsoon' + get '/content', to: 'main#dashboard', as: :dashboard + get '/submissions', to: 'main#comingsoon' end - + # Sessions - get '/login', :to => 'sessions#new', :as => :login - post '/login', :to => 'sessions#create', :as => :login_process - get '/logout', :to => 'sessions#destroy', :as => :logout + get '/login', to: 'sessions#new', as: :login + post '/login', to: 'sessions#create', as: :login_process + get '/logout', to: 'sessions#destroy', as: :logout # Users - get '/register', :to => 'users#new', :as => :signup - post '/register', :to => 'users#create', :as => :signup_process - get '/account', :to => 'users#edit', :as => :account - patch '/register', :to => 'users#update', :as => :account_process - get '/be-anonymous', :to => 'users#anonymous', :as => :anonymous - get '/anon-login', :to => 'users#anonymous_login', :as => :anonymous_login - + get '/register', to: 'users#new', as: :signup + post '/register', to: 'users#create', as: :signup_process + get '/account', to: 'users#edit', as: :account + patch '/register', to: 'users#update', as: :account_process + get '/be-anonymous', to: 'users#anonymous', as: :anonymous + get '/anon-login', to: 'users#anonymous_login', as: :anonymous_login + # Planning scope '/plan' do # Characters - get '/characters', :to => 'characters#index', :as => :character_list - get '/characters/from/:universe', :to => 'characters#index', :as => :characters_by_universe - get '/character/new', :to => 'characters#new', :as => :character_create - post '/character/new', :to => 'characters#create', :as => :character_create_process - get '/character/:id', :to => 'characters#show', :as => :character - get '/character/:id/edit', :to => 'characters#edit', :as => :character_edit - patch '/character/:id', :to => 'characters#update', :as => :character_edit_process - delete '/character/:id', :to => 'characters#destroy', :as => :character_destroy + get '/characters', to: 'characters#index', as: :character_list + get '/characters/from/:universe', to: 'characters#index', as: :characters_by_universe + get '/character/new', to: 'characters#new', as: :character_create + post '/character/new', to: 'characters#create', as: :character_create_process + get '/character/:id', to: 'characters#show', as: :character + get '/character/:id/edit', to: 'characters#edit', as: :character_edit + patch '/character/:id', to: 'characters#update', as: :character_edit_process + delete '/character/:id', to: 'characters#destroy', as: :character_destroy # Equipment - get '/equipment', :to => 'equipment#index', :as => :equipment_list - get '/equipment/from/:universe', :to => 'equipment#index', :as => :equipment_by_universe - get '/equipment/new', :to => 'equipment#new', :as => :equipment_create - get '/equipment/new/:type_of', :to => 'equipment#new', :as => :equipment_create_type - post '/equipment/new', :to => 'equipment#create', :as => :equipment_create_process - get '/equipment/:id', :to => 'equipment#show', :as => :equipment - get '/equipment/:id/edit', :to => 'equipment#edit', :as => :equipment_edit - patch '/equipment/:id', :to => 'equipment#update', :as => :equipment_edit_process - delete '/equipment/:id', :to => 'equipment#destroy', :as => :equipment_destroy + get '/equipment', to: 'equipment#index', as: :equipment_list + get '/equipment/from/:universe', to: 'equipment#index', as: :equipment_by_universe + get '/equipment/new', to: 'equipment#new', as: :equipment_create + get '/equipment/new/:type_of', to: 'equipment#new', as: :equipment_create_type + post '/equipment/new', to: 'equipment#create', as: :equipment_create_process + get '/equipment/:id', to: 'equipment#show', as: :equipment + get '/equipment/:id/edit', to: 'equipment#edit', as: :equipment_edit + patch '/equipment/:id', to: 'equipment#update', as: :equipment_edit_process + delete '/equipment/:id', to: 'equipment#destroy', as: :equipment_destroy # Languages - get '/languages', :to => 'languages#index', :as => :language_list - get '/languages/from/:universe', :to => 'languages#index', :as => :languages_by_universe - get '/language/new', :to => 'languages#new', :as => :language_create - post '/language/new', :to => 'languages#create', :as => :language_create_process - get '/language/:id', :to => 'languages#show', :as => :language - get '/language/:id/edit', :to => 'languages#edit', :as => :language_edit - patch '/language/:id', :to => 'languages#update', :as => :language_edit_process - delete '/language/:id', :to => 'languages#destroy', :as => :language_destroy + get '/languages', to: 'languages#index', as: :language_list + get '/languages/from/:universe', to: 'languages#index', as: :languages_by_universe + get '/language/new', to: 'languages#new', as: :language_create + post '/language/new', to: 'languages#create', as: :language_create_process + get '/language/:id', to: 'languages#show', as: :language + get '/language/:id/edit', to: 'languages#edit', as: :language_edit + patch '/language/:id', to: 'languages#update', as: :language_edit_process + delete '/language/:id', to: 'languages#destroy', as: :language_destroy # Locations - get '/locations', :to => 'locations#index', :as => :location_list - get '/locations/from/:universe', :to => 'locations#index', :as => :locations_by_universe - get '/location/new', :to => 'locations#new', :as => :location_create - post '/location/new', :to => 'locations#create', :as => :location_create_process - get '/location/new/:type_of', :to => 'locations#new', :as => :location_create_type - get '/location/:id', :to => 'locations#show', :as => :location - get '/location/:id/edit', :to => 'locations#edit', :as => :location_edit - patch '/location/:id', :to => 'locations#update', :as => :location_edit_process - delete '/location/:id', :to => 'locations#destroy', :as => :location_destroy + get '/locations', to: 'locations#index', as: :location_list + get '/locations/from/:universe', to: 'locations#index', as: :locations_by_universe + get '/location/new', to: 'locations#new', as: :location_create + post '/location/new', to: 'locations#create', as: :location_create_process + get '/location/new/:type_of', to: 'locations#new', as: :location_create_type + get '/location/:id', to: 'locations#show', as: :location + get '/location/:id/edit', to: 'locations#edit', as: :location_edit + patch '/location/:id', to: 'locations#update', as: :location_edit_process + delete '/location/:id', to: 'locations#destroy', as: :location_destroy # Magic - get '/magic', :to => 'magic#index', :as => :magic_list - get '/magic/from/:universe', :to => 'magic#index', :as => :magic_by_universe - get '/magic/new', :to => 'magic#new', :as => :magic_create - post '/magic/new', :to => 'magic#create', :as => :magic_create_process - get '/magic/new/:type_of', :to => 'magic#new', :as => :magic_create_type - get '/magic/:id', :to => 'magic#show', :as => :magic - get '/magic/:id/edit', :to => 'magic#edit', :as => :magic_edit - patch '/magic/:id', :to => 'magic#update', :as => :magic_edit_process - delete '/magic/:id', :to => 'magic#destroy', :as => :magic_destroy + get '/magic', to: 'magic#index', as: :magic_list + get '/magic/from/:universe', to: 'magic#index', as: :magic_by_universe + get '/magic/new', to: 'magic#new', as: :magic_create + post '/magic/new', to: 'magic#create', as: :magic_create_process + get '/magic/new/:type_of', to: 'magic#new', as: :magic_create_type + get '/magic/:id', to: 'magic#show', as: :magic + get '/magic/:id/edit', to: 'magic#edit', as: :magic_edit + patch '/magic/:id', to: 'magic#update', as: :magic_edit_process + delete '/magic/:id', to: 'magic#destroy', as: :magic_destroy # Universes - get '/universes', :to => 'universes#index', :as => :universe_list - get '/universe/new', :to => 'universes#new', :as => :universe_create - post '/universe/new', :to => 'universes#create', :as => :universe_create_process - get '/universe/:id', :to => 'universes#show', :as => :universe - get '/universe/:id/edit', :to => 'universes#edit', :as => :universe_edit - patch '/universe/:id', :to => 'universes#update', :as => :universe_edit_process - delete '/universe/:id', :to => 'universes#destroy', :as => :universe_destroy + get '/universes', to: 'universes#index', as: :universe_list + get '/universe/new', to: 'universes#new', as: :universe_create + post '/universe/new', to: 'universes#create', as: :universe_create_process + get '/universe/:id', to: 'universes#show', as: :universe + get '/universe/:id/edit', to: 'universes#edit', as: :universe_edit + patch '/universe/:id', to: 'universes#update', as: :universe_edit_process + delete '/universe/:id', to: 'universes#destroy', as: :universe_destroy # Coming Soon TM - get '/plots', :to => 'main#comingsoon' + get '/plots', to: 'main#comingsoon' end - + # API Endpoints scope '/generate' do # General information - + # Character information scope '/character' do - get '/age', :to => 'generator#character_age' - get '/bodytype', :to => 'generator#character_bodytype' - get '/eyecolor', :to => 'generator#character_eyecolor' - get '/facial-hair', :to => 'generator#character_facialhair' - get '/haircolor', :to => 'generator#character_haircolor' - get '/hairstyle', :to => 'generator#character_hairstyle' - get '/height', :to => 'generator#character_height' - get '/identifying-mark', :to => 'generator#character_identifyingmark' - get '/name', :to => 'generator#character_name' - get '/race', :to => 'generator#character_race' - get '/skintone', :to => 'generator#character_skintone' - get '/weight', :to => 'generator#character_weight' + get '/age', to: 'characters_generator#age' + get '/bodytype', to: 'characters_generator#bodytype' + get '/eyecolor', to: 'characters_generator#eyecolor' + get '/facial-hair', to: 'characters_generator#facialhair' + get '/haircolor', to: 'characters_generator#haircolor' + get '/hairstyle', to: 'characters_generator#hairstyle' + get '/height', to: 'characters_generator#height' + get '/identifying-mark', to: 'characters_generator#identifyingmark' + get '/name', to: 'characters_generator#name' + get '/race', to: 'characters_generator#race' + get '/skintone', to: 'characters_generator#skintone' + get '/weight', to: 'characters_generator#weight' end - + # Location information scope '/location' do - get '/name', :to => 'generator#location_name' + get '/name', to: 'locations_generator#name' end # Equipment location scope '/equipment' do scope '/weapon' do - get '/', :to => 'generator#equipment_weapon' + get '/', to: 'equipment_generator#weapon' - get '/axe', :to => 'generator#equipment_weapon_axe' - get '/bow', :to => 'generator#equipment_weapon_bow' - get '/club', :to => 'generator#equipment_weapon_club' - get '/fist', :to => 'generator#equipment_weapon_fist' - get '/flexible', :to => 'generator#equipment_weapon_flexible' - #todo /gun - get '/polearm', :to => 'generator#equipment_weapon_polearm' - get '/shortsword', :to => 'generator#equipment_weapon_shortsword' - get '/sword', :to => 'generator#equipment_weapon_sword' - get '/thrown', :to => 'generator#equipment_weapon_thrown' - end + get '/axe', to: 'equipment_generator#weapon_axe' + get '/bow', to: 'equipment_generator#weapon_bow' + get '/club', to: 'equipment_generator#weapon_club' + get '/fist', to: 'equipment_generator#weapon_fist' + get '/flexible', to: 'equipment_generator#weapon_flexible' + # TODO: /gun + get '/polearm', to: 'equipment_generator#weapon_polearm' + get '/shortsword', to: 'equipment_generator#weapon_shortsword' + get '/sword', to: 'equipment_generator#weapon_sword' + get '/thrown', to: 'equipment_generator#weapon_thrown' + end scope '/armor' do - get '/', :to => 'generator#equipment_armor' + get '/', to: 'equipment_generator#armor' - get '/shield', :to => 'generator#equipment_armor_shield' + get '/shield', to: 'equipment_generator#armor_shield' end end end # Adoption Agency scope '/adoption' do - get '/', :to => 'main#comingsoon' + get '/', to: 'main#comingsoon' end # Idea Market scope '/market' do - get '/', :to => 'main#comingsoon' + get '/', to: 'main#comingsoon' end - + # Write scope '/write' do - get '/lyrics', :to => 'main#comingsoon' - get '/novel', :to => 'main#comingsoon' - get '/nonfiction', :to => 'main#comingsoon' - get '/poetry', :to => 'main#comingsoon' - get '/screenplay', :to => 'main#comingsoon' - get '/story', :to => 'main#comingsoon' + get '/lyrics', to: 'main#comingsoon' + get '/novel', to: 'main#comingsoon' + get '/nonfiction', to: 'main#comingsoon' + get '/poetry', to: 'main#comingsoon' + get '/screenplay', to: 'main#comingsoon' + get '/story', to: 'main#comingsoon' end - + # Revise scope '/revise' do - get '/checklists', :to => 'main#comingsoon' - get '/analytics', :to => 'main#comingsoon' - get '/peer-critiques', :to => 'main#comingsoon' - get '/professional-review', :to => 'main#comingsoon' + get '/checklists', to: 'main#comingsoon' + get '/analytics', to: 'main#comingsoon' + get '/peer-critiques', to: 'main#comingsoon' + get '/professional-review', to: 'main#comingsoon' end - + # Submit scope '/submit' do - get '/blog', :to => 'main#comingsoon' - get '/print-publishers', :to => 'main#comingsoon' - get '/online-publishers', :to => 'main#comingsoon' + get '/blog', to: 'main#comingsoon' + get '/print-publishers', to: 'main#comingsoon' + get '/online-publishers', to: 'main#comingsoon' end + + # rubocop:enable LineLength end diff --git a/db/migrate/20140713043535_create_models.rb b/db/migrate/20140713043535_create_models.rb index c5a0fe67..dcb26156 100644 --- a/db/migrate/20140713043535_create_models.rb +++ b/db/migrate/20140713043535_create_models.rb @@ -1,7 +1,7 @@ class CreateModels < ActiveRecord::Migration def change create_table :characters do |t| - t.string :name, :null => false + t.string :name, null: false t.string :role t.string :gender t.string :age @@ -25,25 +25,25 @@ class CreateModels < ActiveRecord::Migration t.text :prejudices t.text :occupation t.text :pets - #How might others describe him? - #What would others change about him? + # How might others describe him? + # What would others change about him? # Behavior t.text :mannerisms - #What drives this character? - #What is standing in his way? - #What is he most afraid of? - #What does he need most? - #What makes him vulnerable? - #What kind of trouble does he get in? + # What drives this character? + # What is standing in his way? + # What is he most afraid of? + # What does he need most? + # What makes him vulnerable? + # What kind of trouble does he get in? # History t.text :birthday t.text :birthplace t.text :education t.text :background - #What is his deepest secret? - #Does he have a history of criminal activity? + # What is his deepest secret? + # Does he have a history of criminal activity? # Favorites t.string :fave_color @@ -51,7 +51,7 @@ class CreateModels < ActiveRecord::Migration t.string :fave_possession t.string :fave_weapon t.string :fave_animal - #favorite leisure activities + # favorite leisure activities # Relationships t.text :father @@ -63,16 +63,16 @@ class CreateModels < ActiveRecord::Migration # Notes t.text :notes t.text :private_notes - + t.belongs_to :user t.belongs_to :universe - + t.timestamps end - + create_table :equipment do |t| # General - t.string :name, :null => false + t.string :name, null: false t.string :equip_type # Appearance @@ -92,16 +92,16 @@ class CreateModels < ActiveRecord::Migration # Notes t.text :notes t.text :private_notes - + t.belongs_to :user t.belongs_to :universe t.timestamps end - + create_table :languages do |t| # General - t.string :name, :null => false + t.string :name, null: false # Vocabulary t.text :words @@ -122,10 +122,10 @@ class CreateModels < ActiveRecord::Migration t.timestamps end - + create_table :locations do |t| # General - t.string :name, :null => false + t.string :name, null: false t.string :type_of t.text :description @@ -137,8 +137,8 @@ class CreateModels < ActiveRecord::Migration t.string :language t.string :currency t.string :motto - #field :flag, :type => Image - #field :seal, :type => Image + # field :flag, :type => Image + # field :seal, :type => Image # Cities t.text :capital @@ -163,10 +163,10 @@ class CreateModels < ActiveRecord::Migration t.timestamps end - + create_table :magics do |t| # General - t.string :name, :null => false + t.string :name, null: false t.string :type_of # "Type of": Spell, Ability, Enchantment, etc # Appearance @@ -177,7 +177,7 @@ class CreateModels < ActiveRecord::Migration t.string :element t.string :diety - # # Effects + # # Effects t.text :harmfulness # Harmful effects t.text :helpfulness # Helpful effects t.text :neutralness # Neutral effects @@ -196,18 +196,17 @@ class CreateModels < ActiveRecord::Migration t.timestamps end - + create_table :sessions do |t| - - t.string :username, :unique => true, :null => false - t.string :password, :null => false - + t.string :username, unique: true, null: false + t.string :password, null: false + t.timestamps end - + create_table :universes do |t| # General - t.string :name, :null => false + t.string :name, null: false t.text :description # History @@ -224,11 +223,11 @@ class CreateModels < ActiveRecord::Migration t.timestamps end - + create_table :users do |t| - t.string :name, :unique => true, :null => false - t.string :email, :unique => true, :null => false - t.string :password, :null => false + t.string :name, unique: true, null: false + t.string :email, unique: true, null: false + t.string :password, null: false t.timestamps end diff --git a/db/schema.rb b/db/schema.rb index 76293d63..37a8cd46 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,159 +11,157 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20140713043535) do - - create_table "characters", force: true do |t| - t.string "name", null: false - t.string "role" - t.string "gender" - t.string "age" - t.string "height" - t.string "weight" - t.string "haircolor" - t.string "hairstyle" - t.string "facialhair" - t.string "eyecolor" - t.string "race" - t.string "skintone" - t.string "bodytype" - t.string "identmarks" - t.text "bestfriend" - t.text "religion" - t.text "politics" - t.text "prejudices" - t.text "occupation" - t.text "pets" - t.text "mannerisms" - t.text "birthday" - t.text "birthplace" - t.text "education" - t.text "background" - t.string "fave_color" - t.string "fave_food" - t.string "fave_possession" - t.string "fave_weapon" - t.string "fave_animal" - t.text "father" - t.text "mother" - t.text "spouse" - t.text "siblings" - t.text "archenemy" - t.text "notes" - t.text "private_notes" - t.integer "user_id" - t.integer "universe_id" - t.datetime "created_at" - t.datetime "updated_at" +ActiveRecord::Schema.define(version: 20_140_713_043_535) do + create_table 'characters', force: true do |t| + t.string 'name', null: false + t.string 'role' + t.string 'gender' + t.string 'age' + t.string 'height' + t.string 'weight' + t.string 'haircolor' + t.string 'hairstyle' + t.string 'facialhair' + t.string 'eyecolor' + t.string 'race' + t.string 'skintone' + t.string 'bodytype' + t.string 'identmarks' + t.text 'bestfriend' + t.text 'religion' + t.text 'politics' + t.text 'prejudices' + t.text 'occupation' + t.text 'pets' + t.text 'mannerisms' + t.text 'birthday' + t.text 'birthplace' + t.text 'education' + t.text 'background' + t.string 'fave_color' + t.string 'fave_food' + t.string 'fave_possession' + t.string 'fave_weapon' + t.string 'fave_animal' + t.text 'father' + t.text 'mother' + t.text 'spouse' + t.text 'siblings' + t.text 'archenemy' + t.text 'notes' + t.text 'private_notes' + t.integer 'user_id' + t.integer 'universe_id' + t.datetime 'created_at' + t.datetime 'updated_at' end - create_table "equipment", force: true do |t| - t.string "name", null: false - t.string "equip_type" - t.text "description" - t.string "weight" - t.string "original_owner" - t.string "current_owner" - t.text "made_by" - t.text "materials" - t.string "year_made" - t.text "magic" - t.text "notes" - t.text "private_notes" - t.integer "user_id" - t.integer "universe_id" - t.datetime "created_at" - t.datetime "updated_at" + create_table 'equipment', force: true do |t| + t.string 'name', null: false + t.string 'equip_type' + t.text 'description' + t.string 'weight' + t.string 'original_owner' + t.string 'current_owner' + t.text 'made_by' + t.text 'materials' + t.string 'year_made' + t.text 'magic' + t.text 'notes' + t.text 'private_notes' + t.integer 'user_id' + t.integer 'universe_id' + t.datetime 'created_at' + t.datetime 'updated_at' end - create_table "languages", force: true do |t| - t.string "name", null: false - t.text "words" - t.string "established_year" - t.string "established_location" - t.text "characters" - t.text "locations" - t.text "notes" - t.integer "user_id" - t.integer "universe_id" - t.datetime "created_at" - t.datetime "updated_at" + create_table 'languages', force: true do |t| + t.string 'name', null: false + t.text 'words' + t.string 'established_year' + t.string 'established_location' + t.text 'characters' + t.text 'locations' + t.text 'notes' + t.integer 'user_id' + t.integer 'universe_id' + t.datetime 'created_at' + t.datetime 'updated_at' end - create_table "locations", force: true do |t| - t.string "name", null: false - t.string "type_of" - t.text "description" - t.string "map_file_name" - t.string "map_content_type" - t.integer "map_file_size" - t.datetime "map_updated_at" - t.string "population" - t.string "language" - t.string "currency" - t.string "motto" - t.text "capital" - t.text "largest_city" - t.text "notable_cities" - t.text "area" - t.text "crops" - t.text "located_at" - t.string "established_year" - t.text "notable_wars" - t.text "notes" - t.text "private_notes" - t.integer "user_id" - t.integer "universe_id" - t.datetime "created_at" - t.datetime "updated_at" + create_table 'locations', force: true do |t| + t.string 'name', null: false + t.string 'type_of' + t.text 'description' + t.string 'map_file_name' + t.string 'map_content_type' + t.integer 'map_file_size' + t.datetime 'map_updated_at' + t.string 'population' + t.string 'language' + t.string 'currency' + t.string 'motto' + t.text 'capital' + t.text 'largest_city' + t.text 'notable_cities' + t.text 'area' + t.text 'crops' + t.text 'located_at' + t.string 'established_year' + t.text 'notable_wars' + t.text 'notes' + t.text 'private_notes' + t.integer 'user_id' + t.integer 'universe_id' + t.datetime 'created_at' + t.datetime 'updated_at' end - create_table "magics", force: true do |t| - t.string "name", null: false - t.string "type_of" - t.text "manifestation" - t.text "symptoms" - t.string "element" - t.string "diety" - t.text "harmfulness" - t.text "helpfulness" - t.text "neutralness" - t.text "resource" - t.text "skill_level" - t.text "limitations" - t.text "notes" - t.text "private_notes" - t.integer "user_id" - t.integer "universe_id" - t.datetime "created_at" - t.datetime "updated_at" + create_table 'magics', force: true do |t| + t.string 'name', null: false + t.string 'type_of' + t.text 'manifestation' + t.text 'symptoms' + t.string 'element' + t.string 'diety' + t.text 'harmfulness' + t.text 'helpfulness' + t.text 'neutralness' + t.text 'resource' + t.text 'skill_level' + t.text 'limitations' + t.text 'notes' + t.text 'private_notes' + t.integer 'user_id' + t.integer 'universe_id' + t.datetime 'created_at' + t.datetime 'updated_at' end - create_table "sessions", force: true do |t| - t.string "username", null: false - t.string "password", null: false - t.datetime "created_at" - t.datetime "updated_at" + create_table 'sessions', force: true do |t| + t.string 'username', null: false + t.string 'password', null: false + t.datetime 'created_at' + t.datetime 'updated_at' end - create_table "universes", force: true do |t| - t.string "name", null: false - t.text "description" - t.text "history" - t.text "notes" - t.text "private_notes" - t.string "privacy" - t.integer "user_id" - t.datetime "created_at" - t.datetime "updated_at" + create_table 'universes', force: true do |t| + t.string 'name', null: false + t.text 'description' + t.text 'history' + t.text 'notes' + t.text 'private_notes' + t.string 'privacy' + t.integer 'user_id' + t.datetime 'created_at' + t.datetime 'updated_at' end - create_table "users", force: true do |t| - t.string "name", null: false - t.string "email", null: false - t.string "password", null: false - t.datetime "created_at" - t.datetime "updated_at" + create_table 'users', force: true do |t| + t.string 'name', null: false + t.string 'email', null: false + t.string 'password', null: false + t.datetime 'created_at' + t.datetime 'updated_at' end - end diff --git a/db/seeds.rb b/db/seeds.rb index b55d468c..6a8069d2 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,37 +1,30 @@ # ruby encoding: utf-8 -tolkien = User.create({ - :name => 'JRRTolkien', - :email => 'tolkien@example.com', - :password => 'Mellon'}) +tolkien = User.create(name: 'JRRTolkien', + email: 'tolkien@example.com', + password: 'Mellon') -middleearth = Universe.create({ - :name => 'Middle-Earth', - :user => tolkien, - :privacy => 'public'}) +Universe.create(name: 'Middle-Earth', + user: tolkien, + privacy: 'public') -frodo = Character.create({ - :name => 'Frodo Baggins', - :user => tolkien, - :universe => middleearth, - :age => '50'}) +Character.create(name: 'Frodo Baggins', + user: tolkien, + universe: middleearth, + age: '50') -sting = Equipment.create({ - :name => 'Sting', - :user => tolkien, - :universe => middleearth}) +Equipment.create(name: 'Sting', + user: tolkien, + universe: middleearth) -shire = Location.create({ - :name => 'The Shire', - :user => tolkien, - :universe => middleearth}) +Location.create(name: 'The Shire', + user: tolkien, + universe: middleearth) -sindarin = Language.create({ - :name => 'Sindarin', - :user => tolkien, - :universe => middleearth}) +Language.create(name: 'Sindarin', + user: tolkien, + universe: middleearth) -wizard = Magic.create({ - :name => 'Wizard Magic', - :user => tolkien, - :universe => middleearth}) \ No newline at end of file +Magic.create(name: 'Wizard Magic', + user: tolkien, + universe: middleearth) diff --git a/gemfiles/rails-4.2.edge.gemfile b/gemfiles/rails-4.2.edge.gemfile index aeae04e0..636dddba 100644 --- a/gemfiles/rails-4.2.edge.gemfile +++ b/gemfiles/rails-4.2.edge.gemfile @@ -27,6 +27,7 @@ group :test, :development do gem 'selenium-webdriver' gem 'coveralls', :require => false gem 'simplecov', :require => false + gem 'rubocop', require: false gem 'sqlite3' gem 'tzinfo-data' # addresses a bug when working on Windows end diff --git a/test/controllers/application_controller_test.rb b/test/controllers/application_controller_test.rb index 81906ca0..3860e3ad 100644 --- a/test/controllers/application_controller_test.rb +++ b/test/controllers/application_controller_test.rb @@ -1,5 +1,5 @@ require 'test_helper' +# Tests for the ApplicationController class ApplicationControllerTest < ActionController::TestCase - -end \ No newline at end of file +end diff --git a/test/controllers/characters_controller_test.rb b/test/controllers/characters_controller_test.rb index 1bfa9ba3..9419d7f3 100644 --- a/test/controllers/characters_controller_test.rb +++ b/test/controllers/characters_controller_test.rb @@ -1,54 +1,64 @@ require 'test_helper' +# Tests for the CharactersController class class CharactersControllerTest < ActionController::TestCase setup do @user = users(:tolkien) @universe = universes(:middleearth) - + log_in_user(:tolkien) end - test "should get index" do + test 'should get index' do get :index assert_response :success assert_not_nil assigns(:characters) end - test "should get new" do + test 'should get new' do get :new assert_response :success end - test "should create character" do + test 'should create character' do assert_difference('Character.count') do - post :create, character: { age: "Created Age", name: "Created Name", universe: @universe} + post :create, character: { + age: 'Created Age', + name: 'Created Name', + universe: @universe + } end assert_redirected_to character_path(assigns(:character)) end - test "should show character" do + test 'should show character' do @character = characters(:frodo) - + get :show, id: @character.id assert_response :success end - test "should get edit" do + test 'should get edit' do @character = characters(:frodo) get :edit, id: @character.id assert_response :success end - test "should update character" do + test 'should update character' do @character = characters(:frodo) - put :update, id: @character, character: { age: @character.age, name: @character.name, universe: @universe } - + + put :update, id: @character, character: { + age: @character.age, + name: @character.name, + universe: @universe + } + assert_response 302 assert_redirected_to character_path(@character) end - test "should destroy character" do + test 'should destroy character' do assert_difference('Character.count', -1) do delete :destroy, id: characters(:frodo).id end diff --git a/test/controllers/characters_generator_controller_test.rb b/test/controllers/characters_generator_controller_test.rb new file mode 100644 index 00000000..ba58c60c --- /dev/null +++ b/test/controllers/characters_generator_controller_test.rb @@ -0,0 +1,71 @@ +require 'test_helper' + +# Tests for the CharactersGeneratorController +class CharactersGeneratorControllerTest < ActionController::TestCase + test 'age' do + assert_assigns :age, [:upper_limit, :lower_limit] + assert_operator assigns(:lower_limit), :<=, assigns(:upper_limit) + end + + test 'body type' do + assert_assigns :bodytype, [:possible_types] + end + + test 'eye color' do + assert_assigns :eyecolor, [:possible_colors] + end + + test 'facial hair' do + assert_assigns :facialhair, [:possible_styles] + end + + test 'hair color' do + assert_assigns :haircolor, [:possible_colors] + end + + test 'hair style' do + assert_assigns :hairstyle, [:possible_styles] + end + + test 'height' do + assert_assigns :height, [ + :lower_foot_limit, + :upper_foot_limit, + :lower_inch_limit, + :upper_inch_limit + ] + assert_operator assigns(:lower_foot_limit), :<=, assigns(:upper_foot_limit) + assert_operator assigns(:lower_inch_limit), :<=, assigns(:upper_inch_limit) + + assert_operator assigns(:lower_foot_limit), :>=, 0 + assert_operator assigns(:lower_inch_limit), :>=, 0 + end + + test 'identifying mark' do + assert_assigns :identifyingmark, [:possible_marks, :possible_locations] + end + + test 'name' do + assert_assigns :name, [ + :male_first_names, + :female_first_names, + :last_names, + :all_first_names, + :all_last_names + ] + end + + test 'race' do + assert_assigns :race, [:possible_races] + end + + test 'skin tone' do + assert_assigns :skintone, [:possible_tones] + end + + test 'weight' do + assert_assigns :weight, [:upper_limit, :lower_limit] + assert_operator assigns(:lower_limit), :<=, assigns(:upper_limit) + assert_operator assigns(:lower_limit), :>=, 0 + end +end diff --git a/test/controllers/equipment_controller_test.rb b/test/controllers/equipment_controller_test.rb index 779c3acb..d09258aa 100644 --- a/test/controllers/equipment_controller_test.rb +++ b/test/controllers/equipment_controller_test.rb @@ -1,47 +1,54 @@ require 'test_helper' +# Tests for the EquipmentController class class EquipmentControllerTest < ActionController::TestCase setup do log_in_user(:tolkien) end - - test "should get index" do + + test 'should get index' do get :index assert_response :success assert_not_nil assigns(:equipment) end - test "should get new" do + test 'should get new' do get :new assert_response :success end - test "should create equipment" do + test 'should create equipment' do assert_difference('Equipment.count') do - post :create, equipment: { name: "Created Equipment", universe: universes(:middleearth)} + post :create, equipment: { + name: 'Created Equipment', + universe: universes(:middleearth) + } end assert_redirected_to equipment_path(assigns(:equipment)) end - test "should show equipment" do + test 'should show equipment' do get :show, id: equipment(:sting).id assert_response :success end - test "should get edit" do + test 'should get edit' do get :edit, id: equipment(:sting).id assert_response :success end - test "should update equipment" do - put :update, id: equipment(:sting).id, equipment: { name: "Updated Equipment Name", universe: universes(:middleearth) } - + test 'should update equipment' do + put :update, id: equipment(:sting).id, equipment: { + name: 'Updated Equipment Name', + universe: universes(:middleearth) + } + assert_response 302 assert_redirected_to equipment_path(equipment(:sting)) end - test "should destroy equipment" do + test 'should destroy equipment' do assert_difference('Equipment.count', -1) do delete :destroy, id: equipment(:sting).id end diff --git a/test/controllers/equipment_generator_controller_test.rb b/test/controllers/equipment_generator_controller_test.rb new file mode 100644 index 00000000..09d19588 --- /dev/null +++ b/test/controllers/equipment_generator_controller_test.rb @@ -0,0 +1,52 @@ +require 'test_helper' + +# Tests for the EquipmentGeneratorController +class EquipmentGeneratorControllerTest < ActionController::TestCase + test 'armor' do + skip 'method currently does nothing' + end + + test 'armor shield' do + assert_assigns :armor_shield, [:shield_types] + end + + test 'weapon' do + assert_assigns :weapon, [:weapon_types] + end + + test 'weapon axe' do + assert_assigns :weapon_axe, [:axe_types] + end + + test 'weapon bow' do + assert_assigns :weapon_bow, [:bow_types] + end + + test 'weapon club' do + assert_assigns :weapon_club, [:club_types] + end + + test 'weapon fist' do + assert_assigns :weapon_fist, [:fist_weapon_types] + end + + test 'weapon flexible' do + assert_assigns :weapon_flexible, [:flexible_types] + end + + test 'weapon thrown' do + assert_assigns :weapon_thrown, [:thrown_types] + end + + test 'weapon polearm' do + assert_assigns :weapon_polearm, [:polearm_types] + end + + test 'weapon shortsword' do + assert_assigns :weapon_shortsword, [:shortsword_types] + end + + test 'weapon sword' do + assert_assigns :weapon_sword, [:sword_types] + end +end diff --git a/test/controllers/generator_controller_test.rb b/test/controllers/generator_controller_test.rb deleted file mode 100644 index 8c4f01de..00000000 --- a/test/controllers/generator_controller_test.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'test_helper' - -class GeneratorControllerTest < ActionController::TestCase - -end \ No newline at end of file diff --git a/test/controllers/languages_controller_test.rb b/test/controllers/languages_controller_test.rb index 3f8cbd06..bad4c3e2 100644 --- a/test/controllers/languages_controller_test.rb +++ b/test/controllers/languages_controller_test.rb @@ -1,46 +1,53 @@ require 'test_helper' +# Tests for the LanguagesController class class LanguagesControllerTest < ActionController::TestCase setup do log_in_user(:tolkien) end - - test "should get index" do + + test 'should get index' do get :index assert_response :success assert_not_nil assigns(:languages) end - test "should get new" do + test 'should get new' do get :new assert_response :success end - test "should create language" do + test 'should create language' do assert_difference('Language.count', 1) do - post :create, language: { name: "Created Language", universe: universes(:middleearth)} + post :create, language: { + name: 'Created Language', + universe: universes(:middleearth) + } end assert_redirected_to language_path(assigns(:language)) end - test "should show language" do + test 'should show language' do get :show, id: languages(:sindarin).id assert_response :success end - test "should get edit" do + test 'should get edit' do get :edit, id: languages(:sindarin).id assert_response :success end - test "should update language" do - put :update, id: languages(:sindarin).id, language: { name: "Updated Language Name", universe: universes(:middleearth) } - + test 'should update language' do + put :update, id: languages(:sindarin).id, language: { + name: 'Updated Language Name', + universe: universes(:middleearth) + } + assert_redirected_to language_path(languages(:sindarin)) end - test "should destroy language" do + test 'should destroy language' do assert_difference('Language.count', -1) do delete :destroy, id: languages(:sindarin).id end diff --git a/test/controllers/locations_controller_test.rb b/test/controllers/locations_controller_test.rb index 0020797b..2f74839f 100644 --- a/test/controllers/locations_controller_test.rb +++ b/test/controllers/locations_controller_test.rb @@ -1,81 +1,104 @@ require 'test_helper' +# Tests for the LocationsController class class LocationsControllerTest < ActionController::TestCase setup do @user = users(:tolkien) @universe = universes(:middleearth) - + log_in_user(:tolkien) end - test "should get index" do + test 'should get index' do get :index assert_response :success assert_not_nil assigns(:locations) end - test "should get new" do + test 'should get new' do get :new assert_response :success end - test "should create location" do + test 'should create location' do assert_difference('Location.count') do - post :create, location: { name: "Isengard", universe: @universe, user: @user} + post :create, location: { + name: 'Isengard', + universe: @universe, + user: @user + } end assert_redirected_to location_path(assigns(:location)) end - test "should show location" do + test 'should show location' do @location = locations(:shire) - + get :show, id: @location.id assert_response :success end - test "should get edit" do + test 'should get edit' do @location = locations(:shire) get :edit, id: @location.id assert_response :success end - test "should update location" do + test 'should update location' do @location = locations(:shire) - put :update, id: @location, location: { name: "Bag End", universe: @universe } - + put :update, id: @location, location: { + name: 'Bag End', + universe: @universe + } + assert_response 302 assert_redirected_to location_path(@location) end - test "should destroy location" do + test 'should destroy location' do assert_difference('Location.count', -1) do delete :destroy, id: locations(:shire).id end assert_redirected_to location_list_url end - - test "should create location with image" do + + test 'should create location with image' do assert_difference('Location.count') do map = fixture_file_upload('mordor_map.jpg', 'image/jpeg') - post :create, location: { name: 'Mordor', map: map, universe: @universe, user: @user } + post :create, location: { + name: 'Mordor', + map: map, + universe: @universe, + user: @user + } end - + assert_redirected_to location_path(assigns(:location)) end - - test "should reject images with an invalid type" do + + test 'should reject images with an invalid type' do assert_no_difference('Location.count') do map = fixture_file_upload('mordor_map.jpg', 'invalid/notanimage') - post :create, location: { name: 'Mordor', map: map, universe: @universe, user: @user } + post :create, location: { + name: 'Mordor', + map: map, + universe: @universe, + user: @user + } end end - - test "should reject images with an empty type" do + + test 'should reject images with an empty type' do assert_no_difference('Location.count') do map = fixture_file_upload('mordor_map.jpg', '') - post :create, location: { name: 'Mordor', map: map, universe: @universe, user: @user } + post :create, location: { + name: 'Mordor', + map: map, + universe: @universe, + user: @user + } end end -end \ No newline at end of file +end diff --git a/test/controllers/locations_generator_controller_test.rb b/test/controllers/locations_generator_controller_test.rb new file mode 100644 index 00000000..ef563cdf --- /dev/null +++ b/test/controllers/locations_generator_controller_test.rb @@ -0,0 +1,29 @@ +require 'test_helper' + +# Tests for the LocationsGeneratorController +class LocationsGeneratorControllerTest < ActionController::TestCase + test 'name' do + assert_assigns :name, [ + :root_name, + :prefix_occurrence, + :postfix_occurrence, + :syllables_upper_limit, + :syllables_lower_limit, + :prefixes, + :postfixes, + :syllables + ] + assert_operator assigns(:prefix_occurrence), :<=, 1 + assert_operator assigns(:prefix_occurrence), :>=, 0 + + assert_operator assigns(:postfix_occurrence), :<=, 1 + assert_operator assigns(:postfix_occurrence), :>=, 0 + + assert_operator( + assigns(:syllables_lower_limit), + :<=, + assigns(:syllables_upper_limit)) + + assert_operator assigns(:syllables_lower_limit), :>=, 0 + end +end diff --git a/test/controllers/magic_controller_test.rb b/test/controllers/magic_controller_test.rb index f0389ea9..b5785aac 100644 --- a/test/controllers/magic_controller_test.rb +++ b/test/controllers/magic_controller_test.rb @@ -1,5 +1,6 @@ require 'test_helper' +# Tests for the MagicController class class MagicControllerTest < ActionController::TestCase setup do @user = users(:tolkien) diff --git a/test/controllers/main_controller_test.rb b/test/controllers/main_controller_test.rb index 464b7b14..54e2f12f 100644 --- a/test/controllers/main_controller_test.rb +++ b/test/controllers/main_controller_test.rb @@ -1,9 +1,10 @@ require 'test_helper' +# Tests for the MainController class, which serves the model-non-specific +# pages of the site, like the front page. class MainControllerTest < ActionController::TestCase - test "should get index" do + test 'should get index' do get :index assert_response :success end - -end \ No newline at end of file +end diff --git a/test/controllers/sessions_controller_test.rb b/test/controllers/sessions_controller_test.rb index 515511a5..bd7a1a98 100644 --- a/test/controllers/sessions_controller_test.rb +++ b/test/controllers/sessions_controller_test.rb @@ -1,5 +1,5 @@ require 'test_helper' +# Tests for the SessionsController class class SessionsControllerTest < ActionController::TestCase - -end \ No newline at end of file +end diff --git a/test/controllers/users_controller_test.rb b/test/controllers/users_controller_test.rb index f292c446..d2995625 100644 --- a/test/controllers/users_controller_test.rb +++ b/test/controllers/users_controller_test.rb @@ -1,5 +1,6 @@ require 'test_helper' +# Tests for the UsersController class class UsersControllerTest < ActionController::TestCase test 'editing a user requires login' do get :edit, id: users(:tolkien).id diff --git a/test/helpers/application_helper_test.rb b/test/helpers/application_helper_test.rb index d480802b..a20a35ff 100644 --- a/test/helpers/application_helper_test.rb +++ b/test/helpers/application_helper_test.rb @@ -1,58 +1,59 @@ require 'test_helper' +# Tests for the ApplicationHelper class class ApplicationHelperTest < ActionView::TestCase include ApplicationHelper - - test "when user is logged-in, links character" do + + test 'when user is logged-in, links character' do log_in_user(:tolkien) - link = link_if_present "Frodo Baggins", "character" - assert_equal link_to("Frodo Baggins", characters(:frodo)), link + link = link_if_present 'Frodo Baggins', 'character' + assert_equal link_to('Frodo Baggins', characters(:frodo)), link end - - test "when user is logged-in, links equipment" do + + test 'when user is logged-in, links equipment' do log_in_user(:tolkien) - link = link_if_present "Sting", "equipment" - assert_equal link_to("Sting", equipment(:sting)), link + link = link_if_present 'Sting', 'equipment' + assert_equal link_to('Sting', equipment(:sting)), link end - - test "when user is logged-in, links language" do + + test 'when user is logged-in, links language' do log_in_user(:tolkien) - link = link_if_present "Sindarin", "language" - assert_equal link_to("Sindarin", languages(:sindarin)), link + link = link_if_present 'Sindarin', 'language' + assert_equal link_to('Sindarin', languages(:sindarin)), link end - - test "when user is logged-in, links location" do + + test 'when user is logged-in, links location' do log_in_user(:tolkien) - link = link_if_present "The Shire", "location" - assert_equal link_to("The Shire", locations(:shire)), link + link = link_if_present 'The Shire', 'location' + assert_equal link_to('The Shire', locations(:shire)), link end - - test "when user is logged-in, links magic" do + + test 'when user is logged-in, links magic' do log_in_user(:tolkien) - link = link_if_present "Wizard Magic", "magic" - assert_equal link_to("Wizard Magic", magics(:wizard)), link + link = link_if_present 'Wizard Magic', 'magic' + assert_equal link_to('Wizard Magic', magics(:wizard)), link end - - test "when user is logged-in, links universe" do + + test 'when user is logged-in, links universe' do log_in_user(:tolkien) - link = link_if_present "Middle-Earth", "universe" - assert_equal link_to("Middle-Earth", universes(:middleearth)), link + link = link_if_present 'Middle-Earth', 'universe' + assert_equal link_to('Middle-Earth', universes(:middleearth)), link end - - test "when user is not logged-in, just returns the given name" do - link = link_if_present "Frodo Baggins", "character" - assert_equal "Frodo Baggins", link + + test 'when user is not logged-in, just returns the given name' do + link = link_if_present 'Frodo Baggins', 'character' + assert_equal 'Frodo Baggins', link end - - test "when name is not found, just return the given name" do + + test 'when name is not found, just return the given name' do log_in_user(:tolkien) - link = link_if_present "Princess Zelda", "character" - assert_equal "Princess Zelda", link + link = link_if_present 'Princess Zelda', 'character' + assert_equal 'Princess Zelda', link end - - test "print_property makes a link" do + + test 'print_property makes a link' do log_in_user(:tolkien) - property = print_property "The Ring-Bearer", "Frodo Baggins", "character" - assert property.include? link_to("Frodo Baggins", characters(:frodo)) + property = print_property 'The Ring-Bearer', 'Frodo Baggins', 'character' + assert property.include? link_to('Frodo Baggins', characters(:frodo)) end end diff --git a/test/helpers/characters_helper_test.rb b/test/helpers/characters_helper_test.rb index 9d0b2c38..6c7e5bef 100644 --- a/test/helpers/characters_helper_test.rb +++ b/test/helpers/characters_helper_test.rb @@ -1,4 +1,5 @@ require 'test_helper' +# Tests for the CharacterHelper class class CharactersHelperTest < ActionView::TestCase end diff --git a/test/helpers/equipment_helper_test.rb b/test/helpers/equipment_helper_test.rb index f23c6206..67abeec2 100644 --- a/test/helpers/equipment_helper_test.rb +++ b/test/helpers/equipment_helper_test.rb @@ -1,4 +1,5 @@ require 'test_helper' +# Tests for the EquipmentHelper class class EquipmentHelperTest < ActionView::TestCase end diff --git a/test/helpers/languages_helper_test.rb b/test/helpers/languages_helper_test.rb index 3bc9dd9d..85d60f51 100644 --- a/test/helpers/languages_helper_test.rb +++ b/test/helpers/languages_helper_test.rb @@ -1,4 +1,5 @@ require 'test_helper' +# Tests for the LanguagesHelper class class LanguagesHelperTest < ActionView::TestCase end diff --git a/test/integration/character_stories_test.rb b/test/integration/character_stories_test.rb index edc0228a..35afbbe6 100644 --- a/test/integration/character_stories_test.rb +++ b/test/integration/character_stories_test.rb @@ -1,33 +1,34 @@ require 'test_helper' +# Tests scenarios related to interacting with Characters class CharacterStoriesTest < ActionDispatch::IntegrationTest fixtures :characters - - test 'a user can click the characters button from the dashboard to open the characters list' do + + test 'characters button shows characters list' do log_in_as_user visit dashboard_path click_on 'Characters' assert_equal character_list_path, current_path end - - test 'a user can click edit from the characters list to open the character editor' do + + test 'character list edit button edits character' do log_in_as_user visit character_list_path click_on 'Edit' assert_equal character_edit_path(characters(:frodo)), current_path end - - test 'a user can click view from the characters list to open the character view' do + + test 'view button shows character list' do log_in_as_user visit character_list_path click_on 'View' assert_equal character_path(characters(:frodo)), current_path end - - test 'a user can click the edit button from character view to open the character editor' do + + test 'character view edit button edits character' do log_in_as_user visit character_path(characters(:frodo)) click_on 'Edit' assert_equal character_edit_path(characters(:frodo)), current_path end -end \ No newline at end of file +end diff --git a/test/integration/location_stories_test.rb b/test/integration/location_stories_test.rb index db9a0b61..077f5e82 100644 --- a/test/integration/location_stories_test.rb +++ b/test/integration/location_stories_test.rb @@ -1,46 +1,49 @@ require 'test_helper' +# Tests scenarios related to interacting with Locations class LocationStoriesTest < ActionDispatch::IntegrationTest fixtures :locations - - test 'a user can click the locations button from the dashboard to open the locations list' do + + test 'locations button shows locations list' do log_in_as_user visit dashboard_path click_on 'Locations' assert_equal location_list_path, current_path end - - test 'a user can click edit from the locations list to open the location editor' do + + test 'location list edit button edits location' do log_in_as_user visit location_list_path click_on 'Edit' assert_equal location_edit_path(locations(:shire)), current_path end - - test 'a user can click view from the locations list to open the location view' do + + test 'location list view button shows location' do log_in_as_user visit location_list_path click_on 'View' assert_equal location_path(locations(:shire)), current_path end - - test 'a user can click the edit button from location view to open the location editor' do + + test 'location view edit button edits location' do log_in_as_user visit location_path(locations(:shire)) click_on 'Edit' assert_equal location_edit_path(locations(:shire)), current_path end - + test 'a user can create a new location' do log_in_as_user visit location_list_path click_on 'New location' - fill_in 'location_name', :with => 'Mordor' - fill_in 'location_universe', :with => 'Middle-Earth' + fill_in 'location_name', with: 'Mordor' + fill_in 'location_universe', with: 'Middle-Earth' click_on 'Create Location' - assert_equal location_path(Location.where(:name => 'Mordor').first), current_path + + assert_equal location_path(Location.where(name: 'Mordor').first), + current_path end - + test 'a user can upload a map to an existing location' do log_in_as_user visit location_list_path @@ -50,4 +53,4 @@ class LocationStoriesTest < ActionDispatch::IntegrationTest click_on 'Update Location' assert_equal location_path(locations(:shire)), current_path end -end \ No newline at end of file +end diff --git a/test/integration/user_stories_test.rb b/test/integration/user_stories_test.rb index 6c01b72e..ce687a97 100644 --- a/test/integration/user_stories_test.rb +++ b/test/integration/user_stories_test.rb @@ -1,38 +1,49 @@ require 'test_helper' +# Tests scenarios related to users and their accounts class UserStoriesTest < ActionDispatch::IntegrationTest test 'creating a new user ends at the new user\'s dashboard' do register_as 'Christopher Tolkien', 'tolkienjr@example.com', 'HiDad' - assert_equal dashboard_path, current_path, 'New user was not directed to their dashboard after creating an account' + assert_equal dashboard_path, current_path, + 'New user was not directed to their dashboard \ + after creating an account' end - + test 'logging in as an existing user goes to the users dashboard' do log_in_as_user - - assert_equal dashboard_path, current_path, 'Existing user was not directed to their dashboard after logging in' + + assert_equal dashboard_path, current_path, + 'Existing user was not directed to their dashboard \ + after logging in' end - + test 'logging in anonymously goes into an empty dashboard' do log_in_as_anon - - assert_equal dashboard_path, current_path, 'Anonymous user was not directed to their dashboard after logging in' + + assert_equal dashboard_path, current_path, + 'Anonymous user was not directed to their dashboard \ + after logging in' end - + + ## # Regression test for https://github.com/drusepth/Indent/issues/366 - test 'Anonymous flag is reset on user logins' do log_in_as_anon log_out log_in_as_user - refute page.has_content?('You are currently using an anonymous account'), 'Logged-in user was told they were using an anonymous account, regression of https://github.com/drusepth/Indent/issues/366' + refute page.has_content?('You are currently using an anonymous account'), + 'Logged-in user was told they were using an anonymous account, \ + regression of https://github.com/drusepth/Indent/issues/366' end - + + ## # Regression test for https://github.com/drusepth/Indent/issues/378 - test 'user can log in to new accounts' do register_as 'Christopher Tolkien', 'tolkienjr@example.com', 'HiDad' log_out log_in_as 'Christopher Tolkien', 'HiDad' - assert_equal dashboard_path, current_path, 'Users cannot log in to new accounts, regression of https://github.com/drusepth/Indent/issues/378' + assert_equal dashboard_path, current_path, + 'Users cannot log in to new accounts, \ + regression of https://github.com/drusepth/Indent/issues/378' end end diff --git a/test/models/character_test.rb b/test/models/character_test.rb index 6722546f..da3ce466 100644 --- a/test/models/character_test.rb +++ b/test/models/character_test.rb @@ -1,19 +1,27 @@ require 'test_helper' +# Tests for the model class Character class CharacterTest < ActiveSupport::TestCase - test "character not valid without a name" do - skip "Validation has been disabled due to conflicts during the database migration. We are considering removing this validation" + test 'character not valid without a name' do + skip 'Validation disabled due to database migration conflicts.' character = characters(:frodo) character.name = nil - - refute character.valid?, "Character name not being validated for presence" + + refute character.valid?, 'Character name not being validated for presence' end - - test "characters fixture assumptions" do - assert_not_nil characters(:frodo), "Characters fixture :one is not available" - assert characters(:frodo).valid?, "Characters fixture :one is not valid" - - assert_equal users(:tolkien), characters(:frodo).user, "Characters fixture :one is not associated with Users fixture :one" - assert_equal universes(:middleearth), characters(:frodo).universe, "Characters fixture :one is not associated with Universes fixture :one" + + test 'characters fixture assumptions' do + assert_not_nil characters(:frodo), 'Characters fixture is not available' + assert characters(:frodo).valid?, 'Characters fixture is not valid' + + assert_equal( + users(:tolkien), + characters(:frodo).user, + 'Characters fixture is not associated with Users fixture') + + assert_equal( + universes(:middleearth), + characters(:frodo).universe, + 'Characters fixture is not associated with Universes fixture') end end diff --git a/test/models/equipment_test.rb b/test/models/equipment_test.rb index 65fc724f..500fa730 100644 --- a/test/models/equipment_test.rb +++ b/test/models/equipment_test.rb @@ -1,19 +1,20 @@ require 'test_helper' +# Tests for the Equipment model class class EquipmentTest < ActiveSupport::TestCase - test "equipment not valid without a name" do - skip "Validation has been disabled due to conflicts during the database migration. We are considering removing this validation entirely" + test 'equipment not valid without a name' do + skip 'Validation disabled due to database migration conflicts.' equipment = equipment(:sting) equipment.name = nil - - refute equipment.valid?, "Name is not being validated for presence" + + refute equipment.valid?, 'Name is not being validated for presence' end - - test "equipment fixture exists" do + + test 'equipment fixture exists' do assert_not_nil equipment(:sting) end - - test "equipement belongs to user and universe" do + + test 'equipement belongs to user and universe' do assert_equal users(:tolkien), equipment(:sting).user assert_equal universes(:middleearth), equipment(:sting).universe end diff --git a/test/models/language_test.rb b/test/models/language_test.rb index 356b2e77..a99be61b 100644 --- a/test/models/language_test.rb +++ b/test/models/language_test.rb @@ -1,19 +1,20 @@ require 'test_helper' +# Tests for the Language model class class LanguageTest < ActiveSupport::TestCase - test "language not valid without a name" do - skip "Validation has been disabled due to conflicts during the database migration. We are considering removing this validation entirely" + test 'language not valid without a name' do + skip 'Validation disabled due to database migration conflicts.' language = languages(:sindarin) language.name = nil - - refute language.valid?, "Language name not being validated for presence" + + refute language.valid?, 'Language name not being validated for presence' end - - test "language fixture exists" do + + test 'language fixture exists' do assert_not_nil languages(:sindarin) end - - test "language belongs to user and universe" do + + test 'language belongs to user and universe' do assert_equal users(:tolkien), languages(:sindarin).user assert_equal universes(:middleearth), languages(:sindarin).universe end diff --git a/test/models/location_test.rb b/test/models/location_test.rb index c5ba5061..2fd51f0b 100644 --- a/test/models/location_test.rb +++ b/test/models/location_test.rb @@ -1,18 +1,25 @@ require 'test_helper' +# Tests for the Location model class class LocationTest < ActiveSupport::TestCase - test "location not valid without a name" do + test 'location not valid without a name' do location = locations(:shire) location.name = nil - - refute location.valid?, "Location name is not being validated for presence" + + refute location.valid?, 'Location name is not being validated for presence' end - - test "location fixture assumptions" do - assert_not_nil locations(:shire), "Locations fixture :one not available" - assert locations(:shire).valid?, "Locations fixture :one not valid" - - assert_equal users(:tolkien), locations(:shire).user, "Locations fixture :one not associated with Users fixture :one" - assert_equal universes(:middleearth), locations(:shire).universe, "Locations fixture :one not associated with Universes fixture :one" + + test 'location fixture assumptions' do + assert_not_nil locations(:shire), + 'Locations fixture not available' + + assert locations(:shire).valid?, + 'Locations fixture not valid' + + assert_equal users(:tolkien), locations(:shire).user, + 'Locations fixture associated with Users fixture' + + assert_equal universes(:middleearth), locations(:shire).universe, + 'Locations fixture not associated with Universes fixture' end end diff --git a/test/models/magic_test.rb b/test/models/magic_test.rb index 475594e2..7b2758ab 100644 --- a/test/models/magic_test.rb +++ b/test/models/magic_test.rb @@ -1,16 +1,17 @@ require 'test_helper' +# Tests for the Magic model class class MagicTest < ActiveSupport::TestCase - test "magic not valid without a name" do - skip "Validation has been disabled due to conflicts during the database migration. We are considering removing this validation entirely" + test 'magic not valid without a name' do + skip 'Validation disabled due to database migration conflicts.' magic = magics(:wizard) magic.name = nil - - refute magic.valid?, "Magic name is not being validated for presence" + + refute magic.valid?, 'Magic name is not being validated for presence' end - - test "magic fixture assumptions" do - assert_not_nil magics(:wizard), "Magics fixture :one is unavailable" - assert magics(:wizard).valid?, "Magics fixture :one is not valid" + + test 'magic fixture assumptions' do + assert_not_nil magics(:wizard), 'Magics fixture is unavailable' + assert magics(:wizard).valid?, 'Magics fixture is not valid' end end diff --git a/test/models/session_test.rb b/test/models/session_test.rb index 78a75f6e..3611e3c8 100644 --- a/test/models/session_test.rb +++ b/test/models/session_test.rb @@ -1,22 +1,28 @@ require 'test_helper' +# Tests for the Session model class class SessionTest < ActiveSupport::TestCase - test "session not valid without a username" do + test 'session not valid without a username' do session = sessions(:tolkien) session.username = nil - - refute session.valid?, "Session username is not being validated for presence" + + refute session.valid?, + 'Session username is not being validated for presence' end - - test "session not valid without a password" do + + test 'session not valid without a password' do session = sessions(:tolkien) session.password = nil - - refute session.valid?, "Session password is not being validated for presence" + + refute session.valid?, + 'Session password is not being validated for presence' end - - test "session fixture assumptions" do - assert_not_nil sessions(:tolkien), "Sessions fixture :one is not available" - assert sessions(:tolkien).valid?, "Sessions fixture :one is not a valid session" + + test 'session fixture assumptions' do + assert_not_nil sessions(:tolkien), + 'Sessions fixture is not available' + + assert sessions(:tolkien).valid?, + 'Sessions fixture :one is not a valid session' end end diff --git a/test/models/universe_test.rb b/test/models/universe_test.rb index 6dc6f7de..c58dce00 100644 --- a/test/models/universe_test.rb +++ b/test/models/universe_test.rb @@ -1,21 +1,28 @@ require 'test_helper' +# Tests for the Universe model class class UniverseTest < ActiveSupport::TestCase - test "universe not valid without a name" do - skip "Validation has been disabled due to conflicts during the database migration. We are considering removing this validation entirely" + test 'universe not valid without a name' do + skip 'Validation disabled due to database migration conflicts.' universe = universes(:middleearth) universe.name = nil - - refute universe.valid?, "Universe name is not being validated for presence" + + refute universe.valid?, 'Universe name is not being validated for presence' end - - test "universe fixture assumptions" do - assert_not_nil universes(:middleearth), "Universes fixture :one is not available" - assert universes(:middleearth).valid?, "Universes fixture :one is not a valid universe" - assert_equal users(:tolkien), universes(:middleearth).user, "Universe fixture :one not associated with User fixture :one" + + test 'universe fixture assumptions' do + assert_not_nil universes(:middleearth), + 'Universes fixture is not available' + + assert universes(:middleearth).valid?, + 'Universes fixture is not a valid universe' + + assert_equal users(:tolkien), universes(:middleearth).user, + 'Universe fixture not associated with User fixture' end - - test "can count content" do - assert_equal 5, universes(:middleearth).content_count, "Universe didn't count its content properly" + + test 'can count content' do + assert_equal 5, universes(:middleearth).content_count, + "Universe didn't count its content properly" end end diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 52f03efc..69241296 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -1,44 +1,57 @@ require 'test_helper' +# Tests for the User model class class UserTest < ActiveSupport::TestCase - test "user not valid without a name" do + test 'user not valid without a name' do user = users(:tolkien) user.name = nil - - refute user.valid?, "Name is not being validated for presence" + + refute user.valid?, 'Name is not being validated for presence' end - - test "user not valid without a password" do + + test 'user not valid without a password' do user = users(:tolkien) user.password = nil - - refute user.valid?, "Password is not being validated for presence" + + refute user.valid?, 'Password is not being validated for presence' end - - test "user not valid without an email address" do + + test 'user not valid without an email address' do user = users(:tolkien) user.email = nil - - refute user.valid?, "Email address is not being validated for presence" + + refute user.valid?, 'Email address is not being validated for presence' end - - test "user fixture assumptions" do - assert_not_nil users(:tolkien), "User fixture :one is unavailable" - assert users(:tolkien).valid?, "User fixture :one is not a valid user" + + test 'user fixture assumptions' do + assert_not_nil users(:tolkien), 'User fixture is unavailable' + assert users(:tolkien).valid?, 'User fixture is not a valid user' end - - test "can get user content" do + + test 'can get user content' do content = users(:tolkien).content - - assert_includes content[:characters], characters(:frodo), "User content doesn't include characters" - assert_includes content[:equipment], equipment(:sting), "User content doesn't include equipment" - assert_includes content[:languages], languages(:sindarin), "User content doesn't include languages" - assert_includes content[:locations], locations(:shire), "User content doesn't include locations" - assert_includes content[:magics], magics(:wizard), "User content doesn't include magics" - assert_includes content[:universes], universes(:middleearth), "User content doesn't include universes" + + assert_includes content[:characters], characters(:frodo), + "User content doesn't include characters" + + assert_includes content[:equipment], equipment(:sting), + "User content doesn't include equipment" + + assert_includes content[:languages], languages(:sindarin), + "User content doesn't include languages" + + assert_includes content[:locations], locations(:shire), + "User content doesn't include locations" + + assert_includes content[:magics], magics(:wizard), + "User content doesn't include magics" + + assert_includes content[:universes], universes(:middleearth), + "User content doesn't include universes" end - - test "can count content" do - assert_equal 6, users(:tolkien).content_count, "User didn't count its content properly" + + test 'can count content' do + assert_equal 6, users(:tolkien).content_count, + "User didn't count its content properly" end end diff --git a/test/performance/browsing_test.rb b/test/performance/browsing_test.rb index 3fea27b9..74a55842 100644 --- a/test/performance/browsing_test.rb +++ b/test/performance/browsing_test.rb @@ -1,11 +1,11 @@ require 'test_helper' require 'rails/performance_test_help' +# Tests performance by browsing the site +# Refer to the documentation for all available options +# self.profile_options = { :runs => 5, :metrics => [:wall_time, :memory] +# :output => 'tmp/performance', :formats => [:flat] } class BrowsingTest < ActionDispatch::PerformanceTest - # Refer to the documentation for all available options - # self.profile_options = { :runs => 5, :metrics => [:wall_time, :memory] - # :output => 'tmp/performance', :formats => [:flat] } - def test_homepage get '/' end diff --git a/test/test_helper.rb b/test/test_helper.rb index 968a0ded..d3b9b276 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -8,56 +8,75 @@ require File.expand_path('../../config/environment', __FILE__) require 'rails/test_help' require 'capybara/rails' -class ActiveSupport::TestCase - fixtures :all +module ActiveSupport + # Helper methods for unit tests + class TestCase + fixtures :all - def log_in_user(user_fixture) - session[:user] = users(user_fixture).id + def log_in_user(user_fixture) + session[:user] = users(user_fixture).id + end end end -class ActionDispatch::IntegrationTest - # Make the Capybara DSL available in all integration tests - include Capybara::DSL - - def register_as(name, email, password) - visit homepage_path - click_on 'Register' - fill_in 'user_name', :with => name - fill_in 'user_email', :with => email - fill_in 'user_password', :with => password - click_on 'Create User' - end - - def log_in_as(user, password) - visit homepage_path - click_on 'Login' - within('#new_session') do - fill_in 'session[username]', :with => user - fill_in 'session[password]', :with => password +module ActionController + # Helper methods for controller tests + class TestCase + def assert_assigns(method, assigned = {}) + get method + assert_response :success + assigned.each do |val| + assert_not assigns(val).blank?, "#{method} did not assign #{val}" + end + end + end +end + +module ActionDispatch + # Helper methods for integration tests + class IntegrationTest + # Make the Capybara DSL available in all integration tests + include Capybara::DSL + + def register_as(name, email, password) + visit homepage_path + click_on 'Register' + fill_in 'user_name', with: name + fill_in 'user_email', with: email + fill_in 'user_password', with: password + click_on 'Create User' + end + + def log_in_as(user, password) + visit homepage_path + click_on 'Login' + within('#new_session') do + fill_in 'session[username]', with: user + fill_in 'session[password]', with: password + end + within('#session-actions') do + click_on 'Log in' + end + end + + def log_in_as_user + log_in_as 'JRRTolkien', 'Mellon' + end + + def log_in_as_anon + visit homepage_path + click_on 'Login' + click_on 'Be Anonymous' + click_on 'I understand, create an account for me' + end + + def log_out + visit logout_path + end + + def teardown + Capybara.reset_sessions! + Capybara.use_default_driver end - within('#session-actions') do - click_on 'Log in' - end - end - - def log_in_as_user - log_in_as 'JRRTolkien', 'Mellon' - end - - def log_in_as_anon - visit homepage_path - click_on 'Login' - click_on 'Be Anonymous' - click_on 'I understand, create an account for me' - end - - def log_out - visit logout_path - end - - def teardown - Capybara.reset_sessions! - Capybara.use_default_driver end end