Module: Gambit::Viewable
- Includes:
- ERB::Util
- Included in:
- Server, Server::GambitError, Server::Game, Server::Game::EventForm, Server::Message, Tools::Board, Tools::Cards::Card, Tools::Cards::Deck, Tools::Cards::Hand, Tools::Cards::Pile, Tools::Currency, Tools::Dice, Tools::MoveHistory, Tools::Scorecard
- Defined in:
- lib/gambit/viewable.rb
Overview
This single module is the complete view layer of the Gambit framework.
It’s a simple wrapper around ERb that allows objects to mixin Viewable, register views for all the different ways an object needs to present itself and finally, draw those views as needed.
WARNING: This is not a typical Ruby module. You get a class method, a VIEWS Hash, and an instance method when mixing it in.
Class Method Summary collapse
-
.append_features(viewable) ⇒ Object
The black magic that adds the class method and constant on include.
Instance Method Summary collapse
-
#view(erb_template_name) ⇒ Object
Returns the text of the processed template erb_template_name.
Class Method Details
.append_features(viewable) ⇒ Object
The black magic that adds the class method and constant on include.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/gambit/viewable.rb', line 23 def self.append_features( viewable ) super viewable.instance_eval do self.const_set(:VIEWS, Hash.new) # # The class method added to classes that mixin Viewable. # # This method registers a new view for all objects of the type # it is called on, by _name_. These views can later be rendered # by object with a call to view(). # # The _template_ parameter is expected to be an ERb String, or a # String of the format "file: FILENAME", in which case the # template will be loaded from the file FILENAME. # def self.register_view( name, template ) self.const_get(:VIEWS)[name] = template end end end |
Instance Method Details
#view(erb_template_name) ⇒ Object
Returns the text of the processed template erb_template_name. The template is evaluated in the context of the parent object.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/gambit/viewable.rb', line 51 def view( erb_template_name ) erb_views = self.class.const_get(:VIEWS) unless erb_views.include?(erb_template_name) raise ArgumentError, "That view is not registered." end erb_view = erb_views[erb_template_name] if erb_view =~ /^file:\s*(.+?)\s*$/ erb_file = $1 if test(?e, erb_file) erb_template = ERB.new(File.read(erb_file), nil, "%<>") else raise Gambit::Server::GambitError, "Missing view file." end else erb_template = ERB.new(erb_view, nil, "%<>") end erb_template.result(binding) end |