acts_as_markup 1.2.1 → 1.3.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.
- data/CHANGELOG +3 -0
- data/README.rdoc +23 -1
- data/Rakefile +0 -1
- data/acts_as_markup.gemspec +16 -16
- data/lib/acts/as_markup.rb +71 -42
- data/lib/acts_as_markup.rb +1 -1
- data/lib/acts_as_markup/exts/wikitext.rb +2 -2
- data/tasks/gem.rake +98 -32
- data/tasks/manifest.rake +3 -4
- data/tasks/post_load.rake +3 -4
- data/tasks/rdoc.rake +1 -4
- data/tasks/rubyforge.rake +2 -4
- data/tasks/setup.rb +8 -39
- data/test/acts_as_markdown_test.rb +57 -0
- data/test/acts_as_textile_test.rb +19 -0
- data/test/acts_as_wikitext_test.rb +19 -0
- data/test/test_helper.rb +1 -0
- metadata +7 -7
data/CHANGELOG
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
== 1.3.0 / 2008-11-19
|
2
|
+
* Add ability to accept options that will be passed to supported markup parsers. (chewi[http://github.com/chewi/])
|
3
|
+
|
1
4
|
== 1.2.0 / 2008-09-10
|
2
5
|
* Allow all objects to have a to_html method that defaults as to_s instead just doing this for strings. (idea from crnixon[http://github.com/crnixon/])
|
3
6
|
* Add string methods to all markup objects via the StringLike mixin. (crnixon[http://github.com/crnixon/])
|
data/README.rdoc
CHANGED
@@ -27,6 +27,13 @@ a config value in your environment.rb file:
|
|
27
27
|
|
28
28
|
By default RDiscount will be used.
|
29
29
|
|
30
|
+
You can specify additional options to pass to the markup library by using
|
31
|
+
<tt>:markdown_options</tt>, <tt>:textile_options</tt> or <tt>:wikitext_options</tt>.
|
32
|
+
RDoc does not support any useful options. The options should be given as an
|
33
|
+
array of arguments. You can specify options for multiple languages when
|
34
|
+
allowing more than one. See each library's documentation for more details on
|
35
|
+
what options are available.
|
36
|
+
|
30
37
|
== EXAMPLES:
|
31
38
|
|
32
39
|
==== Using +acts_as_markdown+:
|
@@ -96,6 +103,21 @@ By default RDiscount will be used.
|
|
96
103
|
@post.body.to_html # => "<h2> Markdown Headline</h2>"
|
97
104
|
|
98
105
|
|
106
|
+
==== Using options
|
107
|
+
|
108
|
+
class Post < ActiveRecord
|
109
|
+
acts_as_markdown :body, :markdown_options => [ :filter_html ]
|
110
|
+
end
|
111
|
+
|
112
|
+
class Post < ActiveRecord
|
113
|
+
acts_as_textile :body, :textile_options => [ [ :filter_html ] ]
|
114
|
+
end
|
115
|
+
|
116
|
+
class Post < ActiveRecord
|
117
|
+
acts_as_wikitext :body, :wikitext_options => [ { :space_to_underscore => true } ]
|
118
|
+
end
|
119
|
+
|
120
|
+
|
99
121
|
== REQUIREMENTS:
|
100
122
|
|
101
123
|
You will need the RedCloth[http://whytheluckystiff.net/ruby/redcloth/] library
|
@@ -138,7 +160,7 @@ Make a fork on GitHub, make your changes and do a pull request. Good places to s
|
|
138
160
|
3. Add the same lines you added to the previous "<tt>when</tt>" statement to the "<tt>:variable</tt>" "<tt>when</tt>" statement. But replace "<tt>klass</tt>" with "<tt>language_klass</tt>" (e.g. "<tt>markdown_klass</tt>").
|
139
161
|
4. Add a relevant "<tt>when</tt>" statement to the <tt>class_eval</tt> block for the "<tt>:variable</tt>" language option. This should look something like:
|
140
162
|
when /markdown/i
|
141
|
-
|
163
|
+
markup_klasses[:markdown].new self[col].to_s
|
142
164
|
5. Add a convenience method (e.g. "<tt>acts_as_markdown</tt>")
|
143
165
|
6. Add an extension file to the "lib/acts_as_markup/exts/" directory if you need to modify the object in anyway.
|
144
166
|
7. Add appropriate tests (see current tests).
|
data/Rakefile
CHANGED
@@ -18,7 +18,6 @@ PROJ.rubyforge.name = 'viget'
|
|
18
18
|
PROJ.version = ActsAsMarkup::VERSION
|
19
19
|
PROJ.rdoc.include = %w(^lib/ LICENSE CHANGELOG README\.rdoc)
|
20
20
|
PROJ.rdoc.remote_dir = 'acts_as_markup'
|
21
|
-
PROJ.test.files = FileList['test/**/*_test.rb']
|
22
21
|
PROJ.rcov.opts = ['--no-html', '-T', '--sort coverage',
|
23
22
|
'-x "\/Library\/Ruby\/"',
|
24
23
|
'-x "\/opt\/local\/lib/ruby"',
|
data/acts_as_markup.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{acts_as_markup}
|
3
|
-
s.version = "1.
|
3
|
+
s.version = "1.3.0"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.authors = ["Brian Landau"]
|
7
|
-
s.date = %q{2008-
|
7
|
+
s.date = %q{2008-11-19}
|
8
8
|
s.description = %q{Represent ActiveRecord Markdown, Textile, Wiki text, RDoc columns as Markdown, Textile Wikitext, RDoc objects using various external libraries to convert to HTML.}
|
9
9
|
s.email = %q{brian.landau@viget.com}
|
10
10
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc"]
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.rdoc_options = ["--main", "README.rdoc"]
|
15
15
|
s.require_paths = ["lib"]
|
16
16
|
s.rubyforge_project = %q{viget}
|
17
|
-
s.rubygems_version = %q{1.
|
17
|
+
s.rubygems_version = %q{1.3.1}
|
18
18
|
s.summary = %q{Represent ActiveRecord Markdown, Textile, Wiki text, RDoc columns as Markdown, Textile Wikitext, RDoc objects using various external libraries to convert to HTML}
|
19
19
|
s.test_files = ["test/acts_as_markdown_test.rb", "test/acts_as_markup_test.rb", "test/acts_as_rdoc_test.rb", "test/acts_as_textile_test.rb", "test/acts_as_wikitext_test.rb"]
|
20
20
|
|
@@ -22,24 +22,24 @@ Gem::Specification.new do |s|
|
|
22
22
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
23
|
s.specification_version = 2
|
24
24
|
|
25
|
-
if
|
26
|
-
s.add_runtime_dependency(%q<activesupport>, [">= 2.
|
27
|
-
s.add_runtime_dependency(%q<activerecord>, [">= 2.
|
28
|
-
s.add_runtime_dependency(%q<rdiscount>, [">= 1.2.
|
29
|
-
s.add_runtime_dependency(%q<RedCloth>, [">= 4.0
|
25
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 2.2.1"])
|
27
|
+
s.add_runtime_dependency(%q<activerecord>, [">= 2.2.1"])
|
28
|
+
s.add_runtime_dependency(%q<rdiscount>, [">= 1.2.11"])
|
29
|
+
s.add_runtime_dependency(%q<RedCloth>, [">= 4.1.0"])
|
30
30
|
s.add_runtime_dependency(%q<wikitext>, [">= 1.2.1"])
|
31
31
|
else
|
32
|
-
s.add_dependency(%q<activesupport>, [">= 2.
|
33
|
-
s.add_dependency(%q<activerecord>, [">= 2.
|
34
|
-
s.add_dependency(%q<rdiscount>, [">= 1.2.
|
35
|
-
s.add_dependency(%q<RedCloth>, [">= 4.0
|
32
|
+
s.add_dependency(%q<activesupport>, [">= 2.2.1"])
|
33
|
+
s.add_dependency(%q<activerecord>, [">= 2.2.1"])
|
34
|
+
s.add_dependency(%q<rdiscount>, [">= 1.2.11"])
|
35
|
+
s.add_dependency(%q<RedCloth>, [">= 4.1.0"])
|
36
36
|
s.add_dependency(%q<wikitext>, [">= 1.2.1"])
|
37
37
|
end
|
38
38
|
else
|
39
|
-
s.add_dependency(%q<activesupport>, [">= 2.
|
40
|
-
s.add_dependency(%q<activerecord>, [">= 2.
|
41
|
-
s.add_dependency(%q<rdiscount>, [">= 1.2.
|
42
|
-
s.add_dependency(%q<RedCloth>, [">= 4.0
|
39
|
+
s.add_dependency(%q<activesupport>, [">= 2.2.1"])
|
40
|
+
s.add_dependency(%q<activerecord>, [">= 2.2.1"])
|
41
|
+
s.add_dependency(%q<rdiscount>, [">= 1.2.11"])
|
42
|
+
s.add_dependency(%q<RedCloth>, [">= 4.1.0"])
|
43
43
|
s.add_dependency(%q<wikitext>, [">= 1.2.1"])
|
44
44
|
end
|
45
45
|
end
|
data/lib/acts/as_markup.rb
CHANGED
@@ -20,13 +20,20 @@ module ActiveRecord # :nodoc:
|
|
20
20
|
# the correct object (Markdown, Textile, Wikitext or RDoc) based on the value
|
21
21
|
# of the language column. If any value besides markdown, textile, wikitext, or
|
22
22
|
# RDoc is supplied for the markup language the text will pass through as a string.
|
23
|
+
#
|
24
|
+
# You can specify additional options to pass to the markup library by using
|
25
|
+
# <tt>:markdown_options</tt>, <tt>:textile_options</tt> or <tt>:wikitext_options</tt>.
|
26
|
+
# RDoc does not support any useful options. The options should be given as an array
|
27
|
+
# of arguments. You can specify options for more than one language when using
|
28
|
+
# <tt>:variable</tt>. See each library's documentation for more details on what
|
29
|
+
# options are available.
|
23
30
|
#
|
24
31
|
#
|
25
32
|
# ==== Examples
|
26
33
|
#
|
27
34
|
# ===== Using Markdown language
|
28
35
|
#
|
29
|
-
# class Post <
|
36
|
+
# class Post < ActiveRecord
|
30
37
|
# acts_as_markup :language => :markdown, :columns => [:body]
|
31
38
|
# end
|
32
39
|
#
|
@@ -37,7 +44,7 @@ module ActiveRecord # :nodoc:
|
|
37
44
|
#
|
38
45
|
# ===== Using variable language
|
39
46
|
#
|
40
|
-
# class Post <
|
47
|
+
# class Post < ActiveRecord
|
41
48
|
# acts_as_markup :language => :variable, :columns => [:body], :language_column => 'language_name'
|
42
49
|
# end
|
43
50
|
#
|
@@ -47,6 +54,21 @@ module ActiveRecord # :nodoc:
|
|
47
54
|
# @post.body.to_html # => "<h2> Markdown Headline</h2>"
|
48
55
|
#
|
49
56
|
#
|
57
|
+
# ===== Using options
|
58
|
+
#
|
59
|
+
# class Post < ActiveRecord
|
60
|
+
# acts_as_markup :language => :markdown, :columns => [:body], :markdown_options => [ :filter_html ]
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
# class Post < ActiveRecord
|
64
|
+
# acts_as_markup :language => :textile, :columns => [:body], :textile_options => [ [ :filter_html ] ]
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
# class Post < ActiveRecord
|
68
|
+
# acts_as_markup :language => :wikitext, :columns => [:body], :wikitext_options => [ { :space_to_underscore => true } ]
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
#
|
50
72
|
def acts_as_markup(options)
|
51
73
|
case options[:language].to_sym
|
52
74
|
when :markdown, :textile, :wikitext, :rdoc
|
@@ -61,70 +83,77 @@ module ActiveRecord # :nodoc:
|
|
61
83
|
raise ActsAsMarkup::UnsupportedMarkupLanguage, "#{options[:langauge]} is not a currently supported markup language."
|
62
84
|
end
|
63
85
|
|
64
|
-
options[:
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
86
|
+
unless options[:language].to_sym == :variable
|
87
|
+
markup_options = options["#{options[:language]}_options".to_sym] || []
|
88
|
+
options[:columns].each do |col|
|
89
|
+
define_method col do
|
90
|
+
if instance_variable_defined?("@#{col}")
|
91
|
+
unless send("#{col}_changed?")
|
92
|
+
return instance_variable_get("@#{col}")
|
72
93
|
end
|
73
|
-
@#{col.to_s} = #{klass}.new(self['#{col.to_s}'].to_s)
|
74
94
|
end
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
case self.#{options[:language_column].to_s}
|
85
|
-
when /markdown/i
|
86
|
-
@#{col.to_s} = #{markup_klasses[:markdown]}.new(self['#{col.to_s}'].to_s)
|
87
|
-
when /textile/i
|
88
|
-
@#{col.to_s} = #{markup_klasses[:textile]}.new(self['#{col.to_s}'].to_s)
|
89
|
-
when /wikitext/i
|
90
|
-
@#{col.to_s} = #{markup_klasses[:wikitext]}.new(self['#{col.to_s}'].to_s)
|
91
|
-
when /rdoc/i
|
92
|
-
@#{col.to_s} = #{markup_klasses[:rdoc]}.new(self['#{col.to_s}'].to_s)
|
93
|
-
else
|
94
|
-
@#{col.to_s} = self['#{col.to_s}']
|
95
|
+
instance_variable_set("@#{col}", klass.new(self[col].to_s, *markup_options))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
else
|
99
|
+
options[:columns].each do |col|
|
100
|
+
define_method col do
|
101
|
+
if instance_variable_defined?("@#{col}")
|
102
|
+
unless send("#{col}_changed?") || send("#{options[:language_column]}_changed?")
|
103
|
+
return instance_variable_get("@#{col}")
|
95
104
|
end
|
96
105
|
end
|
97
|
-
|
106
|
+
instance_variable_set("@#{col}", case send(options[:language_column])
|
107
|
+
when /markdown/i
|
108
|
+
markup_klasses[:markdown].new self[col].to_s, *(options[:markdown_options] || [])
|
109
|
+
when /textile/i
|
110
|
+
markup_klasses[:textile].new self[col].to_s, *(options[:textile_options] || [])
|
111
|
+
when /wikitext/i
|
112
|
+
markup_klasses[:wikitext].new self[col].to_s, *(options[:wikitext_options] || [])
|
113
|
+
when /rdoc/i
|
114
|
+
markup_klasses[:rdoc].new self[col].to_s
|
115
|
+
else
|
116
|
+
self[col]
|
117
|
+
end)
|
118
|
+
end
|
98
119
|
end
|
99
120
|
end
|
100
121
|
end
|
101
122
|
|
102
123
|
# This is a convenience method for
|
103
124
|
# `<tt>acts_as_markup :language => :markdown, :columns => [:body]</tt>`
|
125
|
+
# Additional options can be given at the end, if necessary.
|
104
126
|
#
|
105
127
|
def acts_as_markdown(*columns)
|
106
|
-
|
128
|
+
options = columns.extract_options!
|
129
|
+
acts_as_markup options.merge(:language => :markdown, :columns => columns)
|
107
130
|
end
|
108
131
|
|
109
132
|
# This is a convenience method for
|
110
133
|
# `<tt>acts_as_markup :language => :textile, :columns => [:body]</tt>`
|
134
|
+
# Additional options can be given at the end, if necessary.
|
111
135
|
#
|
112
136
|
def acts_as_textile(*columns)
|
113
|
-
|
137
|
+
options = columns.extract_options!
|
138
|
+
acts_as_markup options.merge(:language => :textile, :columns => columns)
|
114
139
|
end
|
115
140
|
|
116
141
|
# This is a convenience method for
|
117
142
|
# `<tt>acts_as_markup :language => :wikitext, :columns => [:body]</tt>`
|
143
|
+
# Additional options can be given at the end, if necessary.
|
118
144
|
#
|
119
145
|
def acts_as_wikitext(*columns)
|
120
|
-
|
146
|
+
options = columns.extract_options!
|
147
|
+
acts_as_markup options.merge(:language => :wikitext, :columns => columns)
|
121
148
|
end
|
122
149
|
|
123
150
|
# This is a convenience method for
|
124
151
|
# `<tt>acts_as_markup :language => :rdoc, :columns => [:body]</tt>`
|
152
|
+
# Additional options can be given at the end, if necessary.
|
125
153
|
#
|
126
154
|
def acts_as_rdoc(*columns)
|
127
|
-
|
155
|
+
options = columns.extract_options!
|
156
|
+
acts_as_markup options.merge(:language => :rdoc, :columns => columns)
|
128
157
|
end
|
129
158
|
|
130
159
|
|
@@ -134,7 +163,7 @@ module ActiveRecord # :nodoc:
|
|
134
163
|
markdown_library_names = ActsAsMarkup::MARKDOWN_LIBS[ActsAsMarkup.markdown_library]
|
135
164
|
require markdown_library_names[:lib_name]
|
136
165
|
require_extensions(markdown_library_names[:lib_name])
|
137
|
-
return markdown_library_names[:class_name]
|
166
|
+
return markdown_library_names[:class_name].constantize
|
138
167
|
else
|
139
168
|
raise ActsAsMarkup::UnsportedMarkdownLibrary, "#{ActsAsMarkup.markdown_library} is not currently supported."
|
140
169
|
end
|
@@ -142,7 +171,7 @@ module ActiveRecord # :nodoc:
|
|
142
171
|
|
143
172
|
def require_extensions(library)# :nodoc:
|
144
173
|
if ActsAsMarkup::LIBRARY_EXTENSIONS.include? library.to_s
|
145
|
-
require "acts_as_markup/exts/#{library
|
174
|
+
require "#{ActsAsMarkup::LIBPATH}/acts_as_markup/exts/#{library}"
|
146
175
|
end
|
147
176
|
end
|
148
177
|
|
@@ -152,18 +181,18 @@ module ActiveRecord # :nodoc:
|
|
152
181
|
return get_markdown_class
|
153
182
|
when :textile
|
154
183
|
require 'redcloth'
|
155
|
-
return
|
184
|
+
return RedCloth
|
156
185
|
when :wikitext
|
157
186
|
require 'wikitext'
|
158
187
|
require_extensions 'wikitext'
|
159
|
-
return
|
188
|
+
return WikitextString
|
160
189
|
when :rdoc
|
161
190
|
require 'rdoc/markup/simple_markup'
|
162
191
|
require 'rdoc/markup/simple_markup/to_html'
|
163
192
|
require_extensions 'rdoc'
|
164
|
-
return
|
193
|
+
return RDocText
|
165
194
|
else
|
166
|
-
return
|
195
|
+
return String
|
167
196
|
end
|
168
197
|
end
|
169
198
|
|
data/lib/acts_as_markup.rb
CHANGED
@@ -8,10 +8,10 @@ class WikitextString < String
|
|
8
8
|
attr_reader :text
|
9
9
|
attr_reader :html
|
10
10
|
|
11
|
-
def initialize(str)
|
11
|
+
def initialize(str, *options)
|
12
12
|
super(str)
|
13
13
|
@text = str.to_s
|
14
|
-
@html = Wikitext::Parser.new.parse(@text)
|
14
|
+
@html = Wikitext::Parser.new(*options).parse(@text)
|
15
15
|
end
|
16
16
|
|
17
17
|
def to_html
|
data/tasks/gem.rake
CHANGED
@@ -1,6 +1,92 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
|
-
require '
|
2
|
+
require 'find'
|
3
|
+
require 'rake/packagetask'
|
4
|
+
require 'rubygems/user_interaction'
|
5
|
+
require 'rubygems/builder'
|
6
|
+
|
7
|
+
module Bones
|
8
|
+
class GemPackageTask < Rake::PackageTask
|
9
|
+
# Ruby GEM spec containing the metadata for this package. The
|
10
|
+
# name, version and package_files are automatically determined
|
11
|
+
# from the GEM spec and don't need to be explicitly provided.
|
12
|
+
#
|
13
|
+
attr_accessor :gem_spec
|
14
|
+
|
15
|
+
# Tasks from the Bones gem directory
|
16
|
+
attr_reader :bones_files
|
17
|
+
|
18
|
+
# Create a GEM Package task library. Automatically define the gem
|
19
|
+
# if a block is given. If no block is supplied, then +define+
|
20
|
+
# needs to be called to define the task.
|
21
|
+
#
|
22
|
+
def initialize(gem_spec)
|
23
|
+
init(gem_spec)
|
24
|
+
yield self if block_given?
|
25
|
+
define if block_given?
|
26
|
+
end
|
27
|
+
|
28
|
+
# Initialization tasks without the "yield self" or define
|
29
|
+
# operations.
|
30
|
+
#
|
31
|
+
def init(gem)
|
32
|
+
super(gem.name, gem.version)
|
33
|
+
@gem_spec = gem
|
34
|
+
@package_files += gem_spec.files if gem_spec.files
|
35
|
+
@bones_files = []
|
36
|
+
|
37
|
+
local_setup = File.join(Dir.pwd, %w[tasks setup.rb])
|
38
|
+
if !test(?e, local_setup)
|
39
|
+
Dir.glob(::Bones.path(%w[lib bones tasks *])).each {|fn| bones_files << fn}
|
40
|
+
gem_spec.files = (gem_spec.files +
|
41
|
+
bones_files.map {|fn| File.join('tasks', File.basename(fn))}).sort
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Create the Rake tasks and actions specified by this
|
46
|
+
# GemPackageTask. (+define+ is automatically called if a block is
|
47
|
+
# given to +new+).
|
48
|
+
#
|
49
|
+
def define
|
50
|
+
super
|
51
|
+
task :prereqs
|
52
|
+
task :package => ['gem:prereqs', "#{package_dir_path}/#{gem_file}"]
|
53
|
+
file "#{package_dir_path}/#{gem_file}" => [package_dir_path] + package_files + bones_files do
|
54
|
+
when_writing("Creating GEM") {
|
55
|
+
chdir(package_dir_path) do
|
56
|
+
Gem::Builder.new(gem_spec).build
|
57
|
+
verbose(true) {
|
58
|
+
mv gem_file, "../#{gem_file}"
|
59
|
+
}
|
60
|
+
end
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
file package_dir_path => bones_files do
|
65
|
+
mkdir_p package_dir rescue nil
|
66
|
+
bones_files.each do |fn|
|
67
|
+
base_fn = File.join('tasks', File.basename(fn))
|
68
|
+
f = File.join(package_dir_path, base_fn)
|
69
|
+
fdir = File.dirname(f)
|
70
|
+
mkdir_p(fdir) if !File.exist?(fdir)
|
71
|
+
if File.directory?(fn)
|
72
|
+
mkdir_p(f)
|
73
|
+
else
|
74
|
+
raise "file name conflict for '#{base_fn}' (conflicts with '#{fn}')" if test(?e, f)
|
75
|
+
safe_ln(fn, f)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def gem_file
|
82
|
+
if @gem_spec.platform == Gem::Platform::RUBY
|
83
|
+
"#{package_name}.gem"
|
84
|
+
else
|
85
|
+
"#{package_name}-#{@gem_spec.platform}.gem"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end # class GemPackageTask
|
89
|
+
end # module Bones
|
4
90
|
|
5
91
|
namespace :gem do
|
6
92
|
|
@@ -19,6 +105,10 @@ namespace :gem do
|
|
19
105
|
s.add_dependency(*dep)
|
20
106
|
end
|
21
107
|
|
108
|
+
PROJ.gem.development_dependencies.each do |dep|
|
109
|
+
s.add_development_dependency(*dep)
|
110
|
+
end
|
111
|
+
|
22
112
|
s.files = PROJ.gem.files
|
23
113
|
s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
|
24
114
|
s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
|
@@ -57,37 +147,14 @@ namespace :gem do
|
|
57
147
|
end
|
58
148
|
end # Gem::Specification.new
|
59
149
|
|
60
|
-
|
61
|
-
task :prereqs
|
62
|
-
|
63
|
-
desc 'Show information about the gem'
|
64
|
-
task :debug => 'gem:prereqs' do
|
65
|
-
puts PROJ.gem._spec.to_ruby
|
66
|
-
end
|
67
|
-
|
68
|
-
pkg = Rake::PackageTask.new(PROJ.name, PROJ.version) do |pkg|
|
150
|
+
Bones::GemPackageTask.new(PROJ.gem._spec) do |pkg|
|
69
151
|
pkg.need_tar = PROJ.gem.need_tar
|
70
152
|
pkg.need_zip = PROJ.gem.need_zip
|
71
|
-
pkg.package_files += PROJ.gem._spec.files
|
72
153
|
end
|
73
|
-
Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
|
74
|
-
|
75
|
-
gem_file = if PROJ.gem._spec.platform == Gem::Platform::RUBY
|
76
|
-
"#{pkg.package_name}.gem"
|
77
|
-
else
|
78
|
-
"#{pkg.package_name}-#{PROJ.gem._spec.platform}.gem"
|
79
|
-
end
|
80
154
|
|
81
|
-
desc
|
82
|
-
task :
|
83
|
-
|
84
|
-
file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.gem._spec.files do
|
85
|
-
when_writing("Creating GEM") {
|
86
|
-
Gem::Builder.new(PROJ.gem._spec).build
|
87
|
-
verbose(true) {
|
88
|
-
mv gem_file, "#{pkg.package_dir}/#{gem_file}"
|
89
|
-
}
|
90
|
-
}
|
155
|
+
desc 'Show information about the gem'
|
156
|
+
task :debug => 'gem:prereqs' do
|
157
|
+
puts PROJ.gem._spec.to_ruby
|
91
158
|
end
|
92
159
|
|
93
160
|
desc 'Install the gem'
|
@@ -113,14 +180,13 @@ namespace :gem do
|
|
113
180
|
task :cleanup do
|
114
181
|
sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
|
115
182
|
end
|
116
|
-
|
117
183
|
end # namespace :gem
|
118
184
|
|
185
|
+
|
119
186
|
desc 'Alias to gem:package'
|
120
187
|
task :gem => 'gem:package'
|
121
188
|
|
122
189
|
task :clobber => 'gem:clobber_package'
|
123
|
-
|
124
|
-
remove_desc_for_task %w(gem:clobber_package)
|
190
|
+
remove_desc_for_task 'gem:clobber_package'
|
125
191
|
|
126
192
|
# EOF
|
data/tasks/manifest.rake
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
require 'find'
|
4
3
|
|
@@ -15,9 +14,9 @@ namespace :manifest do
|
|
15
14
|
lines.map! do |line|
|
16
15
|
case line
|
17
16
|
when %r/^(-{3}|\+{3})/; nil
|
18
|
-
when %r/^@/;
|
19
|
-
when %r/^\+/;
|
20
|
-
when %r/^\-/;
|
17
|
+
when %r/^@/; ANSICode.blue line
|
18
|
+
when %r/^\+/; ANSICode.green line
|
19
|
+
when %r/^\-/; ANSICode.red line
|
21
20
|
else line end
|
22
21
|
end
|
23
22
|
end
|
data/tasks/post_load.rake
CHANGED
@@ -1,16 +1,15 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
# This file does not define any rake tasks. It is used to load some project
|
4
3
|
# settings if they are not defined by the user.
|
5
4
|
|
6
5
|
PROJ.rdoc.exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
|
7
|
-
PROJ.exclude << ["^#{Regexp.escape(PROJ.
|
8
|
-
"^#{Regexp.escape(PROJ.rdoc.dir)}/",
|
6
|
+
PROJ.exclude << ["^#{Regexp.escape(PROJ.rdoc.dir)}/",
|
9
7
|
"^#{Regexp.escape(PROJ.rcov.dir)}/"]
|
10
8
|
|
11
9
|
flatten_arrays = lambda do |this,os|
|
12
10
|
os.instance_variable_get(:@table).each do |key,val|
|
13
|
-
next if key == :dependencies
|
11
|
+
next if key == :dependencies \
|
12
|
+
or key == :development_dependencies
|
14
13
|
case val
|
15
14
|
when Array; val.flatten!
|
16
15
|
when OpenStruct; this.call(this,val)
|
data/tasks/rdoc.rake
CHANGED
@@ -7,7 +7,7 @@ namespace :doc do
|
|
7
7
|
desc 'Generate RDoc documentation'
|
8
8
|
Rake::RDocTask.new do |rd|
|
9
9
|
rdoc = PROJ.rdoc
|
10
|
-
rd.main = rdoc.main
|
10
|
+
rd.main = rdoc.main || PROJ.readme_file
|
11
11
|
rd.rdoc_dir = rdoc.dir
|
12
12
|
|
13
13
|
incl = Regexp.new(rdoc.include.join('|'))
|
@@ -22,9 +22,6 @@ namespace :doc do
|
|
22
22
|
|
23
23
|
title = "#{PROJ.name}-#{PROJ.version} Documentation"
|
24
24
|
|
25
|
-
rf_name = PROJ.rubyforge.name
|
26
|
-
title = "#{rf_name}'s " + title if rf_name.valid? and rf_name != title
|
27
|
-
|
28
25
|
rd.options << "-t #{title}"
|
29
26
|
rd.options.concat(rdoc.opts)
|
30
27
|
end
|
data/tasks/rubyforge.rake
CHANGED
@@ -6,7 +6,7 @@ require 'rake/contrib/sshpublisher'
|
|
6
6
|
|
7
7
|
namespace :gem do
|
8
8
|
desc 'Package and upload to RubyForge'
|
9
|
-
task :release => [:clobber, 'gem
|
9
|
+
task :release => [:clobber, 'gem'] do |t|
|
10
10
|
v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
|
11
11
|
abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
|
12
12
|
pkg = "pkg/#{PROJ.gem._spec.full_name}"
|
@@ -26,9 +26,7 @@ namespace :gem do
|
|
26
26
|
c['release_changes'] = PROJ.changes if PROJ.changes
|
27
27
|
c['preformatted'] = true
|
28
28
|
|
29
|
-
files =
|
30
|
-
(PROJ.gem.need_zip ? "#{pkg}.zip" : nil),
|
31
|
-
"#{pkg}.gem"].compact
|
29
|
+
files = Dir.glob("#{pkg}*.*")
|
32
30
|
|
33
31
|
puts "Releasing #{PROJ.name} v. #{PROJ.version}"
|
34
32
|
rf.add_release PROJ.rubyforge.name, PROJ.name, PROJ.version, *files
|
data/tasks/setup.rb
CHANGED
@@ -18,7 +18,7 @@ PROJ = OpenStruct.new(
|
|
18
18
|
:email => nil,
|
19
19
|
:url => "\000",
|
20
20
|
:version => ENV['VERSION'] || '0.0.0',
|
21
|
-
:exclude => %w(tmp$ bak$ ~$ CVS \.svn/ \.git ^pkg/),
|
21
|
+
:exclude => %w(tmp$ bak$ ~$ CVS \.svn/ \.git/ ^pkg/),
|
22
22
|
:release_name => ENV['RELEASE'],
|
23
23
|
|
24
24
|
# System Defaults
|
@@ -28,26 +28,10 @@ PROJ = OpenStruct.new(
|
|
28
28
|
:manifest_file => 'Manifest.txt',
|
29
29
|
:readme_file => 'README.rdoc',
|
30
30
|
|
31
|
-
# Announce
|
32
|
-
:ann => OpenStruct.new(
|
33
|
-
:file => 'announcement.txt',
|
34
|
-
:text => nil,
|
35
|
-
:paragraphs => [],
|
36
|
-
:email => {
|
37
|
-
:from => nil,
|
38
|
-
:to => %w(ruby-talk@ruby-lang.org),
|
39
|
-
:server => 'localhost',
|
40
|
-
:port => 25,
|
41
|
-
:domain => ENV['HOSTNAME'],
|
42
|
-
:acct => nil,
|
43
|
-
:passwd => nil,
|
44
|
-
:authtype => :plain
|
45
|
-
}
|
46
|
-
),
|
47
|
-
|
48
31
|
# Gem Packaging
|
49
32
|
:gem => OpenStruct.new(
|
50
33
|
:dependencies => [],
|
34
|
+
:development_dependencies => [],
|
51
35
|
:executables => nil,
|
52
36
|
:extensions => FileList['ext/**/extconf.rb'],
|
53
37
|
:files => nil,
|
@@ -66,9 +50,7 @@ PROJ = OpenStruct.new(
|
|
66
50
|
# Rcov
|
67
51
|
:rcov => OpenStruct.new(
|
68
52
|
:dir => 'coverage',
|
69
|
-
:opts => %w[--sort coverage -T]
|
70
|
-
:threshold => 90.0,
|
71
|
-
:threshold_exact => false
|
53
|
+
:opts => %w[--sort coverage -T --no-html]
|
72
54
|
),
|
73
55
|
|
74
56
|
# Rdoc
|
@@ -86,32 +68,19 @@ PROJ = OpenStruct.new(
|
|
86
68
|
:name => "\000"
|
87
69
|
),
|
88
70
|
|
89
|
-
# Rspec
|
90
|
-
:spec => OpenStruct.new(
|
91
|
-
:files => FileList['spec/**/*_spec.rb'],
|
92
|
-
:opts => []
|
93
|
-
),
|
94
|
-
|
95
|
-
# Subversion Repository
|
96
|
-
:svn => OpenStruct.new(
|
97
|
-
:root => nil,
|
98
|
-
:path => '',
|
99
|
-
:trunk => 'trunk',
|
100
|
-
:tags => 'tags',
|
101
|
-
:branches => 'branches'
|
102
|
-
),
|
103
|
-
|
104
71
|
# Test::Unit
|
105
72
|
:test => OpenStruct.new(
|
106
|
-
:files => FileList['test
|
73
|
+
:files => FileList['test/**/*_test.rb'],
|
107
74
|
:file => 'test/all.rb',
|
108
75
|
:opts => []
|
109
76
|
)
|
110
77
|
)
|
111
78
|
|
112
79
|
# Load the other rake files in the tasks folder
|
113
|
-
|
114
|
-
|
80
|
+
tasks_dir = File.expand_path(File.dirname(__FILE__))
|
81
|
+
post_load_fn = File.join(tasks_dir, 'post_load.rake')
|
82
|
+
rakefiles = Dir.glob(File.join(tasks_dir, '*.rake')).sort
|
83
|
+
rakefiles.unshift(rakefiles.delete(post_load_fn)).compact!
|
115
84
|
import(*rakefiles)
|
116
85
|
|
117
86
|
# Setup the project libraries
|
@@ -32,6 +32,11 @@ class ActsAsMarkdownTest < ActsAsMarkupTestCase
|
|
32
32
|
should "return formatted html for a `to_html` method call on the column value" do
|
33
33
|
assert_match(/<h2(\s\w+\=['"]\w*['"])*\s*>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
|
34
34
|
end
|
35
|
+
|
36
|
+
should "not return escaped html" do
|
37
|
+
@post.body = "## Markdown <i>Test</i> Text"
|
38
|
+
assert_match(/<i>Test<\/i>/, @post.body.to_html)
|
39
|
+
end
|
35
40
|
|
36
41
|
context "changing value of markdown field should return new markdown object" do
|
37
42
|
setup do
|
@@ -62,6 +67,20 @@ class ActsAsMarkdownTest < ActsAsMarkupTestCase
|
|
62
67
|
Post.delete_all
|
63
68
|
end
|
64
69
|
end
|
70
|
+
|
71
|
+
context 'using RDiscount with options' do
|
72
|
+
setup do
|
73
|
+
class ::Post
|
74
|
+
acts_as_markdown :body, :markdown_options => [ :filter_html ]
|
75
|
+
end
|
76
|
+
@post = Post.new(:title => 'Blah')
|
77
|
+
end
|
78
|
+
|
79
|
+
should "return escaped html because of :filter_html" do
|
80
|
+
@post.body = "## Markdown <i>Test</i> Text"
|
81
|
+
assert_match(/<i>Test<\/i>/, @post.body.to_html)
|
82
|
+
end
|
83
|
+
end
|
65
84
|
|
66
85
|
context 'using Ruby PEG Markdown' do
|
67
86
|
setup do
|
@@ -89,6 +108,11 @@ class ActsAsMarkdownTest < ActsAsMarkupTestCase
|
|
89
108
|
should "return formated html for a `to_html` method call on the column value" do
|
90
109
|
assert_match(/<h2(\s\w+\=['"]\w*['"])*\s*>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
|
91
110
|
end
|
111
|
+
|
112
|
+
should "not return escaped html" do
|
113
|
+
@post.body = "## Markdown <i>Test</i> Text"
|
114
|
+
assert_match(/<i>Test<\/i>/, @post.body.to_html)
|
115
|
+
end
|
92
116
|
|
93
117
|
context "changing value of markdown field should return new markdown object" do
|
94
118
|
setup do
|
@@ -120,6 +144,20 @@ class ActsAsMarkdownTest < ActsAsMarkupTestCase
|
|
120
144
|
end
|
121
145
|
end
|
122
146
|
|
147
|
+
context 'using Ruby PEG Markdown with options' do
|
148
|
+
setup do
|
149
|
+
class ::Post
|
150
|
+
acts_as_markdown :body, :markdown_options => [ :filter_html ]
|
151
|
+
end
|
152
|
+
@post = Post.new(:title => 'Blah')
|
153
|
+
end
|
154
|
+
|
155
|
+
should "return no html because of :filter_html" do
|
156
|
+
@post.body = "## Markdown <i>Test</i> Text"
|
157
|
+
assert_match(/Markdown Test Text/, @post.body.to_html)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
123
161
|
context 'using BlueCloth' do
|
124
162
|
setup do
|
125
163
|
ActsAsMarkup.markdown_library = :bluecloth
|
@@ -146,6 +184,11 @@ class ActsAsMarkdownTest < ActsAsMarkupTestCase
|
|
146
184
|
should "return formated html for a `to_html` method call on the column value" do
|
147
185
|
assert_match(/<h2(\s\w+\=['"]\w*['"])*\s*>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
|
148
186
|
end
|
187
|
+
|
188
|
+
should "not return escaped html" do
|
189
|
+
@post.body = "## Markdown <i>Test</i> Text"
|
190
|
+
assert_match(/<i>Test<\/i>/, @post.body.to_html)
|
191
|
+
end
|
149
192
|
|
150
193
|
context "changing value of markdown field should return new markdown object" do
|
151
194
|
setup do
|
@@ -177,6 +220,20 @@ class ActsAsMarkdownTest < ActsAsMarkupTestCase
|
|
177
220
|
end
|
178
221
|
end
|
179
222
|
|
223
|
+
context 'using BlueCloth with options' do
|
224
|
+
setup do
|
225
|
+
class ::Post
|
226
|
+
acts_as_markdown :body, :markdown_options => [ :filter_html ]
|
227
|
+
end
|
228
|
+
@post = Post.new(:title => 'Blah')
|
229
|
+
end
|
230
|
+
|
231
|
+
should "return escaped html because of :filter_html" do
|
232
|
+
@post.body = "## Markdown <i>Test</i> Text"
|
233
|
+
assert_match(/<i>Test<\/i>/, @post.body.to_html)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
180
237
|
context 'using Maruku' do
|
181
238
|
setup do
|
182
239
|
ActsAsMarkup.markdown_library = :maruku
|
@@ -25,6 +25,11 @@ class ActsAsTextileTest < ActsAsMarkupTestCase
|
|
25
25
|
should "return formated html for a `to_html` method call on the column value" do
|
26
26
|
assert_match(/<h2>Textile Test Text<\/h2>/, @post.body.to_html)
|
27
27
|
end
|
28
|
+
|
29
|
+
should "not return escaped html" do
|
30
|
+
@post.body = "h2. Textile <i>Test</i> Text"
|
31
|
+
assert_match(/<i>Test<\/i>/, @post.body.to_html)
|
32
|
+
end
|
28
33
|
|
29
34
|
context "changing value of textile field should return new textile object" do
|
30
35
|
setup do
|
@@ -55,4 +60,18 @@ class ActsAsTextileTest < ActsAsMarkupTestCase
|
|
55
60
|
Post.delete_all
|
56
61
|
end
|
57
62
|
end
|
63
|
+
|
64
|
+
context 'acts_as_textile with options' do
|
65
|
+
setup do
|
66
|
+
class ::Post
|
67
|
+
acts_as_textile :body, :textile_options => [ [ :filter_html ] ]
|
68
|
+
end
|
69
|
+
@post = Post.new(:title => 'Blah')
|
70
|
+
end
|
71
|
+
|
72
|
+
should "return escaped html because of :filter_html" do
|
73
|
+
@post.body = "h2. Textile <i>Test</i> Text"
|
74
|
+
assert_match(/<i>Test<\/i>/, @post.body.to_html)
|
75
|
+
end
|
76
|
+
end
|
58
77
|
end
|
@@ -25,6 +25,11 @@ class ActsAsWikitextTest < ActsAsMarkupTestCase
|
|
25
25
|
should "return formated html for a `to_html` method call on the column value" do
|
26
26
|
assert_match(/<h2>Wikitext Test Text<\/h2>/, @post.body.to_html)
|
27
27
|
end
|
28
|
+
|
29
|
+
should "not underscore spaces in URLs" do
|
30
|
+
@post.body = "[[foo bar]]"
|
31
|
+
assert_match(/<a href="\/wiki\/foo%20bar">foo bar<\/a>/, @post.body.to_html)
|
32
|
+
end
|
28
33
|
|
29
34
|
context "changing value of wikitext field should return new wikitext object" do
|
30
35
|
setup do
|
@@ -55,4 +60,18 @@ class ActsAsWikitextTest < ActsAsMarkupTestCase
|
|
55
60
|
Post.delete_all
|
56
61
|
end
|
57
62
|
end
|
63
|
+
|
64
|
+
context 'acts_as_wikitext with options' do
|
65
|
+
setup do
|
66
|
+
class ::Post
|
67
|
+
acts_as_wikitext :body, :wikitext_options => [ { :space_to_underscore => true } ]
|
68
|
+
end
|
69
|
+
@post = Post.new(:title => 'Blah')
|
70
|
+
end
|
71
|
+
|
72
|
+
should "underscore spaces in URLs because of :space_to_underscore" do
|
73
|
+
@post.body = "[[foo bar]]"
|
74
|
+
assert_match(/<a href="\/wiki\/foo_bar">foo bar<\/a>/, @post.body.to_html)
|
75
|
+
end
|
76
|
+
end
|
58
77
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_markup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Landau
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-11-19 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 2.
|
23
|
+
version: 2.2.1
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activerecord
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.
|
33
|
+
version: 2.2.1
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: rdiscount
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.2.
|
43
|
+
version: 1.2.11
|
44
44
|
version:
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
46
|
name: RedCloth
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 4.0
|
53
|
+
version: 4.1.0
|
54
54
|
version:
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: wikitext
|
@@ -126,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
126
|
requirements: []
|
127
127
|
|
128
128
|
rubyforge_project: viget
|
129
|
-
rubygems_version: 1.
|
129
|
+
rubygems_version: 1.3.1
|
130
130
|
signing_key:
|
131
131
|
specification_version: 2
|
132
132
|
summary: Represent ActiveRecord Markdown, Textile, Wiki text, RDoc columns as Markdown, Textile Wikitext, RDoc objects using various external libraries to convert to HTML
|