broadway 0.0.3.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +155 -0
- data/lib/broadway.rb +64 -4
- data/lib/broadway/{core_ext.rb → ext.rb} +40 -6
- data/lib/broadway/filters/erb.rb +10 -0
- data/lib/broadway/filters/haml.rb +10 -0
- data/lib/broadway/filters/liquid.rb +14 -0
- data/lib/broadway/filters/markdown.rb +10 -0
- data/lib/broadway/filters/textile.rb +11 -0
- data/lib/broadway/migrators/blogger.rb +7 -0
- data/lib/broadway/migrators/wordpress.rb +7 -0
- data/lib/broadway/mixins/assetable.rb +48 -0
- data/lib/broadway/mixins/configurable.rb +32 -0
- data/lib/broadway/mixins/convertible.rb +25 -0
- data/lib/broadway/mixins/hierarchical.rb +61 -0
- data/lib/broadway/mixins/layoutable.rb +18 -0
- data/lib/broadway/mixins/pageable.rb +5 -0
- data/lib/broadway/mixins/processable.rb +44 -0
- data/lib/broadway/mixins/publishable.rb +36 -0
- data/lib/broadway/mixins/readable.rb +73 -0
- data/lib/broadway/mixins/resourceful.rb +27 -0
- data/lib/broadway/mixins/sluggable.rb +36 -0
- data/lib/broadway/mixins/sortable.rb +24 -0
- data/lib/broadway/mixins/taggable.rb +46 -0
- data/lib/broadway/mixins/themeable.rb +39 -0
- data/lib/broadway/processors/link.rb +45 -0
- data/lib/broadway/processors/post.rb +117 -0
- data/lib/broadway/processors/site.rb +77 -0
- data/lib/broadway/processors/tree.rb +121 -0
- data/lib/broadway/resources/asset.rb +28 -0
- data/lib/broadway/resources/configuration.rb +114 -0
- data/lib/broadway/resources/file.rb +88 -0
- data/lib/broadway/resources/layout.rb +28 -0
- data/lib/broadway/resources/link.rb +16 -0
- data/lib/broadway/resources/post.rb +63 -0
- data/lib/broadway/resources/site.rb +164 -0
- data/lib/broadway/resources/slug.rb +69 -0
- data/lib/broadway/sinatra/app.rb +21 -0
- data/lib/broadway/sinatra/helpers/collection_helper.rb +2 -1
- data/lib/broadway/sinatra/helpers/partial_helper.rb +5 -5
- data/lib/broadway/sinatra/helpers/text_helper.rb +5 -11
- data/lib/broadway/sinatra/processor.rb +84 -0
- data/lib/broadway/tasks.rb +1 -0
- data/lib/broadway/tasks/default.rake +85 -0
- metadata +46 -41
- data/README.textile +0 -306
- data/Rakefile +0 -85
- data/lib/broadway/api.rb +0 -51
- data/lib/broadway/asset.rb +0 -17
- data/lib/broadway/base.rb +0 -120
- data/lib/broadway/convertible.rb +0 -91
- data/lib/broadway/page.rb +0 -71
- data/lib/broadway/post.rb +0 -112
- data/lib/broadway/rails.rb +0 -3
- data/lib/broadway/resource.rb +0 -128
- data/lib/broadway/runner.rb +0 -62
- data/lib/broadway/sinatra.rb +0 -5
- data/lib/broadway/sinatra/base.rb +0 -90
- data/lib/broadway/sinatra/helpers.rb +0 -7
- data/lib/broadway/site.rb +0 -421
- data/lib/broadway/static_file.rb +0 -32
@@ -0,0 +1,25 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Convertible
|
3
|
+
def self.included(base)
|
4
|
+
base.send :include, InstanceMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
attr_accessor :filters
|
9
|
+
|
10
|
+
def transform
|
11
|
+
filters.each do |filter|
|
12
|
+
filter.transform
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def filters=(array)
|
17
|
+
@filters = array.collect do |filter|
|
18
|
+
"Broadway::Filter::#{filter.to_s.camelize}".constantize.new(self)
|
19
|
+
end
|
20
|
+
|
21
|
+
@filters
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Hierarchical
|
3
|
+
def self.included(base)
|
4
|
+
base.send :include, InstanceMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
attr_accessor :parent, :children, :show_children
|
9
|
+
|
10
|
+
def show_children
|
11
|
+
unless defined?(@show_children)
|
12
|
+
if self.data.has_key?("show_children")
|
13
|
+
@show_children = (self.data["show_children"] == "true" || self.data["show_children"] == true)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
@show_children
|
18
|
+
end
|
19
|
+
|
20
|
+
def show_children=(value)
|
21
|
+
@show_children = value
|
22
|
+
end
|
23
|
+
|
24
|
+
def children=(value)
|
25
|
+
@children = value
|
26
|
+
@children.each { |child| child.parent = self }
|
27
|
+
@children
|
28
|
+
end
|
29
|
+
|
30
|
+
def children
|
31
|
+
@children ||= []
|
32
|
+
@children
|
33
|
+
end
|
34
|
+
|
35
|
+
=begin
|
36
|
+
def children
|
37
|
+
unless @children
|
38
|
+
key = self.categories.last
|
39
|
+
length = self.path.split("/").length
|
40
|
+
@children = site.send("find_#{short_name.pluralize}_by_category", key)
|
41
|
+
@children.delete_if do |child|
|
42
|
+
(child.path == self.path) ||
|
43
|
+
(child.path.split("/").length <= length)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
@children
|
48
|
+
end
|
49
|
+
=end
|
50
|
+
|
51
|
+
def show_children?
|
52
|
+
return true if self.data.blank?
|
53
|
+
return self.show_children == true
|
54
|
+
end
|
55
|
+
|
56
|
+
def num_children
|
57
|
+
children.length
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Layoutable
|
3
|
+
attr_accessor :layout
|
4
|
+
|
5
|
+
def layout
|
6
|
+
unless @layout
|
7
|
+
if self.data and self.data.has_key?("layout")
|
8
|
+
@layout = Broadway::Layout.new(self.data["layout"])
|
9
|
+
else
|
10
|
+
@layout = Broadway::Layout.new(self.categories.first)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
@layout
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Processable
|
3
|
+
def self.included(base)
|
4
|
+
base.send :include, InstanceMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
attr_accessor :processor
|
9
|
+
|
10
|
+
def resource_name
|
11
|
+
self.class.to_s.split("::").last
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(site, options = {})
|
15
|
+
self.processor = "Broadway::Processor::#{resource_name}".constantize.new(self, site, options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def build
|
19
|
+
processor.build
|
20
|
+
end
|
21
|
+
|
22
|
+
def reset
|
23
|
+
processor.reset
|
24
|
+
end
|
25
|
+
|
26
|
+
def process
|
27
|
+
processor.process
|
28
|
+
end
|
29
|
+
|
30
|
+
def read(attribute = nil)
|
31
|
+
processor.read(attribute)
|
32
|
+
end
|
33
|
+
|
34
|
+
def write(to)
|
35
|
+
processor.write(to)
|
36
|
+
end
|
37
|
+
|
38
|
+
def clear
|
39
|
+
processor.clear
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Publishable
|
3
|
+
def self.included(base)
|
4
|
+
base.send :include, InstanceMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
attr_accessor :date, :state
|
9
|
+
|
10
|
+
def date
|
11
|
+
unless @date
|
12
|
+
if self.data.has_key?('date')
|
13
|
+
@date = Time.parse(self.data["date"].to_s)
|
14
|
+
else
|
15
|
+
@date = file.date
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
@date
|
20
|
+
end
|
21
|
+
|
22
|
+
def state
|
23
|
+
@state ||= "published"
|
24
|
+
@state
|
25
|
+
end
|
26
|
+
|
27
|
+
def published?
|
28
|
+
state == "published"
|
29
|
+
end
|
30
|
+
|
31
|
+
def draft?
|
32
|
+
state == "draft"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Readable
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.send :include, InstanceMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
attr_accessor :file
|
10
|
+
|
11
|
+
def extension
|
12
|
+
file.extension
|
13
|
+
end
|
14
|
+
|
15
|
+
def directory
|
16
|
+
file.directory
|
17
|
+
end
|
18
|
+
|
19
|
+
def file_path
|
20
|
+
file.path
|
21
|
+
end
|
22
|
+
|
23
|
+
def file_name
|
24
|
+
file.name
|
25
|
+
end
|
26
|
+
|
27
|
+
def categories
|
28
|
+
file.categories
|
29
|
+
end
|
30
|
+
|
31
|
+
def read(attribute = nil)
|
32
|
+
file.read(attribute)
|
33
|
+
end
|
34
|
+
|
35
|
+
def description
|
36
|
+
data && data["description"]
|
37
|
+
end
|
38
|
+
|
39
|
+
def render(attribute = nil, extension = self.extension)
|
40
|
+
file.render(attribute, extension)
|
41
|
+
end
|
42
|
+
|
43
|
+
def read_description(max_length = nil, format = self.extension, strip = true)
|
44
|
+
result = read("description")
|
45
|
+
result = read if result.nil? || result.empty?
|
46
|
+
if format == "markdown"
|
47
|
+
require 'rdiscount'
|
48
|
+
result = RDiscount.new(result).to_html
|
49
|
+
elsif format == "textile"
|
50
|
+
require 'redcloth'
|
51
|
+
result = RedCloth.new(result).to_html
|
52
|
+
end
|
53
|
+
if strip
|
54
|
+
result = result.
|
55
|
+
gsub(/<\/?[^>]*>/, "").
|
56
|
+
gsub(/\n\n\t/, " ").
|
57
|
+
gsub(/\n\t/, ", ").
|
58
|
+
gsub(/\n+/, ". ").
|
59
|
+
gsub(/\.+/, ".").
|
60
|
+
gsub(/\s+/, " ").
|
61
|
+
gsub(/(,\s)+/, ", ").
|
62
|
+
gsub(/^,\s/, "").
|
63
|
+
gsub(/\.,/, ".").
|
64
|
+
gsub(/^[,\.?]\s+/, "")
|
65
|
+
end
|
66
|
+
max_length ||= result.length
|
67
|
+
result = result[0..max_length] + "..."
|
68
|
+
result = "" if result == "..."
|
69
|
+
result
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Resourceful
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.send :include, InstanceMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module InstanceMethods
|
9
|
+
attr_accessor :site, :title, :kind
|
10
|
+
|
11
|
+
def short_name
|
12
|
+
self.class.to_s.split("::").last.downcase
|
13
|
+
end
|
14
|
+
|
15
|
+
def kind
|
16
|
+
@kind ||= "post"
|
17
|
+
@kind
|
18
|
+
end
|
19
|
+
|
20
|
+
def id
|
21
|
+
self.url
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Sluggable
|
3
|
+
def self.included(base)
|
4
|
+
base.send :include, InstanceMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
attr_accessor :slug
|
9
|
+
|
10
|
+
def slug
|
11
|
+
unless @slug
|
12
|
+
@slug = Broadway::Slug.new(self)
|
13
|
+
end
|
14
|
+
|
15
|
+
@slug
|
16
|
+
end
|
17
|
+
|
18
|
+
def path
|
19
|
+
slug.path
|
20
|
+
end
|
21
|
+
|
22
|
+
def url
|
23
|
+
slug.url
|
24
|
+
end
|
25
|
+
|
26
|
+
def scope
|
27
|
+
slug.scope
|
28
|
+
end
|
29
|
+
|
30
|
+
def permalink
|
31
|
+
self.data['permalink']
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Sortable
|
3
|
+
def self.included(base)
|
4
|
+
base.send :include, InstanceMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
attr_accessor :position
|
9
|
+
|
10
|
+
# Spaceship is based on Post#date, slug
|
11
|
+
#
|
12
|
+
# Returns -1, 0, 1
|
13
|
+
def <=>(other)
|
14
|
+
if self.date and other.date
|
15
|
+
other.date <=> self.date
|
16
|
+
elsif self.position and other.position
|
17
|
+
self.position <=> other.position
|
18
|
+
else
|
19
|
+
0
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Taggable
|
3
|
+
def self.included(base)
|
4
|
+
base.send :include, InstanceMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
attr_accessor :tags
|
9
|
+
|
10
|
+
# tags can be stored under multiple contexts
|
11
|
+
# default is "tags" (use "categories" or whatever else you want)
|
12
|
+
def tags(context = "tags")
|
13
|
+
unless @tags
|
14
|
+
@tags = tag_hash(self.data["tags"] || [])
|
15
|
+
end
|
16
|
+
|
17
|
+
@tags[context.to_s] if @tags
|
18
|
+
end
|
19
|
+
|
20
|
+
def tags=(value)
|
21
|
+
@tags = tag_hash(value)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def tag_hash(value)
|
26
|
+
case value
|
27
|
+
when Hash
|
28
|
+
value = value.each { |k, v| value[k] = tag_array(v) }
|
29
|
+
else
|
30
|
+
{"tags" => tag_array(value)}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# helper method to convert tags to arrays
|
35
|
+
def tag_array(value)
|
36
|
+
result = case value
|
37
|
+
when String
|
38
|
+
value.split(",\s+")
|
39
|
+
when Array
|
40
|
+
value
|
41
|
+
end
|
42
|
+
result
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Broadway
|
2
|
+
module Themeable
|
3
|
+
attr_accessor :template
|
4
|
+
|
5
|
+
def template_extensions
|
6
|
+
%w(html html.haml haml.html haml erb erb.html html.erb)
|
7
|
+
end
|
8
|
+
|
9
|
+
def theme
|
10
|
+
File.join(site.setting(:theme_path), theme)
|
11
|
+
end
|
12
|
+
|
13
|
+
def template
|
14
|
+
unless @template
|
15
|
+
if data["template"] && template_path = find_template(data["template"])
|
16
|
+
@template = template_path
|
17
|
+
else
|
18
|
+
if kind == "page"
|
19
|
+
@template = "index"
|
20
|
+
else
|
21
|
+
@template = "show"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
@template
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
def find_template(from)
|
31
|
+
template_extensions.each do |ext|
|
32
|
+
template_path = "#{Broadway.views}/#{from}.#{ext}"
|
33
|
+
return from if ::File.exists?(template_path)
|
34
|
+
end
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|