jetski 0.4.1 → 0.4.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a7f1033d352171f7ccf893f673b76ed6f847c404b0aa460812fe60dc4ce0883a
4
- data.tar.gz: 88b3a07a229f606c2599c6f728423a584b1c242441217f6c04d14c9b1dd8e873
3
+ metadata.gz: 02eebca230858e0f9461c223fba7587103618d4b84df0c9b2725ad9f28218041
4
+ data.tar.gz: 4331419e37d977fd5196cc8c21fda361a6468d4bbef48eb844a41e23eb230e74
5
5
  SHA512:
6
- metadata.gz: dcce62044cc495b3e39645033c102a5146d39d7a00ecd3dc151d75aed67eda8f0c757323bb426c743cd8873cfa9e33945fbf8881b579853e872a61af524a4473
7
- data.tar.gz: 2edf2994dd5a44423f48d4a9d2059e6508d2a1f766d0310597ffb7e7e6d975df0fcf0ef66ae6c7168c68e78baa41fc9bd6cfa9d293ce662b4c699909b5039d2a
6
+ metadata.gz: 0d86c1de231237e2d535c2ed22a2257cb178d5752f041f17772806d00e714952f74fd15cc84e842e143069942cad868d1dc9f289e98458f00241b91388bc5d3a
7
+ data.tar.gz: 06b00efc1e4c3076fab69fbef449edaf65abd00cc803eba14c19fc1c162d4e55f1cad97a31ea9389793d12582cac926450a04602256dbd9ca9cbbaf585381d2b
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
- render_template_file
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
@@ -0,0 +1,17 @@
1
+ require "pry"
2
+
3
+ module Jetski
4
+ module Helpers
5
+ module Delegatable
6
+ # delegate(:method, to: :class)
7
+ # Allows you to delegate a method to another class
8
+ def delegate(*delegatables, to:)
9
+ delegatables.each do |method_name|
10
+ define_method method_name do
11
+ self.public_send(to).public_send(method_name)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ module Jetski
2
+ module Helpers
3
+ module ViewHelpers
4
+ def render(path_to_file)
5
+ File.join(Jetski.app_root, path_to_file)
6
+ end
7
+ end
8
+ end
9
+ end
data/lib/jetski/model.rb CHANGED
@@ -1,6 +1,11 @@
1
1
  module Jetski
2
2
  class Model
3
3
  extend Jetski::Database::Base
4
+
5
+ def initialize(**args)
6
+
7
+ end
8
+
4
9
  class << self
5
10
  def create(**args)
6
11
  return puts "#{table_name.capitalize}.create was called with no args" if args.size == 0
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
- def initialize
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: 8000
10
+ server = WEBrick::HTTPServer.new Port: port
8
11
 
9
12
  Jetski::Autoloader.call
10
13
 
@@ -1,3 +1,3 @@
1
1
  module Jetski
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.3"
3
3
  end
@@ -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.1
4
+ version: 0.4.3
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