Updated sprockets and rubocop for security fixes

This commit is contained in:
John Gaskin 2018-10-02 11:39:56 -04:00
parent cf60c5be7f
commit ab1035f738
58 changed files with 444 additions and 199 deletions

188
.rubocop.yml Normal file
View File

@ -0,0 +1,188 @@
AllCops:
TargetRubyVersion: 2.3
# RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
# to ignore them, so only the ones explicitly set in this file are enabled.
DisabledByDefault: true
Exclude:
- '**/templates/**/*'
- '**/vendor/**/*'
- 'actionpack/lib/action_dispatch/journey/parser.rb'
- 'lib/templates/**/*'
- 'db/**/*'
- 'config/**/*'
- 'vendor/**/*'
# Prefer &&/|| over and/or.
Style/AndOr:
Enabled: true
# Do not use braces for hash literals when they are the last argument of a
# method call.
Style/BracesAroundHashParameters:
Enabled: true
EnforcedStyle: context_dependent
# Align `when` with `case`.
Layout/CaseIndentation:
Enabled: true
# Align comments with method definitions.
Layout/CommentIndentation:
Enabled: true
Layout/EmptyLineAfterMagicComment:
Enabled: true
Layout/EmptyLinesAroundBlockBody:
Enabled: true
# In a regular class definition, no empty lines around the body.
Layout/EmptyLinesAroundClassBody:
Enabled: true
# In a regular method definition, no empty lines around the body.
Layout/EmptyLinesAroundMethodBody:
Enabled: true
# In a regular module definition, no empty lines around the body.
Layout/EmptyLinesAroundModuleBody:
Enabled: true
Layout/FirstParameterIndentation:
Enabled: true
# Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
Style/HashSyntax:
Enabled: true
# Method definitions after `private` or `protected` isolated calls need one
# extra level of indentation.
Layout/IndentationConsistency:
Enabled: true
EnforcedStyle: rails
# Two spaces, no tabs (for indentation).
Layout/IndentationWidth:
Enabled: true
Layout/SpaceAfterColon:
Enabled: true
Layout/SpaceAfterComma:
Enabled: true
Layout/SpaceAroundEqualsInParameterDefault:
Enabled: true
Layout/SpaceAroundKeyword:
Enabled: true
Layout/SpaceAroundOperators:
Enabled: true
Layout/SpaceBeforeFirstArg:
Enabled: true
# Defining a method with parameters needs parentheses.
Style/MethodDefParentheses:
Enabled: true
Style/FrozenStringLiteralComment:
Enabled: true
EnforcedStyle: always
# Use `foo {}` not `foo{}`.
Layout/SpaceBeforeBlockBraces:
Enabled: true
# Use `foo { bar }` not `foo {bar}`.
Layout/SpaceInsideBlockBraces:
Enabled: true
# Use `{ a: 1 }` not `{a:1}`.
Layout/SpaceInsideHashLiteralBraces:
Enabled: true
Layout/SpaceInsideParens:
Enabled: true
# Check quotes usage according to lint rule below.
Style/StringLiterals:
Enabled: true
EnforcedStyle: double_quotes
# Detect hard tabs, no hard tabs.
Layout/Tab:
Enabled: true
# Blank lines should not have any spaces.
Layout/TrailingBlankLines:
Enabled: true
# No trailing whitespace.
Layout/TrailingWhitespace:
Enabled: true
# Use quotes for string literals when they are enough.
Style/UnneededPercentQ:
Enabled: true
# Align `end` with the matching keyword or starting expression except for
# assignments, where it should be aligned with the LHS.
Layout:
Enabled: true
EnforcedStyleAlignWith: keyword
# Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
Lint/RequireParentheses:
Enabled: true
# Don't warn until lines go beyond GitHub view limit
Metrics/LineLength:
Enabled: false
# Prefer the compact readable style
Style/ClassAndModuleChildren:
EnforcedStyle: compact
Style/FormatStringToken:
EnforcedStyle: template
# Disable top-level documentation
Documentation:
Enabled: false
Metrics/MethodLength:
Enabled: false
Metrics/CyclomaticComplexity:
Enabled: false
Metrics/PerceivedComplexity:
Enabled: false
Metrics/AbcSize:
Enabled: false
Metrics/ParameterLists:
CountKeywordArgs: false
Style/RescueStandardError:
Enabled: false
Metrics/ModuleLength:
Enabled: false
Metrics/BlockLength:
Enabled: false
Naming/AccessorMethodName:
Enabled: false
Metrics/ClassLength:
Enabled: false
Style/GuardClause:
Enabled: false
# Ignore templates

13
Gemfile
View File

@ -1,6 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
source 'http://rubygems.org'
source 'http://rails-assets.org' source "http://rubygems.org"
source "http://rails-assets.org"
# Declare your gem's dependencies in abraham.gemspec. # Declare your gem's dependencies in abraham.gemspec.
# Bundler will treat runtime dependencies like base dependencies, and # Bundler will treat runtime dependencies like base dependencies, and
@ -9,9 +10,9 @@ gemspec
# These rails-assets dependencies need to be added to the developer's Gemfile # These rails-assets dependencies need to be added to the developer's Gemfile
# since there's no way to specify a source in the gemspec. # since there's no way to specify a source in the gemspec.
source 'http://rails-assets.org' do source "http://rails-assets.org" do
gem 'rails-assets-shepherd.js', '~> 1.8' gem "rails-assets-js-cookie", "~> 2.1"
gem 'rails-assets-js-cookie', '~> 2.1' gem "rails-assets-shepherd.js", "~> 1.8"
end end
# Declare any dependencies that are still in development here instead of in # Declare any dependencies that are still in development here instead of in
@ -23,4 +24,4 @@ end
# gem 'byebug', group: [:development, :test] # gem 'byebug', group: [:development, :test]
# Avoid the 'multiple sources' confusion # Avoid the 'multiple sources' confusion
gem 'rails-assets-tether', :source => 'http://rails-assets.org/' gem "rails-assets-tether", source: "http://rails-assets.org/"

View File

@ -50,7 +50,7 @@ GEM
minitest (~> 5.1) minitest (~> 5.1)
tzinfo (~> 1.1) tzinfo (~> 1.1)
arel (7.1.4) arel (7.1.4)
ast (2.3.0) ast (2.4.0)
builder (3.2.3) builder (3.2.3)
concurrent-ruby (1.0.5) concurrent-ruby (1.0.5)
crass (1.0.4) crass (1.0.4)
@ -60,6 +60,7 @@ GEM
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
i18n (1.0.1) i18n (1.0.1)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
jaro_winkler (1.5.1)
jquery-rails (4.3.3) jquery-rails (4.3.3)
rails-dom-testing (>= 1, < 3) rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0) railties (>= 4.2.0)
@ -76,9 +77,10 @@ GEM
nio4r (2.3.1) nio4r (2.3.1)
nokogiri (1.8.2) nokogiri (1.8.2)
mini_portile2 (~> 2.3.0) mini_portile2 (~> 2.3.0)
parser (2.3.2.0) parallel (1.12.1)
ast (~> 2.2) parser (2.5.1.2)
powerpack (0.1.1) ast (~> 2.4.0)
powerpack (0.1.2)
rack (2.0.5) rack (2.0.5)
rack-test (0.6.3) rack-test (0.6.3)
rack (>= 1.0) rack (>= 1.0)
@ -109,18 +111,20 @@ GEM
method_source method_source
rake (>= 0.8.7) rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0) thor (>= 0.18.1, < 2.0)
rainbow (2.1.0) rainbow (3.0.0)
rake (12.3.1) rake (12.3.1)
rb-fsevent (0.10.3) rb-fsevent (0.10.3)
rb-inotify (0.9.10) rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2) ffi (>= 0.5.0, < 2)
rubocop (0.45.0) rubocop (0.59.2)
parser (>= 2.3.1.1, < 3.0) jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
parser (>= 2.5, != 2.5.1.1)
powerpack (~> 0.1) powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0) rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7) ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.0, >= 1.0.1) unicode-display_width (~> 1.0, >= 1.0.1)
ruby-progressbar (1.8.1) ruby-progressbar (1.10.0)
sass (3.5.6) sass (3.5.6)
sass-listen (~> 4.0.0) sass-listen (~> 4.0.0)
sass-listen (4.0.0) sass-listen (4.0.0)
@ -132,7 +136,7 @@ GEM
sprockets (>= 2.8, < 4.0) sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0) sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3) tilt (>= 1.1, < 3)
sprockets (3.7.1) sprockets (3.7.2)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (> 1, < 3)
sprockets-rails (3.2.1) sprockets-rails (3.2.1)
@ -145,7 +149,7 @@ GEM
tilt (2.0.8) tilt (2.0.8)
tzinfo (1.2.5) tzinfo (1.2.5)
thread_safe (~> 0.1) thread_safe (~> 0.1)
unicode-display_width (1.1.1) unicode-display_width (1.4.0)
websocket-driver (0.6.5) websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.3) websocket-extensions (0.1.3)
@ -162,4 +166,4 @@ DEPENDENCIES
sqlite3 sqlite3
BUNDLED WITH BUNDLED WITH
1.16.1 1.16.5

View File

@ -1,33 +1,34 @@
# frozen_string_literal: true # frozen_string_literal: true
begin begin
require 'bundler/setup' require "bundler/setup"
rescue LoadError rescue LoadError
puts 'You must `gem install bundler` and `bundle install` to run rake tasks' puts "You must `gem install bundler` and `bundle install` to run rake tasks"
end end
require 'rdoc/task' require "rdoc/task"
RDoc::Task.new(:rdoc) do |rdoc| RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_dir = 'rdoc' rdoc.rdoc_dir = "rdoc"
rdoc.title = 'Abraham' rdoc.title = "Abraham"
rdoc.options << '--line-numbers' rdoc.options << "--line-numbers"
rdoc.rdoc_files.include('README.md') rdoc.rdoc_files.include("README.md")
rdoc.rdoc_files.include('lib/**/*.rb') rdoc.rdoc_files.include("lib/**/*.rb")
end end
APP_RAKEFILE = File.expand_path('../test/dummy/Rakefile', __FILE__) APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
load 'rails/tasks/engine.rake' load "rails/tasks/engine.rake"
load 'rails/tasks/statistics.rake' load "rails/tasks/statistics.rake"
require 'bundler/gem_tasks' require "bundler/gem_tasks"
require 'rake/testtask' require "rake/testtask"
Rake::TestTask.new(:test) do |t| Rake::TestTask.new(:test) do |t|
t.libs << 'lib' t.libs << "lib"
t.libs << 'test' t.libs << "test"
t.pattern = 'test/**/*_test.rb' t.pattern = "test/**/*_test.rb"
t.verbose = false t.verbose = false
end end

View File

@ -1,28 +1,29 @@
# frozen_string_literal: true # frozen_string_literal: true
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
$LOAD_PATH.push File.expand_path("lib", __dir__)
# Maintain your gem's version: # Maintain your gem's version:
require 'abraham/version' require "abraham/version"
# Describe your gem and declare its dependencies: # Describe your gem and declare its dependencies:
Gem::Specification.new do |s| Gem::Specification.new do |s|
s.name = 'abraham' s.name = "abraham"
s.version = Abraham::VERSION s.version = Abraham::VERSION
s.authors = ['Jonathan Abbett'] s.authors = ["Jonathan Abbett"]
s.email = ['jonathan@act.md'] s.email = ["jonathan@act.md"]
s.homepage = 'https://github.com/actmd/abraham' s.homepage = "https://github.com/actmd/abraham"
s.summary = 'Trackable application tours for Rails with i18n support, based on Shepherd.js.' s.summary = "Trackable application tours for Rails with i18n support, based on Shepherd.js."
s.description = 'Trackable application tours for Rails with i18n support, based on Shepherd.js.' s.description = "Trackable application tours for Rails with i18n support, based on Shepherd.js."
s.license = 'MIT' s.license = "MIT"
s.files = Dir['{app,config,db,lib}/**/*', 'MIT-LICENSE', 'Rakefile', 'README.md'] s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"]
s.add_dependency 'rails', '~> 5.0', '>= 5.0.0.1' s.add_dependency "jquery-rails"
s.add_dependency 'sass-rails', '~> 5.0' s.add_dependency "rails", "~> 5.0", ">= 5.0.0.1"
s.add_dependency 'jquery-rails' s.add_dependency "rails-assets-js-cookie", "~> 2.1"
s.add_dependency 'rails-assets-shepherd.js', '~> 1.8' s.add_dependency "rails-assets-shepherd.js", "~> 1.8"
s.add_dependency 'rails-assets-js-cookie', '~> 2.1' s.add_dependency "sass-rails", "~> 5.0"
s.add_development_dependency 'sqlite3' s.add_development_dependency "rubocop"
s.add_development_dependency 'rubocop' s.add_development_dependency "sqlite3"
end end

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
class AbrahamHistoriesController < ApplicationController class AbrahamHistoriesController < ApplicationController
def create def create
@abraham_history = AbrahamHistory.new(abraham_history_params) @abraham_history = AbrahamHistory.new(abraham_history_params)

View File

@ -1,13 +1,11 @@
# frozen_string_literal: true # frozen_string_literal: true
module AbrahamHelper module AbrahamHelper
def abraham_tour def abraham_tour
# Do we have tours for this controller/action in the user's locale? # Do we have tours for this controller/action in the user's locale?
tours = Rails.configuration.abraham.tours["#{controller_name}.#{action_name}.#{I18n.locale}"] tours = Rails.configuration.abraham.tours["#{controller_name}.#{action_name}.#{I18n.locale}"]
unless tours tours ||= Rails.configuration.abraham.tours["#{controller_name}.#{action_name}.#{I18n.default_locale}"]
# How about the default locale?
tours = Rails.configuration.abraham.tours["#{controller_name}.#{action_name}.#{I18n.default_locale}"]
end
if tours if tours
completed = AbrahamHistory.where( completed = AbrahamHistory.where(
@ -19,9 +17,9 @@ module AbrahamHelper
if remaining.any? if remaining.any?
# Generate the javascript snippet for the next remaining tour # Generate the javascript snippet for the next remaining tour
render(partial: 'application/abraham', render(partial: "application/abraham",
locals: { tour_name: remaining.first, locals: { tour_name: remaining.first,
steps: tours[remaining.first]['steps'] }) steps: tours[remaining.first]["steps"] })
end end
end end
end end

View File

@ -1,3 +1,4 @@
# frozen_string_literal: true # frozen_string_literal: true
class AbrahamHistory < ActiveRecord::Base class AbrahamHistory < ActiveRecord::Base
end end

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
class ApplicationRecord < ActiveRecord::Base class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true self.abstract_class = true
end end

View File

@ -1,14 +1,15 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true # frozen_string_literal: true
# This command will automatically be run when you run "rails" with Rails gems # This command will automatically be run when you run "rails" with Rails gems
# installed from the root of your application. # installed from the root of your application.
ENGINE_ROOT = File.expand_path('../..', __FILE__) ENGINE_ROOT = File.expand_path("..", __dir__)
ENGINE_PATH = File.expand_path('../../lib/abraham/engine', __FILE__) ENGINE_PATH = File.expand_path("../lib/abraham/engine", __dir__)
# Set up gems listed in the Gemfile. # Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
require 'rails/all' require "rails/all"
require 'rails/engine/commands' require "rails/engine/commands"

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
Rails.application.routes.draw do Rails.application.routes.draw do
resources :abraham_histories, only: :create resources :abraham_histories, only: :create
end end

View File

@ -1,5 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'abraham/engine'
require "abraham/engine"
module Abraham module Abraham
end end

View File

@ -1,10 +1,11 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'rubygems'
require "rubygems"
module Abraham module Abraham
class Engine < ::Rails::Engine class Engine < ::Rails::Engine
require 'rails-assets-shepherd.js' require "rails-assets-shepherd.js"
require 'jquery-rails' require "jquery-rails"
require 'rails-assets-js-cookie' require "rails-assets-js-cookie"
end end
end end

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
module Abraham module Abraham
VERSION = '1.3' VERSION = "1.3"
end end

View File

@ -1,27 +1,30 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'rails/generators'
require 'rails/generators/active_record' require "rails/generators"
require "rails/generators/active_record"
module Abraham module Abraham
module Generators module Generators
class InstallGenerator < ActiveRecord::Generators::Base class InstallGenerator < ActiveRecord::Generators::Base
argument :name, type: :string, default: 'random_name' argument :name, type: :string, default: "random_name"
class_option :'skip-migration', type: :boolean, desc: "Don't generate a migration for the histories table" class_option :'skip-migration', type: :boolean, desc: "Don't generate a migration for the histories table"
class_option :'skip-initializer', type: :boolean, desc: "Don't generate an initializer" class_option :'skip-initializer', type: :boolean, desc: "Don't generate an initializer"
source_root File.expand_path(File.join(File.dirname(__FILE__), 'templates')) source_root File.expand_path(File.join(File.dirname(__FILE__), "templates"))
# Copies the migration template to db/migrate. # Copies the migration template to db/migrate.
def copy_files def copy_files
return if options['skip-migration'] return if options["skip-migration"]
migration_template 'migration.rb', 'db/migrate/create_abraham_histories.rb'
migration_template "migration.rb", "db/migrate/create_abraham_histories.rb"
end end
def create_initializer def create_initializer
return if options['skip-initializer'] return if options["skip-initializer"]
copy_file 'initializer.rb', 'config/initializers/abraham.rb'
copy_file 'abraham.yml', 'config/abraham.yml' copy_file "initializer.rb", "config/initializers/abraham.rb"
copy_file "abraham.yml", "config/abraham.yml"
end end
end end
end end

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
Rails.application.configure do Rails.application.configure do
tours = {} tours = {}

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
class CreateAbrahamHistories < ActiveRecord::Migration[5.0] class CreateAbrahamHistories < ActiveRecord::Migration[5.0]
def change def change
create_table :abraham_histories do |t| create_table :abraham_histories do |t|

View File

@ -1,8 +1,9 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'test_helper'
require "test_helper"
class Abraham::Test < ActiveSupport::TestCase class Abraham::Test < ActiveSupport::TestCase
test 'truth' do test "truth" do
assert_kind_of Module, Abraham assert_kind_of Module, Abraham
end end
end end

View File

@ -1,7 +1,8 @@
# frozen_string_literal: true # frozen_string_literal: true
# Add your own tasks in files placed in lib/tasks ending in .rake, # 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_relative 'config/application' require_relative "config/application"
Rails.application.load_tasks Rails.application.load_tasks

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
module ApplicationCable module ApplicationCable
class Channel < ActionCable::Channel::Base class Channel < ActionCable::Channel::Base
end end

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
module ApplicationCable module ApplicationCable
class Connection < ActionCable::Connection::Base class Connection < ActionCable::Connection::Base
end end

View File

@ -1,9 +1,10 @@
# frozen_string_literal: true # frozen_string_literal: true
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
protect_from_forgery with: :exception protect_from_forgery with: :exception
helper_method :current_user helper_method :current_user
def current_user def current_user
OpenStruct.new(id: Random.rand(1..99999)) OpenStruct.new(id: Random.rand(1..99_999))
end end
end end

View File

@ -1,8 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
class DashboardController < ApplicationController
def home
end
def other class DashboardController < ApplicationController
end def home; end
def other; end
end end

View File

@ -1,3 +1,4 @@
# frozen_string_literal: true # frozen_string_literal: true
module ApplicationHelper module ApplicationHelper
end end

View File

@ -1,3 +1,4 @@
# frozen_string_literal: true # frozen_string_literal: true
module DashboardHelper module DashboardHelper
end end

View File

@ -1,3 +1,4 @@
# frozen_string_literal: true # frozen_string_literal: true
class ApplicationJob < ActiveJob::Base class ApplicationJob < ActiveJob::Base
end end

View File

@ -1,5 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
class ApplicationMailer < ActionMailer::Base class ApplicationMailer < ActionMailer::Base
default from: 'from@example.com' default from: "from@example.com"
layout 'mailer' layout "mailer"
end end

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
class ApplicationRecord < ActiveRecord::Base class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true self.abstract_class = true
end end

View File

@ -1,4 +1,5 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true # frozen_string_literal: true
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
load Gem.bin_path('bundler', 'bundle') ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
load Gem.bin_path("bundler", "bundle")

View File

@ -1,5 +1,6 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true # frozen_string_literal: true
APP_PATH = File.expand_path('../config/application', __dir__)
require_relative '../config/boot' APP_PATH = File.expand_path("../config/application", __dir__)
require 'rails/commands' require_relative "../config/boot"
require "rails/commands"

View File

@ -1,5 +1,6 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true # frozen_string_literal: true
require_relative '../config/boot'
require 'rake' require_relative "../config/boot"
require "rake"
Rake.application.run Rake.application.run

View File

@ -1,11 +1,12 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true # frozen_string_literal: true
require 'pathname'
require 'fileutils' require "pathname"
require "fileutils"
include FileUtils include FileUtils
# path to your application root. # path to your application root.
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) APP_ROOT = Pathname.new File.expand_path("..", __dir__)
def system!(*args) def system!(*args)
system(*args) || abort("\n== Command #{args} failed ==") system(*args) || abort("\n== Command #{args} failed ==")
@ -15,9 +16,9 @@ chdir APP_ROOT do
# This script is a starting point to setup your application. # This script is a starting point to setup your application.
# Add necessary setup steps to this file. # Add necessary setup steps to this file.
puts '== Installing dependencies ==' puts "== Installing dependencies =="
system! 'gem install bundler --conservative' system! "gem install bundler --conservative"
system('bundle check') || system!('bundle install') system("bundle check") || system!("bundle install")
# puts "\n== Copying sample files ==" # puts "\n== Copying sample files =="
# unless File.exist?('config/database.yml') # unless File.exist?('config/database.yml')
@ -25,11 +26,11 @@ chdir APP_ROOT do
# end # end
puts "\n== Preparing database ==" puts "\n== Preparing database =="
system! 'bin/rails db:setup' system! "bin/rails db:setup"
puts "\n== Removing old logs and tempfiles ==" puts "\n== Removing old logs and tempfiles =="
system! 'bin/rails log:clear tmp:clear' system! "bin/rails log:clear tmp:clear"
puts "\n== Restarting application server ==" puts "\n== Restarting application server =="
system! 'bin/rails restart' system! "bin/rails restart"
end end

View File

@ -1,11 +1,12 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true # frozen_string_literal: true
require 'pathname'
require 'fileutils' require "pathname"
require "fileutils"
include FileUtils include FileUtils
# path to your application root. # path to your application root.
APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) APP_ROOT = Pathname.new File.expand_path("..", __dir__)
def system!(*args) def system!(*args)
system(*args) || abort("\n== Command #{args} failed ==") system(*args) || abort("\n== Command #{args} failed ==")
@ -15,16 +16,16 @@ chdir APP_ROOT do
# This script is a way to update your development environment automatically. # This script is a way to update your development environment automatically.
# Add necessary update steps to this file. # Add necessary update steps to this file.
puts '== Installing dependencies ==' puts "== Installing dependencies =="
system! 'gem install bundler --conservative' system! "gem install bundler --conservative"
system('bundle check') || system!('bundle install') system("bundle check") || system!("bundle install")
puts "\n== Updating database ==" puts "\n== Updating database =="
system! 'bin/rails db:migrate' system! "bin/rails db:migrate"
puts "\n== Removing old logs and tempfiles ==" puts "\n== Removing old logs and tempfiles =="
system! 'bin/rails log:clear tmp:clear' system! "bin/rails log:clear tmp:clear"
puts "\n== Restarting application server ==" puts "\n== Restarting application server =="
system! 'bin/rails restart' system! "bin/rails restart"
end end

View File

@ -1,6 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
# This file is used by Rack-based servers to start the application. # This file is used by Rack-based servers to start the application.
require_relative 'config/environment' require_relative "config/environment"
run Rails.application run Rails.application

View File

@ -1,10 +1,11 @@
# frozen_string_literal: true # frozen_string_literal: true
require_relative 'boot'
require 'rails/all' require_relative "boot"
require "rails/all"
Bundler.require(*Rails.groups) Bundler.require(*Rails.groups)
require 'abraham' require "abraham"
module Dummy module Dummy
class Application < Rails::Application class Application < Rails::Application

View File

@ -1,6 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
# Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __dir__)
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) # Set up gems listed in the Gemfile.
$LOAD_PATH.unshift File.expand_path('../../../lib', __dir__) ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../Gemfile", __dir__)
require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
$LOAD_PATH.unshift File.expand_path("../../../lib", __dir__)

View File

@ -1,6 +1,7 @@
# frozen_string_literal: true # frozen_string_literal: true
# Load the Rails application. # Load the Rails application.
require_relative 'application' require_relative "application"
# Initialize the Rails application. # Initialize the Rails application.
Rails.application.initialize! Rails.application.initialize!

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
Rails.application.configure do Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb. # Settings specified here will take precedence over those in config/application.rb.
@ -14,12 +15,12 @@ Rails.application.configure do
config.consider_all_requests_local = true config.consider_all_requests_local = true
# Enable/disable caching. By default caching is disabled. # Enable/disable caching. By default caching is disabled.
if Rails.root.join('tmp/caching-dev.txt').exist? if Rails.root.join("tmp/caching-dev.txt").exist?
config.action_controller.perform_caching = true config.action_controller.perform_caching = true
config.cache_store = :memory_store config.cache_store = :memory_store
config.public_file_server.headers = { config.public_file_server.headers = {
'Cache-Control' => 'public, max-age=172800' "Cache-Control" => "public, max-age=172800"
} }
else else
config.action_controller.perform_caching = false config.action_controller.perform_caching = false

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
Rails.application.configure do Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb. # Settings specified here will take precedence over those in config/application.rb.
@ -17,7 +18,7 @@ Rails.application.configure do
# Disable serving static files from the `/public` folder by default since # Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this. # Apache or NGINX already handles this.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
# Compress JavaScripts and CSS. # Compress JavaScripts and CSS.
config.assets.js_compressor = :uglifier config.assets.js_compressor = :uglifier
@ -76,7 +77,7 @@ Rails.application.configure do
# require 'syslog/logger' # require 'syslog/logger'
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
if ENV['RAILS_LOG_TO_STDOUT'].present? if ENV["RAILS_LOG_TO_STDOUT"].present?
logger = ActiveSupport::Logger.new(STDOUT) logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger) config.logger = ActiveSupport::TaggedLogging.new(logger)

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
Rails.application.configure do Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb. # Settings specified here will take precedence over those in config/application.rb.
@ -16,7 +17,7 @@ Rails.application.configure do
# Configure public file server for tests with Cache-Control for performance. # Configure public file server for tests with Cache-Control for performance.
config.public_file_server.enabled = true config.public_file_server.enabled = true
config.public_file_server.headers = { config.public_file_server.headers = {
'Cache-Control' => 'public, max-age=3600' "Cache-Control" => "public, max-age=3600"
} }
# Show full error reports and disable caching. # Show full error reports and disable caching.

View File

@ -1,13 +1,14 @@
# frozen_string_literal: true # frozen_string_literal: true
Rails.application.configure do Rails.application.configure do
tours = {} tours = {}
if Rails.root.join('config/tours').exist? if Rails.root.join("config/tours").exist?
Dir[Rails.root.join('config/tours/*/')].each do |dir| Dir[Rails.root.join("config/tours/*/")].each do |dir|
Dir[dir + '*.yml'].each do |yml| Dir[dir + "*.yml"].each do |yml|
path_parts = yml.split(File::SEPARATOR) path_parts = yml.split(File::SEPARATOR)
controller = path_parts[path_parts.size - 2] controller = path_parts[path_parts.size - 2]
file_parts = path_parts[path_parts.size - 1].split('.') file_parts = path_parts[path_parts.size - 1].split(".")
action = file_parts[0] action = file_parts[0]
locale = file_parts[1] locale = file_parts[1]
t = YAML.load_file(yml) t = YAML.load_file(yml)

View File

@ -1,8 +1,9 @@
# frozen_string_literal: true # frozen_string_literal: true
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# Version of your assets, change this if you want to expire all your assets. # Version of your assets, change this if you want to expire all your assets.
Rails.application.config.assets.version = '1.0' Rails.application.config.assets.version = "1.0"
# Add additional assets to the asset load path # Add additional assets to the asset load path
# Rails.application.config.assets.paths << Emoji.images_path # Rails.application.config.assets.paths << Emoji.images_path

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# Specify a serializer for the signed and encrypted cookie jars. # Specify a serializer for the signed and encrypted cookie jars.

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# Configure sensitive parameters which will be filtered from the log file. # Configure sensitive parameters which will be filtered from the log file.

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# #
# This file contains migration options to ease your Rails 5.0 upgrade. # This file contains migration options to ease your Rails 5.0 upgrade.

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
Rails.application.config.session_store :cookie_store, key: '_dummy_session' Rails.application.config.session_store :cookie_store, key: "_dummy_session"

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# This file contains settings for ActionController::ParamsWrapper which # This file contains settings for ActionController::ParamsWrapper which

View File

@ -1,20 +1,21 @@
# frozen_string_literal: true # frozen_string_literal: true
# Puma can serve each request in a thread from an internal thread pool. # Puma can serve each request in a thread from an internal thread pool.
# The `threads` method setting takes two numbers a minimum and maximum. # The `threads` method setting takes two numbers a minimum and maximum.
# Any libraries that use thread pools should be configured to match # Any libraries that use thread pools should be configured to match
# the maximum value specified for Puma. Default is set to 5 threads for minimum # the maximum value specified for Puma. Default is set to 5 threads for minimum
# and maximum, this matches the default thread size of Active Record. # and maximum, this matches the default thread size of Active Record.
# #
threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }.to_i threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count threads threads_count, threads_count
# Specifies the `port` that Puma will listen on to receive requests, default is 3000. # Specifies the `port` that Puma will listen on to receive requests, default is 3000.
# #
port ENV.fetch('PORT') { 3000 } port ENV.fetch("PORT") { 3000 }
# Specifies the `environment` that Puma will run in. # Specifies the `environment` that Puma will run in.
# #
environment ENV.fetch('RAILS_ENV') { 'development' } environment ENV.fetch("RAILS_ENV") { "development" }
# Specifies the number of `workers` to boot in clustered mode. # Specifies the number of `workers` to boot in clustered mode.
# Workers are forked webserver processes. If using threads and workers together # Workers are forked webserver processes. If using threads and workers together

View File

@ -1,8 +1,9 @@
# frozen_string_literal: true # frozen_string_literal: true
Rails.application.routes.draw do
get 'dashboard/home'
get 'dashboard/other' Rails.application.routes.draw do
get "dashboard/home"
get "dashboard/other"
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end end

View File

@ -1,7 +1,8 @@
# frozen_string_literal: true # frozen_string_literal: true
%w(
%w[
.ruby-version .ruby-version
.rbenv-vars .rbenv-vars
tmp/restart.txt tmp/restart.txt
tmp/caching-dev.txt tmp/caching-dev.txt
).each { |path| Spring.watch(path) } ].each { |path| Spring.watch(path) }

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
class CreateAbrahamHistories < ActiveRecord::Migration[5.0] class CreateAbrahamHistories < ActiveRecord::Migration[5.0]
def change def change
create_table :abraham_histories do |t| create_table :abraham_histories do |t|

View File

@ -1,4 +1,5 @@
# frozen_string_literal: true # frozen_string_literal: true
# This file is auto-generated from the current state of the database. Instead # This file is auto-generated from the current state of the database. Instead
# of editing this file, please use the migrations feature of Active Record to # of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition. # incrementally modify your database, and then regenerate this schema definition.
@ -12,15 +13,15 @@
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20_161_118_143_752) do ActiveRecord::Schema.define(version: 20_161_118_143_752) do
create_table 'abraham_histories', force: :cascade do |t| create_table "abraham_histories", force: :cascade do |t|
t.string 'controller_name' t.string "controller_name"
t.string 'action_name' t.string "action_name"
t.string 'tour_name' t.string "tour_name"
t.integer 'creator_id', null: false t.integer "creator_id", null: false
t.datetime 'created_at', null: false t.datetime "created_at", null: false
t.datetime 'updated_at', null: false t.datetime "updated_at", null: false
t.index ['created_at'], name: 'index_abraham_histories_on_created_at' t.index ["created_at"], name: "index_abraham_histories_on_created_at"
t.index ['creator_id'], name: 'index_abraham_histories_on_creator_id' t.index ["creator_id"], name: "index_abraham_histories_on_creator_id"
t.index ['updated_at'], name: 'index_abraham_histories_on_updated_at' t.index ["updated_at"], name: "index_abraham_histories_on_updated_at"
end end
end end

View File

@ -1,10 +1,11 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'test_helper'
require "test_helper"
class AbrahamHistoriesControllerTest < ActionDispatch::IntegrationTest class AbrahamHistoriesControllerTest < ActionDispatch::IntegrationTest
test 'should create AbrahamHistory' do test "should create AbrahamHistory" do
assert_difference ['AbrahamHistory.count'] do assert_difference ["AbrahamHistory.count"] do
post abraham_histories_url, as: :json, params: { abraham_history: { action_name: 'foo', controller_name: 'bar', tour_name: 'baz' } } post abraham_histories_url, as: :json, params: { abraham_history: { action_name: "foo", controller_name: "bar", tour_name: "baz" } }
end end
end end
end end

View File

@ -1,39 +1,40 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'test_helper'
require "test_helper"
class DashboardControllerTest < ActionDispatch::IntegrationTest class DashboardControllerTest < ActionDispatch::IntegrationTest
test 'uses configured shepherd theme' do test "uses configured shepherd theme" do
# default # default
get dashboard_home_url get dashboard_home_url
assert_response :success assert_response :success
assert_select 'body script' do |element| assert_select "body script" do |element|
# it's the home tour # it's the home tour
assert element.text.include? "classes: 'shepherd-theme-default'" assert element.text.include? "classes: 'shepherd-theme-default'"
end end
# custom # custom
Rails.configuration.abraham.default_theme = 'my-custom-theme' Rails.configuration.abraham.default_theme = "my-custom-theme"
get dashboard_home_url get dashboard_home_url
assert_select 'body script' do |element| assert_select "body script" do |element|
# it's the home tour # it's the home tour
assert element.text.include? "classes: 'my-custom-theme'" assert element.text.include? "classes: 'my-custom-theme'"
end end
end end
test 'home should have home tour code' do test "home should have home tour code" do
get dashboard_home_url get dashboard_home_url
assert_response :success assert_response :success
assert_select 'body script' do |element| assert_select "body script" do |element|
# it's the home tour # it's the home tour
assert element.text.include? 'ENGLISH This first HOME step is centered text-only' assert element.text.include? "ENGLISH This first HOME step is centered text-only"
# it has three steps # it has three steps
assert element.text.include? 'step-1' assert element.text.include? "step-1"
assert element.text.include? 'step-2' assert element.text.include? "step-2"
assert element.text.include? 'step-3' assert element.text.include? "step-3"
assert element.text.include? 'step-4' assert element.text.include? "step-4"
# Generates a showOn option # Generates a showOn option
assert element.text.include? 'showOn:' assert element.text.include? "showOn:"
# it will post the right completion information # it will post the right completion information
assert element.text.include? "controller_name: 'dashboard'" assert element.text.include? "controller_name: 'dashboard'"
assert element.text.include? "action_name: 'home'" assert element.text.include? "action_name: 'home'"
@ -41,15 +42,15 @@ class DashboardControllerTest < ActionDispatch::IntegrationTest
end end
end end
test 'other should have other tour code' do test "other should have other tour code" do
get dashboard_other_url get dashboard_other_url
assert_response :success assert_response :success
assert_select 'body script' do |element| assert_select "body script" do |element|
# it's the home tour # it's the home tour
assert element.text.include? 'TOUR ONE step one ENGLISH' assert element.text.include? "TOUR ONE step one ENGLISH"
# it has only one steps # it has only one steps
assert element.text.include? 'step-1' assert element.text.include? "step-1"
# it will post the right completion information # it will post the right completion information
assert element.text.include? "controller_name: 'dashboard'" assert element.text.include? "controller_name: 'dashboard'"
assert element.text.include? "action_name: 'other'" assert element.text.include? "action_name: 'other'"

View File

@ -1,46 +1,47 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'test_helper'
require 'rails/generators' require "test_helper"
require 'generators/abraham/install_generator' require "rails/generators"
require "generators/abraham/install_generator"
class InstallGeneratorTest < Rails::Generators::TestCase class InstallGeneratorTest < Rails::Generators::TestCase
tests Abraham::Generators::InstallGenerator tests Abraham::Generators::InstallGenerator
destination File.expand_path('../../tmp', __FILE__) destination File.expand_path("../tmp", __dir__)
setup :prepare_destination setup :prepare_destination
test 'should generate a migration' do test "should generate a migration" do
begin begin
run_generator run_generator
assert_migration 'db/migrate/create_abraham_histories' assert_migration "db/migrate/create_abraham_histories"
ensure ensure
FileUtils.rm_rf destination_root FileUtils.rm_rf destination_root
end end
end end
test 'should skip the migration when told to do so' do test "should skip the migration when told to do so" do
begin begin
run_generator ['--skip-migration'] run_generator ["--skip-migration"]
assert_no_migration 'db/migrate/create_abraham_histories' assert_no_migration "db/migrate/create_abraham_histories"
ensure ensure
FileUtils.rm_rf destination_root FileUtils.rm_rf destination_root
end end
end end
test 'should generate an initializer' do test "should generate an initializer" do
begin begin
run_generator run_generator
assert_file 'config/initializers/abraham.rb' assert_file "config/initializers/abraham.rb"
assert_file 'config/abraham.yml' assert_file "config/abraham.yml"
ensure ensure
FileUtils.rm_rf destination_root FileUtils.rm_rf destination_root
end end
end end
test 'should skip the initializer when told to do so' do test "should skip the initializer when told to do so" do
begin begin
run_generator ['--skip-initializer'] run_generator ["--skip-initializer"]
assert_no_file 'config/initializers/abraham.rb' assert_no_file "config/initializers/abraham.rb"
ensure ensure
FileUtils.rm_rf destination_root FileUtils.rm_rf destination_root
end end

View File

@ -1,5 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'test_helper'
require "test_helper"
class NavigationTest < ActionDispatch::IntegrationTest class NavigationTest < ActionDispatch::IntegrationTest
# test "the truth" do # test "the truth" do

View File

@ -1,5 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
require 'test_helper'
require "test_helper"
class AbrahamHistoryTest < ActiveSupport::TestCase class AbrahamHistoryTest < ActiveSupport::TestCase
# test "the truth" do # test "the truth" do

View File

@ -1,10 +1,11 @@
# frozen_string_literal: true # frozen_string_literal: true
# Configure Rails Environment
ENV['RAILS_ENV'] = 'test'
require File.expand_path('../../test/dummy/config/environment.rb', __FILE__) # Configure Rails Environment
ActiveRecord::Migrator.migrations_paths = [File.expand_path('../../test/dummy/db/migrate', __FILE__)] ENV["RAILS_ENV"] = "test"
require 'rails/test_help'
require File.expand_path("../test/dummy/config/environment.rb", __dir__)
ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/migrate", __dir__)]
require "rails/test_help"
# Filter out Minitest backtrace while allowing backtrace from other libraries # Filter out Minitest backtrace while allowing backtrace from other libraries
# to be shown. # to be shown.