generapp 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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'>
|