Class: Stasis::Before
Instance Method Summary collapse
-
#before(*paths, &block) ⇒ Object
This method is bound to all controllers.
-
#before_all ⇒ Object
This event triggers before all files render.
-
#before_render ⇒ Object
This event triggers before each file renders through Stasis.
-
#initialize(stasis) ⇒ Before
constructor
A new instance of Before.
-
#reset ⇒ Object
This event resets all instance variables.
Methods inherited from Plugin
#_match_key?, _priority, #_within?, inherited, plugins, priority
Constructor Details
#initialize(stasis) ⇒ Before
10 11 12 13 |
# File 'lib/stasis/plugins/before.rb', line 10 def initialize(stasis) @stasis = stasis reset end |
Instance Method Details
#before(*paths, &block) ⇒ Object
This method is bound to all controllers. Stores a block in the ‘@blocks` Hash, where the key is a path and the value is an Array of blocks.
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/stasis/plugins/before.rb', line 17 def before(*paths, &block) paths = [ nil ] if paths.empty? if block paths.each do |path| path = @stasis.controller._resolve(path, true) @blocks[path] ||= [] @blocks[path] << [ @stasis.path, block ] end end end |
#before_all ⇒ Object
This event triggers before all files render. When a before call receives a path that does not exist, we want to create that file dynamically. This method adds those dynamic paths to the paths Array.
31 32 33 34 35 36 |
# File 'lib/stasis/plugins/before.rb', line 31 def before_all new_paths = (@blocks || {}).keys.select do |path| path.is_a?(::String) end @stasis.paths = (@stasis.paths + new_paths).uniq end |
#before_render ⇒ Object
This event triggers before each file renders through Stasis. It finds matching blocks for the path and evaluates those blocks using the action as a scope.
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/stasis/plugins/before.rb', line 40 def before_render matches = _match_key?(@blocks, @stasis.path) matches.each do |group| group.each do |(path, block)| if _within?(path) @stasis.action.instance_eval(&block) end end end end |
#reset ⇒ Object
This event resets all instance variables.
52 53 54 |
# File 'lib/stasis/plugins/before.rb', line 52 def reset @blocks = {} end |