Class: ActionView::PersiaView
- Inherits:
-
Object
- Object
- ActionView::PersiaView
- Includes:
- Helpers::ActiveRecordHelper, Helpers::AssetTagHelper, Helpers::TagHelper, Helpers::UrlHelper, Persia
- Defined in:
- lib/base.rb
Constant Summary
Constants included from Persia
Class Attribute Summary collapse
-
.view_resources ⇒ Object
Returns the value of attribute view_resources.
Instance Attribute Summary collapse
-
#controller ⇒ Object
Returns the value of attribute controller.
-
#request ⇒ Object
Returns the value of attribute request.
Class Method Summary collapse
-
.define_resources(hash) ⇒ Object
define resources outside view dir: :logical_name => “file_name”.
- .id_hash ⇒ Object
- .inherited(subclass) ⇒ Object
-
.load_resource(fn) ⇒ Object
load and parse resource.
- .resource_by_id(id, logical_resource = nil) ⇒ Object
-
.resource_for(filename) ⇒ Object
return resources id_hash for filename.
- .update_id_hash(filenames) ⇒ Object
-
.view_name ⇒ Object
returns the name of class, minus ‘View’ in under_score notation.
Instance Method Summary collapse
Methods included from Persia
Class Attribute Details
.view_resources ⇒ Object
Returns the value of attribute view_resources.
90 91 92 |
# File 'lib/base.rb', line 90 def view_resources @view_resources end |
Instance Attribute Details
#controller ⇒ Object
Returns the value of attribute controller.
93 94 95 |
# File 'lib/base.rb', line 93 def controller @controller end |
#request ⇒ Object
Returns the value of attribute request.
93 94 95 |
# File 'lib/base.rb', line 93 def request @request end |
Class Method Details
.define_resources(hash) ⇒ Object
define resources outside view dir: :logical_name => “file_name”
133 134 135 136 137 |
# File 'lib/base.rb', line 133 def self.define_resources(hash) @view_resources.merge! hash hash.each_value {|fn| PersiaView.load_resource fn } update_id_hash(hash.values) end |
.id_hash ⇒ Object
162 163 164 |
# File 'lib/base.rb', line 162 def self.id_hash @id_hash end |
.inherited(subclass) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/base.rb', line 99 def PersiaView.inherited(subclass) pattern = "app/views/#{subclass.view_name}/*.mdml" glob = Dir.glob(pattern) r = glob.map{|x|[x[(pattern.size-6)...-5].to_sym, x]}.flatten h = (subclass.view_resources = Hash[*r]).values puts "Found #{h.size} mdml files in view dir." h.each do |fn| puts "Loading resources for file #{fn} in class #{subclass.name}" load_resource fn end subclass.update_id_hash h end |
.load_resource(fn) ⇒ Object
load and parse resource
113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/base.rb', line 113 def PersiaView.load_resource(fn) rexml = File.open(fn, 'r') do |f| begin REXML::Document.new f rescue REXML::ParseException => e puts "Error parsing file [#{fn}]:", e.to_s return end end r = @resources[fn] = {} Element.new(rexml, r) puts "Loaded #{r.size} resources" end |
.resource_by_id(id, logical_resource = nil) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/base.rb', line 149 def self.resource_by_id(id, logical_resource = nil) hash = if logical_resource fn = @view_resources[logical_resource.to_sym] r = PersiaView.resource_for(fn) r.empty? and raise "No resources found in file #{fn}.\nPlease set xmlns attribute on root and mark resources with id tags." r else @id_hash end hash.empty? and raise "No resources found at all.\nPlease set xmlns attribute on root and mark resources with id tags for all mdml files in your view directory." hash[id.to_sym] or raise "No resource with id[#{id}] found in resources #{hash.keys.inspect}" end |
.resource_for(filename) ⇒ Object
return resources id_hash for filename
128 129 130 |
# File 'lib/base.rb', line 128 def PersiaView.resource_for(filename) @resources[filename] end |
.update_id_hash(filenames) ⇒ Object
139 140 141 142 143 144 145 146 147 |
# File 'lib/base.rb', line 139 def self.update_id_hash(filenames) # merged hashes of used resources # only used in subclasses of PersiaView @id_hash ||= {} filenames.each do |fn| r = PersiaView.resource_for(fn) @id_hash.merge! r end end |
.view_name ⇒ Object
returns the name of class, minus ‘View’ in under_score notation
167 168 169 |
# File 'lib/base.rb', line 167 def self.view_name self.name.split('::')[-1][0...-4].underscore end |
Instance Method Details
#load_assigns(assigns) ⇒ Object
171 172 173 |
# File 'lib/base.rb', line 171 def load_assigns(assigns) assigns.each {|k,v| instance_variable_set("@#{k}",v) } end |