broadway 0.0.3.5 → 0.1.0

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.
Files changed (60) hide show
  1. data/README.markdown +155 -0
  2. data/lib/broadway.rb +64 -4
  3. data/lib/broadway/{core_ext.rb → ext.rb} +40 -6
  4. data/lib/broadway/filters/erb.rb +10 -0
  5. data/lib/broadway/filters/haml.rb +10 -0
  6. data/lib/broadway/filters/liquid.rb +14 -0
  7. data/lib/broadway/filters/markdown.rb +10 -0
  8. data/lib/broadway/filters/textile.rb +11 -0
  9. data/lib/broadway/migrators/blogger.rb +7 -0
  10. data/lib/broadway/migrators/wordpress.rb +7 -0
  11. data/lib/broadway/mixins/assetable.rb +48 -0
  12. data/lib/broadway/mixins/configurable.rb +32 -0
  13. data/lib/broadway/mixins/convertible.rb +25 -0
  14. data/lib/broadway/mixins/hierarchical.rb +61 -0
  15. data/lib/broadway/mixins/layoutable.rb +18 -0
  16. data/lib/broadway/mixins/pageable.rb +5 -0
  17. data/lib/broadway/mixins/processable.rb +44 -0
  18. data/lib/broadway/mixins/publishable.rb +36 -0
  19. data/lib/broadway/mixins/readable.rb +73 -0
  20. data/lib/broadway/mixins/resourceful.rb +27 -0
  21. data/lib/broadway/mixins/sluggable.rb +36 -0
  22. data/lib/broadway/mixins/sortable.rb +24 -0
  23. data/lib/broadway/mixins/taggable.rb +46 -0
  24. data/lib/broadway/mixins/themeable.rb +39 -0
  25. data/lib/broadway/processors/link.rb +45 -0
  26. data/lib/broadway/processors/post.rb +117 -0
  27. data/lib/broadway/processors/site.rb +77 -0
  28. data/lib/broadway/processors/tree.rb +121 -0
  29. data/lib/broadway/resources/asset.rb +28 -0
  30. data/lib/broadway/resources/configuration.rb +114 -0
  31. data/lib/broadway/resources/file.rb +88 -0
  32. data/lib/broadway/resources/layout.rb +28 -0
  33. data/lib/broadway/resources/link.rb +16 -0
  34. data/lib/broadway/resources/post.rb +63 -0
  35. data/lib/broadway/resources/site.rb +164 -0
  36. data/lib/broadway/resources/slug.rb +69 -0
  37. data/lib/broadway/sinatra/app.rb +21 -0
  38. data/lib/broadway/sinatra/helpers/collection_helper.rb +2 -1
  39. data/lib/broadway/sinatra/helpers/partial_helper.rb +5 -5
  40. data/lib/broadway/sinatra/helpers/text_helper.rb +5 -11
  41. data/lib/broadway/sinatra/processor.rb +84 -0
  42. data/lib/broadway/tasks.rb +1 -0
  43. data/lib/broadway/tasks/default.rake +85 -0
  44. metadata +46 -41
  45. data/README.textile +0 -306
  46. data/Rakefile +0 -85
  47. data/lib/broadway/api.rb +0 -51
  48. data/lib/broadway/asset.rb +0 -17
  49. data/lib/broadway/base.rb +0 -120
  50. data/lib/broadway/convertible.rb +0 -91
  51. data/lib/broadway/page.rb +0 -71
  52. data/lib/broadway/post.rb +0 -112
  53. data/lib/broadway/rails.rb +0 -3
  54. data/lib/broadway/resource.rb +0 -128
  55. data/lib/broadway/runner.rb +0 -62
  56. data/lib/broadway/sinatra.rb +0 -5
  57. data/lib/broadway/sinatra/base.rb +0 -90
  58. data/lib/broadway/sinatra/helpers.rb +0 -7
  59. data/lib/broadway/site.rb +0 -421
  60. 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,5 @@
1
+ module Broadway
2
+ module Pageable
3
+
4
+ end
5
+ 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