octopress-ink 1.0.0.alpha.31 → 1.0.0.alpha.32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/lib/octopress-ink.rb +92 -37
  3. data/lib/octopress-ink/assets.rb +12 -10
  4. data/lib/octopress-ink/assets/asset.rb +91 -80
  5. data/lib/octopress-ink/assets/config.rb +29 -27
  6. data/lib/octopress-ink/assets/include.rb +11 -9
  7. data/lib/octopress-ink/assets/javascript.rb +7 -4
  8. data/lib/octopress-ink/assets/layout.rb +16 -11
  9. data/lib/octopress-ink/assets/page.rb +32 -30
  10. data/lib/octopress-ink/assets/root.rb +17 -15
  11. data/lib/octopress-ink/assets/sass.rb +48 -46
  12. data/lib/octopress-ink/assets/stylesheet.rb +25 -23
  13. data/lib/octopress-ink/commands.rb +23 -0
  14. data/lib/octopress-ink/commands/helpers.rb +19 -0
  15. data/lib/octopress-ink/commands/info.rb +24 -0
  16. data/lib/octopress-ink/filters.rb +112 -109
  17. data/lib/octopress-ink/generators/plugin_assets.rb +8 -6
  18. data/lib/octopress-ink/helpers.rb +7 -5
  19. data/lib/octopress-ink/helpers/conditional.rb +16 -14
  20. data/lib/octopress-ink/helpers/content_for.rb +23 -20
  21. data/lib/octopress-ink/helpers/path.rb +51 -48
  22. data/lib/octopress-ink/helpers/var.rb +82 -80
  23. data/lib/octopress-ink/jekyll/hooks.rb +2 -2
  24. data/lib/octopress-ink/jekyll/page.rb +38 -35
  25. data/lib/octopress-ink/jekyll/static_file.rb +18 -16
  26. data/lib/octopress-ink/jekyll/static_file_content.rb +8 -6
  27. data/lib/octopress-ink/plugin.rb +189 -144
  28. data/lib/octopress-ink/plugins.rb +249 -230
  29. data/lib/octopress-ink/plugins/stylesheets.rb +37 -35
  30. data/lib/octopress-ink/tags.rb +16 -14
  31. data/lib/octopress-ink/tags/abort.rb +15 -12
  32. data/lib/octopress-ink/tags/assign.rb +21 -19
  33. data/lib/octopress-ink/tags/capture.rb +26 -24
  34. data/lib/octopress-ink/tags/content_for.rb +15 -12
  35. data/lib/octopress-ink/tags/filter.rb +16 -13
  36. data/lib/octopress-ink/tags/include.rb +40 -38
  37. data/lib/octopress-ink/tags/javascript.rb +6 -4
  38. data/lib/octopress-ink/tags/line_comment.rb +6 -3
  39. data/lib/octopress-ink/tags/render.rb +53 -51
  40. data/lib/octopress-ink/tags/return.rb +12 -9
  41. data/lib/octopress-ink/tags/stylesheet.rb +6 -4
  42. data/lib/octopress-ink/tags/wrap.rb +62 -60
  43. data/lib/octopress-ink/tags/yield.rb +23 -20
  44. data/lib/octopress-ink/version.rb +1 -1
  45. data/octopress-ink.gemspec +1 -1
  46. data/test/Gemfile +3 -2
  47. data/test/_config.yml +2 -0
  48. data/test/plugins/awesome-sauce/plugin.rb +3 -2
  49. data/test/plugins/test-theme/plugin.rb +3 -2
  50. metadata +7 -4
@@ -1,9 +1,12 @@
1
1
  module Octopress
2
- module Assets
3
- class Javascript < Asset
4
- def tag
5
- "<script src='#{Filters.expand_url(File.join(@dir, @file))}'></script>"
2
+ module Ink
3
+ module Assets
4
+ class Javascript < Asset
5
+ def tag
6
+ "<script src='#{Filters.expand_url(File.join(@dir, @file))}'></script>"
7
+ end
6
8
  end
7
9
  end
8
10
  end
9
11
  end
12
+
@@ -1,19 +1,24 @@
1
1
  module Octopress
2
- module Assets
3
- class Layout < Asset
2
+ module Ink
3
+ module Assets
4
+ class Layout < Asset
4
5
 
5
- def register
6
- name = "#{@plugin.namespace}:#{@file}"
7
- name = name.split(".")[0..-2].join(".")
6
+ def register
7
+ file = user_path
8
+ dir = user_dir
9
+ if !exists?(file)
10
+ file = plugin_path
11
+ dir = plugin_dir
12
+ end
8
13
 
9
- file = user_path
10
- dir = user_dir
11
- if !exists?(file)
12
- file = plugin_path
13
- dir = plugin_dir
14
+ Plugins.site.layouts[name] = Jekyll::Layout.new(Plugins.site, dir, @file)
14
15
  end
15
16
 
16
- Plugins.site.layouts[name] = Jekyll::Layout.new(Plugins.site, dir, @file)
17
+ def name
18
+ name = "#{@plugin.slug}:#{@file}"
19
+ # remove extension
20
+ name = name.split(".")[0..-2].join(".")
21
+ end
17
22
  end
18
23
  end
19
24
  end
@@ -2,38 +2,40 @@
2
2
  # Use root assets for files like robots.text or favicon.ico
3
3
 
4
4
  module Octopress
5
- module Assets
6
- class PageAsset < Asset
7
-
8
- def initialize(plugin, type, file)
9
- @root = plugin.assets_path
10
- @plugin = plugin
11
- @type = type
12
- @dir = File.dirname(file)
13
- @file = File.basename(file)
14
- @exists = {}
15
- file_check
16
- end
17
-
18
- def page_dir
19
- @dir == '.' ? '' : @dir
20
- end
21
-
22
- def plugin_path
23
- File.join(plugin_dir, @dir, @file)
24
- end
25
-
26
- def page
27
- @page ||= Page.new(Plugins.site, plugin_dir, page_dir, @file, @plugin.config)
28
- end
5
+ module Ink
6
+ module Assets
7
+ class PageAsset < Asset
8
+
9
+ def initialize(plugin, type, file)
10
+ @root = plugin.assets_path
11
+ @plugin = plugin
12
+ @type = type
13
+ @dir = File.dirname(file)
14
+ @file = File.basename(file)
15
+ @exists = {}
16
+ file_check
17
+ end
18
+
19
+ def page_dir
20
+ @dir == '.' ? '' : @dir
21
+ end
22
+
23
+ def plugin_path
24
+ File.join(plugin_dir, @dir, @file)
25
+ end
26
+
27
+ def page
28
+ @page ||= Page.new(Plugins.site, plugin_dir, page_dir, @file, @plugin.config)
29
+ end
30
+
31
+ # Add page to Jekyll pages if no other page has a conflicting destination
32
+ #
33
+ def copy
34
+ return unless page.url
35
+ Plugins.site.pages << page unless Helpers::Path.find_page(page)
36
+ end
29
37
 
30
- # Add page to Jekyll pages if no other page has a conflicting destination
31
- #
32
- def copy
33
- return unless page.url
34
- Plugins.site.pages << page unless Helpers::Path.find_page(page)
35
38
  end
36
-
37
39
  end
38
40
  end
39
41
  end
@@ -2,25 +2,27 @@
2
2
  # Use root assets for files like robots.text or favicon.ico
3
3
 
4
4
  module Octopress
5
- module Assets
6
- class RootAsset < Asset
5
+ module Ink
6
+ module Assets
7
+ class RootAsset < Asset
7
8
 
8
- def initialize(plugin, type, file)
9
- @root = plugin.assets_path
10
- @plugin = plugin
11
- @dir = ''
12
- @type = type
13
- @file = file
14
- @exists = {}
15
- file_check
16
- end
9
+ def initialize(plugin, type, file)
10
+ @root = plugin.assets_path
11
+ @plugin = plugin
12
+ @dir = ''
13
+ @type = type
14
+ @file = file
15
+ @exists = {}
16
+ file_check
17
+ end
17
18
 
18
- def copy
19
- unless exists? local_plugin_path
20
- Plugins.site.static_files << StaticFile.new(plugin_path, destination)
19
+ def copy
20
+ unless exists? local_plugin_path
21
+ Plugins.site.static_files << StaticFile.new(plugin_path, destination)
22
+ end
21
23
  end
22
- end
23
24
 
25
+ end
24
26
  end
25
27
  end
26
28
  end
@@ -1,60 +1,62 @@
1
1
  module Octopress
2
- module Assets
3
- class Sass < Stylesheet
4
- def initialize(plugin, type, file, media)
5
- @plugin = plugin
6
- @type = type
7
- @file = file
8
- @media = media || 'all'
9
- @root = plugin.assets_path
10
- @dir = File.join(plugin.namespace, type)
11
- @exists = {}
12
- file_check
13
- end
2
+ module Ink
3
+ module Assets
4
+ class Sass < Stylesheet
5
+ def initialize(plugin, type, file, media)
6
+ @plugin = plugin
7
+ @type = type
8
+ @file = file
9
+ @media = media || 'all'
10
+ @root = plugin.assets_path
11
+ @dir = File.join(plugin.slug, type)
12
+ @exists = {}
13
+ file_check
14
+ end
14
15
 
15
- def tag
16
- "<link href='#{Filters.expand_url(File.join(@dir, @file))}' media='#{media}' rel='stylesheet' type='text/css'>"
17
- end
16
+ def tag
17
+ "<link href='#{Filters.expand_url(File.join(@dir, @file))}' media='#{media}' rel='stylesheet' type='text/css'>"
18
+ end
18
19
 
19
- # TODO: see if this is done TODO: choose user path before local path.
20
- def user_load_path
21
- File.join(Plugins.site.source, Plugins.custom_dir, @dir, File.dirname(@file)).sub /\/\.$/, ''
22
- end
20
+ # TODO: see if this is done TODO: choose user path before local path.
21
+ def user_load_path
22
+ File.join(Plugins.site.source, Plugins.custom_dir, @dir, File.dirname(@file)).sub /\/\.$/, ''
23
+ end
23
24
 
24
- def theme_load_path
25
- File.expand_path(File.join(@root, @type))
26
- end
25
+ def theme_load_path
26
+ File.expand_path(File.join(@root, @type))
27
+ end
27
28
 
28
- def compile
29
- unless @compiled
30
- options = Plugins.sass_options
31
- if @plugin.type == 'local_plugin'
32
- @compiled = Plugins.compile_sass_file(path.to_s, options)
33
- else
34
- # If the plugin isn't a local plugin, add source paths to allow overrieds on @imports.
35
- #
36
- options[:load_paths] = [user_load_path, theme_load_path]
37
- @compiled = Plugins.compile_sass(path.read, options)
29
+ def compile
30
+ unless @compiled
31
+ options = Plugins.sass_options
32
+ if @plugin.type == 'local_plugin'
33
+ @compiled = Plugins.compile_sass_file(path.to_s, options)
34
+ else
35
+ # If the plugin isn't a local plugin, add source paths to allow overrieds on @imports.
36
+ #
37
+ options[:load_paths] = [user_load_path, theme_load_path]
38
+ @compiled = Plugins.compile_sass(path.read, options)
39
+ end
38
40
  end
41
+ @compiled
39
42
  end
40
- @compiled
41
- end
42
43
 
43
- def user_override_path
44
- # Allow Sass overrides to use either syntax
45
- if @file =~ /s[ac]ss$/
46
- [File.join(user_dir, @file), File.join(user_dir, alt_syntax_file)]
47
- else
48
- File.join user_dir, @file
44
+ def user_override_path
45
+ # Allow Sass overrides to use either syntax
46
+ if @file =~ /s[ac]ss$/
47
+ [File.join(user_dir, @file), File.join(user_dir, alt_syntax_file)]
48
+ else
49
+ File.join user_dir, @file
50
+ end
49
51
  end
50
- end
51
52
 
52
- def destination
53
- File.join(@dir, @file.sub(/s.ss/, 'css'))
54
- end
53
+ def destination
54
+ File.join(@dir, @file.sub(/s.ss/, 'css'))
55
+ end
55
56
 
56
- def copy
57
- Plugins.site.static_files << StaticFileContent.new(compile, destination)
57
+ def copy
58
+ Plugins.site.static_files << StaticFileContent.new(compile, destination)
59
+ end
58
60
  end
59
61
  end
60
62
  end
@@ -1,31 +1,33 @@
1
1
  module Octopress
2
- module Assets
3
- class Stylesheet < Asset
4
- def initialize(plugin, type, file, media)
5
- @plugin = plugin
6
- @file = file
7
- @type = type
8
- @media = media || 'all'
9
- @root = plugin.assets_path
10
- @dir = File.join(plugin.namespace, type)
11
- @exists = {}
12
- file_check
13
- end
2
+ module Ink
3
+ module Assets
4
+ class Stylesheet < Asset
5
+ def initialize(plugin, type, file, media)
6
+ @plugin = plugin
7
+ @file = file
8
+ @type = type
9
+ @media = media || 'all'
10
+ @root = plugin.assets_path
11
+ @dir = File.join(plugin.slug, type)
12
+ @exists = {}
13
+ file_check
14
+ end
14
15
 
15
- def media
16
- m = @media
17
- if @file =~ /@(.+?)\./
18
- m = $1
16
+ def media
17
+ m = @media
18
+ if @file =~ /@(.+?)\./
19
+ m = $1
20
+ end
21
+ m
19
22
  end
20
- m
21
- end
22
23
 
23
- def destination
24
- File.join(@dir, @file.sub(/@(.+?)\./,'.'))
25
- end
24
+ def destination
25
+ File.join(@dir, @file.sub(/@(.+?)\./,'.'))
26
+ end
26
27
 
27
- def tag
28
- "<link href='#{Filters.expand_url(File.join(@dir, @file))}' media='#{media}' rel='stylesheet' type='text/css'>"
28
+ def tag
29
+ "<link href='#{Filters.expand_url(File.join(@dir, @file))}' media='#{media}' rel='stylesheet' type='text/css'>"
30
+ end
29
31
  end
30
32
  end
31
33
  end
@@ -0,0 +1,23 @@
1
+ module Octopress
2
+ module Ink
3
+ module Commands
4
+ require 'octopress-ink/commands/info'
5
+
6
+ class Ink < Octopress::Command
7
+
8
+ def self.init_with_program(p)
9
+ p.command(:ink) do |c|
10
+ c.syntax "octopress ink [options]"
11
+ c.description "Get about octopress ink plugins"
12
+
13
+ Info.process_command(c)
14
+
15
+ c.action do |args, options|
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,19 @@
1
+ module Octopress
2
+ module Ink
3
+ module Commands
4
+ module CommandHelpers
5
+ def self.add_asset_options(c)
6
+ c.option "layouts", "--layouts", "List only layouts"
7
+ c.option "includes", "--includes", "List only includes"
8
+ c.option "pages", "--pages", "List only pages"
9
+ c.option "stylesheets", "--stylesheets", "List only stylesheets"
10
+ c.option "sass", "--sass", "List only Sass files"
11
+ c.option "javascripts", "--javascripts", "List only Javascripts"
12
+ c.option "images", "--images", "List only images"
13
+ c.option "fonts", "--fonts", "List only fonts"
14
+ c.option "files", "--files", "List only files"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ module Octopress
2
+ module Ink
3
+ module Commands
4
+ class Info
5
+ def self.process_command(p)
6
+ p.command(:info) do |c|
7
+ c.syntax "octopress ink info [plugin] [options]"
8
+ c.description "Get info about octopress ink plugins"
9
+ CommandHelpers.add_asset_options(c)
10
+
11
+ c.action do |args, options|
12
+ if args.empty?
13
+ Octopress::Ink.info
14
+ else
15
+ name = args.first
16
+ puts Octopress::Ink.plugin_info(name, options)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,130 +1,133 @@
1
1
  module Octopress
2
- module Filters
3
-
2
+ module Ink
3
+ module Filters
4
+
4
5
 
5
- # Returns the site's config root or '/' if the config isn't set
6
- #
7
- def root
8
- root_url = Plugins.site.config['root']
9
- root_url.nil? ? '/' : File.join('/', root_url)
10
- end
6
+ # Returns the site's config root or '/' if the config isn't set
7
+ #
8
+ def root
9
+ root_url = Plugins.site.config['root']
10
+ root_url.nil? ? '/' : File.join('/', root_url)
11
+ end
11
12
 
12
- # Prepends input with a url fragment
13
- #
14
- # input - An absolute url, e.g. /images/awesome.gif
15
- # url - The fragment to prepend the input, e.g. /blog
16
- #
17
- # Returns the modified url, e.g /blog
18
- #
19
- def expand_url(input, url=nil)
20
- url ||= root
21
- if input =~ /^#{url}/
22
- input
23
- else
24
- File.join(url, input)
13
+ # Prepends input with a url fragment
14
+ #
15
+ # input - An absolute url, e.g. /images/awesome.gif
16
+ # url - The fragment to prepend the input, e.g. /blog
17
+ #
18
+ # Returns the modified url, e.g /blog
19
+ #
20
+ def expand_url(input, url=nil)
21
+ url ||= root
22
+ if input =~ /^#{url}/
23
+ input
24
+ else
25
+ File.join(url, input)
26
+ end
25
27
  end
26
- end
27
28
 
28
- # Prevent orphans in text by inserting a non-breaking space between the two last words of a string.
29
- def unorphan(input)
30
- input.sub(/\s+(\S+)\s*$/, '&nbsp;\1')
31
- end
29
+ # Prevent orphans in text by inserting a non-breaking space between the two last words of a string.
30
+ def unorphan(input)
31
+ input.sub(/\s+(\S+)\s*$/, '&nbsp;\1')
32
+ end
32
33
 
33
- # Prepend all absolute urls with a url fragment
34
- #
35
- # input - The content of a page or post
36
- # url - The fragment to prepend absolute urls
37
- #
38
- # Returns input with modified urls
39
- #
40
- def expand_urls(input, url=nil)
41
- url ||= root
42
- input.gsub /(\s+(href|src)\s*=\s*["|']{1})(\/[^\"'>]*)/ do
43
- $1 + expand_url($3, url)
34
+ # Prepend all absolute urls with a url fragment
35
+ #
36
+ # input - The content of a page or post
37
+ # url - The fragment to prepend absolute urls
38
+ #
39
+ # Returns input with modified urls
40
+ #
41
+ def expand_urls(input, url=nil)
42
+ url ||= root
43
+ input.gsub /(\s+(href|src)\s*=\s*["|']{1})(\/[^\"'>]*)/ do
44
+ $1 + expand_url($3, url)
45
+ end
44
46
  end
45
- end
46
47
 
47
- # Prepend all urls with the full site url
48
- #
49
- # input - The content of a page or post
50
- #
51
- # Returns input with all urls expanded to include the full site url
52
- # e.g. /images/awesome.gif => http://example.com/images/awesome.gif
53
- #
54
- def full_urls(input)
55
- url = Plugins.site.config['url']
56
- if url.nil?
57
- raise IOError.new "Could not expand urls: Please add your published url to your _config.yml, eg url: http://example.com/"
58
- else
59
- expand_urls(input, url)
48
+ # Prepend all urls with the full site url
49
+ #
50
+ # input - The content of a page or post
51
+ #
52
+ # Returns input with all urls expanded to include the full site url
53
+ # e.g. /images/awesome.gif => http://example.com/images/awesome.gif
54
+ #
55
+ def full_urls(input)
56
+ url = Plugins.site.config['url']
57
+ if url.nil?
58
+ raise IOError.new "Could not expand urls: Please add your published url to your _config.yml, eg url: http://example.com/"
59
+ else
60
+ expand_urls(input, url)
61
+ end
60
62
  end
61
- end
62
-
63
- # Prepend a url with the full site url
64
- #
65
- # input - a url
66
- #
67
- # Returns input with all urls expanded to include the full site url
68
- # e.g. /images/awesome.gif => http://example.com/images/awesome.gif
69
- #
70
- def full_url(input)
71
- url = Plugins.site.config['url']
72
- if url.nil?
73
- raise IOError.new "Could not expand url in #{input}: Please add your site's published url to your _config.yml, eg url: http://example.com/"
74
- else
75
- expand_url(input, url)
63
+
64
+ # Prepend a url with the full site url
65
+ #
66
+ # input - a url
67
+ #
68
+ # Returns input with all urls expanded to include the full site url
69
+ # e.g. /images/awesome.gif => http://example.com/images/awesome.gif
70
+ #
71
+ def full_url(input)
72
+ url = Plugins.site.config['url']
73
+ if url.nil?
74
+ raise IOError.new "Could not expand url in #{input}: Please add your site's published url to your _config.yml, eg url: http://example.com/"
75
+ else
76
+ expand_url(input, url)
77
+ end
76
78
  end
77
- end
78
79
 
79
- # Truncate a string at the <!--more--> marker
80
- # input - The content of a post or page
81
- #
82
- # Returns only the content preceeding the marker
83
- #
84
- def excerpt(input)
85
- if input.index(/<!--\s*more\s*-->/i)
86
- input.split(/<!--\s*more\s*-->/i)[0]
87
- else
88
- input
80
+ # Truncate a string at the <!--more--> marker
81
+ # input - The content of a post or page
82
+ #
83
+ # Returns only the content preceeding the marker
84
+ #
85
+ def excerpt(input)
86
+ if input.index(/<!--\s*more\s*-->/i)
87
+ input.split(/<!--\s*more\s*-->/i)[0]
88
+ else
89
+ input
90
+ end
89
91
  end
90
- end
91
92
 
92
- # Checks for excerpt markers (helpful for template conditionals)
93
- #
94
- # input - The content of a page or post
95
- #
96
- # Returns true/false if the excerpt marker is found
97
- #
98
- def has_excerpt(input)
99
- input =~ /<!--\s*more\s*-->/i ? true : false
100
- end
93
+ # Checks for excerpt markers (helpful for template conditionals)
94
+ #
95
+ # input - The content of a page or post
96
+ #
97
+ # Returns true/false if the excerpt marker is found
98
+ #
99
+ def has_excerpt(input)
100
+ input =~ /<!--\s*more\s*-->/i ? true : false
101
+ end
101
102
 
102
- # Escapes HTML content for XML
103
- def cdata_escape(input)
104
- input.gsub(/<!\[CDATA\[/, '&lt;![CDATA[').gsub(/\]\]>/, ']]&gt;')
105
- end
103
+ # Escapes HTML content for XML
104
+ def cdata_escape(input)
105
+ input.gsub(/<!\[CDATA\[/, '&lt;![CDATA[').gsub(/\]\]>/, ']]&gt;')
106
+ end
106
107
 
107
- # Returns a title cased string based on John Gruber's title case http://daringfireball.net/2008/08/title_case_update
108
- def titlecase(input)
109
- input.titlecase
110
- end
108
+ # Returns a title cased string based on John Gruber's title case http://daringfireball.net/2008/08/title_case_update
109
+ def titlecase(input)
110
+ input.titlecase
111
+ end
111
112
 
112
- # Formats a string for use as a css classname, removing illegal characters
113
- def classify(input)
114
- input.gsub(/ /,'-').gsub(/[^\w-]/,'').downcase
115
- end
113
+ # Formats a string for use as a css classname, removing illegal characters
114
+ def classify(input)
115
+ input.gsub(/ /,'-').gsub(/[^\w-]/,'').downcase
116
+ end
116
117
 
117
- # Remove empty lines
118
- def compact_newlines(input)
119
- input.gsub(/\n{2,}/, "\n").gsub(/^ +\n/,"")
120
- end
118
+ # Remove empty lines
119
+ def compact_newlines(input)
120
+ input.gsub(/\n{2,}/, "\n").gsub(/^ +\n/,"")
121
+ end
121
122
 
122
- # Join newlines
123
- def join_lines(input, separator='')
124
- compact_newlines(input).strip.gsub(/\s*\n\s*/, separator)
125
- end
123
+ # Join newlines
124
+ def join_lines(input, separator='')
125
+ compact_newlines(input).strip.gsub(/\s*\n\s*/, separator)
126
+ end
126
127
 
127
- module_function :root, :expand_url, :expand_urls, :full_url, :full_urls, :excerpt, :cdata_escape, :titlecase, :classify, :join_lines, :compact_newlines, :unorphan
128
- public :expand_url, :expand_urls, :full_url, :full_urls, :excerpt, :cdata_escape, :titlecase, :classify, :join_lines, :compact_newlines, :unorphan
128
+ module_function :root, :expand_url, :expand_urls, :full_url, :full_urls, :excerpt, :cdata_escape, :titlecase, :classify, :join_lines, :compact_newlines, :unorphan
129
+ public :expand_url, :expand_urls, :full_url, :full_urls, :excerpt, :cdata_escape, :titlecase, :classify, :join_lines, :compact_newlines, :unorphan
130
+ end
129
131
  end
130
132
  end
133
+