Class: Jetski::Router

Inherits:
Object
  • Object
show all
Includes:
Parser
Defined in:
lib/jetski/router.rb,
lib/jetski/router/parser.rb,
lib/jetski/router/host/base.rb,
lib/jetski/router/host/crud.rb,
lib/jetski/router/host/controller.rb,
lib/jetski/router/file_path_helper.rb

Defined Under Namespace

Modules: FilePathHelper, Host, Parser

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Parser

#compile_routes

Methods included from FilePathHelper

#controller_file_paths, #model_file_paths

Constructor Details

#initialize(server) ⇒ Router

Returns a new instance of Router.



5
6
7
8
# File 'lib/jetski/router.rb', line 5

def initialize(server)
  @server = server
  @crud_routes = []
end

Instance Attribute Details

#crud_routesObject (readonly)

Returns the value of attribute crud_routes.



4
5
6
# File 'lib/jetski/router.rb', line 4

def crud_routes
  @crud_routes
end

#routesObject (readonly)

Returns the value of attribute routes.



4
5
6
# File 'lib/jetski/router.rb', line 4

def routes
  @routes
end

#serverObject (readonly)

Returns the value of attribute server.



4
5
6
# File 'lib/jetski/router.rb', line 4

def server
  @server
end

Instance Method Details

#browser_supportObject

routes to help browser default requests etc. prevent breakage



88
89
90
91
92
# File 'lib/jetski/router.rb', line 88

def browser_support
  server.mount_proc "/favicon.ico" do |req, res|
    res.status = 204  # No Content
  end
end

#callObject



10
11
12
13
14
15
16
# File 'lib/jetski/router.rb', line 10

def call
  browser_support
  fetch_routes
  host_routes
  host_crud_routes
  host_assets
end

#host_assetsObject



37
38
39
# File 'lib/jetski/router.rb', line 37

def host_assets
  host_css && host_images && host_javascript && host_javascript_helpers
end

#host_crud_routesObject



30
31
32
33
34
35
# File 'lib/jetski/router.rb', line 30

def host_crud_routes
  crud_routes_for_controller = crud_routes.group_by { |route| route[:controller_path] }
  crud_routes_for_controller.each do |controller_path, controller_routes|
    Host::Crud.new(server, controller_routes, **controller_routes.first).call
  end
end

#host_cssObject



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/jetski/router.rb', line 41

def host_css
  css_files = Dir[File.join(Jetski.app_root,'app/assets/stylesheets/**/*.css')]
  css_files.each do |file_path|
    filename  = file_path.split("app/assets/stylesheets/").last
    asset_url = "/#{filename}"
    server.mount_proc asset_url do |req, res|
      res.content_type = "text/css"
      res.body = File.read(File.join(Jetski.app_root,"app/assets/stylesheets/#{filename}"))
    end
  end
end

#host_imagesObject



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/jetski/router.rb', line 53

def host_images
  file_ext_types = ["png", "jpg"] # TODO: Expand this to support more types of images.
  image_files = Dir.glob(
    file_ext_types.map { |ext| File.join(Jetski.app_root, "app/assets/images/*.#{ext}")  }
  )
  image_files.each do |file_path|
    filename = file_path.split("/").last
    asset_url = "/#{filename}"
    server.mount_proc asset_url do |req, res|
      res.content_type = "image/*"
      res.body = File.read(File.join(Jetski.app_root,"app/assets/images/#{filename}"))
    end
  end
end

#host_javascriptObject



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/jetski/router.rb', line 68

def host_javascript
  js_files = Dir[File.join(Jetski.app_root,'app/assets/javascript/**/*.js')]
  js_files.each do |file_path|
    filename  = file_path.split("app/assets/javascript/").last
    asset_url = "/#{filename}"
    server.mount_proc asset_url do |req, res|
      res.content_type = "text/javascript"
      res.body = File.read(File.join(Jetski.app_root,"app/assets/javascript/#{filename}"))
    end
  end
end

#host_javascript_helpersObject



80
81
82
83
84
85
# File 'lib/jetski/router.rb', line 80

def host_javascript_helpers
  server.mount_proc "/reactive-form.js" do |req, res|
    res.content_type = "text/javascript"
    res.body = File.read(File.join(__dir__, 'frontend/javascript_helpers.js'))
  end
end

#host_routesObject



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/jetski/router.rb', line 18

def host_routes
  crud_actions = %w(new create show index edit update destroy)
  routes.each do |af_route|
    if crud_actions.include?(af_route[:action_name]) && (af_route[:url] != '/')
      @crud_routes << af_route
      next 
      # We need to have only one server block for routes with handle crud enabled
    end
    Host::Controller.new(server, **af_route).call
  end
end