Class: SimpleView::SimpleViewBase

Inherits:
Base
  • Object
show all
Defined in:
lib/simple_view/simple_view.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#directory_helpers, #directory_views

Constructor Details

#initialize(template, file_template = nil) ⇒ SimpleViewBase

Returns a new instance of SimpleViewBase.



42
43
44
45
# File 'lib/simple_view/simple_view.rb', line 42

def initialize(template, file_template = nil)
	self.template = template
    self.file_template = file_template
end

Instance Attribute Details

#file_templateObject

Returns the value of attribute file_template.



40
41
42
# File 'lib/simple_view/simple_view.rb', line 40

def file_template
  @file_template
end

#templateObject

Returns the value of attribute template.



40
41
42
# File 'lib/simple_view/simple_view.rb', line 40

def template
  @template
end

Class Method Details

.find_view(template) ⇒ Object



181
182
183
184
185
186
187
188
189
# File 'lib/simple_view/simple_view.rb', line 181

def find_view(template)
  SimpleViewBase.template_extensions.each do |ext, renderer|
    begin
      return renderer.view(template)
    rescue TemplateViewNotFound
    end
  end
  raise TemplateViewNotFound.new("Impossible de trouver le template #{template} dans le repertoire #{Base.directory_views}")
end

.lookup_file_template(template) ⇒ Object



165
166
167
168
169
170
171
# File 'lib/simple_view/simple_view.rb', line 165

def lookup_file_template(template)
  tpl = "#{template}#{self.extension}"
  file = File.join(Base.directory_views, tpl)
  puts "lookup_file_template : #{tpl} => #{file}" if $DEBUG
  raise TemplateViewNotFound.new("Impossible de trouver le template #{tpl} dans le repertoire #{Base.directory_views} (#{file})") unless File.exist?(file)
  file
end

.register(subclass) ⇒ Object



160
161
162
163
# File 'lib/simple_view/simple_view.rb', line 160

def register(subclass)
  ext = subclass.extension
  SimpleViewBase.template_extensions[ext] = subclass
end

.template_extensionsObject



156
157
158
# File 'lib/simple_view/simple_view.rb', line 156

def template_extensions
  @template_extensions ||= {}
end

.view(template) ⇒ Object



177
178
179
# File 'lib/simple_view/simple_view.rb', line 177

def view(template)
  self.views[template] ||= self.basic_view(template)
end

.viewsObject



173
174
175
# File 'lib/simple_view/simple_view.rb', line 173

def views
  @views ||= {}
end

Instance Method Details

#clean_template_name_for_helperObject



61
62
63
# File 'lib/simple_view/simple_view.rb', line 61

def clean_template_name_for_helper
	template[/(\w+)(\W*)/,1]
end

#has_helper?Boolean

Returns:

  • (Boolean)


82
83
84
85
86
# File 'lib/simple_view/simple_view.rb', line 82

def has_helper?
	hf = self.lookup_file_helper
	return nil unless hf
	true
end

#helper_module_nameObject



88
89
90
91
# File 'lib/simple_view/simple_view.rb', line 88

def helper_module_name
	hname = self.clean_template_name_for_helper # exemple: template = 'etat_corbeilles_prc.html' => hname = 'etat_corbeilles_prc'
	"#{hname}_helper".camelcase(true).to_sym
end

#lookup_file_helperObject



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/simple_view/simple_view.rb', line 65

def lookup_file_helper
	if !self.instance_variable_defined?(:@file_helper) && self.directory_helpers
		helper_file_name = "#{self.clean_template_name_for_helper}_helper.rb"
      puts "SimpleViewBase > helper_file_name= #{helper_file_name}" if $DEBUG
      fhlpr = File.join(self.directory_helpers, helper_file_name)
      puts "SimpleViewBase > fhlpr= #{fhlpr}" if $DEBUG        
		if File.exist?(fhlpr)
			@file_helper = FileContent.file(fhlpr)
		end          
	end
	@file_helper
end

#lookup_file_template(ext = self.template_extension) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/simple_view/simple_view.rb', line 51

def lookup_file_template(ext = self.template_extension)      
	unless @file_template
      tpl = self.template_name(ext)
		list = Dir.glob(File.join(self.directory_views, tpl))
		raise TemplateViewNotFound.new("Impossible de trouver le template #{tpl} dans le repertoire #{self.directory_views}") unless list.size == 1
		@file_template = list.first
	end
	@file_template
end

#render(rendable_object, options = {}) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/simple_view/simple_view.rb', line 123

def render(rendable_object, options = {})
	target = options[:target]
    if String === target && (options[:type] != :string)
      FileUtils.mkdir_p(File.dirname(target)) if options[:mkdirs]
      open(target, options[:open]||'w') do |o|
        options[:target] = o
        begin
          return do_rendering(rendable_object, options)
        ensure
          options[:target] = target
        end
      end
    else
      return do_rendering(rendable_object, options)
    end
rescue => ex
    puts ex.message, ex.backtrace.collect{|st| "\t#{st}"}
	if $SV_DEBUG				
		puts "[SV_DEBUG = #$SV_DEBUG]: Retry ? [y|n]"
		response = $stdin.gets.strip
		retry if response =~ /Y|y/				
	end
	raise ex
end

#render_with_helper(rendable_object) ⇒ Object



148
149
150
151
# File 'lib/simple_view/simple_view.rb', line 148

def render_with_helper(rendable_object)
	set_helper(rendable_object)
	yield if block_given?
end

#set_helper(rendable_object) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/simple_view/simple_view.rb', line 101

def set_helper(rendable_object)
	if has_helper?
		helper = nil
		helper_name = self.helper_module_name
		begin
        if @file_helper.changed? || !Object::const_defined?(helper_name)
          load @file_helper.file(true)
        else

        end
			helper = Object::const_get(helper_name)
		rescue NameError => ex
			# puts "set_helper: #{ex.message}", ex.backtrace
			require(@file_helper.file)
			retry
		end
		puts "set_helper #{helper} for: #{rendable_object}" if $DEBUG
		rendable_object.extend helper				
	end
end

#template_contentObject



78
79
80
# File 'lib/simple_view/simple_view.rb', line 78

def template_content
    FileContent.file(self.lookup_file_template).content
end

#template_extensionObject



93
94
95
96
97
98
# File 'lib/simple_view/simple_view.rb', line 93

def template_extension
	if self.class.respond_to?(:extension)
		return self.class.extension
	end
	".rb"
end

#template_name(ext = self.template_extension) ⇒ Object



47
48
49
# File 'lib/simple_view/simple_view.rb', line 47

def template_name(ext = self.template_extension)
	"#{template}#{ext}"
end