generapp 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +18 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/.travis.yml +13 -0
- data/.yardopts +9 -0
- data/CHANGELOG.md +3 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/MIT-LICENSE +21 -0
- data/README.md +76 -0
- data/Rakefile +13 -0
- data/bin/generapp +14 -0
- data/bin/setup +7 -0
- data/generapp.gemspec +33 -0
- data/lib/generapp/actions/configuration.rb +34 -0
- data/lib/generapp/actions/database.rb +15 -0
- data/lib/generapp/actions/develop.rb +72 -0
- data/lib/generapp/actions/files.rb +14 -0
- data/lib/generapp/actions/production.rb +17 -0
- data/lib/generapp/actions/test.rb +44 -0
- data/lib/generapp/actions/views.rb +30 -0
- data/lib/generapp/app_builder.rb +54 -0
- data/lib/generapp/generators/app_generator.rb +137 -0
- data/lib/generapp/version.rb +5 -0
- data/lib/generapp.rb +12 -0
- data/templates/Gemfile.erb +49 -0
- data/templates/Procfile +1 -0
- data/templates/Procfile.dev +4 -0
- data/templates/README.md.erb +20 -0
- data/templates/application.scss +1 -0
- data/templates/circle.yml +7 -0
- data/templates/config/application.yml +17 -0
- data/templates/config/newrelic.yml.erb +30 -0
- data/templates/config/postgresql_database.yml.erb +20 -0
- data/templates/config/puma.rb +15 -0
- data/templates/generapp_gitignore +44 -0
- data/templates/public/humans.txt +2 -0
- data/templates/public/manifest.json +41 -0
- data/templates/simplecov +4 -0
- data/templates/spec/database_cleaner.rb +16 -0
- data/templates/spec/devise.rb +3 -0
- data/templates/spec/rails_helper.rb +55 -0
- data/templates/spec/shoulda_matchers_config.rb +6 -0
- data/templates/tasks/auto_annotate_models.rake +37 -0
- data/templates/tasks/bundler_audit.rake +12 -0
- data/templates/views/_flashes.html.erb +5 -0
- data/templates/views/_head.html.erb.erb +30 -0
- data/templates/views/_javascript.html.erb +3 -0
- data/templates/views/generapp_layout.html.erb.erb +14 -0
- metadata +186 -0
@@ -0,0 +1,137 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/rails/app/app_generator'
|
3
|
+
|
4
|
+
module Generapp
|
5
|
+
module Generators
|
6
|
+
class AppGenerator < ::Rails::Generators::AppGenerator
|
7
|
+
class_option :database, type: :string, aliases: '-d', default: 'postgresql',
|
8
|
+
desc: "Configure for selected database (options: #{DATABASES.join("/")})"
|
9
|
+
|
10
|
+
class_option :skip_test_unit, type: :boolean, aliases: '-T', default: true,
|
11
|
+
desc: 'Skip Test::Unit files'
|
12
|
+
|
13
|
+
class_option :skip_turbolinks, type: :boolean, default: true,
|
14
|
+
desc: 'Skip turbolinks gem'
|
15
|
+
|
16
|
+
class_option :skip_bundle, type: :boolean, aliases: '-B', default: true,
|
17
|
+
desc: "Don't run bundle install"
|
18
|
+
|
19
|
+
def finish_template
|
20
|
+
invoke :generapp_customization
|
21
|
+
super
|
22
|
+
end
|
23
|
+
|
24
|
+
def generapp_customization
|
25
|
+
invoke :setup_gems
|
26
|
+
invoke :setup_development_environment
|
27
|
+
invoke :setup_test_environment
|
28
|
+
invoke :setup_production_environment
|
29
|
+
invoke :create_generapp_views
|
30
|
+
invoke :configure_app
|
31
|
+
invoke :setup_stylesheets
|
32
|
+
invoke :setup_database
|
33
|
+
invoke :setup_git
|
34
|
+
invoke :setup_bundler_audit
|
35
|
+
invoke :setup_spring
|
36
|
+
invoke :outro
|
37
|
+
end
|
38
|
+
|
39
|
+
def setup_gems
|
40
|
+
build :set_ruby_version
|
41
|
+
bundle_command 'install'
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup_development_environment
|
45
|
+
say 'Setting up the development environment'
|
46
|
+
build :raise_on_delivery_errors
|
47
|
+
build :add_bullet_gem_configuration
|
48
|
+
build :configure_dalli
|
49
|
+
build :configure_generators
|
50
|
+
build :generate_annotate
|
51
|
+
build :add_secrets
|
52
|
+
end
|
53
|
+
|
54
|
+
def setup_test_environment
|
55
|
+
say 'Setting up the test environment'
|
56
|
+
build :generate_rspec
|
57
|
+
build :configure_rspec
|
58
|
+
build :enable_database_cleaner
|
59
|
+
build :enable_devise_tests
|
60
|
+
build :provide_shoulda_matchers_config
|
61
|
+
build :spec_folders
|
62
|
+
build :configure_coverage
|
63
|
+
build :configure_ci
|
64
|
+
end
|
65
|
+
|
66
|
+
def setup_production_environment
|
67
|
+
say 'Setting up the production environment'
|
68
|
+
build :configure_newrelic
|
69
|
+
build :configure_rack_timeout
|
70
|
+
end
|
71
|
+
|
72
|
+
def create_generapp_views
|
73
|
+
say 'Creating views'
|
74
|
+
build :create_shared_directory
|
75
|
+
build :create_shared_flashes
|
76
|
+
build :create_shared_javascripts
|
77
|
+
build :create_application_layout
|
78
|
+
end
|
79
|
+
|
80
|
+
def configure_app
|
81
|
+
say 'Configuring app'
|
82
|
+
build :setup_default_rake_task
|
83
|
+
build :configure_puma
|
84
|
+
build :set_up_foreman
|
85
|
+
build :generate_devise
|
86
|
+
end
|
87
|
+
|
88
|
+
def setup_stylesheets
|
89
|
+
say 'Setting up stylesheets'
|
90
|
+
build :setup_stylesheets
|
91
|
+
end
|
92
|
+
|
93
|
+
def setup_database
|
94
|
+
say 'Setting up database'
|
95
|
+
if 'postgresql' == options[:database]
|
96
|
+
build :use_postgres_config_template
|
97
|
+
end
|
98
|
+
build :create_database
|
99
|
+
end
|
100
|
+
|
101
|
+
def setup_git
|
102
|
+
return if options[:skip_git]
|
103
|
+
say 'Initializing git'
|
104
|
+
invoke :init_git
|
105
|
+
end
|
106
|
+
|
107
|
+
def setup_bundler_audit
|
108
|
+
say 'Setting up bundler-audit'
|
109
|
+
build :setup_bundler_audit
|
110
|
+
end
|
111
|
+
|
112
|
+
def setup_spring
|
113
|
+
say 'Springifying executables'
|
114
|
+
build :setup_spring
|
115
|
+
end
|
116
|
+
|
117
|
+
def init_git
|
118
|
+
build :init_git
|
119
|
+
end
|
120
|
+
|
121
|
+
def outro
|
122
|
+
say "Done generating #{app_name}"
|
123
|
+
say "Remember to run 'bundle exec honeybadger install [YOUR API KEY HERE]'"
|
124
|
+
end
|
125
|
+
|
126
|
+
protected
|
127
|
+
|
128
|
+
def get_builder_class
|
129
|
+
Generapp::AppBuilder
|
130
|
+
end
|
131
|
+
|
132
|
+
def using_active_record?
|
133
|
+
!options[:skip_active_record]
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
data/lib/generapp.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
ruby '<%= Generapp::RUBY_VERSION %>'
|
4
|
+
|
5
|
+
gem 'devise'
|
6
|
+
gem 'dalli' # caching
|
7
|
+
gem 'honeybadger', '~> 2.0'
|
8
|
+
gem 'jquery-rails'
|
9
|
+
gem 'newrelic_rpm'
|
10
|
+
gem 'pg'
|
11
|
+
gem 'puma' # Use Puma as the app server
|
12
|
+
gem 'rails', '<%= Generapp::RAILS_VERSION %>'
|
13
|
+
gem 'sass-rails', '~>5.0'
|
14
|
+
gem 'uglifier'
|
15
|
+
|
16
|
+
group :development do
|
17
|
+
gem 'annotate'
|
18
|
+
gem 'better_errors'
|
19
|
+
gem 'binding_of_caller'
|
20
|
+
gem 'bullet'
|
21
|
+
gem 'lol_dba', require: false
|
22
|
+
gem 'quiet_assets'
|
23
|
+
gem 'parallel_tests'
|
24
|
+
gem 'rails-erd'
|
25
|
+
gem 'spring'
|
26
|
+
end
|
27
|
+
|
28
|
+
group :development, :test do
|
29
|
+
gem 'bundler-audit', require: false
|
30
|
+
gem 'factory_girl_rails'
|
31
|
+
gem 'figaro' # Secrets
|
32
|
+
gem 'foreman'
|
33
|
+
gem 'pry-rails'
|
34
|
+
gem 'pry-remote'
|
35
|
+
gem 'rspec-rails'
|
36
|
+
end
|
37
|
+
|
38
|
+
group :test do
|
39
|
+
gem 'database_cleaner'
|
40
|
+
gem 'faker'
|
41
|
+
gem 'shoulda-matchers'
|
42
|
+
gem 'simplecov', require: false
|
43
|
+
gem 'timecop'
|
44
|
+
end
|
45
|
+
|
46
|
+
group :production do
|
47
|
+
gem 'rack-timeout'
|
48
|
+
gem 'rails_12factor'
|
49
|
+
end
|
data/templates/Procfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
web: bundle exec puma -C config/puma.rb
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# <%= app_name.humanize %>
|
2
|
+
|
3
|
+
## Getting Started
|
4
|
+
|
5
|
+
### Requirements
|
6
|
+
|
7
|
+
### Installing <%= app_name.humanize %>
|
8
|
+
|
9
|
+
## Starting the app
|
10
|
+
|
11
|
+
## Staging Environment
|
12
|
+
|
13
|
+
## Production Environment
|
14
|
+
|
15
|
+
## Troubleshooting
|
16
|
+
|
17
|
+
## How to Contribute
|
18
|
+
|
19
|
+
## License
|
20
|
+
Copyright <%= Time.now.year %>
|
@@ -0,0 +1 @@
|
|
1
|
+
@charset "UTF-8";
|
@@ -0,0 +1,17 @@
|
|
1
|
+
defaults: &defaults
|
2
|
+
DB_POOL: '12' # Max number of active DB connection
|
3
|
+
MAX_THREADS: '3' # Puma max number of threads
|
4
|
+
REAPING_FREQUENCY: '5' # Enable database reaping connections
|
5
|
+
WEB_CONCURRENCY: '2' # Puma processes
|
6
|
+
|
7
|
+
development:
|
8
|
+
<<: *defaults
|
9
|
+
|
10
|
+
test:
|
11
|
+
<<: *defaults
|
12
|
+
|
13
|
+
staging:
|
14
|
+
<<: *defaults
|
15
|
+
|
16
|
+
production:
|
17
|
+
<<: *defaults
|
@@ -0,0 +1,30 @@
|
|
1
|
+
common: &default_settings
|
2
|
+
app_name: "<%= app_name %>"
|
3
|
+
audit_log:
|
4
|
+
enabled: false
|
5
|
+
browser_monitoring:
|
6
|
+
auto_instrument: true
|
7
|
+
capture_params: false
|
8
|
+
developer_mode: false
|
9
|
+
error_collector:
|
10
|
+
capture_source: true
|
11
|
+
enabled: true
|
12
|
+
ignore_errors: "ActionController::RoutingError,Sinatra::NotFound"
|
13
|
+
license_key: "<%%= ENV["NEW_RELIC_LICENSE_KEY"] %>"
|
14
|
+
log_level: info
|
15
|
+
monitor_mode: true
|
16
|
+
transaction_tracer:
|
17
|
+
enabled: true
|
18
|
+
record_sql: obfuscated
|
19
|
+
stack_trace_threshold: 0.500
|
20
|
+
transaction_threshold: apdex_f
|
21
|
+
development:
|
22
|
+
<<: *default_settings
|
23
|
+
monitor_mode: false
|
24
|
+
developer_mode: true
|
25
|
+
test:
|
26
|
+
<<: *default_settings
|
27
|
+
monitor_mode: false
|
28
|
+
production:
|
29
|
+
<<: *default_settings
|
30
|
+
monitor_mode: true
|
@@ -0,0 +1,20 @@
|
|
1
|
+
defaults: &defaults
|
2
|
+
adapter: postgresql
|
3
|
+
template: template0
|
4
|
+
host: localhost
|
5
|
+
|
6
|
+
development:
|
7
|
+
<<: *defaults
|
8
|
+
database: <%= app_name %>_development
|
9
|
+
|
10
|
+
test:
|
11
|
+
<<: *defaults
|
12
|
+
min_messages: warning #magic sauce
|
13
|
+
database: <%= app_name %>_test
|
14
|
+
|
15
|
+
production: &deploy
|
16
|
+
url: <%%= ENV['DATABASE_URL'] %>
|
17
|
+
pool: <%%= ENV['DB_POOL'] || ENV['MAX_THREADS'] || 3 %>
|
18
|
+
reaping_frequency: <%%= ENV['REAPING_FREQUENCY'] || nil %>
|
19
|
+
|
20
|
+
staging: *deploy
|
@@ -0,0 +1,15 @@
|
|
1
|
+
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
|
2
|
+
threads_count = Integer(ENV['MAX_THREADS'] || 3)
|
3
|
+
threads threads_count, threads_count
|
4
|
+
|
5
|
+
preload_app!
|
6
|
+
|
7
|
+
rackup DefaultRackup
|
8
|
+
port ENV['PORT'] || 3000
|
9
|
+
environment ENV['RACK_ENV'] || 'development'
|
10
|
+
|
11
|
+
on_worker_boot do
|
12
|
+
# Worker specific setup for Rails 4.1+
|
13
|
+
# See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
|
14
|
+
ActiveRecord::Base.establish_connection
|
15
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
6
|
+
|
7
|
+
# Ignore all logfiles and tempfiles.
|
8
|
+
logfile
|
9
|
+
logs
|
10
|
+
parsed_logs
|
11
|
+
log/*
|
12
|
+
tmp/*
|
13
|
+
public/assets
|
14
|
+
public/uploads/*
|
15
|
+
coverage/*
|
16
|
+
ssl
|
17
|
+
.bundle/*
|
18
|
+
# Ignore Doc
|
19
|
+
doc/*
|
20
|
+
|
21
|
+
# General swap/backup files
|
22
|
+
*.so
|
23
|
+
*.log
|
24
|
+
*.out
|
25
|
+
*~
|
26
|
+
*.swp
|
27
|
+
*.DS_Store
|
28
|
+
*.lock
|
29
|
+
backup*.dump
|
30
|
+
*.dump
|
31
|
+
*.orig
|
32
|
+
|
33
|
+
# Idea
|
34
|
+
.idea
|
35
|
+
.idea/**/*
|
36
|
+
|
37
|
+
#rbenv
|
38
|
+
.rbenv-gemsets
|
39
|
+
|
40
|
+
# Ignore application configuration
|
41
|
+
/config/application.yml
|
42
|
+
|
43
|
+
#Ignore Vagrant
|
44
|
+
.vagrant/
|
@@ -0,0 +1,41 @@
|
|
1
|
+
{
|
2
|
+
"name": "App",
|
3
|
+
"icons": [
|
4
|
+
{
|
5
|
+
"src": "\/android-icon-36x36.png",
|
6
|
+
"sizes": "36x36",
|
7
|
+
"type": "image\/png",
|
8
|
+
"density": "0.75"
|
9
|
+
},
|
10
|
+
{
|
11
|
+
"src": "\/android-icon-48x48.png",
|
12
|
+
"sizes": "48x48",
|
13
|
+
"type": "image\/png",
|
14
|
+
"density": "1.0"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"src": "\/android-icon-72x72.png",
|
18
|
+
"sizes": "72x72",
|
19
|
+
"type": "image\/png",
|
20
|
+
"density": "1.5"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"src": "\/android-icon-96x96.png",
|
24
|
+
"sizes": "96x96",
|
25
|
+
"type": "image\/png",
|
26
|
+
"density": "2.0"
|
27
|
+
},
|
28
|
+
{
|
29
|
+
"src": "\/android-icon-144x144.png",
|
30
|
+
"sizes": "144x144",
|
31
|
+
"type": "image\/png",
|
32
|
+
"density": "3.0"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"src": "\/android-icon-192x192.png",
|
36
|
+
"sizes": "192x192",
|
37
|
+
"type": "image\/png",
|
38
|
+
"density": "4.0"
|
39
|
+
}
|
40
|
+
]
|
41
|
+
}
|
data/templates/simplecov
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
RSpec.configure do |config|
|
2
|
+
config.before(:suite) do
|
3
|
+
DatabaseCleaner.strategy = :transaction
|
4
|
+
DatabaseCleaner.clean_with :truncation
|
5
|
+
end
|
6
|
+
|
7
|
+
config.around(:each) do |example|
|
8
|
+
DatabaseCleaner.cleaning do
|
9
|
+
example.run
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
config.after(:each) do
|
14
|
+
DatabaseCleaner.clean
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
|
3
|
+
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
4
|
+
ENV['RAILS_ENV'] ||= 'test'
|
5
|
+
require File.expand_path('../../config/environment', __FILE__)
|
6
|
+
# Prevent database truncation if the environment is production
|
7
|
+
abort('The Rails environment is running in production mode!') if Rails.env.production?
|
8
|
+
require 'spec_helper'
|
9
|
+
require 'rspec/rails'
|
10
|
+
# Add additional requires below this line. Rails is not loaded until this point!
|
11
|
+
|
12
|
+
# Requires supporting ruby files with custom matchers and macros, etc, in
|
13
|
+
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
|
14
|
+
# run as spec files by default. This means that files in spec/support that end
|
15
|
+
# in _spec.rb will both be required and run as specs, causing the specs to be
|
16
|
+
# run twice. It is recommended that you do not name files matching this glob to
|
17
|
+
# end with _spec.rb. You can configure this pattern with the --pattern
|
18
|
+
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
|
19
|
+
#
|
20
|
+
# The following line is provided for convenience purposes. It has the downside
|
21
|
+
# of increasing the boot-up time by auto-requiring all files in the support
|
22
|
+
# directory. Alternatively, in the individual `*_spec.rb` files, manually
|
23
|
+
# require only the support files necessary.
|
24
|
+
#
|
25
|
+
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
|
26
|
+
|
27
|
+
# Checks for pending migration and applies them before tests are run.
|
28
|
+
# If you are not using ActiveRecord, you can remove this line.
|
29
|
+
ActiveRecord::Migration.maintain_test_schema!
|
30
|
+
|
31
|
+
RSpec.configure do |config|
|
32
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
33
|
+
# examples within a transaction, remove the following line or assign false
|
34
|
+
# instead of true.
|
35
|
+
config.use_transactional_fixtures = true
|
36
|
+
|
37
|
+
# RSpec Rails can automatically mix in different behaviours to your tests
|
38
|
+
# based on their file location, for example enabling you to call `get` and
|
39
|
+
# `post` in specs under `spec/controllers`.
|
40
|
+
#
|
41
|
+
# You can disable this behaviour by removing the line below, and instead
|
42
|
+
# explicitly tag your specs with their type, e.g.:
|
43
|
+
#
|
44
|
+
# RSpec.describe UsersController, :type => :controller do
|
45
|
+
# # ...
|
46
|
+
# end #
|
47
|
+
# The different available types are documented in the features, such as in
|
48
|
+
# https://relishapp.com/rspec/rspec-rails/docs
|
49
|
+
config.infer_spec_type_from_file_location!
|
50
|
+
|
51
|
+
# Filter lines from Rails gems in backtraces.
|
52
|
+
config.filter_rails_from_backtrace!
|
53
|
+
# arbitrary gems may also be filtered via:
|
54
|
+
# config.filter_gems_from_backtrace("gem name")
|
55
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# NOTE: only doing this in development as some production environments (Heroku)
|
2
|
+
# NOTE: are sensitive to local FS writes, and besides -- it's just not proper
|
3
|
+
# NOTE: to have a dev-mode tool do its thing in production.
|
4
|
+
if Rails.env.development?
|
5
|
+
task :set_annotation_options do
|
6
|
+
# You can override any of these by setting an environment variable of the
|
7
|
+
# same name.
|
8
|
+
Annotate.set_defaults({
|
9
|
+
'position_in_routes' => 'after',
|
10
|
+
'position_in_class' => 'before',
|
11
|
+
'position_in_test' => 'before',
|
12
|
+
'position_in_fixture' => 'before',
|
13
|
+
'position_in_factory' => 'before',
|
14
|
+
'position_in_serializer' => 'before',
|
15
|
+
'show_foreign_keys' => 'true',
|
16
|
+
'show_indexes' => 'true',
|
17
|
+
'simple_indexes' => 'false',
|
18
|
+
'model_dir' => 'app/models',
|
19
|
+
'include_version' => 'false',
|
20
|
+
'require' => '',
|
21
|
+
'exclude_tests' => 'true',
|
22
|
+
'exclude_fixtures' => 'true',
|
23
|
+
'exclude_factories' => 'false',
|
24
|
+
'exclude_serializers' => 'true',
|
25
|
+
'ignore_model_sub_dir' => 'false',
|
26
|
+
'skip_on_db_migrate' => 'false',
|
27
|
+
'format_bare' => 'true',
|
28
|
+
'format_rdoc' => 'false',
|
29
|
+
'format_markdown' => 'false',
|
30
|
+
'sort' => 'false',
|
31
|
+
'force' => 'false',
|
32
|
+
'trace' => 'false',
|
33
|
+
})
|
34
|
+
end
|
35
|
+
|
36
|
+
Annotate.load_tasks
|
37
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
if Rails.env.development? || Rails.env.test?
|
2
|
+
require "bundler/audit/cli"
|
3
|
+
|
4
|
+
namespace :bundler do
|
5
|
+
desc "Updates the ruby-advisory-db and runs audit"
|
6
|
+
task :audit do
|
7
|
+
%w(update check).each do |command|
|
8
|
+
Bundler::Audit::CLI.start [command]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<title><%%= content_for?(:page_title) ? yield(:page_title) : <%= app_name.humanize %> %></title>
|
2
|
+
|
3
|
+
<%%= favicon_link_tag 'apple-icon-57x57.png', rel: 'apple-touch-icon', sizes: '57x57' %>
|
4
|
+
<%%= favicon_link_tag 'apple-icon-60x60.png', rel: 'apple-touch-icon', sizes: '60x60' %>
|
5
|
+
<%%= favicon_link_tag 'apple-icon-72x72.png', rel: 'apple-touch-icon', sizes: '72x72' %>
|
6
|
+
<%%= favicon_link_tag 'apple-icon-76x76.png', rel: 'apple-touch-icon', sizes: '76x76' %>
|
7
|
+
<%%= favicon_link_tag 'apple-icon-114x114.png', rel: 'apple-touch-icon', sizes: '114x114' %>
|
8
|
+
<%%= favicon_link_tag 'apple-icon-120x120.png', rel: 'apple-touch-icon', sizes: '120x120' %>
|
9
|
+
<%%= favicon_link_tag 'apple-icon-144x144.png', rel: 'apple-touch-icon', sizes: '144x144' %>
|
10
|
+
<%%= favicon_link_tag 'apple-icon-152x152.png', rel: 'apple-touch-icon', sizes: '152x152' %>
|
11
|
+
<%%= favicon_link_tag 'apple-icon-180x180.png', rel: 'apple-touch-icon', sizes: '180x180' %>
|
12
|
+
<%%= favicon_link_tag 'android-icon-192x192.png', rel: 'icon', type: 'image/png', sizes: '57x57' %>
|
13
|
+
<%%= favicon_link_tag 'favicon-32x32.png', rel: 'icon', type: 'image/png', sizes: '32x32' %>
|
14
|
+
<%%= favicon_link_tag 'favicon-96x96.png', rel: 'icon', type: 'image/png', sizes: '96x96' %>
|
15
|
+
<%%= favicon_link_tag 'favicon-16x16.png', rel: 'icon', type: 'image/png', sizes: '16x16' %>
|
16
|
+
<link rel="manifest" href="/manifest.json">
|
17
|
+
|
18
|
+
<meta name="msapplication-TileColor" content="#fff">
|
19
|
+
<meta name="msapplication-TileImage" content="<%%= image_path 'ms-icon-144x144.png' %>">
|
20
|
+
<meta name="theme-color" content="#fff">
|
21
|
+
|
22
|
+
<meta name="robots" content="index,follow">
|
23
|
+
<meta name="description" content="Saasler is the easiest way to create an “integrations directory” for your app.">
|
24
|
+
<meta name="keywords" content="integrations,lists,applications">
|
25
|
+
<link rel="author" href="humans.txt" />
|
26
|
+
|
27
|
+
<%%= stylesheet_link_tag 'application' %>
|
28
|
+
<%%= csrf_meta_tags %>
|
29
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
30
|
+
<link href='https://fonts.googleapis.com/css?family=Roboto:400,700,300' rel='stylesheet' type='text/css'>
|