eucalypt 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/eucalypt/eucalypt-blog/namespaces/blog/cli/blog.rb +2 -2
- data/lib/eucalypt/eucalypt-blog/namespaces/blog-article/cli/article.rb +6 -6
- data/lib/eucalypt/eucalypt-core/cli/init.rb +7 -7
- data/lib/eucalypt/eucalypt-core/cli/launch.rb +5 -5
- data/lib/eucalypt/eucalypt-core/cli/test.rb +1 -1
- data/lib/eucalypt/eucalypt-core/templates/eucalypt/config/logging.rb +15 -13
- data/lib/eucalypt/eucalypt-core/templates/eucalypt/spec/spec_helper.rb +1 -1
- data/lib/eucalypt/eucalypt-generate/namespaces/generate/cli/generate-scaffold.rb +6 -2
- data/lib/eucalypt/eucalypt-generate/namespaces/generate-controller/cli/generate-controller.rb +2 -1
- data/lib/eucalypt/eucalypt-generate/namespaces/generate-controller/generators/controller.rb +3 -2
- data/lib/eucalypt/eucalypt-generate/namespaces/generate-controller/templates/controller/policy_rest_controller.tt +15 -8
- data/lib/eucalypt/eucalypt-security/namespaces/security-policy/cli/security-policy.rb +3 -2
- data/lib/eucalypt/eucalypt-security/namespaces/security-policy/generators/policy.rb +2 -2
- data/lib/eucalypt/eucalypt-security/namespaces/security-policy/templates/policy.tt +1 -1
- data/lib/eucalypt/eucalypt-security/namespaces/security-pundit/templates/pundit.tt +7 -0
- data/lib/eucalypt/eucalypt-security/namespaces/security-warden/templates/auth_controller.tt +2 -2
- data/lib/eucalypt/eucalypt-security/namespaces/security-warden/templates/warden.tt +6 -0
- data/lib/eucalypt/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e520c9680993730a49c3ec87c04f358ea17607420dce59d11b03dbcfb34c67a0
|
4
|
+
data.tar.gz: d20522c6f917515fe8762a6cdb72608d886fb7a0b1d8913f54b16f07da07d91a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f68cde88435a9368929ab30006c9248c131fc276286cfd42068b6dc52632feb8b952fefce41da41167c76b1c3c6b545968eb13bf5012c9adb32340d69428e6f
|
7
|
+
data.tar.gz: af70583560eadded293d15c7cea6f390d75494709d4ece3e6cb57232677eb34a2e7aa634202772c65c18e8cb3057ba253fc643913876bdee8384d590829e6ec1
|
data/README.md
CHANGED
@@ -30,9 +30,9 @@ $ eucalypt init my-new-app
|
|
30
30
|
|
31
31
|
Move into your new application's directory and run the top-level `eucalypt` command to display a list of all available commands.
|
32
32
|
|
33
|
-
## Documentation
|
33
|
+
## Documentation
|
34
34
|
|
35
|
-
The full documentation can be found [here](https://eucalypt.gitbook.io/eucalypt).
|
35
|
+
The full documentation of the CLI and micro-framework can be found [here](https://eucalypt.gitbook.io/eucalypt).
|
36
36
|
|
37
37
|
## Features
|
38
38
|
|
@@ -11,8 +11,8 @@ module Eucalypt
|
|
11
11
|
include Eucalypt::Helpers::Gemfile
|
12
12
|
using Colorize
|
13
13
|
|
14
|
-
|
15
|
-
desc "setup", "Sets up the blog
|
14
|
+
option :route, type: :string, aliases: '-r', default: 'blog', desc: "The route at which the blog lies"
|
15
|
+
desc "setup", "Sets up the blog environment".colorize(:grey)
|
16
16
|
def setup
|
17
17
|
directory = File.expand_path('.')
|
18
18
|
if Eucalypt.app? directory
|
@@ -13,12 +13,12 @@ module Eucalypt
|
|
13
13
|
include Eucalypt::Blog::Helpers
|
14
14
|
using Colorize
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
option :descending, type: :boolean, aliases: '-d', default: true, desc: 'Descending chronological order'
|
17
|
+
option :ascending, type: :boolean, aliases: '-a', default: false, desc: 'Ascending chronological order'
|
18
|
+
option :tag, type: :string, aliases: '-t', default: String.new, desc: 'Search by blog article tag'
|
19
|
+
option :year, type: :string, aliases: '-Y', desc: 'Search articles by year'
|
20
|
+
option :month, type: :string, aliases: '-M', desc: 'Search articles by month'
|
21
|
+
option :day, type: :string, aliases: '-D', desc: 'Search articles by day'
|
22
22
|
desc "list", "Display the metadata of blog articles".colorize(:grey)
|
23
23
|
def list
|
24
24
|
directory = File.expand_path('.')
|
@@ -5,13 +5,13 @@ module Eucalypt
|
|
5
5
|
include Eucalypt::Helpers::Messages
|
6
6
|
using String::Builder
|
7
7
|
using Colorize
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
option :git, type: :boolean, default: true, desc: 'Initialize a Git repository'
|
9
|
+
option :bundle, type: :boolean, default: true, desc: 'Install gems after application generation'
|
10
|
+
option :blog, type: :boolean, default: false, aliases: '-b', desc: 'Set up the blog environment'
|
11
|
+
option :route, type: :string, default: 'blog', aliases: '-r', desc: 'Specify a route for the blog application'
|
12
|
+
option :silence, type: :boolean, default: false, aliases: '-s', desc: 'Silence `git init` and `bundle install` commands'
|
13
|
+
option :warden, type: :boolean, default: false, aliases: '-w', desc: 'Set up Warden authentication'
|
14
|
+
option :pundit, type: :boolean, default: false, aliases: '-p', desc: 'Set up Pundit authorization'
|
15
15
|
desc "init [NAME]", "Sets up your application".colorize(:grey)
|
16
16
|
def init(name)
|
17
17
|
current_directory = File.expand_path ?.
|
@@ -3,11 +3,11 @@ module Eucalypt
|
|
3
3
|
class CLI < Thor
|
4
4
|
using Colorize
|
5
5
|
include Eucalypt::Helpers::Messages
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
option :port, type: :numeric, aliases: '-p', desc: 'Port to serve the application on'
|
7
|
+
option :rerun, type: :boolean, aliases: '-r', desc: 'Rerun (watch for file changes and restart server)'
|
8
|
+
option :quiet, type: :boolean, aliases: '-q', desc: 'Silences rerun (runs less verbosely)'
|
9
9
|
desc "launch [ENV]", "Launches your application".colorize(:grey)
|
10
|
-
def launch(env = ENV['
|
10
|
+
def launch(env = ENV['APP_ENV']||'development')
|
11
11
|
directory = File.expand_path('.')
|
12
12
|
if Eucalypt.app? directory
|
13
13
|
unless %w[p production d development t test].include? env
|
@@ -26,7 +26,7 @@ module Eucalypt
|
|
26
26
|
|
27
27
|
puts "Running command: #{cmd.colorize(:bold)}"
|
28
28
|
puts "Rack environment: #{env.colorize(:bold)}"
|
29
|
-
exec "env
|
29
|
+
exec "env APP_ENV=#{env} #{cmd}"
|
30
30
|
else
|
31
31
|
Eucalypt::Error.wrong_directory
|
32
32
|
end
|
@@ -2,7 +2,7 @@ require_relative '__base__'
|
|
2
2
|
module Eucalypt
|
3
3
|
class CLI < Thor
|
4
4
|
using Colorize
|
5
|
-
|
5
|
+
option :summarized, type: :boolean, default: false, aliases: '-s', desc: 'rspec -fd spec'
|
6
6
|
desc "test", "Run all application tests".colorize(:grey)
|
7
7
|
def test
|
8
8
|
directory = File.expand_path('.')
|
@@ -1,22 +1,24 @@
|
|
1
1
|
class ApplicationController < Sinatra::Base
|
2
2
|
set :logger, Lumberjack::Logger.new
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
require 'fileutils'
|
5
|
+
%i[production test].each do |environment|
|
6
|
+
configure environment do
|
7
|
+
use Rack::CommonLogger, $stdout
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
log_path = Eucalypt.path 'log', Time.now.strftime("%Y-%m-%dT%H-%M-%S_%z").sub(/_\+/, ?p).sub(/_\-/, ?m)
|
10
|
+
FileUtils.mkdir_p log_path
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
# STDERR logger
|
13
|
+
stderr_log = File.new File.join(log_path, "#{settings.environment}.stderr.log"), 'a+'
|
14
|
+
$stderr.reopen stderr_log
|
15
|
+
$stderr.sync = true
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
# STDOUT logger
|
18
|
+
stdout_log = File.new File.join(log_path, "#{settings.environment}.stdout.log"), 'a+'
|
19
|
+
$stdout.reopen stdout_log
|
20
|
+
$stdout.sync = true
|
21
|
+
end
|
20
22
|
end
|
21
23
|
|
22
24
|
helpers do
|
@@ -10,6 +10,7 @@ module Eucalypt
|
|
10
10
|
option :no, aliases: '-n', type: :array, default: [], enum: %w[m ms c cs h hs], desc: "Omit specified scaffold files"
|
11
11
|
option :rest, aliases: '-r', type: :boolean, default: false, desc: "Generate REST routes for the controller"
|
12
12
|
option :policy, aliases: '-p', type: :boolean, default: false, desc: "Generate a policy with the scaffold"
|
13
|
+
option :headless, type: :boolean, aliases: '-H', default: false, desc: "Policy with no associated model"
|
13
14
|
option :table, type: :boolean, default: true, desc: "Generate a table migration"
|
14
15
|
desc "scaffold [NAME] *[COLUMN∶TYPE]", "Generates a scaffold".colorize(:grey)
|
15
16
|
def scaffold(name, *columns)
|
@@ -40,17 +41,20 @@ module Eucalypt
|
|
40
41
|
controller = Eucalypt::Generators::Controller.new
|
41
42
|
controller.destination_root = directory
|
42
43
|
policy = options[:rest] && options[:policy]
|
44
|
+
headless = options[:policy] && options[:headless]
|
43
45
|
controller.generate(
|
44
46
|
name: name,
|
45
47
|
spec: controller_spec,
|
46
48
|
rest: options[:rest],
|
47
|
-
policy: policy
|
49
|
+
policy: policy,
|
50
|
+
headless: headless
|
48
51
|
)
|
49
52
|
end
|
50
53
|
|
51
54
|
if options[:policy]
|
52
55
|
args = ['security', 'policy', 'generate', name]
|
53
|
-
args <<
|
56
|
+
args << '--headless' if options[:headless]
|
57
|
+
args << %w[-p add edit delete] if options[:rest]
|
54
58
|
args.flatten!
|
55
59
|
Eucalypt::CLI.start(args)
|
56
60
|
end
|
@@ -14,7 +14,7 @@ module Eucalypt
|
|
14
14
|
File.join File.dirname(__dir__), 'templates'
|
15
15
|
end
|
16
16
|
|
17
|
-
def generate(spec: true, rest: false, policy: false, name:)
|
17
|
+
def generate(spec: true, rest: false, policy: false, headless: false, name:)
|
18
18
|
controller = Inflect.new(:controller, name)
|
19
19
|
|
20
20
|
route = '/' << (rest ? controller.route_name.pluralize : controller.route_name)
|
@@ -34,7 +34,8 @@ module Eucalypt
|
|
34
34
|
class_name: controller.class_name,
|
35
35
|
helper_class_name: helper.class_name,
|
36
36
|
resource: controller.resource,
|
37
|
-
resources: controller.resources
|
37
|
+
resources: controller.resources,
|
38
|
+
headless: headless
|
38
39
|
}
|
39
40
|
|
40
41
|
template(controller_template, controller.file_path, config)
|
@@ -1,17 +1,24 @@
|
|
1
1
|
class <%= config[:class_name] %> < Eucalypt::Controller(route: '<%= config[:route] %>')
|
2
2
|
helpers <%= config[:helper_class_name] %> if defined? <%= config[:helper_class_name] %>
|
3
3
|
|
4
|
-
# You can use the
|
4
|
+
# You can use the following authentication helper methods in your views:
|
5
|
+
# `current_user` - The User model object for the current user.
|
6
|
+
# `authenticated?` (alias `logged_in?`) - Whether or not a user is logged in.
|
5
7
|
|
6
|
-
# You can also use authorization helpers
|
8
|
+
# You can also use authorization helpers in your views.
|
7
9
|
# These are useful for conditional displays to users with the correct permissions.
|
8
10
|
# - e.g. Showing a form for editing <%= config[:resources] %>
|
9
|
-
|
10
|
-
#
|
11
|
-
# - `
|
12
|
-
# - `
|
13
|
-
# - `
|
14
|
-
|
11
|
+
<% if config[:headless] %>
|
12
|
+
# Authorization helpers are used in the following way (if using headless policies):
|
13
|
+
# - `authorized?(:<%= config[:resource] %>, :add?)`
|
14
|
+
# - `authorized?(:<%= config[:resource] %>, :edit?)`
|
15
|
+
# - `authorized?(:<%= config[:resource] %>, :delete?)`
|
16
|
+
<% else %>
|
17
|
+
# Authorization helpers are used in the following way:
|
18
|
+
# - `authorized?(<%= config[:constant] %>, :add?)`
|
19
|
+
# - `authorized?(<%= config[:constant] %>, :edit?)`
|
20
|
+
# - `authorized?(<%= config[:constant] %>, :delete?)`
|
21
|
+
<% end %>
|
15
22
|
# GET - Browse
|
16
23
|
get '/' do
|
17
24
|
@<%= config[:resources] %> = <%= config[:constant] %>.all
|
@@ -11,7 +11,8 @@ module Eucalypt
|
|
11
11
|
include Eucalypt::Helpers
|
12
12
|
using Colorize
|
13
13
|
|
14
|
-
|
14
|
+
option :headless, type: :boolean, aliases: '-H', default: false, desc: "Policy with no associated model"
|
15
|
+
option :permissions, type: :array, aliases: '-p', default: [], desc: "Permissions to generate along with the policy"
|
15
16
|
desc "generate [NAME]", "Create a new Pundit policy".colorize(:grey)
|
16
17
|
def generate(name)
|
17
18
|
directory = File.expand_path('.')
|
@@ -37,7 +38,7 @@ module Eucalypt
|
|
37
38
|
policy_generator.destination_root = directory
|
38
39
|
|
39
40
|
# Generate policy file
|
40
|
-
policy_generator.generate(name: name)
|
41
|
+
policy_generator.generate(headless: options[:headless], name: name)
|
41
42
|
|
42
43
|
# Create policy roles table
|
43
44
|
policy_generator.generate_policy_roles_migration(policy: policy.resource)
|
@@ -13,9 +13,9 @@ module Eucalypt
|
|
13
13
|
File.join File.dirname(__dir__), 'templates'
|
14
14
|
end
|
15
15
|
|
16
|
-
def generate(name:)
|
16
|
+
def generate(headless:, name:)
|
17
17
|
policy = Inflect.new(:policy, name)
|
18
|
-
config = {class_name: policy.class_name, resource: policy.resource, constant: policy.constant}
|
18
|
+
config = {class_name: policy.class_name, resource: policy.resource, constant: policy.constant, headless: headless}
|
19
19
|
template('policy.tt', policy.file_path, config)
|
20
20
|
end
|
21
21
|
|
@@ -2,12 +2,12 @@ class AuthenticationController < Eucalypt::Controller(route: '/auth')
|
|
2
2
|
helpers AuthenticationHelper if defined? AuthenticationHelper
|
3
3
|
|
4
4
|
get '/login' do
|
5
|
-
redirect '/' if
|
5
|
+
redirect '/' if authenticated?
|
6
6
|
erb :'authentication/login', layout: false
|
7
7
|
end
|
8
8
|
|
9
9
|
post '/login' do
|
10
|
-
redirect '/' if
|
10
|
+
redirect '/' if authenticated?
|
11
11
|
authenticate
|
12
12
|
redirect session[:return_to] || '/'
|
13
13
|
end
|
@@ -28,8 +28,14 @@ class ApplicationController < Sinatra::Base
|
|
28
28
|
env['warden'].user
|
29
29
|
end
|
30
30
|
|
31
|
+
def authenticated?
|
32
|
+
!!current_user
|
33
|
+
end
|
34
|
+
|
31
35
|
def authenticate
|
32
36
|
env['warden'].authenticate!
|
33
37
|
end
|
38
|
+
|
39
|
+
alias_method :logged_in?, :authenticated?
|
34
40
|
end
|
35
41
|
end
|
data/lib/eucalypt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eucalypt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edwin Onuonga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|