Class: SC::Builder::Html

Inherits:
Base
  • Object
show all
Includes:
Helpers::CaptureHelper, Helpers::DomIdHelper, Helpers::StaticHelper, Helpers::TagHelper, Helpers::TextHelper, ViewHelpers
Defined in:
lib/sproutcore/builders/html.rb

Overview

Builds an HTML files. This will setup an HtmlContext and then invokes the render engines for each source before finally rendering the layout.

Constant Summary

Constants included from Helpers::TextHelper

Helpers::TextHelper::AUTO_LINK_RE

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Helpers::DomIdHelper

#dom_id!

Methods included from Helpers::StaticHelper

#javascripts_for_client, #loc, #sc_resource, #sc_static, #stylesheets_for_client, #theme_name, #title

Methods included from Helpers::CaptureHelper

#capture, #content_for

Methods included from Helpers::TextHelper

#auto_link, #concat, #cycle, #highlight, #pluralize, #reset_cycle, #simple_format, #strip_links

Methods included from Helpers::TagHelper

#cdata_section, #content_tag, #escape_once, #tag

Methods inherited from Base

build, #joinlines, #readlines, #replace_static_url, #static_url, #writelines

Constructor Details

#initialize(entry) ⇒ Html

Returns a new instance of Html.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/sproutcore/builders/html.rb', line 65

def initialize(entry)
  super(entry)
  @target = @bundle = entry.manifest.target
  @filename = entry.filename
  @language = @entry.manifest.language
  @project = @library = @target.project
  @manifest = entry.manifest
  @renderer = nil
  
  # set the current layout from the target's config.layout
  @layout = @target.config.layout || 'lib/index.rhtml'
  
  # find all entries -- use source_Entries + required if needed
  @entries = entry.source_entries.dup
  if entry.include_required_targets?
    @target.expand_required_targets.each do |target|
      cur_manifest = target.manifest_for(@manifest.variation).build!
      cur_entry = cur_manifest.entry_for(entry.filename, :combined => true) || cur_manifest.entry_for(entry.filename, :hidden => true, :combined => true)
      next if cur_entry.nil?
      @entries += cur_entry.source_entries
    end
  end
end

Instance Attribute Details

#bundleObject (readonly)

bundle is an alias for target included for backwards compatibility



27
28
29
# File 'lib/sproutcore/builders/html.rb', line 27

def bundle
  @bundle
end

#entriesObject (readonly)

the full set of entries we plan to build



30
31
32
# File 'lib/sproutcore/builders/html.rb', line 30

def entries
  @entries
end

#entryObject (readonly)

the entry we are building



24
25
26
# File 'lib/sproutcore/builders/html.rb', line 24

def entry
  @entry
end

#filenameObject (readonly)

the final filename



33
34
35
# File 'lib/sproutcore/builders/html.rb', line 33

def filename
  @filename
end

#languageObject (readonly)

the current builder language



36
37
38
# File 'lib/sproutcore/builders/html.rb', line 36

def language
  @language
end

#libraryObject (readonly)

library is an alias for project for backwards compatibility



39
40
41
# File 'lib/sproutcore/builders/html.rb', line 39

def library
  @library
end

#manifestObject (readonly)

manifest owning the current entry



45
46
47
# File 'lib/sproutcore/builders/html.rb', line 45

def manifest
  @manifest
end

#projectObject (readonly)

library is an alias for project for backwards compatibility



39
40
41
# File 'lib/sproutcore/builders/html.rb', line 39

def project
  @project
end

#rendererObject (readonly)

the current render



42
43
44
# File 'lib/sproutcore/builders/html.rb', line 42

def renderer
  @renderer
end

#targetObject (readonly)

bundle is an alias for target included for backwards compatibility



27
28
29
# File 'lib/sproutcore/builders/html.rb', line 27

def target
  @target
end

Instance Method Details

#build(dst_path) ⇒ Object



113
114
115
# File 'lib/sproutcore/builders/html.rb', line 113

def build(dst_path)
  writelines dst_path, [self.render]
end

#compile(render_engine, input_path, content_for_key = nil) ⇒ Object

Loads the passed input file and then hands it to the render_engine instance to compile th file. the results will be targeted at the content_for_key or otherwise override in your template.

Params

render_engine

A render engine instance

input_path

The file to load

content_for_key

optional target for content

Returns

self



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/sproutcore/builders/html.rb', line 132

def compile(render_engine, input_path, content_for_key = nil)
  content_for_key = self.default_content_for_key if content_for_key.nil?
  
  if !File.exist?(input_path)
    raise "html_builder could compile file at #{input_path} because the file could not be found" 
  end

  old_renderer = @renderer
  @renderer = render_engine  # save for capture...
  
  input = File.read(input_path)
  content_for content_for_key do
    _render_compiled_template( render_engine.compile(input) )
  end
  
  @render = old_renderer
  return self
end

#configObject



50
# File 'lib/sproutcore/builders/html.rb', line 50

def config; target.config; end

#default_content_for_keyObject



117
# File 'lib/sproutcore/builders/html.rb', line 117

def default_content_for_key; :resources; end

#expand_required_targets(target, opts = {}) ⇒ Object

Returns the expanded list of required targets for the passed target. This method can be overridden by subclasses to provide specific config settings.



92
93
94
95
96
# File 'lib/sproutcore/builders/html.rb', line 92

def expand_required_targets(target, opts = {})
  opts[:debug] = target.config.load_debug
  opts[:theme] = true
  return target.expand_required_targets(opts)
end

#layout_entryObject

The entry for the layout we want to build. this will be used to stage the layout if needed..



54
55
56
# File 'lib/sproutcore/builders/html.rb', line 54

def layout_entry
  @manifest.entry_for(@layout) || @manifest.entry_for(@layout, :hidden => true)
end

#layout_pathObject

the path to the current layout for the resource. this is computed from the layout property, which is a relative pathname.



60
61
62
63
# File 'lib/sproutcore/builders/html.rb', line 60

def layout_path
  entry = layout_entry
  entry.nil? ? nil : entry.staging_path
end

#renderObject

Renders the html file, returning the resulting string which can be written to a file.



100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/sproutcore/builders/html.rb', line 100

def render
  # render each entry...
  @entries.each { |entry| render_entry(entry) }
  
  # then finally compile the layout.
  if self.layout_path.nil?
    raise "html_builder could not find a layout file for #{@layout}" 
  end
  
  compile(SC::RenderEngine::Erubis.new(self), self.layout_path, :_final_)
  return @content_for__final_
end

#target_nameObject Also known as: bundle_name



47
# File 'lib/sproutcore/builders/html.rb', line 47

def target_name; target.target_name.to_s.sub(/^\//,''); end