Class: ActionView::PersiaView

Inherits:
Object
  • Object
show all
Includes:
Helpers::ActiveRecordHelper, Helpers::AssetTagHelper, Helpers::TagHelper, Helpers::UrlHelper, Persia
Defined in:
lib/base.rb

Constant Summary

Constants included from Persia

Persia::XMLNS

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Persia

#macro

Class Attribute Details

.view_resourcesObject

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

#controllerObject

Returns the value of attribute controller.



93
94
95
# File 'lib/base.rb', line 93

def controller
  @controller
end

#requestObject

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_hashObject



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_nameObject

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