Module: Lotus::View

Includes:
Utils::ClassAttribute
Defined in:
lib/lotus/view.rb,
lib/lotus/view/dsl.rb,
lib/lotus/view/errors.rb,
lib/lotus/view/escape.rb,
lib/lotus/view/version.rb,
lib/lotus/view/template.rb,
lib/lotus/view/rendering.rb,
lib/lotus/view/inheritable.rb,
lib/lotus/view/configuration.rb,
lib/lotus/view/rendering/scope.rb,
lib/lotus/view/rendering/partial.rb,
lib/lotus/view/rendering/registry.rb,
lib/lotus/view/rendering/template.rb,
lib/lotus/view/rendering/null_layout.rb,
lib/lotus/view/rendering/view_finder.rb,
lib/lotus/view/rendering/layout_scope.rb,
lib/lotus/view/rendering/layout_finder.rb,
lib/lotus/view/rendering/null_template.rb,
lib/lotus/view/rendering/template_name.rb,
lib/lotus/view/rendering/partial_finder.rb,
lib/lotus/view/rendering/layout_registry.rb,
lib/lotus/view/rendering/template_finder.rb,
lib/lotus/view/rendering/templates_finder.rb

Overview

View

Since:

  • 0.1.0

Defined Under Namespace

Modules: Dsl, Escape, Inheritable, Rendering Classes: Configuration, Error, MissingFormatError, MissingTemplateError, MissingTemplateLayoutError, Template

Constant Summary collapse

VERSION =

Defines the version

Since:

  • 0.1.0

'0.5.0'.freeze

Class Method Summary collapse

Class Method Details

.configure(&blk) ⇒ Object

Configure the framework. It yields the given block in the context of the configuration

Examples:

require 'lotus/view'

Lotus::View.configure do
  root '/path/to/root'
end

Parameters:

  • blk (Proc)

    the configuration block

See Also:

Since:

  • 0.2.0



42
43
44
# File 'lib/lotus/view.rb', line 42

def self.configure(&blk)
  configuration.instance_eval(&blk)
end

.dupeModule

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Duplicate Lotus::View in order to create a new separated instance of the framework.

The new instance of the framework will be completely decoupled from the original. It will inherit the configuration, but all the changes that happen after the duplication, won’t be reflected on the other copies.

Examples:

Basic usage

require 'lotus/view'

module MyApp
  View = Lotus::View.dupe
end

MyApp::View == Lotus::View # => false

MyApp::View.configuration ==
  Lotus::View.configuration # => false

Inheriting configuration

require 'lotus/view'

Lotus::View.configure do
  root '/path/to/root'
end

module MyApp
  View = Lotus::View.dupe
end

module MyApi
  View = Lotus::View.dupe
  View.configure do
    root '/another/root'
  end
end

Lotus::View.configuration.root # => #<Pathname:/path/to/root>
MyApp::View.configuration.root # => #<Pathname:/path/to/root>
MyApi::View.configuration.root # => #<Pathname:/another/root>

Returns:

  • (Module)

    a copy of Lotus::View

Since:

  • 0.2.0



91
92
93
94
95
# File 'lib/lotus/view.rb', line 91

def self.dupe
  dup.tap do |duplicated|
    duplicated.configuration = configuration.duplicate
  end
end

.duplicate(mod, views = 'Views', &blk) ⇒ Module

Duplicate the framework and generate modules for the target application

 @since 0.2.0

module MyApp::Views::Dashboard
  class Index
    include MyApp::View
  end
end

Examples:

Basic usage

require 'lotus/view'

module MyApp
  View = Lotus::View.duplicate(self)
end

# It will:
#
# 1. Generate MyApp::View
# 2. Generate MyApp::Layout
# 3. Generate MyApp::Presenter
# 4. Generate MyApp::Views
# 5. Configure MyApp::Views as the default namespace for views

Compare code

require 'lotus/view'

module MyApp
  View = Lotus::View.duplicate(self) do
    # ...
  end
end

# it's equivalent to:

module MyApp
  View   = Lotus::View.dupe
  Layout = Lotus::Layout.dup

  module Views
  end

  View.configure do
    namespace 'MyApp::Views'
  end

  View.configure do
    # ...
  end
end

Custom views module

require 'lotus/view

module MyApp
  View = Lotus::View.duplicate(self, 'Vs')
end

defined?(MyApp::Views) # => nil
defined?(MyApp::Vs)    # => "constant"

# Developers can namespace views under Vs
module MyApp::Vs::Dashboard
  # ...
end

Nil views module

require 'lotus/view'

module MyApp
  View = Lotus::View.duplicate(self, nil)
end

defined?(MyApp::Views) # => nil

# Developers can namespace views under MyApp
module MyApp
  # ...
end

Block usage

require 'lotus/view'

module MyApp
  View = Lotus::View.duplicate(self) do
    root '/path/to/root'
  end
end

Lotus::View.configuration.root # => #<Pathname:.>
MyApp::View.configuration.root # => #<Pathname:/path/to/root>

Parameters:

  • mod (Module)

    the Ruby namespace of the application

  • views (String) (defaults to: 'Views')

    the optional namespace where the application’s views will live

  • blk (Proc)

    an optional block to configure the framework

Returns:

  • (Module)

    a copy of Lotus::View

See Also:

Since:

  • 0.1.0



200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/lotus/view.rb', line 200

def self.duplicate(mod, views = 'Views', &blk)
  dupe.tap do |duplicated|
    mod.module_eval %{ module #{ views }; end } if views
    mod.module_eval %{
      Layout = Lotus::Layout.dup
      Presenter = Lotus::Presenter.dup
    }

    duplicated.configure do
      namespace [mod, views].compact.join '::'
    end

    duplicated.configure(&blk) if block_given?
  end
end

.included(base) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Override Ruby’s hook for modules. It includes basic Lotus::View modules to the given Class. It sets a copy of the framework configuration

Examples:

require 'lotus/view'

class IndexView
  include Lotus::View
end

Parameters:

  • base (Class)

    the target view

See Also:

Since:

  • 0.1.0



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
# File 'lib/lotus/view.rb', line 237

def self.included(base)
  conf = self.configuration
  conf.add_view(base)

  base.class_eval do
    extend Inheritable
    extend Dsl
    extend Rendering
    extend Escape

    include Utils::ClassAttribute
    class_attribute :configuration

    self.configuration = conf.duplicate
  end

  conf.copy!(base)
end

.load!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Load the framework

Since:

  • 0.1.0



260
261
262
# File 'lib/lotus/view.rb', line 260

def self.load!
  configuration.load!
end