jetski 0.4.1 → 0.4.4
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/bin/jetski +3 -3
- data/lib/jetski/base_controller.rb +4 -62
- data/lib/jetski/database/base.rb +3 -0
- data/lib/jetski/helpers/delegatable.rb +15 -0
- data/lib/jetski/helpers/view_helpers.rb +9 -0
- data/lib/jetski/model.rb +44 -1
- data/lib/jetski/router.rb +0 -2
- data/lib/jetski/server.rb +5 -2
- data/lib/jetski/version.rb +1 -1
- data/lib/jetski/view_renderer.rb +85 -0
- data/lib/jetski.rb +3 -1
- metadata +12 -9
- /data/{bin/templates → templates}/base/Gemfile +0 -0
- /data/{bin/templates → templates}/base/app/assets/images/jetski-logo.png +0 -0
- /data/{bin/templates → templates}/base/app/assets/javascript/application.js +0 -0
- /data/{bin/templates → templates}/base/app/assets/stylesheets/application.css +0 -0
- /data/{bin/templates → templates}/base/app/assets/stylesheets/pages.css +0 -0
- /data/{bin/templates → templates}/base/app/controllers/pages_controller.rb +0 -0
- /data/{bin/templates → templates}/base/app/views/layouts/application.html.erb +0 -0
- /data/{bin/templates → templates}/base/app/views/pages/home.html.erb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 95f5aadf74c7ce5bcf18c35cf8c2cf3767fa5751a4c3ff400be66f9e6ecaec65
|
|
4
|
+
data.tar.gz: b7f6820ba40818e1cfa11a8e3ff8df6c57a442663ba52450ed322af8474f845f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 82d48043e89dcbb5c5eb1e9a07cb1a076362b7041b21323c31760b3e0fe47d8a350d2a190e9911ed07c5c3cb97402c24b7b68427a93e15649ee31fb240964e1e
|
|
7
|
+
data.tar.gz: 67b50c582a2e69fd043422d3ba1d9ad5b944f0f8461375a647e7be2e97f56b2ef892a347047019cd422aa21a67a20679364f28a982a2006ab57b728d7f08f006
|
data/bin/jetski
CHANGED
|
@@ -42,13 +42,13 @@ class JetskiCLI < Thor
|
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
desc "server", "starts the jetski app"
|
|
45
|
+
method_option :port, :aliases => "-p", :desc => "Configure which port number to run server on"
|
|
45
46
|
def server
|
|
46
|
-
Jetski::Server.new.call
|
|
47
|
+
Jetski::Server.new(port: options[:port]).call
|
|
47
48
|
end
|
|
48
49
|
|
|
49
50
|
desc "console", "opens jetski console"
|
|
50
51
|
def console
|
|
51
|
-
# TODO: Open console and include all controllers/models/etc
|
|
52
52
|
Jetski::Autoloader.call
|
|
53
53
|
Jetski::Autoloader.load_controllers
|
|
54
54
|
Pry.start
|
|
@@ -64,7 +64,7 @@ class JetskiCLI < Thor
|
|
|
64
64
|
subcommand "db", JetskiCLIHelpers::Database
|
|
65
65
|
|
|
66
66
|
def self.source_root
|
|
67
|
-
File.join(File.dirname(__FILE__), 'templates')
|
|
67
|
+
File.join(File.dirname(__FILE__), '..', 'templates')
|
|
68
68
|
end
|
|
69
69
|
end
|
|
70
70
|
|
|
@@ -13,7 +13,8 @@ module Jetski
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
# Method to render matching view with controller_name/action_name
|
|
16
|
-
|
|
16
|
+
# TODO: Make render available in view as seperate method.
|
|
17
|
+
|
|
17
18
|
def render(**args)
|
|
18
19
|
@performed_render = true
|
|
19
20
|
request_status = args[:status] || 200
|
|
@@ -29,8 +30,8 @@ module Jetski
|
|
|
29
30
|
res.body = args[:json].to_json
|
|
30
31
|
return
|
|
31
32
|
end
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
|
|
34
|
+
ViewRenderer.new(self).call
|
|
34
35
|
end
|
|
35
36
|
|
|
36
37
|
def redirect_to(url)
|
|
@@ -57,64 +58,5 @@ module Jetski
|
|
|
57
58
|
def custom_request_method
|
|
58
59
|
@request_method
|
|
59
60
|
end
|
|
60
|
-
|
|
61
|
-
private
|
|
62
|
-
def render_template_file
|
|
63
|
-
view_render = page_with_layout.gsub("\n</head>", "#{content_for_head}\n</head>")
|
|
64
|
-
res.content_type = "text/html"
|
|
65
|
-
res.body = view_render
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def page_with_layout
|
|
69
|
-
process_erb(File.read(File.join(views_folder, "layouts/application.html.erb"))) do
|
|
70
|
-
process_erb(File.read(File.join(views_folder, path_to_controller, "#{action_name}.html.erb")))
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def content_for_head
|
|
75
|
-
_content_for_head = ''
|
|
76
|
-
|
|
77
|
-
application_css_file = File.join(assets_folder, "stylesheets", "application.css")
|
|
78
|
-
if File.exist? application_css_file
|
|
79
|
-
_content_for_head += "<link rel='stylesheet' href='/application.css'>\n"
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
controller_css_file = File.join(assets_folder, "stylesheets", "#{path_to_controller}.css")
|
|
83
|
-
if File.exist? controller_css_file
|
|
84
|
-
_content_for_head += "<link rel='stylesheet' href='/#{path_to_controller}.css'>\n"
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
application_js_file = File.join(assets_folder, "javascript", "application.js")
|
|
88
|
-
if File.exist? application_js_file
|
|
89
|
-
_content_for_head += "<script src='application.js' defer></script>\n"
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
controller_js_file = File.join(assets_folder, "javascript", "#{path_to_controller}.js")
|
|
93
|
-
if File.exist? controller_js_file
|
|
94
|
-
_content_for_head += "<script src='/#{path_to_controller}.js' defer></script>\n"
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# Add reactive form JS code
|
|
98
|
-
_content_for_head += "<script src='/reactive-form.js' defer></script>\n"
|
|
99
|
-
|
|
100
|
-
_content_for_head
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def views_folder
|
|
104
|
-
File.join(Jetski.app_root, 'app/views')
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
def assets_folder
|
|
108
|
-
File.join(Jetski.app_root, 'app/assets')
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def path_to_controller
|
|
112
|
-
controller_path[1..-1]
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
def process_erb(content)
|
|
116
|
-
template = ERB.new(content)
|
|
117
|
-
template.result(binding)
|
|
118
|
-
end
|
|
119
61
|
end
|
|
120
62
|
end
|
data/lib/jetski/database/base.rb
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Jetski
|
|
2
|
+
module Helpers
|
|
3
|
+
module Delegatable
|
|
4
|
+
# delegate(:method, to: :class)
|
|
5
|
+
# Allows you to delegate a method to another class
|
|
6
|
+
def delegate(*delegatables, to:)
|
|
7
|
+
delegatables.each do |method_name|
|
|
8
|
+
define_method method_name do
|
|
9
|
+
public_send(to).public_send(method_name)
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/jetski/model.rb
CHANGED
|
@@ -1,21 +1,64 @@
|
|
|
1
1
|
module Jetski
|
|
2
2
|
class Model
|
|
3
3
|
extend Jetski::Database::Base
|
|
4
|
+
|
|
5
|
+
def initialize(**args)
|
|
6
|
+
@virtual_attributes = {}
|
|
7
|
+
|
|
8
|
+
args.each do |k, v|
|
|
9
|
+
@virtual_attributes[k] = v
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
@virtual_attributes["id"] ||= ""
|
|
13
|
+
@virtual_attributes["created_at"] ||= ""
|
|
14
|
+
@virtual_attributes["updated_at"] ||= ""
|
|
15
|
+
|
|
16
|
+
@virtual_attributes.each do |k, v|
|
|
17
|
+
self.class.class_eval do
|
|
18
|
+
define_method(k) { v }
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
self.class.class_eval do
|
|
23
|
+
define_method(:inspect) do
|
|
24
|
+
post_obj_id = object_id
|
|
25
|
+
inspect_str = "#<Post:#{post_obj_id}"
|
|
26
|
+
@virtual_attributes.each do |k, v|
|
|
27
|
+
inspect_str += " #{k}=\"#{v}\""
|
|
28
|
+
end
|
|
29
|
+
inspect_str += ">"
|
|
30
|
+
inspect_str
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
4
35
|
class << self
|
|
5
36
|
def create(**args)
|
|
6
37
|
return puts "#{table_name.capitalize}.create was called with no args" if args.size == 0
|
|
7
38
|
data_values = args.map { |k,v| v }
|
|
8
39
|
key_names = args.map { |k, v| k }
|
|
9
40
|
|
|
41
|
+
# Set default values on create
|
|
42
|
+
|
|
10
43
|
key_names.append "created_at"
|
|
11
44
|
data_values.append Time.now.to_s
|
|
12
45
|
|
|
46
|
+
key_names.append "id"
|
|
47
|
+
data_values.append(count + 1)
|
|
48
|
+
|
|
13
49
|
sql_command = <<~SQL
|
|
14
50
|
INSERT INTO #{pluralized_table_name} (#{key_names.join(", ")})
|
|
15
51
|
VALUES (#{(1..key_names.size).map { |n| "?" }.join(", ")})
|
|
16
52
|
SQL
|
|
17
53
|
|
|
18
54
|
db.execute(sql_command, data_values)
|
|
55
|
+
|
|
56
|
+
post_attributes = {}
|
|
57
|
+
key_names.each.with_index do |k, i|
|
|
58
|
+
post_attributes[k] = data_values[i]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
new(**post_attributes)
|
|
19
62
|
end
|
|
20
63
|
|
|
21
64
|
def all
|
|
@@ -67,7 +110,7 @@ module Jetski
|
|
|
67
110
|
columns.each.with_index do |col, idx|
|
|
68
111
|
row_obj[col] = row[idx]
|
|
69
112
|
end
|
|
70
|
-
|
|
113
|
+
new(**row_obj)
|
|
71
114
|
end
|
|
72
115
|
end
|
|
73
116
|
end
|
data/lib/jetski/router.rb
CHANGED
|
@@ -41,8 +41,6 @@ module Jetski
|
|
|
41
41
|
controller.action_name = action_name
|
|
42
42
|
controller.controller_name = controller_name
|
|
43
43
|
controller.controller_path = controller_path
|
|
44
|
-
# TODO: Check how body is being passed in and parse it correctly.
|
|
45
|
-
# Currently is breaking with regular html form submissions
|
|
46
44
|
if req.body
|
|
47
45
|
controller.params = parse_body(req.body, req.content_type)
|
|
48
46
|
end
|
data/lib/jetski/server.rb
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
module Jetski
|
|
2
2
|
class Server
|
|
3
|
-
|
|
3
|
+
attr_reader :port
|
|
4
|
+
|
|
5
|
+
def initialize(**args)
|
|
6
|
+
@port = args[:port] || 8000
|
|
4
7
|
end
|
|
5
8
|
|
|
6
9
|
def call
|
|
7
|
-
server = WEBrick::HTTPServer.new Port:
|
|
10
|
+
server = WEBrick::HTTPServer.new Port: port
|
|
8
11
|
|
|
9
12
|
Jetski::Autoloader.call
|
|
10
13
|
|
data/lib/jetski/version.rb
CHANGED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
module Jetski
|
|
2
|
+
class ViewRenderer
|
|
3
|
+
extend Jetski::Helpers::Delegatable
|
|
4
|
+
include Jetski::Helpers::ViewHelpers
|
|
5
|
+
|
|
6
|
+
attr_reader :errors, :controller
|
|
7
|
+
delegate :res, :action_name, :controller_path, to: :controller
|
|
8
|
+
|
|
9
|
+
def initialize(controller)
|
|
10
|
+
@controller = controller
|
|
11
|
+
@errors = []
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def call
|
|
15
|
+
res.content_type = "text/html"
|
|
16
|
+
view_render = perform_view_render&.gsub("\n</head>", "#{content_for_head}\n</head>")
|
|
17
|
+
return error_screen if errors.any?
|
|
18
|
+
res.body = view_render
|
|
19
|
+
end
|
|
20
|
+
private
|
|
21
|
+
def error_screen
|
|
22
|
+
# TODO: Make better error screen
|
|
23
|
+
res.body = "<h1> Errors: #{errors.map {|e| e }.join(", ")} </h1>"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def perform_view_render
|
|
27
|
+
process_erb(File.read(File.join(views_folder, "layouts/application.html.erb"))) do
|
|
28
|
+
process_erb(File.read(File.join(views_folder, path_to_controller, "#{action_name}.html.erb")))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def process_erb(content)
|
|
33
|
+
template = ERB.new(content)
|
|
34
|
+
# Perserve instance variables to view render
|
|
35
|
+
# @posts from controller to posts/index.html.erb
|
|
36
|
+
controller.instance_eval do
|
|
37
|
+
template.result(binding)
|
|
38
|
+
end
|
|
39
|
+
rescue => e
|
|
40
|
+
@errors << e
|
|
41
|
+
nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def content_for_head
|
|
45
|
+
_content_for_head = ''
|
|
46
|
+
|
|
47
|
+
application_css_file = File.join(assets_folder, "stylesheets", "application.css")
|
|
48
|
+
if File.exist? application_css_file
|
|
49
|
+
_content_for_head += "<link rel='stylesheet' href='/application.css'>\n"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
controller_css_file = File.join(assets_folder, "stylesheets", "#{path_to_controller}.css")
|
|
53
|
+
if File.exist? controller_css_file
|
|
54
|
+
_content_for_head += "<link rel='stylesheet' href='/#{path_to_controller}.css'>\n"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
application_js_file = File.join(assets_folder, "javascript", "application.js")
|
|
58
|
+
if File.exist? application_js_file
|
|
59
|
+
_content_for_head += "<script src='application.js' defer></script>\n"
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
controller_js_file = File.join(assets_folder, "javascript", "#{path_to_controller}.js")
|
|
63
|
+
if File.exist? controller_js_file
|
|
64
|
+
_content_for_head += "<script src='/#{path_to_controller}.js' defer></script>\n"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Add reactive form JS code
|
|
68
|
+
_content_for_head += "<script src='/reactive-form.js' defer></script>\n"
|
|
69
|
+
|
|
70
|
+
_content_for_head
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def views_folder
|
|
74
|
+
File.join(Jetski.app_root, 'app/views')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def assets_folder
|
|
78
|
+
File.join(Jetski.app_root, 'app/assets')
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def path_to_controller
|
|
82
|
+
controller_path[1..-1]
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
data/lib/jetski.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
require "webrick"
|
|
2
2
|
require "json"
|
|
3
|
-
require "json"
|
|
4
3
|
require "ostruct"
|
|
5
4
|
require "erb"
|
|
6
5
|
require "rack"
|
|
@@ -15,6 +14,9 @@ require_relative './jetski/autoloader'
|
|
|
15
14
|
require_relative './jetski/server'
|
|
16
15
|
require_relative './jetski/database/base'
|
|
17
16
|
require_relative './jetski/model'
|
|
17
|
+
require_relative './jetski/helpers/delegatable'
|
|
18
|
+
require_relative './jetski/helpers/view_helpers'
|
|
19
|
+
require_relative './jetski/view_renderer'
|
|
18
20
|
|
|
19
21
|
module Jetski
|
|
20
22
|
extend self
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jetski
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Indigo Tech Tutorials
|
|
@@ -120,26 +120,29 @@ files:
|
|
|
120
120
|
- bin/jetski_cli_helpers/destroy.rb
|
|
121
121
|
- bin/jetski_cli_helpers/generate.rb
|
|
122
122
|
- bin/jetski_cli_helpers/shared_methods.rb
|
|
123
|
-
- bin/templates/base/Gemfile
|
|
124
|
-
- bin/templates/base/app/assets/images/jetski-logo.png
|
|
125
|
-
- bin/templates/base/app/assets/javascript/application.js
|
|
126
|
-
- bin/templates/base/app/assets/stylesheets/application.css
|
|
127
|
-
- bin/templates/base/app/assets/stylesheets/pages.css
|
|
128
|
-
- bin/templates/base/app/controllers/pages_controller.rb
|
|
129
|
-
- bin/templates/base/app/views/layouts/application.html.erb
|
|
130
|
-
- bin/templates/base/app/views/pages/home.html.erb
|
|
131
123
|
- lib/jetski.rb
|
|
132
124
|
- lib/jetski/autoloader.rb
|
|
133
125
|
- lib/jetski/base_controller.rb
|
|
134
126
|
- lib/jetski/database/base.rb
|
|
135
127
|
- lib/jetski/frontend/reactive_form.js
|
|
136
128
|
- lib/jetski/frontend/reactive_form.rb
|
|
129
|
+
- lib/jetski/helpers/delegatable.rb
|
|
130
|
+
- lib/jetski/helpers/view_helpers.rb
|
|
137
131
|
- lib/jetski/model.rb
|
|
138
132
|
- lib/jetski/router.rb
|
|
139
133
|
- lib/jetski/router/parser.rb
|
|
140
134
|
- lib/jetski/router/shared_methods.rb
|
|
141
135
|
- lib/jetski/server.rb
|
|
142
136
|
- lib/jetski/version.rb
|
|
137
|
+
- lib/jetski/view_renderer.rb
|
|
138
|
+
- templates/base/Gemfile
|
|
139
|
+
- templates/base/app/assets/images/jetski-logo.png
|
|
140
|
+
- templates/base/app/assets/javascript/application.js
|
|
141
|
+
- templates/base/app/assets/stylesheets/application.css
|
|
142
|
+
- templates/base/app/assets/stylesheets/pages.css
|
|
143
|
+
- templates/base/app/controllers/pages_controller.rb
|
|
144
|
+
- templates/base/app/views/layouts/application.html.erb
|
|
145
|
+
- templates/base/app/views/pages/home.html.erb
|
|
143
146
|
homepage: https://rubygems.org/gems/jetski
|
|
144
147
|
licenses:
|
|
145
148
|
- MIT
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|