broadway 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown CHANGED
@@ -1,6 +1,8 @@
1
1
  <h1>
2
2
  <span>Broadway</span>
3
+ <!--
3
4
  <span><img src="http://viatropos.github.com/broadway/favicon.png"/></span>
5
+ -->
4
6
  </h1>
5
7
 
6
8
  Pluggable, portable, framework-friendly static site generator. Setting the Stage for the Ruby CMS.
@@ -108,7 +110,7 @@ The `Configuration` object is defined from `_config.yml` in the Broadway Site ro
108
110
 
109
111
  ## Context
110
112
 
111
- There are plenty of static site generators out there: [Jekyll](http://github.com/mojombo/jekyll), [Webby](http://github.com/TwP/webby), [Nanoc](http://github.com/ddfreyne/nanoc), [StaticMatic](http://github.com/staticmatic/staticmatic), [Middleman](http://github.com/tdreyno/middleman), [Mercury](http://github.com/jackhq/mercury), [Frank](http://github.com/blahed/frank), [DynamicMatic](http://github.com/nex3/dynamicmatic), [WebGen](http://github.com/gettalong/webgen), [Pekky](http://github.com/lukesutton/pekky), [Awestruct](http://github.com/bobmcwhirter/awestruct), [Massimo](http://github.com/petebrowne/massimo)... The problem with them is that they are completely separate frameworks from Sinatra and Rails. They're not meant to be used with either of those. It's a lot of work to integrate them.
113
+ There are plenty of static site generators out there: [Jekyll](http://github.com/mojombo/jekyll), [Webby](http://github.com/TwP/webby), [Nanoc](http://github.com/ddfreyne/nanoc), [StaticMatic](http://github.com/staticmatic/staticmatic), [Middleman](http://github.com/tdreyno/middleman), [Mercury](http://github.com/jackhq/mercury), [Frank](http://github.com/blahed/frank), [DynamicMatic](http://github.com/nex3/dynamicmatic), [WebGen](http://github.com/gettalong/webgen), [Pekky](http://github.com/lukesutton/pekky), [Awestruct](http://github.com/bobmcwhirter/awestruct), [Massimo](http://github.com/petebrowne/massimo), [Toto](http://cloudhead.io/toto)... The problem with them is that they are completely separate frameworks from Sinatra and Rails. They're not meant to be used with either of those. It's a lot of work to integrate them.
112
114
 
113
115
  Broadway makes Rails and Sinatra static-compatible.
114
116
 
@@ -10,11 +10,11 @@ module Broadway
10
10
  # tags can be stored under multiple contexts
11
11
  # default is "tags" (use "categories" or whatever else you want)
12
12
  def tags(context = "tags")
13
- unless @tags
13
+ if @tags.blank?
14
14
  @tags = tag_hash(self.data["tags"] || [])
15
15
  end
16
-
17
- @tags[context.to_s] if @tags
16
+ @tags["tags"] ||= []
17
+ @tags[context.to_s]
18
18
  end
19
19
 
20
20
  def tags=(value)
@@ -13,7 +13,7 @@ module Broadway
13
13
  self.resource = resource
14
14
  self.name = name
15
15
  self.data = options.recursively_symbolize_keys!
16
- self.path = options.delete(:path)
16
+ self.path = options.delete(:path) || options.delete(:src) || options.delete(:url) || options.delete(:href)
17
17
  options.each do |k,v|
18
18
  self.send("#{k}=", v) if self.respond_to?(k)
19
19
  end
@@ -21,6 +21,10 @@ module Broadway
21
21
  self.title ||= Broadway::File.file_name(self.path).titleize
22
22
  end
23
23
 
24
+ alias url path
25
+ alias href path
26
+ alias src path
27
+
24
28
  def site
25
29
  resource.site
26
30
  end
@@ -57,7 +57,6 @@ module Broadway
57
57
  # then, we need to know where to look for _settings.yml
58
58
  source = overrides[:source] || DEFAULTS[:source]
59
59
  settings_file = overrides[:settings] || DEFAULTS[:settings]
60
- settings_file = ::File.join(source, settings_file) unless ::File.exists?(settings_file)
61
60
  # Get configuration from <source>/_config.yml
62
61
  begin
63
62
  settings = YAML.load_file(settings_file).recursively_symbolize_keys!
@@ -54,7 +54,7 @@ module Broadway
54
54
  content = read(attribute)
55
55
  case extension.to_s
56
56
  when "markdown", "md"
57
- content = RDiscount.new(content).to_html
57
+ content = RDiscount.new(content, :filter_html, :smart).to_html
58
58
  when "textile"
59
59
  content = RedCloth.new(content).to_html
60
60
  end
@@ -59,5 +59,46 @@ module Broadway
59
59
  @description
60
60
  end
61
61
 
62
+ def self_and_siblings
63
+ if parent
64
+ parent.children.blank? ? nil : parent.children
65
+ else
66
+ nil
67
+ end
68
+ end
69
+
70
+ def submenu
71
+ return nil if data["submenu"].blank?
72
+ data["submenu"].map do |path|
73
+ site.find_post_by_path(path)
74
+ end.compact
75
+ end
76
+
77
+ def subpages
78
+ (self_and_siblings || submenu || children).sort do |a, b|
79
+ if a.data["position"] && b.data["position"]
80
+ a.data["position"].to_i <=> b.data["position"]
81
+ else
82
+ a <=> b
83
+ end
84
+ end
85
+ end
86
+
87
+ def gallery
88
+ data["gallery"] || nil
89
+ end
90
+
91
+ def menu_title
92
+ data["menu_title"] || title
93
+ end
94
+
95
+ def subtitle
96
+ data["subtitle"] || nil
97
+ end
98
+
99
+ def parent_path
100
+ ("/" + categories.join("/")).squeeze("/")
101
+ end
102
+
62
103
  end
63
104
  end
@@ -15,6 +15,10 @@ module Broadway
15
15
  processor.build
16
16
  end
17
17
 
18
+ def assets
19
+ posts.map(&:assets).flatten.uniq
20
+ end
21
+
18
22
  def generate!
19
23
  processor.generate
20
24
  end
@@ -27,6 +31,10 @@ module Broadway
27
31
  settings[:url] || "http://localhost"
28
32
  end
29
33
 
34
+ def production_url
35
+ settings[:production_url]
36
+ end
37
+
30
38
  def index_path
31
39
  settings[:index_path]
32
40
  end
@@ -0,0 +1,85 @@
1
+ require 'rubygems'
2
+ require 'open-uri'
3
+ require 'broadway'
4
+ require 'nokogiri'
5
+
6
+ this = File.expand_path(File.dirname(__FILE__))
7
+ site = Broadway.build(:source => "#{this}/../_content", :settings => "#{this}/_config.yml")
8
+
9
+ def error?(response, path, whiny = true)
10
+ if !response.is_a?(Net::HTTPSuccess)
11
+ raise message if whiny
12
+ puts "Error at '#{path}': #{response.to_s}"
13
+ return true
14
+ end
15
+ false
16
+ end
17
+
18
+ def sitemap?(body, post)
19
+ return false if post.path !~ /^\/sitemap/
20
+ attributes = {
21
+ :version => "2.0",
22
+ "xmlns:html" => "http://www.w3.org/TR/REC-html40",
23
+ "xmlns:sitemap" => "http://www.sitemaps.org/schemas/sitemap/0.9",
24
+ "xmlns:xsl" => "http://www.w3.org/1999/XSL/Transform"
25
+ }
26
+ builder = Nokogiri::XML::Builder.new(:encoding => "UTF-8") do |xml|
27
+ xml.stylesheet(attributes) do
28
+ xml.parent.namespace = xml.parent.namespace_definitions.last
29
+ xml["xsl"].output(:method => "html", :version => "1.0", :encoding => "UTF-8", :indent => "yes")
30
+ xml["xsl"].template(:match => "/") do
31
+ xml << body.gsub(/\<\!doctype[^>]+\>/i, "").gsub(/^/, " ")
32
+ end
33
+ end
34
+ end
35
+ content = builder.to_xml
36
+
37
+ name = File.join("stylesheets/sitemap.xsl")
38
+ File.open(name, "w") { |f| f.write(content) }
39
+ return true
40
+ end
41
+
42
+ def render_path(site, http, path, post = nil)
43
+ date = "2010-01-01"
44
+ response = http.get(path)
45
+ write_to = File.expand_path(File.join(site.setting(:destination), path).squeeze("/"))
46
+ # if the file doesn't exist or is not rendered correctly
47
+ puts "get #{path}"
48
+ return if error?(response, path, false)
49
+ return if post && sitemap?(response.body, post)
50
+ body = response.body
51
+ content = ""
52
+ if path == "/"
53
+ name = "index.html"
54
+ else
55
+ FileUtils.mkdir_p(write_to)
56
+ name = File.join(write_to, "#{date}-index.html")
57
+ content << "---\n"
58
+ content << "categories: [#{path.split("/").delete_if {|node| node.blank?}.join(", ")}]\n"
59
+ content << "---\n"
60
+ end
61
+ content << body
62
+ File.open(name, "w") { |f| f.write(content) }
63
+ end
64
+
65
+ url = URI.parse("http://localhost:4567")
66
+ #Time.now.strftime("%Y-%m-%d")
67
+ begin
68
+ Net::HTTP.start(url.host, url.port) do |http|
69
+ site.posts.reverse.each do |post|
70
+ render_path(site, http, post.path, post)
71
+ end
72
+ render_path(site, http, "/about")
73
+ render_path(site, http, "/tags")
74
+ site.tags.each do |tag, posts|
75
+ begin
76
+ render_path(site, http, "/tags/#{tag}")
77
+ rescue Exception => e
78
+ puts "#{tag}: #{e.inspect}"
79
+ end
80
+ end
81
+ end
82
+ rescue Exception => e
83
+ puts e.inspect
84
+ raise "Make sure you've started the server, run: 'ruby app.rb'"
85
+ end
@@ -20,12 +20,17 @@ module Broadway
20
20
  def row_for(array, options = {}, &block)
21
21
  return "" if array.empty?
22
22
  array.each_with_index do |node, i|
23
- attributes = options.has_key?(:li_attributes) ? options[:li_attributes] : {}
23
+ attributes = (options.has_key?(:li_attributes) ? options[:li_attributes] : {}).dup
24
24
  attributes[:class] ||= ""
25
25
  if i == 0 and options.has_key?(:first)
26
- attributes[:class] << "#{options[:first]}"
26
+ attributes[:class] << " #{options[:first]}"
27
27
  elsif i == array.length - 1 and options.has_key?(:last)
28
- attributes[:class] << "#{options[:last]}"
28
+ attributes[:class] << " #{options[:last]}"
29
+ end
30
+ if attributes[:class].blank?
31
+ attributes.delete(:class)
32
+ else
33
+ attributes[:class].squeeze!(" ")
29
34
  end
30
35
  haml_tag :li, attributes do
31
36
  if block_given?
@@ -35,10 +35,13 @@ module Broadway
35
35
  requests
36
36
  end
37
37
 
38
+ protected
39
+
38
40
  def requests
39
41
  begin
40
42
  request
41
43
  rescue Exception => e
44
+ puts e.inspect
42
45
  requests # in case connection breaks
43
46
  #raise "Make sure you've started the server, run: 'ruby app.rb'"
44
47
  end
@@ -64,7 +67,9 @@ module Broadway
64
67
  # if the file doesn't exist or is not rendered correctly
65
68
  return if error?(response, path, false)
66
69
  #return if sitemap?(response.body, post)
67
- body = response.body
70
+
71
+ body = absolute!(response.body)
72
+
68
73
  content = ""
69
74
  if path == "/"
70
75
  name = "index.html"
@@ -79,6 +84,30 @@ module Broadway
79
84
  puts "done... #{path}"
80
85
  ::File.open(name, "w") { |f| f.write(content) }
81
86
  end
87
+
88
+ def absolute!(body)
89
+ raise "set :production_url in _config.yml" if site.production_url.blank?
90
+ base = site.production_url.gsub(/\/$/, "") # no trailing slash
91
+ body.gsub!(/(src|href)=([\'\"])\//) do |match|
92
+ "#{$1}=#{$2}#{base}/"
93
+ end
94
+ body
95
+ =begin
96
+ html = Nokogiri::HTML(body)
97
+ html.css("a, link").each do |link|
98
+ if link["href"] =~ /^\//
99
+ link["href"] = base + link["href"]
100
+ end
101
+ end
102
+ html.css("script, img, video").each do |src|
103
+ if src["src"] =~ /^\//
104
+ src["src"] = base + src["src"]
105
+ end
106
+ end
107
+
108
+ html.to_html
109
+ =end
110
+ end
82
111
  end
83
112
  end
84
113
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: broadway
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Lance Pollard
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-17 00:00:00 -05:00
18
+ date: 2010-08-24 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -48,7 +48,7 @@ dependencies:
48
48
  version: 2.3.5
49
49
  type: :runtime
50
50
  version_requirements: *id002
51
- description: "Broadway: Pluggable, portable, framework-friendly static site generator. Setting the Stage for the Ruby CMS."
51
+ description: Pluggable, portable, framework-friendly static site generator. Setting the Stage for the Ruby CMS.
52
52
  email: lancejpollard@gmail.com
53
53
  executables: []
54
54
 
@@ -91,6 +91,7 @@ files:
91
91
  - lib/broadway/resources/post.rb
92
92
  - lib/broadway/resources/site.rb
93
93
  - lib/broadway/resources/slug.rb
94
+ - lib/broadway/run.rb
94
95
  - lib/broadway/sinatra/app.rb
95
96
  - lib/broadway/sinatra/helpers/collection_helper.rb
96
97
  - lib/broadway/sinatra/helpers/partial_helper.rb
@@ -133,6 +134,6 @@ rubyforge_project: broadway
133
134
  rubygems_version: 1.3.7
134
135
  signing_key:
135
136
  specification_version: 3
136
- summary: Pluggable, portable, framework-friendly Ruby Static Site Generator. Setting the Stage for the Ruby CMS.
137
+ summary: Pluggable, portable, framework-friendly Ruby Static Site Generator.
137
138
  test_files: []
138
139