templette 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,23 +1,68 @@
1
1
  module Templette
2
2
  module DataAccessors
3
- def attributes
3
+ def attributes # :nodoc:
4
4
  @attributes ||= {}
5
5
  end
6
6
 
7
- def generate_accessors(accessors = {})
7
+ def generate_accessors(accessors = {}) # :nodoc:
8
8
  accessors.each_pair { |k,v| generate_accessor(k, v) }
9
9
  end
10
10
 
11
- def include_helpers(helpers)
11
+ def include_helpers(helpers) # :nodoc:
12
12
  helpers.each { |helper| add_helper(helper) }
13
13
  end
14
14
 
15
- def method_missing(symbol)
15
+ def method_missing(symbol) # :nodoc:
16
16
  raise PageError.new(page, "No method '#{symbol}' defined in the yaml")
17
17
  end
18
+
19
+ def partial(filename) # :nodoc:
20
+ raise PageError.new(page, "Rendering #{filename} failed. File not found.") unless File.exists?(filename)
21
+ Engineer.engine_for(Engineer.determine_type(filename)).render(File.read(filename), page._binding)
22
+ rescue RenderError => e
23
+ raise PageError.new(page, e.message)
24
+ end
18
25
 
26
+ # Generates an image tag. Default options {:alt => filename }
27
+ #
28
+ # Ex.
29
+ # image_tag('ball.png', :alt => 'a red ball')
30
+ # => "<img src='/images/ball.png' alt='a red ball' />"
31
+
32
+ def image_tag(path, options = {})
33
+ options = {:alt => path}.merge(options)
34
+ "<img src='/images/#{path}' #{params_to_attributes(options)}/>"
35
+ end
36
+
37
+ # Generates a link to a stylesheet. Default options {:type => 'text/css'}
38
+ #
39
+ # Ex.
40
+ # stylesheet_tag('print', :media => 'print')
41
+ # => "<link href='/stylesheets/print.css' media='print' type='text/css' />"
42
+
43
+ def stylesheet_tag(path, options = {})
44
+ options = {:type => 'text/css'}.merge(options)
45
+ "<link href='/stylesheets/#{path}.css' #{params_to_attributes(options)}/>"
46
+ end
47
+
48
+ # Genrates a javascript scrip tag.
49
+ #
50
+ # Ex.
51
+ # script_tag('slider')
52
+ # => <script src='/javascripts/slider.js' type='text/javascript'></script>
53
+
54
+ def script_tag(path)
55
+ "<script src='/javascripts/#{path}.js' type='text/javascript'></script>"
56
+ end
57
+
19
58
  private
20
59
 
60
+ def params_to_attributes(options)
61
+ options.inject('') do |str, h|
62
+ str << "#{h[0]}='#{h[1]}' "
63
+ end
64
+ end
65
+
21
66
  def generate_accessor(k, v)
22
67
  raise TempletteError.new(page, "Method already defined: #{k}. Change your config file and stop using it!") if self.methods.include?(k.to_s)
23
68
  if v.kind_of?(Hash)
@@ -27,6 +72,12 @@ module Templette
27
72
  v = File.open($1) {|f| f.read}
28
73
  elsif v.nil?
29
74
  v = Page::Section.new(page, {})
75
+ elsif v =~/render[:\ ](.*)/
76
+ instance_eval "
77
+ def #{k.to_s}
78
+ partial '#{$1.strip}'
79
+ end"
80
+ return
30
81
  end
31
82
  attributes[k.to_s] = v
32
83
  instance_eval "def #{k.to_s}; attributes['#{k.to_s}']; end"
@@ -20,6 +20,10 @@ module Templette
20
20
  load_engine(type)
21
21
  end
22
22
 
23
+ def self.determine_type(filename)
24
+ filename.match(/html\.?(\w+)?/)[1] || 'erb'
25
+ end
26
+
23
27
  private
24
28
 
25
29
  def self.load_engine(type)
@@ -60,6 +60,8 @@ module Templette
60
60
  f << @template.render(binding)
61
61
  end
62
62
  end
63
+
64
+ def _binding; binding; end
63
65
 
64
66
  # A requriement of the Templette::DataAccessors interface. Returns self.
65
67
  def page; self end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: templette
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Dunphy and Steve Holder
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-02-04 00:00:00 -08:00
12
+ date: 2009-02-14 00:00:00 -08:00
13
13
  default_executable: templette
14
14
  dependencies: []
15
15