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.
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