Class: Frontman::App
- Inherits:
-
Object
- Object
- Frontman::App
- Extended by:
- T::Sig
- Includes:
- Singleton
- Defined in:
- lib/frontman/app.rb
Instance Attribute Summary collapse
-
#asset_pipelines ⇒ Object
Returns the value of attribute asset_pipelines.
-
#assets_manifest ⇒ Object
readonly
Returns the value of attribute assets_manifest.
-
#current_page ⇒ Object
Returns the value of attribute current_page.
-
#current_tree ⇒ Object
Returns the value of attribute current_tree.
-
#data_dirs ⇒ Object
readonly
Returns the value of attribute data_dirs.
-
#layouts ⇒ Object
readonly
Returns the value of attribute layouts.
-
#redirects ⇒ Object
readonly
Returns the value of attribute redirects.
-
#refresh_data_files ⇒ Object
Returns the value of attribute refresh_data_files.
-
#view_data ⇒ Object
Returns the value of attribute view_data.
Instance Method Summary collapse
- #add_asset_pipeline(command:, name: nil, source_dir: nil, timing: :before, mode: :all, delay: 0) ⇒ Object
- #add_redirect(from, to) ⇒ Object
- #add_to_manifest(key, value) ⇒ Object
- #app ⇒ Object
- #get_redirect(url) ⇒ Object
- #import_config(file_path) ⇒ Object
-
#initialize ⇒ App
constructor
A new instance of App.
- #method_missing(method_id, *_) ⇒ Object
- #register_data_dirs(dirs) ⇒ Object
- #register_helper_dir(dir) ⇒ Object
- #register_helpers(helpers) ⇒ Object
- #register_layout(glob, layout_name) ⇒ Object
- #respond_to_missing?(method_name, include_private = false) ⇒ Boolean
- #run(config) ⇒ Object
- #sitemap_tree ⇒ Object
Constructor Details
#initialize ⇒ App
Returns a new instance of App.
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/frontman/app.rb', line 20 def initialize @current_page = nil @current_tree = nil @view_data = [] @layouts = [] @redirects = {} @assets_manifest = {} @data_dirs = {} @refresh_data_files = false @asset_pipelines = [] end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_id, *_) ⇒ Object
142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/frontman/app.rb', line 142 def method_missing(method_id, *_) from_view_data = get_from_view_data(method_id) return from_view_data unless from_view_data.nil? from_current_page = get_from_current_page(method_id) return from_current_page unless from_current_page.nil? return true if method_id == :render_toc super end |
Instance Attribute Details
#asset_pipelines ⇒ Object
Returns the value of attribute asset_pipelines.
15 16 17 |
# File 'lib/frontman/app.rb', line 15 def asset_pipelines @asset_pipelines end |
#assets_manifest ⇒ Object (readonly)
Returns the value of attribute assets_manifest.
17 18 19 |
# File 'lib/frontman/app.rb', line 17 def assets_manifest @assets_manifest end |
#current_page ⇒ Object
Returns the value of attribute current_page.
15 16 17 |
# File 'lib/frontman/app.rb', line 15 def current_page @current_page end |
#current_tree ⇒ Object
Returns the value of attribute current_tree.
15 16 17 |
# File 'lib/frontman/app.rb', line 15 def current_tree @current_tree end |
#data_dirs ⇒ Object (readonly)
Returns the value of attribute data_dirs.
17 18 19 |
# File 'lib/frontman/app.rb', line 17 def data_dirs @data_dirs end |
#layouts ⇒ Object (readonly)
Returns the value of attribute layouts.
17 18 19 |
# File 'lib/frontman/app.rb', line 17 def layouts @layouts end |
#redirects ⇒ Object (readonly)
Returns the value of attribute redirects.
17 18 19 |
# File 'lib/frontman/app.rb', line 17 def redirects @redirects end |
#refresh_data_files ⇒ Object
Returns the value of attribute refresh_data_files.
15 16 17 |
# File 'lib/frontman/app.rb', line 15 def refresh_data_files @refresh_data_files end |
#view_data ⇒ Object
Returns the value of attribute view_data.
15 16 17 |
# File 'lib/frontman/app.rb', line 15 def view_data @view_data end |
Instance Method Details
#add_asset_pipeline(command:, name: nil, source_dir: nil, timing: :before, mode: :all, delay: 0) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/frontman/app.rb', line 119 def add_asset_pipeline( command:, name: nil, source_dir: nil, timing: :before, mode: :all, delay: 0 ) @asset_pipelines.push( name: name || command, source_dir: source_dir, command: command, timing: timing == :after ? :after : :before, mode: mode, delay: delay ) end |
#add_redirect(from, to) ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'lib/frontman/app.rb', line 77 def add_redirect(from, to) from = format_url(from) resource = sitemap_tree.from_url(from)&.resource raise ExistingResourceError.create(from, resource) if resource @redirects[from] = to end |
#add_to_manifest(key, value) ⇒ Object
94 95 96 |
# File 'lib/frontman/app.rb', line 94 def add_to_manifest(key, value) @assets_manifest[key] = '/' + value.sub(%r{^/}, '') end |
#app ⇒ Object
38 39 40 |
# File 'lib/frontman/app.rb', line 38 def app self end |
#get_redirect(url) ⇒ Object
87 88 89 90 91 |
# File 'lib/frontman/app.rb', line 87 def get_redirect(url) url = format_url(url) @redirects[url] end |
#import_config(file_path) ⇒ Object
134 135 136 137 138 139 140 |
# File 'lib/frontman/app.rb', line 134 def import_config(file_path) if !file_path.end_with?('.rb') && !File.exist?(file_path) return import_config("#{file_path}.rb") end run File.read(file_path) end |
#register_data_dirs(dirs) ⇒ Object
99 100 101 102 103 104 105 106 107 |
# File 'lib/frontman/app.rb', line 99 def register_data_dirs(dirs) dirs = dirs.map { |dir| [dir.split('/').last, dir] }.to_h if dirs.is_a?(Array) dirs.each do |name, dir| define_singleton_method name do @data_dirs[name] ||= DataStore.new(File.join(Dir.pwd, dir)) end end end |
#register_helper_dir(dir) ⇒ Object
67 68 69 70 71 72 73 74 |
# File 'lib/frontman/app.rb', line 67 def register_helper_dir(dir) Frontman::Config.set(:helpers_dir, dir) register_helpers( Frontman::Bootstrapper.find_helpers_in( File.join('.', dir) ) ) end |
#register_helpers(helpers) ⇒ Object
56 57 58 59 60 61 62 63 64 |
# File 'lib/frontman/app.rb', line 56 def register_helpers(helpers) helpers.each do |helper| require T.must(helper[:path]) singleton_class.send( :include, Object.const_get(T.must(helper[:name]).to_sym) ) end end |
#register_layout(glob, layout_name) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/frontman/app.rb', line 48 def register_layout(glob, layout_name) layout_dir = Frontman::Config.get(:layout_dir, fallback: 'views/layouts') layout = glob, layout_name.nil? ? nil : File.join(layout_dir, layout_name) @layouts.push(layout) end |
#respond_to_missing?(method_name, include_private = false) ⇒ Boolean
154 155 156 157 158 159 |
# File 'lib/frontman/app.rb', line 154 def respond_to_missing?(method_name, include_private = false) public_send(method_name) true rescue StandardError super end |
#run(config) ⇒ Object
43 44 45 |
# File 'lib/frontman/app.rb', line 43 def run(config) instance_eval config end |
#sitemap_tree ⇒ Object
33 34 35 |
# File 'lib/frontman/app.rb', line 33 def sitemap_tree @sitemap_tree ||= Frontman::SitemapTree.new(nil) end |