kowl 0.0.1 → 0.0.6
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 +4 -4
- data/README.md +9 -8
- data/bin/console +0 -7
- data/lib/kowl/actions.rb +1 -1
- data/lib/kowl/docker.rb +2 -2
- data/lib/kowl/generators/config_generator.rb +0 -5
- data/lib/kowl/generators/overrides/app_generator.rb +0 -2
- data/lib/kowl/helpers.rb +1 -1
- data/lib/kowl/templates/Gemfile.erb.tt +4 -6
- data/lib/kowl/templates/app/dashboards/login_activity_dashboard.rb.tt +1 -2
- data/lib/kowl/templates/docker/Dockerfile.alpine.tt +1 -0
- data/lib/kowl/templates/docker/Dockerfile.debian.tt +5 -4
- data/lib/kowl/templates/dotfiles/fasterer.yml +27 -7
- data/lib/kowl/version.rb +2 -2
- data/spec/kowl/actions_spec.rb +35 -0
- data/spec/kowl/docker_spec.rb +57 -0
- data/spec/kowl/helpers_spec.rb +22 -0
- data/spec/kowl/version_spec.rb +23 -0
- data/spec/spec_helper.rb +106 -0
- data/spec/support/simplecov.rb +4 -0
- metadata +22 -11
- data/lib/kowl/templates/config/initializers/administrate.rb.tt +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67dd16dd0eb2303fe953c25ae807fa6a1fa169e8139569a825ea22cc0598bd73
|
4
|
+
data.tar.gz: f75d2d1f0f27f783fe67facfa276a1a3afb71a9b9777670ee2afbd203ceffe2c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d6bb2bd14fc733afa39f268f5688e0cfd2863f2ba9cd5cd6f9283cb5a44a64a5158910d07700f6f081bf12565321afa4051d1e8996758d9238fd9158f99e393
|
7
|
+
data.tar.gz: 04c8ce4b691b88dff476416a4c53ef7bfeaf9d689f294dc2f2bf2e8b8b2c02509f6e7ffefc9bb0b7b80bc0752b86adb88d49e62f6fd62f216bb7cf1eae58d842
|
data/README.md
CHANGED
@@ -126,7 +126,7 @@ Options:
|
|
126
126
|
# Default: false
|
127
127
|
[--skip_javascript] # Skip adding javascript (webpacker) to the application
|
128
128
|
# Default: false
|
129
|
-
[--skip_mailer] # Do you want to skip setting up a
|
129
|
+
[--skip_mailer] # Do you want to skip setting up a transactional mailer (see --mailer option above)?
|
130
130
|
# Default: false
|
131
131
|
[--skip_pagination] # Do you want to skip using pagination with your application?
|
132
132
|
# Default: false
|
@@ -170,7 +170,7 @@ Options:
|
|
170
170
|
|
171
171
|
`kowl AppName --git_repo=https://github/username/REPO_NAME.git`
|
172
172
|
|
173
|
-
Will generate an app with remote
|
173
|
+
Will generate an app with the remote repo set as `https://github/username/REPO_NAME.git`
|
174
174
|
|
175
175
|
`kowl foobar --template_engine=haml --simpleform --framework=semantic;`
|
176
176
|
|
@@ -178,7 +178,7 @@ Options:
|
|
178
178
|
|
179
179
|
### Walk-Throughts
|
180
180
|
|
181
|
-
* [#](/docs/actiontext.md) Create an application using simple_form and create posts scaffold and admin page that will use ActionText
|
181
|
+
* [#](/docs/actiontext.md) Create an application using simple_form and create posts scaffold and admin page that will use ActionText
|
182
182
|
|
183
183
|
## Gems
|
184
184
|
|
@@ -231,7 +231,7 @@ User gems that will be included unless the `--noauth` flag is specified when gen
|
|
231
231
|
* [active_decorator](https://github.com/amatsuda/active_decorator) OOP view helpers for cleaning up your models.
|
232
232
|
* [annotate](https://github.com/ctran/annotate_models) for adding a comment summarizing the current schema to models, routes, etc.
|
233
233
|
* [auto_strip_attributes](https://github.com/holli/auto_strip_attributes) remove unnecessary whitespace from ActiveRecord attributes.
|
234
|
-
* [
|
234
|
+
* [jsonapi-serializer](https://github.com/jsonapi-serializer/jsonapi-serializer) lightning fast JSON:API serializer (originally releases by [Netflix](https://github.com/Netflix/fast_jsonapi))
|
235
235
|
* [meta-tags](https://github.com/kpumuk/meta-tags) helpers for making SEO/meta-tags easier to manage with your rails application.
|
236
236
|
* [oj](http://www.ohler.com/oj/) a fast JSON object serializer.
|
237
237
|
* [simple_form](https://github.com/heartcombo/simple_form) a DSL for making forms easy to style and manage.
|
@@ -269,7 +269,7 @@ User gems that will be included unless the `--noauth` flag is specified when gen
|
|
269
269
|
These gems will be included to setup sidekiq unless the `--skip_sidekiq` flag is used when generating an application.
|
270
270
|
|
271
271
|
* [hiredis](https://github.com/redis/hiredis-rb) a C adapter for connecting your application to a Redis datestore _(faster than the ruby redis library)_.
|
272
|
-
* [Sidekiq](https://github.com/mperham/sidekiq/)
|
272
|
+
* [Sidekiq](https://github.com/mperham/sidekiq/) simple, efficient background processing for Ruby
|
273
273
|
* [Sidekiq-Failures](https://github.com/mhfs/sidekiq-failures/) to get a better view of what jobs are failing.
|
274
274
|
* [Sidekiq-Scheduler](https://moove-it.github.io/sidekiq-scheduler/) to schedule sidekiq jobs on a given interval.
|
275
275
|
* [Sidekiq-Status](https://github.com/utgarda/sidekiq-status) is sidekiq extension to get a better status report of all currently running jobs.
|
@@ -326,11 +326,12 @@ If using ruby `>= 2.7` it also includes `e2mmap` and `thwait` to prevent ruby de
|
|
326
326
|
|
327
327
|
## Additonal Stuff
|
328
328
|
|
329
|
+
* It corrects the issue ([37008](https://github.com/rails/rails/pull/37008)) when generating a Rails (v6) application when specifying Oracle as the database
|
329
330
|
* When using this gem to generate applications it changes the devise password encrypting from bcrypt to [Argon2](https://cryptobook.nakov.com/mac-and-key-derivation/argon2)
|
330
331
|
* When generating application Dockerfiles it defaults to using [Alpine](https://alpinelinux.org/) which will produce smaller docker images. But if applications are specified to use Oracle as the database it will default to [Debian](https://www.debian.org/) _(due to the required dependencies to use the [Oracle InstantClient](https://www.oracle.com/database/technologies/instant-client.html))_.
|
331
332
|
* The `--encrypt` flag is used to enforce [GDPR](https://gdprchecklist.io/) and [CCPA](https://oag.ca.gov/privacy/ccpa) compliance to encrypt PII for users. _([GDPR Article 34, Section 3 (a)](https://gdpr-info.eu/art-34-gdpr/))_ By encrypting user identifiable information; this ensurers PII isn't plain text readable by hackers in case there is a data breach with the application. When encrypting user data it will use the [lockbox](https://github.com/ankane/lockbox) with the [xsalsa20](https://en.wikipedia.org/wiki/Salsa20) algorithm which requires [libsodium](https://libsodium.gitbook.io/doc/).
|
332
|
-
* When using javascript/webpacker not only will it gzip js assets, it will also compress assets with brotli and zopfli compression.
|
333
|
-
* A number of linter dotfiles added
|
333
|
+
* When using javascript/webpacker not only will it gzip js assets, it will also compress assets with brotli and zopfli compression _(in production)_.
|
334
|
+
* A number of linter dotfiles added, that way you don't have to hunt down how they are setup. And you only need to use the linters than you want to use.
|
334
335
|
|
335
336
|
## Notes
|
336
337
|
|
@@ -374,7 +375,7 @@ Project Link: [https://github.com/tarellel/kowl](https://github.com/tarellel/kow
|
|
374
375
|
[issues-shield]: https://img.shields.io/github/issues/tarellel/kowl.svg?style=flat-square
|
375
376
|
[issues-url]: https://github.com/tarellel/kowl/issues
|
376
377
|
[license-shield]: https://img.shields.io/github/license/tarellel/kowl.svg?style=flat-square
|
377
|
-
[license-url]: https://github.com/tarellel/kowl/blob/master/LICENSE
|
378
|
+
[license-url]: https://github.com/tarellel/kowl/blob/master/LICENSE
|
378
379
|
[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=flat-square&logo=linkedin&colorB=555
|
379
380
|
[product-screenshot]: docs/images/cover.png
|
380
381
|
|
data/bin/console
CHANGED
@@ -3,12 +3,5 @@
|
|
3
3
|
require 'bundler/setup'
|
4
4
|
require 'kowl'
|
5
5
|
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require 'pry'
|
11
|
-
# Pry.start
|
12
|
-
|
13
6
|
require 'irb'
|
14
7
|
IRB.start(__FILE__)
|
data/lib/kowl/actions.rb
CHANGED
@@ -135,7 +135,7 @@ module Kowl
|
|
135
135
|
end
|
136
136
|
|
137
137
|
# Add PgHero engine mount to the routes if the database iss postgresql
|
138
|
-
# @param database [String] A string containing the applications defined database
|
138
|
+
# @param database [String] A string containing the applications defined database adapter
|
139
139
|
# @return [String] the pghero dashboard mount path, if postgresql will be used
|
140
140
|
def database_route(database = 'sqlite3')
|
141
141
|
return '' unless database.to_s == 'postgresql'
|
data/lib/kowl/docker.rb
CHANGED
@@ -389,7 +389,7 @@ module Kowl
|
|
389
389
|
# @return [String] an apk string for installing dependencies in the dockerfile
|
390
390
|
def alpine_docker_dependencies(options = {})
|
391
391
|
# core dependencies
|
392
|
-
dependencies = %w[brotli dumb-init git sqlite sqlite-dev tzdata vips vips-dev yarn]
|
392
|
+
dependencies = %w[brotli dumb-init git python3 sqlite sqlite-dev tzdata vips vips-dev yarn]
|
393
393
|
# optional dependencies
|
394
394
|
dependencies << 'graphviz' unless options[:skip_erd]
|
395
395
|
dependencies << 'libsodium-dev' if options[:encrypt]
|
@@ -413,7 +413,7 @@ module Kowl
|
|
413
413
|
# @param options [Hash] a list of the applictions specific options to determine what all dependencies are required
|
414
414
|
# @return [String] an `apt-get install` with a list of all the applications dependencies listed
|
415
415
|
def debian_docker_dependencies(options = {})
|
416
|
-
dependencies = %w[brotli curl git libjemalloc-dev libsqlite3-dev libvips sqlite3 wget]
|
416
|
+
dependencies = %w[brotli curl git libjemalloc-dev libsqlite3-dev libvips python sqlite3 wget]
|
417
417
|
|
418
418
|
# optional dependencies
|
419
419
|
dependencies << 'graphviz' unless options[:skip_erd]
|
@@ -127,11 +127,6 @@ module Kowl
|
|
127
127
|
copy_file 'middleware.rb', 'config/initializers/middleware.rb', force: true
|
128
128
|
end
|
129
129
|
|
130
|
-
# Generate initializer for using administrate with the application
|
131
|
-
def copy_administate_config
|
132
|
-
template('administrate.rb.tt', 'config/initializers/administrate.rb') unless options[:noauth]
|
133
|
-
end
|
134
|
-
|
135
130
|
# Run the ERD generator, so the application will generate a new ERB when migrations are added/modified
|
136
131
|
def setup_erd
|
137
132
|
return nil if options[:skip_erd]
|
@@ -191,8 +191,6 @@ module Kowl
|
|
191
191
|
extract_css: true
|
192
192
|
# Cache manifest.json for performance
|
193
193
|
cache_manifest: true
|
194
|
-
# Compile staging packs to a separate directory
|
195
|
-
public_output_path: packs-staging
|
196
194
|
STAGING
|
197
195
|
append_to_file('config/webpacker.yml', "\n#{webpacker_str}")
|
198
196
|
end
|
data/lib/kowl/helpers.rb
CHANGED
@@ -113,7 +113,7 @@ def dh(str = '')
|
|
113
113
|
end
|
114
114
|
|
115
115
|
# Used to create and return the .env file database configuration for the specific environment
|
116
|
-
# @param database [String] the database
|
116
|
+
# @param database [String] the database adapter in which the application will be connecting to
|
117
117
|
# @param env [String] the environment which the env file is bring created for
|
118
118
|
# @return [String] a list of database parameters for the specific database connection
|
119
119
|
def dotfile_databases(database, env)
|
@@ -5,10 +5,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|
5
5
|
|
6
6
|
# ruby '<%= RUBY_VERSION %>'
|
7
7
|
gem 'rails', '<%= Kowl::RAILS_VERSION %>'
|
8
|
-
gem 'puma', '
|
9
|
-
# gem 'iodine', '~> 0.7' # An extremely fast and concurrent Application Server (works well with websockets)
|
10
|
-
# gem 'falcon' # A high-performance web server for Ruby, supporting HTTP/1, HTTP/2 and TLS
|
11
|
-
# Falon => https://www.codeotaku.com/journal/2019-02/falcon-early-hints/index
|
8
|
+
gem 'puma', '>= 4.3' # Use Puma as the applications web server
|
12
9
|
gem 'rack', '~> 2.2'
|
13
10
|
|
14
11
|
# Gems required for running rails with RUBY_VERSION >= 2.7
|
@@ -71,7 +68,7 @@ gem 'image_processing' # Used for processing ActionStor
|
|
71
68
|
##############################
|
72
69
|
# Admin/Dashboard
|
73
70
|
##############################
|
74
|
-
gem 'administrate',
|
71
|
+
gem 'administrate', '>= 0.14' # Admin dashboard
|
75
72
|
|
76
73
|
##############################
|
77
74
|
# Authorization, Authentication [Roles], and permissions
|
@@ -126,7 +123,7 @@ end
|
|
126
123
|
# Misc
|
127
124
|
##############################
|
128
125
|
gem 'auto_strip_attributes', '~> 2.5' # Reduce needing to add before_validation hooks to the models to cleanup attributes
|
129
|
-
gem '
|
126
|
+
gem 'jsonapi-serializer', github: 'jsonapi-serializer/jsonapi-serializer' # A lightening fast json serializer
|
130
127
|
gem 'jbuilder'<%= gemfile_requirement('jbuilder') %> # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
|
131
128
|
gem 'meta-tags' # Used for adding dynamic titles when switching between pages.
|
132
129
|
gem 'oj' # For faster json generating and parsing
|
@@ -187,6 +184,7 @@ group :development, :test do
|
|
187
184
|
<%= pry_gems(options[:skip_pry]) -%>
|
188
185
|
|
189
186
|
# --- Linters (Asset testing, Static Code Analyzers)
|
187
|
+
gem 'fasterer', require: false # Used to scan and check for any slow code
|
190
188
|
# gem 'inquisition', github: 'rubygarage/inquisition'
|
191
189
|
<%= template_linter_gems(options[:template_engine]) %>
|
192
190
|
gem 'scss_lint', require: false
|
@@ -9,8 +9,7 @@ class LoginActivityDashboard < Administrate::BaseDashboard
|
|
9
9
|
# which determines how the attribute is displayed
|
10
10
|
# on pages throughout the dashboard.
|
11
11
|
ATTRIBUTE_TYPES = {
|
12
|
-
|
13
|
-
user: Field::BelongsTo,
|
12
|
+
user: Field::Polymorphic,
|
14
13
|
<%- if options[:uuid] -%>
|
15
14
|
id: Field::String,
|
16
15
|
<%- else -%>
|
@@ -29,6 +29,7 @@ ENV APP_USER='app' \
|
|
29
29
|
RUN apk update && apk -U upgrade >/dev/null 2>&1 && \
|
30
30
|
apk add build-base ca-certificates libffi-dev linux-headers openssl >/dev/null 2>&1 && \
|
31
31
|
<%= alpine_docker_dependencies(options) -%>
|
32
|
+
ln -sf python3 /usr/bin/python && \
|
32
33
|
rm -rf /tmp/* /var/tmp/* /var/cache/apk/* && \
|
33
34
|
truncate -s 0 /var/log/*log
|
34
35
|
|
@@ -81,10 +81,11 @@ RUN mkdir -p $INSTANT_CLIENT_PATH && \
|
|
81
81
|
alien -i $INSTANT_CLIENT_SQLPLUS_PATH 2>/dev/null && \
|
82
82
|
ldconfig
|
83
83
|
<%- elsif options[:database] == 'sqlserver' -%>
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
84
|
+
ENV FREETDS_VERSION='1.2.5'
|
85
|
+
RUN wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-$FREETDS_VERSION.tar.gz >/dev/null 2>&1 && \
|
86
|
+
tar -xzf freetds-$FREETDS_VERSION.tar.gz && \
|
87
|
+
rm -rf freetds-$FREETDS_VERSION.tar.gz && \
|
88
|
+
cd freetds-$FREETDS_VERSION && \
|
88
89
|
./configure --prefix=/usr/local --with-tdsver=7.3 --silent >/dev/null 2>&1 && \
|
89
90
|
make -j "$(nproc)" >/dev/null 2>&1 && \
|
90
91
|
make install >/dev/null 2>&1 && \
|
@@ -1,14 +1,34 @@
|
|
1
|
+
speedups:
|
2
|
+
rescue_vs_respond_to: true
|
3
|
+
module_eval: true
|
4
|
+
shuffle_first_vs_sample: true
|
5
|
+
for_loop_vs_each: true
|
6
|
+
each_with_index_vs_while: false
|
7
|
+
map_flatten_vs_flat_map: true
|
8
|
+
reverse_each_vs_reverse_each: true
|
9
|
+
select_first_vs_detect: true
|
10
|
+
sort_vs_sort_by: true
|
11
|
+
fetch_with_argument_vs_block: true
|
12
|
+
keys_each_vs_each_key: true
|
13
|
+
hash_merge_bang_vs_hash_brackets: true
|
14
|
+
block_vs_symbol_to_proc: true
|
15
|
+
proc_call_vs_yield: true
|
16
|
+
gsub_vs_tr: true
|
17
|
+
select_last_vs_reverse_detect: true
|
18
|
+
getter_vs_attr_reader: true
|
19
|
+
setter_vs_attr_writer: true
|
20
|
+
|
1
21
|
exclude_paths:
|
2
22
|
- 'app/assets/**/**'
|
3
23
|
- 'app/javascript/**/**'
|
4
|
-
- 'bin
|
5
|
-
- 'coverage
|
24
|
+
- 'bin/'
|
25
|
+
- 'coverage/'
|
6
26
|
- 'db/**/*.rb'
|
7
|
-
- 'doc
|
8
|
-
- 'log
|
27
|
+
- 'doc/'
|
28
|
+
- 'log/'
|
9
29
|
- 'node_modulse/**/**'
|
10
|
-
- 'public
|
11
|
-
- 'storage
|
12
|
-
- 'tmp
|
30
|
+
- 'public/'
|
31
|
+
- 'storage/'
|
32
|
+
- 'tmp/'
|
13
33
|
- 'vendor/**/*.rb'
|
14
34
|
- '**.yml'
|
data/lib/kowl/version.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kowl::Docker do
|
6
|
+
before(:each) do
|
7
|
+
# Include the Kowl::Docker module in a class in order to make it testible
|
8
|
+
# => This is because it is also included into the Rails generator class
|
9
|
+
class KowlClass
|
10
|
+
include Kowl::Actions
|
11
|
+
end
|
12
|
+
@kowl = KowlClass.new
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'database route (pghero)' do
|
16
|
+
it { expect(@kowl.database_route).to eq('') }
|
17
|
+
it { expect(@kowl.database_route('mysql')).to eq('') }
|
18
|
+
it { expect(@kowl.database_route('postgresql')).to eq(" mount PgHero::Engine, at: \"pghero\"\n") }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'mailers' do
|
22
|
+
it { expect(@kowl.mailer_gems('postmark')).to eq("gem 'postmark-rails'") }
|
23
|
+
it { expect(@kowl.mailer_gems).to eq("gem 'sparkpost_rails'") }
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'pry_gems' do
|
27
|
+
it { expect(@kowl.pry_gems(true)).to eq(nil) }
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'robocop test engine' do
|
31
|
+
it { expect(@kowl.robocop_test_engine).to eq('') }
|
32
|
+
it { expect(@kowl.robocop_test_engine('minitest')).to include('minitest') }
|
33
|
+
it { expect(@kowl.robocop_test_engine('rspec')).to include('rspec') }
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Kowl::Docker do
|
6
|
+
before(:each) do
|
7
|
+
# Include the Kowl::Docker module in a class in order to make it testible
|
8
|
+
# => This is because it is also included into the Rails generator class
|
9
|
+
class KowlClass
|
10
|
+
include Kowl::Docker
|
11
|
+
end
|
12
|
+
@kowl = KowlClass.new
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'Dockerfile migration' do
|
16
|
+
describe 'no database' do
|
17
|
+
it { expect(@kowl.dockerfile_migration_snip).to eq('') }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'sqlite3' do
|
21
|
+
it { expect(@kowl.dockerfile_migration_snip('sqlite3')).to eq(' && rails db:migrate db:seed') }
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'other database' do
|
25
|
+
it { expect(@kowl.dockerfile_migration_snip('postgresql')).to include('# RUN ["bin/rails", "db:seed"]') }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'dockerfile args' do
|
30
|
+
it { expect(@kowl.dockerfile_database_args).to include('ARG DB_HOST') }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'docker database port' do
|
34
|
+
it { expect(@kowl.docker_port_watcher('mysql', true)).to eq("dockerize -wait tcp://db:3306 -timeout 60m &&\n") }
|
35
|
+
it { expect(@kowl.docker_port_watcher('mysql')).to eq("dockerize -wait tcp://db:3306 -wait tcp://redis:6379 -timeout 60m &&\n") }
|
36
|
+
|
37
|
+
# to use sqlite and skip_sidekiq
|
38
|
+
it { expect(@kowl.docker_port_watcher('sqlite3', true)).to eq('') }
|
39
|
+
it { expect(@kowl.docker_port_watcher('sqlite3')).to eq("dockerize -wait tcp://redis:6379 -timeout 60m &&\n") }
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'database volumes' do
|
43
|
+
it { expect(@kowl.db_volumes('sqlite3')).to eq('') }
|
44
|
+
it { expect(@kowl.db_volumes('postgresql')).to eq("postgresconfig:\npostgresdata:\npostgreslog:\n") }
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'js volumes' do
|
48
|
+
it { expect(@kowl.js_volumes(true)).to eq('') }
|
49
|
+
it { expect(@kowl.js_volumes).to include('packs:') }
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'redis volumes' do
|
53
|
+
it { expect(@kowl.redis_volumes).to eq('redis:') }
|
54
|
+
# with skip_sidekiq
|
55
|
+
it { expect(@kowl.redis_volumes(true)).to eq('') }
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe 'Kowl Helpers' do
|
6
|
+
context 'template engine str' do
|
7
|
+
it { expect(template_engine_gem_str('semantic')).to eq('semantic_ui') }
|
8
|
+
it { expect(template_engine_gem_str).to eq('bootstrap') }
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'highlight' do
|
12
|
+
it { expect(highlight('')).to eq('') }
|
13
|
+
# without string to split
|
14
|
+
it { expect(highlight('asdf')).to eq("\e[32masdf\e[0m") }
|
15
|
+
it { expect(highlight('asd=efg')).to eq("\e[32masd=\e[33mefg\e[0m") }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'dh (default highlight)' do
|
19
|
+
it { expect(dh('foo')).to eq("\e[34mfoo\e[0m") }
|
20
|
+
it { expect(dh()).to eq('') }
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe 'VERSIONS' do
|
6
|
+
context 'ensure versions defined' do
|
7
|
+
describe 'Kowl version defined' do
|
8
|
+
it { expect(::Kowl::VERSION).to be_truthy }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'ruby_version defined' do
|
12
|
+
it { expect(::Kowl::RUBY_VERSION).to be_truthy }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'rails version defined' do
|
16
|
+
it { expect(::Kowl::RAILS_VERSION).to be_truthy }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'webpacker version defined' do
|
20
|
+
it { expect(::Kowl::WEBPACKER_VERSION).to be_truthy }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__), 'support', '**', '*.rb'))].sort.each { |f| require f }
|
4
|
+
|
5
|
+
require 'kowl'
|
6
|
+
|
7
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
8
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
9
|
+
# The generated `.rspec` file contains `--require spec_helper` which will cause
|
10
|
+
# this file to always be loaded, without a need to explicitly require it in any
|
11
|
+
# files.
|
12
|
+
#
|
13
|
+
# Given that it is always loaded, you are encouraged to keep this file as
|
14
|
+
# light-weight as possible. Requiring heavyweight dependencies from this file
|
15
|
+
# will add to the boot time of your test suite on EVERY test run, even for an
|
16
|
+
# individual file that may not need all of that loaded. Instead, consider making
|
17
|
+
# a separate helper file that requires the additional dependencies and performs
|
18
|
+
# the additional setup, and require it from the spec files that actually need
|
19
|
+
# it.
|
20
|
+
#
|
21
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
22
|
+
RSpec.configure do |config|
|
23
|
+
# rspec-expectations config goes here. You can use an alternate
|
24
|
+
# assertion/expectation library such as wrong or the stdlib/minitest
|
25
|
+
# assertions if you prefer.
|
26
|
+
config.expect_with :rspec do |expectations|
|
27
|
+
# This option will default to `true` in RSpec 4. It makes the `description`
|
28
|
+
# and `failure_message` of custom matchers include text for helper methods
|
29
|
+
# defined using `chain`, e.g.:
|
30
|
+
# be_bigger_than(2).and_smaller_than(4).description
|
31
|
+
# # => "be bigger than 2 and smaller than 4"
|
32
|
+
# ...rather than:
|
33
|
+
# # => "be bigger than 2"
|
34
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
35
|
+
end
|
36
|
+
|
37
|
+
# rspec-mocks config goes here. You can use an alternate test double
|
38
|
+
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
39
|
+
config.mock_with :rspec do |mocks|
|
40
|
+
# Prevents you from mocking or stubbing a method that does not exist on
|
41
|
+
# a real object. This is generally recommended, and will default to
|
42
|
+
# `true` in RSpec 4.
|
43
|
+
mocks.verify_partial_doubles = true
|
44
|
+
end
|
45
|
+
|
46
|
+
# This option will default to `:apply_to_host_groups` in RSpec 4 (and will
|
47
|
+
# have no way to turn it off -- the option exists only for backwards
|
48
|
+
# compatibility in RSpec 3). It causes shared context metadata to be
|
49
|
+
# inherited by the metadata hash of host groups and examples, rather than
|
50
|
+
# triggering implicit auto-inclusion in groups with matching metadata.
|
51
|
+
config.shared_context_metadata_behavior = :apply_to_host_groups
|
52
|
+
|
53
|
+
# The settings below are suggested to provide a good initial experience
|
54
|
+
# with RSpec, but feel free to customize to your heart's content.
|
55
|
+
=begin
|
56
|
+
# This allows you to limit a spec run to individual examples or groups
|
57
|
+
# you care about by tagging them with `:focus` metadata. When nothing
|
58
|
+
# is tagged with `:focus`, all examples get run. RSpec also provides
|
59
|
+
# aliases for `it`, `describe`, and `context` that include `:focus`
|
60
|
+
# metadata: `fit`, `fdescribe` and `fcontext`, respectively.
|
61
|
+
config.filter_run_when_matching :focus
|
62
|
+
|
63
|
+
# Allows RSpec to persist some state between runs in order to support
|
64
|
+
# the `--only-failures` and `--next-failure` CLI options. We recommend
|
65
|
+
# you configure your source control system to ignore this file.
|
66
|
+
config.example_status_persistence_file_path = "spec/examples.txt"
|
67
|
+
|
68
|
+
# Limits the available syntax to the non-monkey patched syntax that is
|
69
|
+
# recommended. For more details, see:
|
70
|
+
# - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
|
71
|
+
# - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
|
72
|
+
# - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
|
73
|
+
config.disable_monkey_patching!
|
74
|
+
|
75
|
+
# This setting enables warnings. It's recommended, but in some cases may
|
76
|
+
# be too noisy due to issues in dependencies.
|
77
|
+
config.warnings = true
|
78
|
+
|
79
|
+
# Many RSpec users commonly either run the entire suite or an individual
|
80
|
+
# file, and it's useful to allow more verbose output when running an
|
81
|
+
# individual spec file.
|
82
|
+
if config.files_to_run.one?
|
83
|
+
# Use the documentation formatter for detailed output,
|
84
|
+
# unless a formatter has already been configured
|
85
|
+
# (e.g. via a command-line flag).
|
86
|
+
config.default_formatter = "doc"
|
87
|
+
end
|
88
|
+
|
89
|
+
# Print the 10 slowest examples and example groups at the
|
90
|
+
# end of the spec run, to help surface which specs are running
|
91
|
+
# particularly slow.
|
92
|
+
config.profile_examples = 10
|
93
|
+
|
94
|
+
# Run specs in random order to surface order dependencies. If you find an
|
95
|
+
# order dependency and want to debug it, you can fix the order by providing
|
96
|
+
# the seed, which is printed after each run.
|
97
|
+
# --seed 1234
|
98
|
+
config.order = :random
|
99
|
+
|
100
|
+
# Seed global randomization in this process using the `--seed` CLI option.
|
101
|
+
# Setting this allows you to use `--seed` to deterministically reproduce
|
102
|
+
# test failures related to randomization by passing the same `--seed` value
|
103
|
+
# as the one that triggered the failure.
|
104
|
+
Kernel.srand config.seed
|
105
|
+
=end
|
106
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kowl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Hicks
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -50,14 +50,14 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 6.0.
|
53
|
+
version: 6.0.3.2
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 6.0.
|
60
|
+
version: 6.0.3.2
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: sqlite3
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,7 +114,7 @@ dependencies:
|
|
114
114
|
- - "~>"
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: 0.9.24
|
117
|
-
description: 'Used to generate a Rails application following a basic
|
117
|
+
description: 'Used to generate a Rails application following a basic setup of best
|
118
118
|
practices, guidelines, and basic setup; to get your Rails application started with
|
119
119
|
a bang. '
|
120
120
|
email:
|
@@ -244,7 +244,6 @@ files:
|
|
244
244
|
- lib/kowl/templates/config/db/postgresql.yml.tt
|
245
245
|
- lib/kowl/templates/config/db/sqlite3.yml.tt
|
246
246
|
- lib/kowl/templates/config/db/sqlserver.yml.tt
|
247
|
-
- lib/kowl/templates/config/initializers/administrate.rb.tt
|
248
247
|
- lib/kowl/templates/config/initializers/bullet.rb
|
249
248
|
- lib/kowl/templates/config/initializers/devise-security.rb
|
250
249
|
- lib/kowl/templates/config/initializers/devise_argon2.rb
|
@@ -374,6 +373,12 @@ files:
|
|
374
373
|
- lib/kowl/templates/text_files/robots.txt.tt
|
375
374
|
- lib/kowl/templates/text_files/security.txt
|
376
375
|
- lib/kowl/version.rb
|
376
|
+
- spec/kowl/actions_spec.rb
|
377
|
+
- spec/kowl/docker_spec.rb
|
378
|
+
- spec/kowl/helpers_spec.rb
|
379
|
+
- spec/kowl/version_spec.rb
|
380
|
+
- spec/spec_helper.rb
|
381
|
+
- spec/support/simplecov.rb
|
377
382
|
homepage: https://github.com/tarellel/kowl
|
378
383
|
licenses:
|
379
384
|
- MIT
|
@@ -381,7 +386,7 @@ metadata:
|
|
381
386
|
bug_tracker_uri: https://github.com/tarellel/kowl/issues
|
382
387
|
changelog_uri: https://github.com/tarellel/kowl/blob/master/CHANGELOG.md
|
383
388
|
source_code_uri: https://github.com/tarellel/kowl
|
384
|
-
post_install_message:
|
389
|
+
post_install_message:
|
385
390
|
rdoc_options: []
|
386
391
|
require_paths:
|
387
392
|
- lib
|
@@ -396,9 +401,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
396
401
|
- !ruby/object:Gem::Version
|
397
402
|
version: '0'
|
398
403
|
requirements: []
|
399
|
-
rubygems_version: 3.
|
400
|
-
signing_key:
|
404
|
+
rubygems_version: 3.1.4
|
405
|
+
signing_key:
|
401
406
|
specification_version: 4
|
402
407
|
summary: A rails application generator to get you out the door and started without
|
403
408
|
wasting hours to get started.
|
404
|
-
test_files:
|
409
|
+
test_files:
|
410
|
+
- spec/kowl/actions_spec.rb
|
411
|
+
- spec/kowl/docker_spec.rb
|
412
|
+
- spec/kowl/helpers_spec.rb
|
413
|
+
- spec/kowl/version_spec.rb
|
414
|
+
- spec/spec_helper.rb
|
415
|
+
- spec/support/simplecov.rb
|