Class: Gloo::WebSvr::Asset
- Inherits:
-
Object
- Object
- Gloo::WebSvr::Asset
- Defined in:
- lib/gloo/web_svr/asset.rb
Constant Summary collapse
- LIB_FOLDER =
'lib'.freeze
- ASSET_FOLDER =
'asset'.freeze
- IMAGE_FOLDER =
'image'.freeze
- STYLESHEET_FOLDER =
'stylesheet'.freeze
- JAVASCRIPT_FOLDER =
'javascript'.freeze
- CSS_TYPE =
'text/css'.freeze
- JS_TYPE =
'text/javascript'.freeze
- IMAGE_TYPE =
'image/'.freeze
- FAVICON_TYPE =
'image/x-icon'.freeze
Instance Method Summary collapse
-
#add_asset_routes ⇒ Object
Add all asssets to the web server pages (routes).
-
#add_containers ⇒ Object
Create the containers for the assets if they do not exist.
-
#add_file_obj(can, name, pn, info) ⇒ Object
Add a file object (page route) to the given container.
-
#add_files_in_folder(folder, container, path) ⇒ Object
Traverse the given folder and add all files to the container.
-
#add_images ⇒ Object
Add the images to the web server pages.
-
#add_javascript ⇒ Object
Add the Javascript files to the web server pages.
-
#add_stylesheets ⇒ Object
Add the stylesheets to the web server pages.
-
#asset_folder ⇒ Object
Get the asset folder in the project.
-
#image_folder ⇒ Object
Get the images folder in the project.
-
#initialize(engine, web_svr_obj) ⇒ Asset
constructor
Set up the web server.
-
#is_asset?(name) ⇒ Boolean
Check if the given name is an asset.
-
#javascript_folder ⇒ Object
Get the stylesheets folder in the project.
-
#lib_asset_folder ⇒ Object
Get the asset folder in the User’s lib.
-
#lib_image_folder ⇒ Object
Get the images folder in the User’s lib.
-
#lib_javascript_folder ⇒ Object
Get the javascript folder in the User’s lib.
-
#lib_stylesheet_folder ⇒ Object
Get the stylesheets folder in the User’s lib.
-
#list_css_assets ⇒ Object
List all css assets.
-
#list_image_assets ⇒ Object
List all image assets.
-
#list_js_assets ⇒ Object
List all js assets.
-
#path_for_file(file) ⇒ Object
Find and return the page for the given route.
-
#published_name(asset_name) ⇒ Object
Get the published name for the given asset name.
-
#register_asset(name, pn, full_path) ⇒ Object
Register an asset with the web server.
-
#render_file(file) ⇒ Object
Helper to create a successful image response with the given data.
-
#stylesheet_folder ⇒ Object
Get the stylesheets folder in the project.
-
#type_for_file(file) ⇒ Object
Get the return type for the given file.
Constructor Details
#initialize(engine, web_svr_obj) ⇒ Asset
Set up the web server.
31 32 33 34 35 36 |
# File 'lib/gloo/web_svr/asset.rb', line 31 def initialize( engine, web_svr_obj ) @engine = engine @log = @engine.log @web_svr_obj = web_svr_obj end |
Instance Method Details
#add_asset_routes ⇒ Object
Add all asssets to the web server pages (routes).
215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/gloo/web_svr/asset.rb', line 215 def add_asset_routes return unless File.exist? asset_folder @log.debug 'Adding asset routes to web server…' @factory = @engine.factory add_containers add_images add_stylesheets add_javascript end |
#add_containers ⇒ Object
Create the containers for the assets if they do not exist.
230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 |
# File 'lib/gloo/web_svr/asset.rb', line 230 def add_containers pages = @web_svr_obj.pages_container @assets = pages.find_child( ASSET_FOLDER ) || @factory.create_can( ASSET_FOLDER, pages ) @images = @assets.find_child( IMAGE_FOLDER ) || @factory.create_can( IMAGE_FOLDER, @assets ) @stylesheets = @assets.find_child( STYLESHEET_FOLDER ) || @factory.create_can( STYLESHEET_FOLDER, @assets ) @javascript = @assets.find_child( JAVASCRIPT_FOLDER ) || @factory.create_can( JAVASCRIPT_FOLDER, @assets ) end |
#add_file_obj(can, name, pn, info) ⇒ Object
Add a file object (page route) to the given container.
334 335 336 337 338 339 340 341 342 343 344 |
# File 'lib/gloo/web_svr/asset.rb', line 334 def add_file_obj( can, name, pn, info ) name = name.gsub( '.', '_' ) @log.debug "Adding route for file: #{name}" # First make sure the child doesn't already exist. child = can.find_child( name ) return if child @factory.create_file( name, pn, can ) # @factory.create_file( info.published_name, pn, can ) end |
#add_files_in_folder(folder, container, path) ⇒ Object
Traverse the given folder and add all files to the container. This is a recursive method and look look for files in subfolders.
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 |
# File 'lib/gloo/web_svr/asset.rb', line 250 def add_files_in_folder( folder, container, path ) Dir.each_child( folder ) do |name| pn = File.join( path, name ) full_path = File.join( folder, name ) if File.directory? full_path child = container.find_child( name ) child = @factory.create_can( name, container ) if child.nil? add_files_in_folder( full_path, child, pn ) else info = register_asset( name, pn, full_path ) add_file_obj( container, name, pn, info ) end end end |
#add_images ⇒ Object
Add the images to the web server pages.
270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
# File 'lib/gloo/web_svr/asset.rb', line 270 def add_images @log.debug 'Adding image asset routes to web server…' lib = lib_image_folder if lib add_files_in_folder( lib, @images, IMAGE_FOLDER ) end return unless File.exist? image_folder # for each file in the images folder # create a file object and add it to the images container add_files_in_folder( image_folder, @images, IMAGE_FOLDER ) end |
#add_javascript ⇒ Object
Add the Javascript files to the web server pages.
311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 |
# File 'lib/gloo/web_svr/asset.rb', line 311 def add_javascript @log.debug 'Adding javascript asset routes to web server…' lib = lib_javascript_folder if lib add_files_in_folder( lib, @javascript, JAVASCRIPT_FOLDER ) end return unless File.exist? javascript_folder # for each file in the javascript folder # create a file object and add it to the javascript container add_files_in_folder( javascript_folder, @javascript, JAVASCRIPT_FOLDER ) # Dir.each_child( javascript_folder ) do |name| # pn = File.join( JAVASCRIPT_FOLDER, name ) # add_file_obj( @javascript, name, pn ) # end end |
#add_stylesheets ⇒ Object
Add the stylesheets to the web server pages.
288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'lib/gloo/web_svr/asset.rb', line 288 def add_stylesheets @log.debug 'Adding stylesheet asset routes to web server…' lib = lib_stylesheet_folder if lib add_files_in_folder( lib, @stylesheets, STYLESHEET_FOLDER ) end return unless File.exist? stylesheet_folder # for each file in the stylesheets folder # create a file object and add it to the stylesheets container add_files_in_folder( stylesheet_folder, @stylesheets, STYLESHEET_FOLDER ) # Dir.each_child( stylesheet_folder ) do |name| # pn = File.join( STYLESHEET_FOLDER, name ) # add_file_obj( @stylesheets, name, pn ) # end end |
#asset_folder ⇒ Object
Get the asset folder in the project.
95 96 97 |
# File 'lib/gloo/web_svr/asset.rb', line 95 def asset_folder return File.join( @engine.settings.project_path, ASSET_FOLDER ) end |
#image_folder ⇒ Object
Get the images folder in the project.
102 103 104 |
# File 'lib/gloo/web_svr/asset.rb', line 102 def image_folder return File.join( asset_folder, IMAGE_FOLDER ) end |
#is_asset?(name) ⇒ Boolean
Check if the given name is an asset.
178 179 180 |
# File 'lib/gloo/web_svr/asset.rb', line 178 def is_asset? name return name == ASSET_FOLDER end |
#javascript_folder ⇒ Object
Get the stylesheets folder in the project.
116 117 118 |
# File 'lib/gloo/web_svr/asset.rb', line 116 def javascript_folder return File.join( asset_folder, JAVASCRIPT_FOLDER ) end |
#lib_asset_folder ⇒ Object
Get the asset folder in the User’s lib. Returns nil if it does not exist.
47 48 49 50 51 52 |
# File 'lib/gloo/web_svr/asset.rb', line 47 def lib_asset_folder dir = File.join( @engine.settings.user_root, LIB_FOLDER, ASSET_FOLDER ) return dir if Dir.exist?( dir ) return nil end |
#lib_image_folder ⇒ Object
Get the images folder in the User’s lib. Returns nil if it does not exist.
80 81 82 83 84 85 |
# File 'lib/gloo/web_svr/asset.rb', line 80 def lib_image_folder dir = File.join( lib_asset_folder, IMAGE_FOLDER ) return dir if Dir.exist?( dir ) return nil end |
#lib_javascript_folder ⇒ Object
Get the javascript folder in the User’s lib. Returns nil if it does not exist.
69 70 71 72 73 74 |
# File 'lib/gloo/web_svr/asset.rb', line 69 def lib_javascript_folder dir = File.join( lib_asset_folder, JAVASCRIPT_FOLDER ) return dir if Dir.exist?( dir ) return nil end |
#lib_stylesheet_folder ⇒ Object
Get the stylesheets folder in the User’s lib. Returns nil if it does not exist.
58 59 60 61 62 63 |
# File 'lib/gloo/web_svr/asset.rb', line 58 def lib_stylesheet_folder dir = File.join( lib_asset_folder, STYLESHEET_FOLDER ) return dir if Dir.exist?( dir ) return nil end |
#list_css_assets ⇒ Object
List all css assets. This looks in the css container and lists the css files found earlier. A Debugging tool.
392 393 394 395 396 397 398 399 400 401 402 403 |
# File 'lib/gloo/web_svr/asset.rb', line 392 def list_css_assets data = [] @stylesheets.children.each do |o| data << [ o.name, o.pn, o.value ] end headers = [ "Name", "PN", "Value" ] puts Gloo::App::Platform::RETURN title = "Stylesheet Assets with Routes" @engine.platform.table.show headers, data, title puts Gloo::App::Platform::RETURN end |
#list_image_assets ⇒ Object
List all image assets. This looks in the image container and lists the images found earlier. A Debugging tool.
356 357 358 359 360 361 362 363 364 365 366 367 |
# File 'lib/gloo/web_svr/asset.rb', line 356 def list_image_assets data = [] @images.children.each do |o| data << [ o.name, o.pn, o.value ] end headers = [ "Name", "PN", "Value" ] puts Gloo::App::Platform::RETURN title = "Image Assets with Routes" @engine.platform.table.show headers, data, title puts Gloo::App::Platform::RETURN end |
#list_js_assets ⇒ Object
List all js assets. This looks in the js container and lists the js files found earlier. A Debugging tool.
374 375 376 377 378 379 380 381 382 383 384 385 |
# File 'lib/gloo/web_svr/asset.rb', line 374 def list_js_assets data = [] @javascript.children.each do |o| data << [ o.name, o.pn, o.value ] end headers = [ "Name", "PN", "Value" ] puts Gloo::App::Platform::RETURN title = "JavaScript Assets with Routes" @engine.platform.table.show headers, data, title puts Gloo::App::Platform::RETURN end |
#path_for_file(file) ⇒ Object
Find and return the page for the given route.
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/gloo/web_svr/asset.rb', line 123 def path_for_file file pn = file.value # Is the file's value a recognizable file? return pn if File.exist? pn # Look in the web server's asset folder. pn = File.join( asset_folder, pn ) # Try the lib assets if not found unless File.exist? pn lib = lib_asset_folder pn = File.join( lib, file.value ) if lib end return pn end |
#published_name(asset_name) ⇒ Object
Get the published name for the given asset name.
203 204 205 |
# File 'lib/gloo/web_svr/asset.rb', line 203 def published_name asset_name return AssetInfo.find_published_name_for( asset_name ) end |
#register_asset(name, pn, full_path) ⇒ Object
Register an asset with the web server. Adds fingerprint to the file names for later access.
full_path is the FILE from which we build the SHA256 hash pn is the path and name within the assets directory name is the simple file name (icon.png)
195 196 197 198 |
# File 'lib/gloo/web_svr/asset.rb', line 195 def register_asset name, pn, full_path asset_pn = "/asset/#{pn}" return AssetInfo.new( @engine, full_path, name, asset_pn ).register end |
#render_file(file) ⇒ Object
Helper to create a successful image response with the given data.
167 168 169 170 171 172 173 |
# File 'lib/gloo/web_svr/asset.rb', line 167 def render_file( file ) type = type_for_file file data = File.binread file code = Gloo::WebSvr::ResponseCode::SUCCESS return Gloo::WebSvr::Response.new( @engine, code, type, data, true ) end |
#stylesheet_folder ⇒ Object
Get the stylesheets folder in the project.
109 110 111 |
# File 'lib/gloo/web_svr/asset.rb', line 109 def stylesheet_folder return File.join( asset_folder, STYLESHEET_FOLDER ) end |
#type_for_file(file) ⇒ Object
Get the return type for the given file.
144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/gloo/web_svr/asset.rb', line 144 def type_for_file file ext = File.extname( file ).downcase ext = ext[1..-1] if ext[0] == '.' if ext == 'css' return CSS_TYPE elsif ext == 'js' return JS_TYPE elsif ext == 'ico' return FAVICON_TYPE else return "#{IMAGE_TYPE}#{ext}" end end |