pakyow-core 0.11.3 → 1.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +0 -0
- data/LICENSE +4 -0
- data/{pakyow-core/README.md → README.md} +3 -4
- data/commands/pakyow +13 -0
- data/lib/pakyow/app/connection/behavior/session.rb +33 -0
- data/lib/pakyow/app/connection/behavior/values.rb +42 -0
- data/lib/pakyow/app/connection/behavior/verifier.rb +34 -0
- data/lib/pakyow/app/connection/session/abstract.rb +24 -0
- data/lib/pakyow/app/connection/session/cookie.rb +56 -0
- data/lib/pakyow/app/connection.rb +57 -0
- data/lib/pakyow/app.rb +219 -0
- data/lib/pakyow/behavior/aspects.rb +45 -0
- data/lib/pakyow/behavior/config.rb +72 -0
- data/lib/pakyow/behavior/endpoints.rb +41 -0
- data/lib/pakyow/behavior/frameworks.rb +45 -0
- data/lib/pakyow/behavior/helpers.rb +107 -0
- data/lib/pakyow/behavior/initializers.rb +19 -0
- data/lib/pakyow/behavior/isolating.rb +69 -0
- data/lib/pakyow/behavior/operations.rb +46 -0
- data/lib/pakyow/behavior/pipeline.rb +58 -0
- data/lib/pakyow/behavior/plugins.rb +148 -0
- data/lib/pakyow/behavior/rescuing.rb +51 -0
- data/lib/pakyow/behavior/restarting.rb +68 -0
- data/lib/pakyow/behavior/sessions.rb +34 -0
- data/lib/pakyow/behavior/verification.rb +47 -0
- data/lib/pakyow/cli.rb +199 -0
- data/lib/pakyow/connection/multipart_input.rb +24 -0
- data/lib/pakyow/connection/multipart_parser.rb +112 -0
- data/lib/pakyow/connection/params.rb +29 -0
- data/lib/pakyow/connection/query_parser.rb +174 -0
- data/lib/pakyow/connection/statuses.rb +119 -0
- data/lib/pakyow/connection.rb +568 -0
- data/lib/pakyow/endpoints.rb +94 -0
- data/lib/pakyow/environment/actions/dispatch.rb +37 -0
- data/lib/pakyow/environment/actions/input_parser.rb +21 -0
- data/lib/pakyow/environment/actions/logger.rb +33 -0
- data/lib/pakyow/environment/actions/normalizer.rb +73 -0
- data/lib/pakyow/environment/behavior/config.rb +166 -0
- data/lib/pakyow/environment/behavior/initializers.rb +21 -0
- data/lib/pakyow/environment/behavior/input_parsing.rb +54 -0
- data/lib/pakyow/environment/behavior/plugins.rb +23 -0
- data/lib/pakyow/environment/behavior/restarting.rb +54 -0
- data/lib/pakyow/environment/behavior/running.rb +129 -0
- data/lib/pakyow/environment/behavior/silencing.rb +23 -0
- data/lib/pakyow/environment/behavior/timezone.rb +21 -0
- data/lib/pakyow/environment/behavior/watching.rb +75 -0
- data/lib/pakyow/environment.rb +381 -0
- data/lib/pakyow/error.rb +273 -0
- data/lib/pakyow/errors.rb +97 -0
- data/lib/pakyow/framework.rb +39 -0
- data/lib/pakyow/generator.rb +138 -0
- data/lib/pakyow/generators/project/default/%dot%env.erb +1 -0
- data/lib/pakyow/generators/project/default/%dot%gitignore +11 -0
- data/lib/pakyow/generators/project/default/%dot%ruby-version.erb +1 -0
- data/lib/pakyow/generators/project/default/Gemfile.erb +28 -0
- data/lib/pakyow/generators/project/default/README.md +14 -0
- data/lib/pakyow/generators/project/default/config/application.rb.erb +17 -0
- data/lib/pakyow/generators/project/default/config/environment.rb +11 -0
- data/lib/pakyow/generators/project/default/config/initializers/application/keep +0 -0
- data/lib/pakyow/generators/project/default/config/initializers/environment/keep +0 -0
- data/lib/pakyow/generators/project/default/database/keep +0 -0
- data/lib/pakyow/generators/project/default/frontend/assets/images/keep +0 -0
- data/lib/pakyow/generators/project/default/frontend/assets/packs/keep +0 -0
- data/lib/pakyow/generators/project/default/frontend/assets/styles/keep +0 -0
- data/lib/pakyow/generators/project/default/frontend/includes/keep +0 -0
- data/lib/pakyow/generators/project/default/frontend/layouts/default.html.erb +19 -0
- data/lib/pakyow/generators/project/default/frontend/pages/keep +0 -0
- data/lib/pakyow/generators/project/default/public/favicon.ico +0 -0
- data/lib/pakyow/generators/project/default/public/robots.txt +1 -0
- data/lib/pakyow/generators/project.rb +29 -0
- data/lib/pakyow/helpers/app.rb +28 -0
- data/lib/pakyow/helpers/connection.rb +45 -0
- data/lib/pakyow/info.rb +26 -0
- data/lib/pakyow/integrations/bootsnap.rb +18 -0
- data/lib/pakyow/integrations/bundler/require.rb +7 -0
- data/lib/pakyow/integrations/bundler/setup.rb +7 -0
- data/lib/pakyow/integrations/dotenv.rb +9 -0
- data/lib/pakyow/loader.rb +31 -0
- data/lib/pakyow/logger/colorizer.rb +38 -0
- data/lib/pakyow/logger/destination.rb +17 -0
- data/lib/pakyow/logger/formatter.rb +22 -0
- data/lib/pakyow/logger/formatters/human.rb +101 -0
- data/lib/pakyow/logger/formatters/json.rb +99 -0
- data/lib/pakyow/logger/formatters/logfmt.rb +50 -0
- data/lib/pakyow/logger/multiplexed.rb +19 -0
- data/lib/pakyow/logger/thread_local.rb +29 -0
- data/lib/pakyow/logger/timekeeper.rb +64 -0
- data/lib/pakyow/logger.rb +125 -0
- data/lib/pakyow/operation.rb +71 -0
- data/lib/pakyow/plugin/helper_caller.rb +20 -0
- data/lib/pakyow/plugin/lookup.rb +33 -0
- data/lib/pakyow/plugin/state.rb +68 -0
- data/lib/pakyow/plugin.rb +367 -0
- data/lib/pakyow/process_manager.rb +53 -0
- data/lib/pakyow/processes/proxy.rb +67 -0
- data/lib/pakyow/processes/server.rb +32 -0
- data/lib/pakyow/rack/compatibility.rb +68 -0
- data/lib/pakyow/task.rb +315 -0
- data/lib/pakyow/tasks/boot.rake +21 -0
- data/lib/pakyow/tasks/create.rake +32 -0
- data/lib/pakyow/tasks/help.rake +17 -0
- data/lib/pakyow/tasks/info/endpoints.rake +72 -0
- data/lib/pakyow/tasks/info.rake +31 -0
- data/lib/pakyow/tasks/irb.rake +11 -0
- data/lib/pakyow/tasks/prelaunch.rake +37 -0
- data/lib/pakyow/types.rb +32 -0
- data/lib/pakyow/validations/acceptance.rb +37 -0
- data/lib/pakyow/validations/email.rb +28 -0
- data/lib/pakyow/validations/inline.rb +32 -0
- data/lib/pakyow/validations/length.rb +44 -0
- data/lib/pakyow/validations/presence.rb +41 -0
- data/lib/pakyow/validations.rb +8 -0
- data/lib/pakyow/validator.rb +81 -0
- data/lib/pakyow/verifier.rb +177 -0
- data/lib/pakyow.rb +5 -0
- metadata +267 -65
- data/pakyow-core/CHANGELOG.md +0 -128
- data/pakyow-core/LICENSE +0 -20
- data/pakyow-core/lib/pakyow/core/app.rb +0 -82
- data/pakyow-core/lib/pakyow/core/app_context.rb +0 -10
- data/pakyow-core/lib/pakyow/core/base.rb +0 -61
- data/pakyow-core/lib/pakyow/core/call_context.rb +0 -171
- data/pakyow-core/lib/pakyow/core/config/app.rb +0 -49
- data/pakyow-core/lib/pakyow/core/config/cookies.rb +0 -4
- data/pakyow-core/lib/pakyow/core/config/logger.rb +0 -34
- data/pakyow-core/lib/pakyow/core/config/reloader.rb +0 -10
- data/pakyow-core/lib/pakyow/core/config/server.rb +0 -10
- data/pakyow-core/lib/pakyow/core/config/session.rb +0 -41
- data/pakyow-core/lib/pakyow/core/config.rb +0 -95
- data/pakyow-core/lib/pakyow/core/errors.rb +0 -16
- data/pakyow-core/lib/pakyow/core/helpers/configuring.rb +0 -142
- data/pakyow-core/lib/pakyow/core/helpers/hooks.rb +0 -106
- data/pakyow-core/lib/pakyow/core/helpers/running.rb +0 -124
- data/pakyow-core/lib/pakyow/core/helpers.rb +0 -61
- data/pakyow-core/lib/pakyow/core/loader.rb +0 -32
- data/pakyow-core/lib/pakyow/core/middleware/logger.rb +0 -146
- data/pakyow-core/lib/pakyow/core/middleware/override.rb +0 -3
- data/pakyow-core/lib/pakyow/core/middleware/reloader.rb +0 -23
- data/pakyow-core/lib/pakyow/core/middleware/req_path_normalizer.rb +0 -49
- data/pakyow-core/lib/pakyow/core/middleware/session.rb +0 -5
- data/pakyow-core/lib/pakyow/core/middleware/static.rb +0 -76
- data/pakyow-core/lib/pakyow/core/multilog.rb +0 -19
- data/pakyow-core/lib/pakyow/core/request.rb +0 -119
- data/pakyow-core/lib/pakyow/core/response.rb +0 -135
- data/pakyow-core/lib/pakyow/core/route_eval.rb +0 -254
- data/pakyow-core/lib/pakyow/core/route_expansion_eval.rb +0 -115
- data/pakyow-core/lib/pakyow/core/route_lookup.rb +0 -41
- data/pakyow-core/lib/pakyow/core/route_merger.rb +0 -76
- data/pakyow-core/lib/pakyow/core/route_module.rb +0 -21
- data/pakyow-core/lib/pakyow/core/route_set.rb +0 -74
- data/pakyow-core/lib/pakyow/core/route_template_defaults.rb +0 -43
- data/pakyow-core/lib/pakyow/core/route_template_eval.rb +0 -72
- data/pakyow-core/lib/pakyow/core/router.rb +0 -181
- data/pakyow-core/lib/pakyow/core.rb +0 -8
- data/pakyow-core/lib/pakyow-core.rb +0 -1
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
require "pakyow/error"
|
6
|
+
|
7
|
+
module Pakyow
|
8
|
+
class InvalidData < Error
|
9
|
+
class_state :messages, default: {
|
10
|
+
verification: "Provided data didn't pass verification"
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
# Failed verifier result.
|
14
|
+
#
|
15
|
+
def result
|
16
|
+
@context[:result]
|
17
|
+
end
|
18
|
+
|
19
|
+
# Object that failed verification.
|
20
|
+
#
|
21
|
+
def object
|
22
|
+
@context[:object]
|
23
|
+
end
|
24
|
+
|
25
|
+
def contextual_message
|
26
|
+
<<~MESSAGE
|
27
|
+
Here's the data:
|
28
|
+
|
29
|
+
#{indent_as_code(JSON.pretty_generate(object))}
|
30
|
+
|
31
|
+
And here are the failures:
|
32
|
+
|
33
|
+
#{indent_as_code(JSON.pretty_generate(result.messages))}
|
34
|
+
MESSAGE
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class UnknownCommand < Error
|
39
|
+
class_state :messages, default: {
|
40
|
+
default: "`{command}' is not a known command"
|
41
|
+
}.freeze
|
42
|
+
end
|
43
|
+
|
44
|
+
class UnknownFramework < Error
|
45
|
+
class_state :messages, default: {
|
46
|
+
default: "`{framework}' is not a known framework"
|
47
|
+
}.freeze
|
48
|
+
end
|
49
|
+
|
50
|
+
class UnknownHelperContext < Error
|
51
|
+
class_state :messages, default: {
|
52
|
+
default: "`{context}' is not a known helper context"
|
53
|
+
}.freeze
|
54
|
+
end
|
55
|
+
|
56
|
+
class UnknownType < Error
|
57
|
+
class_state :messages, default: {
|
58
|
+
default: "`{type}' is not a known type"
|
59
|
+
}.freeze
|
60
|
+
|
61
|
+
def contextual_message
|
62
|
+
known_types = @context[:types].each_with_object(String.new) { |known_type, known_types_message|
|
63
|
+
known_types_message << " - #{known_type.inspect}\n"
|
64
|
+
}
|
65
|
+
|
66
|
+
<<~MESSAGE
|
67
|
+
Try using one of these known types:
|
68
|
+
|
69
|
+
#{known_types}
|
70
|
+
MESSAGE
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class UnknownPlugin < Error
|
75
|
+
class_state :messages, default: {
|
76
|
+
default: "`{plugin}' is not a known plugin"
|
77
|
+
}.freeze
|
78
|
+
|
79
|
+
def contextual_message
|
80
|
+
available_plugins = Pakyow.plugins.keys.each_with_object(String.new) { |plugin_name, available_plugins_message|
|
81
|
+
available_plugins_message << " - #{plugin_name.inspect}\n"
|
82
|
+
}
|
83
|
+
|
84
|
+
<<~MESSAGE
|
85
|
+
Try using one of these available plugins:
|
86
|
+
|
87
|
+
#{available_plugins}
|
88
|
+
MESSAGE
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class UnknownValidationError < Error
|
93
|
+
class_state :messages, default: {
|
94
|
+
default: "`{validation}' is not a known validation"
|
95
|
+
}.freeze
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pakyow/environment"
|
4
|
+
|
5
|
+
module Pakyow
|
6
|
+
# Base framework class.
|
7
|
+
#
|
8
|
+
class Framework
|
9
|
+
class << self
|
10
|
+
# rubocop:disable Naming/MethodName
|
11
|
+
def Framework(name)
|
12
|
+
Class.new(self) do
|
13
|
+
@framework_name = name
|
14
|
+
end
|
15
|
+
end
|
16
|
+
# rubocop:enabled Naming/MethodName
|
17
|
+
|
18
|
+
def inherited(framework_class)
|
19
|
+
super
|
20
|
+
|
21
|
+
return unless instance_variable_defined?(:@framework_name)
|
22
|
+
Pakyow.register_framework(@framework_name, framework_class)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context = self
|
27
|
+
Pakyow.singleton_class.class_eval do
|
28
|
+
define_method :Framework do |name|
|
29
|
+
context.Framework(name)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
attr_reader :object
|
34
|
+
|
35
|
+
def initialize(object)
|
36
|
+
@object = object
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,138 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "erb"
|
4
|
+
require "fileutils"
|
5
|
+
require "pathname"
|
6
|
+
|
7
|
+
require "pakyow/support/cli/runner"
|
8
|
+
require "pakyow/support/class_state"
|
9
|
+
require "pakyow/support/extension"
|
10
|
+
require "pakyow/support/hookable"
|
11
|
+
|
12
|
+
require "pakyow/support/pipeline"
|
13
|
+
require "pakyow/support/pipeline/object"
|
14
|
+
|
15
|
+
module Pakyow
|
16
|
+
# Base class for generators.
|
17
|
+
#
|
18
|
+
class Generator
|
19
|
+
module Common
|
20
|
+
def dot
|
21
|
+
"."
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
include Common
|
26
|
+
|
27
|
+
include Support::Hookable
|
28
|
+
events :generate
|
29
|
+
|
30
|
+
attr_reader :files
|
31
|
+
|
32
|
+
def initialize(source_path)
|
33
|
+
@files = Dir.glob(::File.join(source_path, "**/*")).reject { |path|
|
34
|
+
::File.directory?(path)
|
35
|
+
}.map { |path|
|
36
|
+
File.new(path, source_path, context: self)
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def generate(destination_path, options)
|
41
|
+
@destination_path = destination_path
|
42
|
+
|
43
|
+
performing :generate do
|
44
|
+
FileUtils.mkdir_p(destination_path)
|
45
|
+
|
46
|
+
@files.each do |file|
|
47
|
+
file.generate(destination_path, options)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def run(command, message:)
|
53
|
+
Support::CLI::Runner.new(message: message).run(
|
54
|
+
"cd #{@destination_path} && #{command}"
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
class File
|
59
|
+
include Common
|
60
|
+
|
61
|
+
include Support::Pipeline::Object
|
62
|
+
|
63
|
+
attr_accessor :path, :logical_path, :content, :context
|
64
|
+
|
65
|
+
def initialize(path, source_path, context: self)
|
66
|
+
@path, @context = path, context
|
67
|
+
|
68
|
+
@logical_path = Pathname.new(path).relative_path_from(
|
69
|
+
Pathname.new(source_path)
|
70
|
+
).to_s
|
71
|
+
|
72
|
+
@content = ::File.read(@path)
|
73
|
+
end
|
74
|
+
|
75
|
+
def generate(destination_path, options)
|
76
|
+
options.each do |key, value|
|
77
|
+
@context.instance_variable_set(:"@#{key}", value)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Process the file.
|
81
|
+
#
|
82
|
+
Processor.new.call(self)
|
83
|
+
|
84
|
+
# Build the generated file path.
|
85
|
+
#
|
86
|
+
destination_path_for_file = ::File.join(destination_path, @logical_path)
|
87
|
+
|
88
|
+
# Make sure the directory exists.
|
89
|
+
#
|
90
|
+
FileUtils.mkdir_p(::File.dirname(destination_path_for_file))
|
91
|
+
|
92
|
+
# Skip keep files.
|
93
|
+
#
|
94
|
+
unless ::File.basename(@logical_path) == "keep"
|
95
|
+
# Write the file.
|
96
|
+
#
|
97
|
+
::File.open(destination_path_for_file, "w+") do |file|
|
98
|
+
file.write(@content)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
class Processor
|
105
|
+
include Support::Pipeline
|
106
|
+
|
107
|
+
action :process_erb
|
108
|
+
action :populate_path
|
109
|
+
|
110
|
+
def process_erb(file)
|
111
|
+
if ::File.extname(file.logical_path) == ".erb"
|
112
|
+
file.logical_path = ::File.join(
|
113
|
+
::File.dirname(file.logical_path),
|
114
|
+
::File.basename(file.logical_path, ".erb")
|
115
|
+
)
|
116
|
+
|
117
|
+
erb = if RUBY_VERSION.start_with?("2.5")
|
118
|
+
ERB.new(file.content, nil, "%<>-")
|
119
|
+
else
|
120
|
+
ERB.new(file.content, trim_mode: "%-")
|
121
|
+
end
|
122
|
+
|
123
|
+
file.content = erb.result(
|
124
|
+
file.context.instance_eval { binding }
|
125
|
+
)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
PATH_VAR_REGEX = /%([^}]*)%/
|
130
|
+
|
131
|
+
def populate_path(file)
|
132
|
+
file.logical_path.scan(PATH_VAR_REGEX).each do |match|
|
133
|
+
file.logical_path.gsub!("%#{match[0]}%", file.context.send(match[0].to_sym))
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
SECRET=<%= generate_secret %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= RUBY_VERSION %>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
3
|
+
|
4
|
+
ruby "<%= RUBY_VERSION %>"
|
5
|
+
|
6
|
+
<%- if generating_locally? -%>
|
7
|
+
gem "pakyow", github: "pakyow/pakyow", require: "pakyow/all"
|
8
|
+
<%- else -%>
|
9
|
+
gem "pakyow", "~> <%= Pakyow::VERSION %>", require: "pakyow/all"
|
10
|
+
<%- end -%>
|
11
|
+
|
12
|
+
# Use the puma application server.
|
13
|
+
#
|
14
|
+
gem "puma"
|
15
|
+
|
16
|
+
# Easily manage environment variables.
|
17
|
+
#
|
18
|
+
gem "dotenv"
|
19
|
+
|
20
|
+
group :development do
|
21
|
+
# Speed up project boot time.
|
22
|
+
#
|
23
|
+
gem "bootsnap", require: false
|
24
|
+
|
25
|
+
# Use SQLite3 as the default data source in development.
|
26
|
+
#
|
27
|
+
gem "sqlite3"
|
28
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Hello, Web
|
2
|
+
|
3
|
+
Start your project:
|
4
|
+
|
5
|
+
* From a command prompt, run `pakyow boot`
|
6
|
+
|
7
|
+
You can access your project at [`localhost:3000`](http://localhost:3000) from your web browser.
|
8
|
+
|
9
|
+
## Learn more
|
10
|
+
|
11
|
+
* Website: https://pakyow.com
|
12
|
+
* Community: https://pakyow.com/talk
|
13
|
+
* Documentation: https://pakyow.com/docs/hello
|
14
|
+
* View Source: https://github.com/pakyow/pakyow
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Pakyow.app :<%= @project_name %> do
|
2
|
+
# Learn more about configuring an application:
|
3
|
+
#
|
4
|
+
# * https://pakyow.com/docs/configuration
|
5
|
+
#
|
6
|
+
configure do
|
7
|
+
# Application config for all environments.
|
8
|
+
end
|
9
|
+
|
10
|
+
configure :development do
|
11
|
+
# Application config for the development environment.
|
12
|
+
end
|
13
|
+
|
14
|
+
configure :production do
|
15
|
+
# Application config for the production environment.
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Pakyow.configure do
|
2
|
+
# Global environment configuration.
|
3
|
+
end
|
4
|
+
|
5
|
+
Pakyow.configure :development do
|
6
|
+
config.data.connections.sql[:default] = "sqlite://database/development.db"
|
7
|
+
end
|
8
|
+
|
9
|
+
Pakyow.configure :production do
|
10
|
+
config.data.connections.sql[:default] = ENV["DATABASE_URL"]
|
11
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>
|
5
|
+
<%= @human_project_name %>
|
6
|
+
</title>
|
7
|
+
|
8
|
+
<meta charset="utf-8">
|
9
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
10
|
+
|
11
|
+
<link rel="shortcut icon" href="/favicon.ico">
|
12
|
+
</head>
|
13
|
+
|
14
|
+
<body>
|
15
|
+
<main>
|
16
|
+
<!-- @container -->
|
17
|
+
</main>
|
18
|
+
</body>
|
19
|
+
</html>
|
File without changes
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
Allow: /
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler"
|
4
|
+
require "securerandom"
|
5
|
+
|
6
|
+
require "pakyow/generator"
|
7
|
+
require "pakyow/version"
|
8
|
+
|
9
|
+
module Pakyow
|
10
|
+
# @api private
|
11
|
+
module Generators
|
12
|
+
class Project < Generator
|
13
|
+
after "generate" do
|
14
|
+
Bundler.with_clean_env do
|
15
|
+
run "bundle install --binstubs", message: "Bundling dependencies"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def generating_locally?
|
20
|
+
local_pakyow = Gem::Specification.sort_by { |g| [g.name.downcase, g.version] }.group_by(&:name).detect { |k, _| k == "pakyow" }
|
21
|
+
!local_pakyow || local_pakyow.last.last.version < Gem::Version.new(Pakyow::VERSION)
|
22
|
+
end
|
23
|
+
|
24
|
+
def generate_secret
|
25
|
+
SecureRandom.hex(64)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
module Pakyow
|
6
|
+
module Helpers
|
7
|
+
# Convenience methods for interacting with the app object.
|
8
|
+
#
|
9
|
+
module App
|
10
|
+
extend Forwardable
|
11
|
+
|
12
|
+
attr_reader :app
|
13
|
+
|
14
|
+
# @!method config
|
15
|
+
# Delegates to {app}.
|
16
|
+
#
|
17
|
+
# @see App#config
|
18
|
+
def_delegators :app, :config
|
19
|
+
|
20
|
+
# @!method path
|
21
|
+
# @return builds the path to a named route (see {Paths#path})
|
22
|
+
#
|
23
|
+
# @!method path_to
|
24
|
+
# @return builds the path to a route, following a trail of names (see {Paths#path_to})
|
25
|
+
def_delegators :"app.endpoints", :path, :path_to
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
module Pakyow
|
6
|
+
module Helpers
|
7
|
+
# Convenience methods for interacting with the connection object.
|
8
|
+
#
|
9
|
+
module Connection
|
10
|
+
extend Forwardable
|
11
|
+
|
12
|
+
attr_reader :connection
|
13
|
+
|
14
|
+
# @!method app
|
15
|
+
# Returns the current app.
|
16
|
+
#
|
17
|
+
# @see App
|
18
|
+
# @!method logger
|
19
|
+
# Returns the logger.
|
20
|
+
#
|
21
|
+
# @see Request#logger
|
22
|
+
#
|
23
|
+
# @!method params
|
24
|
+
# Returns the request params.
|
25
|
+
#
|
26
|
+
# @see Request#params
|
27
|
+
#
|
28
|
+
# @!method session
|
29
|
+
# Returns the session.
|
30
|
+
#
|
31
|
+
# @see Request#session
|
32
|
+
#
|
33
|
+
# @!method :cookies
|
34
|
+
# Returns cookies.
|
35
|
+
#
|
36
|
+
# @see Request#:cookies
|
37
|
+
def_delegators :connection, :app, :logger, :params, :session, :cookies
|
38
|
+
|
39
|
+
# @!method operations
|
40
|
+
# Returns the operations lookup.
|
41
|
+
#
|
42
|
+
def_delegators :app, :operations
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/pakyow/info.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pakyow/version"
|
4
|
+
|
5
|
+
module Pakyow
|
6
|
+
# Returns information about the environment.
|
7
|
+
#
|
8
|
+
def self.info
|
9
|
+
{
|
10
|
+
versions: {
|
11
|
+
ruby: "v#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} (#{RUBY_PLATFORM})",
|
12
|
+
pakyow: "v#{VERSION}"
|
13
|
+
},
|
14
|
+
|
15
|
+
apps: Pakyow.mounts.map { |mount|
|
16
|
+
{
|
17
|
+
mount_path: mount[:path],
|
18
|
+
class: mount[:app].to_s,
|
19
|
+
reference: mount[:app].config.name.inspect,
|
20
|
+
frameworks: mount[:app].config.loaded_frameworks,
|
21
|
+
app_root: File.expand_path(mount[:app].config.root)
|
22
|
+
}
|
23
|
+
}
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Configures bootsnap.
|
4
|
+
#
|
5
|
+
begin
|
6
|
+
require "bootsnap"
|
7
|
+
|
8
|
+
Bootsnap.setup(
|
9
|
+
cache_dir: File.join(Pakyow.config.root, "tmp/cache"),
|
10
|
+
development_mode: Pakyow.env?(:development),
|
11
|
+
load_path_cache: true,
|
12
|
+
autoload_paths_cache: false,
|
13
|
+
disable_trace: false,
|
14
|
+
compile_cache_iseq: true,
|
15
|
+
compile_cache_yaml: true
|
16
|
+
)
|
17
|
+
rescue LoadError
|
18
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pakyow/support/inflector"
|
4
|
+
require "pakyow/support/makeable"
|
5
|
+
|
6
|
+
module Pakyow
|
7
|
+
# Loads files that define an app aspect and names the objects appropriately.
|
8
|
+
#
|
9
|
+
class Loader
|
10
|
+
def initialize(path)
|
11
|
+
@path = path
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(target)
|
15
|
+
code = String.new
|
16
|
+
target.__object_name.namespace.parts.each do |part|
|
17
|
+
code << "module #{Support.inflector.camelize(part)}\n"
|
18
|
+
end
|
19
|
+
|
20
|
+
code << "class #{Support.inflector.camelize(target.__object_name.name)}\n"
|
21
|
+
code << File.read(@path)
|
22
|
+
code << "end\n"
|
23
|
+
|
24
|
+
target.__object_name.namespace.parts.count.times do
|
25
|
+
code << "end\n"
|
26
|
+
end
|
27
|
+
|
28
|
+
eval(code, TOPLEVEL_BINDING, @path, 1 - target.__object_name.namespace.parts.count - 1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "pakyow/support/cli/style"
|
4
|
+
|
5
|
+
require "pakyow/logger"
|
6
|
+
|
7
|
+
module Pakyow
|
8
|
+
class Logger
|
9
|
+
# Helpers for colorizing log messages.
|
10
|
+
#
|
11
|
+
module Colorizer
|
12
|
+
# Colorizes message based on level.
|
13
|
+
#
|
14
|
+
def self.colorize(message, level)
|
15
|
+
if color = color(level)
|
16
|
+
Support::CLI.style.public_send(color, message)
|
17
|
+
else
|
18
|
+
message
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
LEVEL_COLORS = {
|
23
|
+
internal: :magenta,
|
24
|
+
debug: :cyan,
|
25
|
+
info: :green,
|
26
|
+
warn: :yellow,
|
27
|
+
error: :red,
|
28
|
+
fatal: :red
|
29
|
+
}.freeze
|
30
|
+
|
31
|
+
# Returns a color for a level.
|
32
|
+
#
|
33
|
+
def self.color(level)
|
34
|
+
LEVEL_COLORS[level]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|