acts_as_markup 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,12 @@
1
- == 0.1.0 / 2008-08-04
1
+ == 0.3.0 / 2008-08-08
2
+
3
+ * Add support for wikitext.
4
+
5
+ == 0.2.0 / 2008-08-07
6
+
7
+ * Add support for a variable markup language option.
8
+
9
+ == 0.1.0 / 2008-08-05
2
10
 
3
11
  * Initial Release
4
12
  * Support for Markdown and Textile markup languages.
File without changes
data/Manifest.txt CHANGED
@@ -1,5 +1,5 @@
1
- History.txt
2
- LICENSE.txt
1
+ CHANGELOG
2
+ LICENSE
3
3
  Manifest.txt
4
4
  README.rdoc
5
5
  Rakefile
@@ -8,6 +8,7 @@ lib/acts/as_markup.rb
8
8
  lib/acts_as_markup.rb
9
9
  lib/acts_as_markup/exts/rdiscount.rb
10
10
  lib/acts_as_markup/exts/string.rb
11
+ lib/acts_as_markup/exts/wikitext.rb
11
12
  tasks/bones.rake
12
13
  tasks/gem.rake
13
14
  tasks/git.rake
@@ -17,5 +18,8 @@ tasks/rdoc.rake
17
18
  tasks/rubyforge.rake
18
19
  tasks/setup.rb
19
20
  tasks/test.rake
21
+ test/acts_as_markdown_test.rb
20
22
  test/acts_as_markup_test.rb
23
+ test/acts_as_textile_test.rb
24
+ test/acts_as_wikitext_test.rb
21
25
  test/test_helper.rb
data/README.rdoc CHANGED
@@ -9,13 +9,13 @@ RDoc: http://viget.rubyforge.org/acts_as_markup
9
9
 
10
10
  == DESCRIPTION:
11
11
 
12
- Allows you to specify columns of an ActiveRecord model that contain Markdown or
13
- Textile text. You may then use +to_s+ to get the original markdown or textile
12
+ Allows you to specify columns of an ActiveRecord model that contain Markdown,
13
+ Textile, and Wiki text. You may then use +to_s+ to get the original markup
14
14
  text or +to_html+ to get the formated HTML.
15
15
 
16
16
  Additionally you can have a model that contains a column that has a column with
17
17
  markup text, and another that defines what language to process it as. If the field
18
- is listed as "markdown" or "textile" (case insensitive) it will treat it as such,
18
+ is listed as "markdown" "textile", or "wikitext" (case insensitive) it will treat it as such,
19
19
  any other value for markup language will have the value pass through as a normal string.
20
20
 
21
21
  This AR extension can use 3 different types of Markdown processing backends:
@@ -46,8 +46,19 @@ By default RDiscount will be used.
46
46
  end
47
47
 
48
48
  @post = Post.find(:first)
49
- @post.body.to_s #=> "h2. Markdown Headline"
50
- @post.body.to_html #=> "<h2>Markdown Headline</h2>"
49
+ @post.body.to_s #=> "h2. Textile Headline"
50
+ @post.body.to_html #=> "<h2>Textile Headline</h2>"
51
+
52
+
53
+ ==== Using +acts_as_wikitext+:
54
+
55
+ class Post < ActiveRecrod
56
+ acts_as_wikitext :body
57
+ end
58
+
59
+ @post = Post.find(:first)
60
+ @post.body.to_s #=> "== Wikitext Headline =="
61
+ @post.body.to_html #=> "<h2>Wikitext Headline</h2>"
51
62
 
52
63
 
53
64
  ==== Using +acts_as_markup+:
@@ -75,7 +86,9 @@ By default RDiscount will be used.
75
86
 
76
87
  == REQUIREMENTS:
77
88
 
78
- You will need the RedCloth library for processing the Textile text.
89
+ You will need the RedCloth[http://whytheluckystiff.net/ruby/redcloth/] library
90
+ for processing the Textile text, and the Wikitext[http://wikitext.rubyforge.org/]
91
+ library for processing wikitext.
79
92
 
80
93
  You will also need to install some type of Markdown processor.
81
94
  The three options currently supported are:
data/Rakefile CHANGED
@@ -13,13 +13,13 @@ PROJ.name = 'acts_as_markup'
13
13
  PROJ.authors = 'Brian Landau'
14
14
  PROJ.email = 'brian.landau@viget.com'
15
15
  PROJ.url = 'http://viget.rubyforge.com/acts_as_markup'
16
- PROJ.description = "Represent ActiveRecord Markdown or Textile text columns as Markdown or Textile objects using various external libraries to convert to HTML."
16
+ PROJ.description = "Represent ActiveRecord Markdown, Textile, or Wiki text columns as Markdown, Textile or Wikitext objects using various external libraries to convert to HTML."
17
17
  PROJ.rubyforge.name = 'viget'
18
18
  PROJ.version = ActsAsMarkup::VERSION
19
- PROJ.rdoc.include = %w(^lib/ LICENSE\.txt README\.rdoc)
19
+ PROJ.rdoc.include = %w(^lib/ LICENSE CHANGELOG README\.rdoc)
20
20
  PROJ.rdoc.remote_dir = 'acts_as_markup'
21
21
  PROJ.test.files = FileList['test/**/*_test.rb']
22
22
 
23
- %W(activesupport activerecord rdiscount RedCloth).each do |gem|
23
+ %W(activesupport activerecord rdiscount RedCloth wikitext).each do |gem|
24
24
  depend_on gem
25
25
  end
@@ -1,22 +1,22 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{acts_as_markup}
3
- s.version = "0.2.0"
3
+ s.version = "0.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-08-07}
8
- s.description = %q{Represent ActiveRecord Markdown or Textile text columns as Markdown or Textile objects using various external libraries to convert to HTML.}
7
+ s.date = %q{2008-08-08}
8
+ s.description = %q{Represent ActiveRecord Markdown, Textile, or Wiki text columns as Markdown, Textile or Wikitext objects using various external libraries to convert to HTML.}
9
9
  s.email = %q{brian.landau@viget.com}
10
- s.extra_rdoc_files = ["LICENSE.txt", "README.rdoc"]
11
- s.files = ["History.txt", "LICENSE.txt", "Manifest.txt", "README.rdoc", "Rakefile", "acts_as_markup.gemspec", "lib/acts/as_markup.rb", "lib/acts_as_markup.rb", "lib/acts_as_markup/exts/rdiscount.rb", "lib/acts_as_markup/exts/string.rb", "tasks/bones.rake", "tasks/gem.rake", "tasks/git.rake", "tasks/manifest.rake", "tasks/post_load.rake", "tasks/rdoc.rake", "tasks/rubyforge.rake", "tasks/setup.rb", "tasks/test.rake", "test/acts_as_markup_test.rb", "test/test_helper.rb"]
10
+ s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.rdoc"]
11
+ s.files = ["CHANGELOG", "LICENSE", "Manifest.txt", "README.rdoc", "Rakefile", "acts_as_markup.gemspec", "lib/acts/as_markup.rb", "lib/acts_as_markup.rb", "lib/acts_as_markup/exts/rdiscount.rb", "lib/acts_as_markup/exts/string.rb", "lib/acts_as_markup/exts/wikitext.rb", "tasks/bones.rake", "tasks/gem.rake", "tasks/git.rake", "tasks/manifest.rake", "tasks/post_load.rake", "tasks/rdoc.rake", "tasks/rubyforge.rake", "tasks/setup.rb", "tasks/test.rake", "test/acts_as_markdown_test.rb", "test/acts_as_markup_test.rb", "test/acts_as_textile_test.rb", "test/acts_as_wikitext_test.rb", "test/test_helper.rb"]
12
12
  s.has_rdoc = true
13
13
  s.homepage = %q{http://viget.rubyforge.com/acts_as_markup}
14
14
  s.rdoc_options = ["--main", "README.rdoc"]
15
15
  s.require_paths = ["lib"]
16
16
  s.rubyforge_project = %q{viget}
17
17
  s.rubygems_version = %q{1.2.0}
18
- s.summary = %q{Represent ActiveRecord Markdown or Textile text columns as Markdown or Textile objects using various external libraries to convert to HTML}
19
- s.test_files = ["test/acts_as_markup_test.rb"]
18
+ s.summary = %q{Represent ActiveRecord Markdown, Textile, or Wiki text columns as Markdown, Textile or Wikitext objects using various external libraries to convert to HTML}
19
+ s.test_files = ["test/acts_as_markdown_test.rb", "test/acts_as_markup_test.rb", "test/acts_as_textile_test.rb", "test/acts_as_wikitext_test.rb"]
20
20
 
21
21
  if s.respond_to? :specification_version then
22
22
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
@@ -27,16 +27,19 @@ Gem::Specification.new do |s|
27
27
  s.add_runtime_dependency(%q<activerecord>, [">= 2.1.0"])
28
28
  s.add_runtime_dependency(%q<rdiscount>, [">= 1.2.7"])
29
29
  s.add_runtime_dependency(%q<RedCloth>, [">= 4.0.1"])
30
+ s.add_runtime_dependency(%q<wikitext>, [">= 1.1.1"])
30
31
  else
31
32
  s.add_dependency(%q<activesupport>, [">= 2.1.0"])
32
33
  s.add_dependency(%q<activerecord>, [">= 2.1.0"])
33
34
  s.add_dependency(%q<rdiscount>, [">= 1.2.7"])
34
35
  s.add_dependency(%q<RedCloth>, [">= 4.0.1"])
36
+ s.add_dependency(%q<wikitext>, [">= 1.1.1"])
35
37
  end
36
38
  else
37
39
  s.add_dependency(%q<activesupport>, [">= 2.1.0"])
38
40
  s.add_dependency(%q<activerecord>, [">= 2.1.0"])
39
41
  s.add_dependency(%q<rdiscount>, [">= 1.2.7"])
40
42
  s.add_dependency(%q<RedCloth>, [">= 4.0.1"])
43
+ s.add_dependency(%q<wikitext>, [">= 1.1.1"])
41
44
  end
42
45
  end
@@ -11,15 +11,15 @@ module ActiveRecord # :nodoc:
11
11
 
12
12
  ##
13
13
  # This allows you to specify columns you want to define as containing
14
- # Markdown or Textile content.
14
+ # Markdown, Textile or Wikitext content.
15
15
  # Then you can simply call <tt>.to_html</tt> method on the attribute.
16
16
  #
17
17
  # You can also specify the language as <tt>:variable</tt> you will then
18
18
  # need to add an additional option of <tt>:language_column</tt>. When
19
- # a value is accessed it will create the correct object (Markdown or Textile)
20
- # based on the value of the language column. If any value besides markdown or
21
- # textile is supplied for the markup language the text will pass through
22
- # as a string.
19
+ # a value is accessed it will create the correct object (Markdown, Textile,
20
+ # or Wikitext) based on the value of the language column. If any value
21
+ # besides markdown, textile, or wikitext is supplied for the markup language
22
+ # the text will pass through as a string.
23
23
  #
24
24
  #
25
25
  # ==== Examples
@@ -50,26 +50,21 @@ module ActiveRecord # :nodoc:
50
50
  def acts_as_markup(options)
51
51
  case options[:language].to_sym
52
52
  when :markdown
53
- if ActsAsMarkup::MARKDOWN_LIBS.keys.include? ActsAsMarkup.markdown_library
54
- markdown_library_names = ActsAsMarkup::MARKDOWN_LIBS[ActsAsMarkup.markdown_library]
55
- require markdown_library_names[:lib_name]
56
- klass = markdown_library_names[:class_name]
57
- else
58
- raise ActsAsMarkup::UnsportedMarkdownLibrary, "#{ActsAsMarkup.markdown_library} is not currently supported."
59
- end
53
+ klass = get_markdown_class
60
54
  when :textile
61
55
  require 'redcloth'
62
56
  klass = 'RedCloth'
57
+ when :wikitext
58
+ require 'wikitext'
59
+ require_extensions 'wikitext'
60
+ klass = 'WikitextString'
63
61
  when :variable
64
- if ActsAsMarkup::MARKDOWN_LIBS.keys.include? ActsAsMarkup.markdown_library
65
- markdown_library_names = ActsAsMarkup::MARKDOWN_LIBS[ActsAsMarkup.markdown_library]
66
- require markdown_library_names[:lib_name]
67
- markdown_klass = markdown_library_names[:class_name]
68
- else
69
- raise ActsAsMarkup::UnsportedMarkdownLibrary, "#{ActsAsMarkup.markdown_library} is not currently supported."
70
- end
62
+ markdown_klass = get_markdown_class
71
63
  require 'redcloth'
64
+ require 'wikitext'
65
+ require_extensions 'wikitext'
72
66
  textile_klass = 'RedCloth'
67
+ wiki_klass = 'WikitextString'
73
68
  else
74
69
  raise ActsAsMarkup::UnsportedMarkupLanguage, "#{options[:langauge]} is not a currently supported markup language."
75
70
  end
@@ -99,6 +94,8 @@ module ActiveRecord # :nodoc:
99
94
  @#{col.to_s} = #{markdown_klass}.new(self['#{col.to_s}'].to_s)
100
95
  when /textile/i
101
96
  @#{col.to_s} = #{textile_klass}.new(self['#{col.to_s}'].to_s)
97
+ when /wikitext/i
98
+ @#{col.to_s} = #{wiki_klass}.new(self['#{col.to_s}'].to_s)
102
99
  else
103
100
  @#{col.to_s} = self['#{col.to_s}']
104
101
  end
@@ -124,6 +121,32 @@ module ActiveRecord # :nodoc:
124
121
  acts_as_markup :language => :textile, :columns => columns
125
122
  end
126
123
 
124
+ ##
125
+ # This is a convenience method for
126
+ # `<tt>acts_as_markup :language => :wikitext, :columns => [:body]</tt>`
127
+ #
128
+ def acts_as_wikitext(*columns)
129
+ acts_as_markup :language => :wikitext, :columns => columns
130
+ end
131
+
132
+
133
+ private
134
+ def get_markdown_class
135
+ if ActsAsMarkup::MARKDOWN_LIBS.keys.include? ActsAsMarkup.markdown_library
136
+ markdown_library_names = ActsAsMarkup::MARKDOWN_LIBS[ActsAsMarkup.markdown_library]
137
+ require markdown_library_names[:lib_name]
138
+ require_extensions(markdown_library_names[:lib_name])
139
+ return markdown_library_names[:class_name]
140
+ else
141
+ raise ActsAsMarkup::UnsportedMarkdownLibrary, "#{ActsAsMarkup.markdown_library} is not currently supported."
142
+ end
143
+ end
144
+ def require_extensions(library)# :nodoc:
145
+ if %w(rdiscount maruku wikitext).include? library.to_s
146
+ require "acts_as_markup/exts/#{library.to_s}"
147
+ end
148
+ end
149
+
127
150
  end
128
151
  end
129
152
  end
@@ -1,3 +1,5 @@
1
+ require 'rdiscount'
2
+
1
3
  class RDiscount
2
4
  def to_s
3
5
  self.text
@@ -1,9 +1 @@
1
- module ActsAsMarkup
2
- module StringExtension
3
- def to_html
4
- self.to_s
5
- end
6
- end
7
- end
8
-
9
- String.send :include, ActsAsMarkup::StringExtension
1
+ String.send :alias_method, :to_html, :to_s
@@ -0,0 +1,21 @@
1
+ require 'wikitext'
2
+
3
+ ##
4
+ # This allows a us to create a wrapper object similar to those provided by the
5
+ # Markdown and Textile libraries. It stores the original and formated HTML text
6
+ # in instance variables.
7
+ #
8
+ class WikitextString < String
9
+ attr_reader :text
10
+ attr_reader :html
11
+
12
+ def initialize(str)
13
+ super(str)
14
+ @text = str.to_s
15
+ @html = Wikitext::Parser.new.parse(@text)
16
+ end
17
+
18
+ def to_html
19
+ @html
20
+ end
21
+ end
@@ -2,7 +2,7 @@ require 'active_support'
2
2
 
3
3
  module ActsAsMarkup
4
4
  # :stopdoc:
5
- VERSION = '0.2.0'
5
+ VERSION = '0.3.0'
6
6
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
7
7
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
8
8
  # :startdoc:
@@ -66,5 +66,5 @@ module ActsAsMarkup
66
66
 
67
67
  end # module ActsAsMarkup
68
68
 
69
- ActsAsMarkup.require_all_libs_relative_to __FILE__
69
+ require 'acts_as_markup/exts/string'
70
70
  ActsAsMarkup.require_all_libs_relative_to __FILE__, 'acts'
data/tasks/setup.rb CHANGED
@@ -24,7 +24,7 @@ PROJ = OpenStruct.new(
24
24
  # System Defaults
25
25
  :ruby_opts => %w(-w),
26
26
  :libs => [],
27
- :history_file => 'History.txt',
27
+ :history_file => 'CHANGELOG',
28
28
  :manifest_file => 'Manifest.txt',
29
29
  :readme_file => 'README.rdoc',
30
30
 
@@ -0,0 +1,166 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class ActsAsMarkdownTest < ActsAsMarkupTestCase
4
+ context 'acts_as_markdown' do
5
+ setup do
6
+ @markdown_text = '## Markdown Test Text'
7
+ end
8
+
9
+ context 'using RDiscount' do
10
+ setup do
11
+ ActsAsMarkup.markdown_library = :rdiscount
12
+ class ::Post < ActiveRecord::Base
13
+ acts_as_markdown :body
14
+ end
15
+ @post = Post.create!(:title => 'Blah', :body => @markdown_text)
16
+ end
17
+
18
+ should "have a RDiscount object returned for the column value" do
19
+ assert_kind_of RDiscount, @post.body
20
+ end
21
+
22
+ should "return original markdown text for a `to_s` method call on the column value" do
23
+ assert_equal @markdown_text, @post.body.to_s
24
+ end
25
+
26
+ should "return formated html for a `to_html` method call on the column value" do
27
+ assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
28
+ end
29
+
30
+ context "changing value of markdown field should return new markdown object" do
31
+ setup do
32
+ @old_body = @post.body
33
+ @post.body = "`@count = 20`"
34
+ end
35
+
36
+ should "still have an RDiscount object but not the same object" do
37
+ assert_kind_of RDiscount, @post.body
38
+ assert_not_same @post.body, @old_body
39
+ end
40
+
41
+ should "return correct text for `to_s`" do
42
+ assert_equal "`@count = 20`", @post.body.to_s
43
+ end
44
+
45
+ should "return correct HTML for the `to_html` method" do
46
+ assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @post.body.to_html)
47
+ end
48
+
49
+ teardown do
50
+ @old_body = nil
51
+ end
52
+ end
53
+
54
+ teardown do
55
+ @post = nil
56
+ Post.delete_all
57
+ end
58
+ end
59
+
60
+ context 'using Ruby PEG Markdown' do
61
+ setup do
62
+ ActsAsMarkup.markdown_library = :rpeg
63
+ class ::Post < ActiveRecord::Base
64
+ acts_as_markdown :body
65
+ end
66
+ @post = Post.create!(:title => 'Blah', :body => @markdown_text)
67
+ end
68
+
69
+ should "have a Ruby PEG Markdown object returned for the column value" do
70
+ assert_kind_of PEGMarkdown, @post.body
71
+ end
72
+
73
+ should "return original markdown text for a `to_s` method call on the column value" do
74
+ assert_equal @markdown_text, @post.body.to_s
75
+ end
76
+
77
+ should "return formated html for a `to_html` method call on the column value" do
78
+ assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
79
+ end
80
+
81
+ context "changing value of markdown field should return new markdown object" do
82
+ setup do
83
+ @old_body = @post.body
84
+ @post.body = "`@count = 20`"
85
+ end
86
+
87
+ should "still have an PEGMarkdown object but not the same object" do
88
+ assert_kind_of PEGMarkdown, @post.body
89
+ assert_not_same @post.body, @old_body
90
+ end
91
+
92
+ should "return correct text for `to_s`" do
93
+ assert_equal "`@count = 20`", @post.body.to_s
94
+ end
95
+
96
+ should "return correct HTML for the `to_html` method" do
97
+ assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @post.body.to_html)
98
+ end
99
+
100
+ teardown do
101
+ @old_body = nil
102
+ end
103
+ end
104
+
105
+ teardown do
106
+ @post = nil
107
+ Post.delete_all
108
+ end
109
+ end
110
+
111
+ context 'using BlueCloth' do
112
+ setup do
113
+ ActsAsMarkup.markdown_library = :bluecloth
114
+ class ::Post < ActiveRecord::Base
115
+ acts_as_markdown :body
116
+ end
117
+ @post = Post.create!(:title => 'Blah', :body => @markdown_text)
118
+ end
119
+
120
+ should "have a BlueCloth object returned for the column value" do
121
+ assert_kind_of BlueCloth, @post.body
122
+ end
123
+
124
+ should "return original markdown text for a `to_s` method call on the column value" do
125
+ assert_equal @markdown_text, @post.body.to_s
126
+ end
127
+
128
+ should "return formated html for a `to_html` method call on the column value" do
129
+ assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
130
+ end
131
+
132
+ context "changing value of markdown field should return new markdown object" do
133
+ setup do
134
+ @old_body = @post.body
135
+ @post.body = "`@count = 20`"
136
+ end
137
+
138
+ should "still have an BlueCloth object but not the same object" do
139
+ assert_kind_of BlueCloth, @post.body
140
+ assert_not_same @post.body, @old_body
141
+ end
142
+
143
+ should "return correct text for `to_s`" do
144
+ assert_equal "`@count = 20`", @post.body.to_s
145
+ end
146
+
147
+ should "return correct HTML for the `to_html` method" do
148
+ assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @post.body.to_html)
149
+ end
150
+
151
+ teardown do
152
+ @old_body = nil
153
+ end
154
+ end
155
+
156
+ teardown do
157
+ @post = nil
158
+ Post.delete_all
159
+ end
160
+ end
161
+
162
+ teardown do
163
+ @markdown_text = nil
164
+ end
165
+ end
166
+ end
@@ -1,224 +1,10 @@
1
1
  require File.dirname(__FILE__) + '/test_helper'
2
2
 
3
- class ActsAsMarkupTest < Test::Unit::TestCase
3
+ class ActsAsMarkupTest < ActsAsMarkupTestCase
4
4
  def setup
5
5
  setup_db
6
6
  end
7
7
 
8
- context 'acts_as_markdown' do
9
- setup do
10
- @markdown_text = '## Markdown Test Text'
11
- end
12
-
13
- context 'using RDiscount' do
14
- setup do
15
- ActsAsMarkup.markdown_library = :rdiscount
16
- class ::Post < ActiveRecord::Base
17
- acts_as_markdown :body
18
- end
19
- @post = Post.create!(:title => 'Blah', :body => @markdown_text)
20
- end
21
-
22
- should "have a RDiscount object returned for the column value" do
23
- assert_kind_of RDiscount, @post.body
24
- end
25
-
26
- should "return original markdown text for a `to_s` method call on the column value" do
27
- assert_equal @markdown_text, @post.body.to_s
28
- end
29
-
30
- should "return formated html for a `to_html` method call on the column value" do
31
- assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
32
- end
33
-
34
- context "changing value of markdown field should return new markdown object" do
35
- setup do
36
- @old_body = @post.body
37
- @post.body = "`@count = 20`"
38
- end
39
-
40
- should "still have an RDiscount object but not the same object" do
41
- assert_kind_of RDiscount, @post.body
42
- assert_not_same @post.body, @old_body
43
- end
44
-
45
- should "return correct text for `to_s`" do
46
- assert_equal "`@count = 20`", @post.body.to_s
47
- end
48
-
49
- should "return correct HTML for the `to_html` method" do
50
- assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @post.body.to_html)
51
- end
52
-
53
- teardown do
54
- @old_body = nil
55
- end
56
- end
57
-
58
- teardown do
59
- @post = nil
60
- Post.delete_all
61
- end
62
- end
63
-
64
- context 'using Ruby PEG Markdown' do
65
- setup do
66
- ActsAsMarkup.markdown_library = :rpeg
67
- class ::Post < ActiveRecord::Base
68
- acts_as_markdown :body
69
- end
70
- @post = Post.create!(:title => 'Blah', :body => @markdown_text)
71
- end
72
-
73
- should "have a Ruby PEG Markdown object returned for the column value" do
74
- assert_kind_of PEGMarkdown, @post.body
75
- end
76
-
77
- should "return original markdown text for a `to_s` method call on the column value" do
78
- assert_equal @markdown_text, @post.body.to_s
79
- end
80
-
81
- should "return formated html for a `to_html` method call on the column value" do
82
- assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
83
- end
84
-
85
- context "changing value of markdown field should return new markdown object" do
86
- setup do
87
- @old_body = @post.body
88
- @post.body = "`@count = 20`"
89
- end
90
-
91
- should "still have an PEGMarkdown object but not the same object" do
92
- assert_kind_of PEGMarkdown, @post.body
93
- assert_not_same @post.body, @old_body
94
- end
95
-
96
- should "return correct text for `to_s`" do
97
- assert_equal "`@count = 20`", @post.body.to_s
98
- end
99
-
100
- should "return correct HTML for the `to_html` method" do
101
- assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @post.body.to_html)
102
- end
103
-
104
- teardown do
105
- @old_body = nil
106
- end
107
- end
108
-
109
- teardown do
110
- @post = nil
111
- Post.delete_all
112
- end
113
- end
114
-
115
- context 'using BlueCloth' do
116
- setup do
117
- ActsAsMarkup.markdown_library = :bluecloth
118
- class ::Post < ActiveRecord::Base
119
- acts_as_markdown :body
120
- end
121
- @post = Post.create!(:title => 'Blah', :body => @markdown_text)
122
- end
123
-
124
- should "have a BlueCloth object returned for the column value" do
125
- assert_kind_of BlueCloth, @post.body
126
- end
127
-
128
- should "return original markdown text for a `to_s` method call on the column value" do
129
- assert_equal @markdown_text, @post.body.to_s
130
- end
131
-
132
- should "return formated html for a `to_html` method call on the column value" do
133
- assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
134
- end
135
-
136
- context "changing value of markdown field should return new markdown object" do
137
- setup do
138
- @old_body = @post.body
139
- @post.body = "`@count = 20`"
140
- end
141
-
142
- should "still have an BlueCloth object but not the same object" do
143
- assert_kind_of BlueCloth, @post.body
144
- assert_not_same @post.body, @old_body
145
- end
146
-
147
- should "return correct text for `to_s`" do
148
- assert_equal "`@count = 20`", @post.body.to_s
149
- end
150
-
151
- should "return correct HTML for the `to_html` method" do
152
- assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @post.body.to_html)
153
- end
154
-
155
- teardown do
156
- @old_body = nil
157
- end
158
- end
159
-
160
- teardown do
161
- @post = nil
162
- Post.delete_all
163
- end
164
- end
165
-
166
- teardown do
167
- @markdown_text = nil
168
- end
169
- end
170
-
171
- context 'acts_as_textile' do
172
- setup do
173
- @textile_text = "h2. Textile Test Text"
174
- class ::Post < ActiveRecord::Base
175
- acts_as_textile :body
176
- end
177
- @post = Post.create!(:title => 'Blah', :body => @textile_text)
178
- end
179
-
180
- should "have a RedCloth object returned for the column value" do
181
- assert_kind_of RedCloth::TextileDoc, @post.body
182
- end
183
-
184
- should "return original textile text for a `to_s` method call on the column value" do
185
- assert_equal @textile_text, @post.body.to_s
186
- end
187
-
188
- should "return formated html for a `to_html` method call on the column value" do
189
- assert_match(/<h2>Textile Test Text<\/h2>/, @post.body.to_html)
190
- end
191
-
192
- context "changing value of textile field should return new textile object" do
193
- setup do
194
- @old_body = @post.body
195
- @post.body = "@@count = 20@"
196
- end
197
-
198
- should "still have an RedCloth object but not the same object" do
199
- assert_kind_of RedCloth::TextileDoc, @post.body
200
- assert_not_same @post.body, @old_body
201
- end
202
-
203
- should "return correct text for `to_s`" do
204
- assert_equal "@@count = 20@", @post.body.to_s
205
- end
206
-
207
- should "return correct HTML for the `to_html` method" do
208
- assert_match(/<code>\@count\s\=\s20<\/code>/, @post.body.to_html)
209
- end
210
-
211
- teardown do
212
- @old_body = nil
213
- end
214
- end
215
-
216
- teardown do
217
- @textile_text, @post = nil
218
- Post.delete_all
219
- end
220
- end
221
-
222
8
  context 'acts_as_markup' do
223
9
  setup do
224
10
  ActsAsMarkup.markdown_library = ActsAsMarkup::DEFAULT_MAKRDOWN_LIB
@@ -390,6 +176,54 @@ class ActsAsMarkupTest < Test::Unit::TestCase
390
176
  end
391
177
  end
392
178
 
179
+ context 'with a Wikitext post' do
180
+ setup do
181
+ @wikitext = "== Wikitext Test Text =="
182
+ @wikitext_post = VariablePost.create!(:title => 'Blah', :body => @wikitext, :markup_language => 'Wikitext')
183
+ end
184
+
185
+ should "have a WikitextString object returned for the column value" do
186
+ assert_kind_of WikitextString, @wikitext_post.body
187
+ end
188
+
189
+ should "return original wikitext text for a `to_s` method call on the column value" do
190
+ assert_equal @wikitext, @wikitext_post.body.to_s
191
+ end
192
+
193
+ should "return formated html for a `to_html` method call on the column value" do
194
+ assert_match(/<h2>Wikitext Test Text<\/h2>/, @wikitext_post.body.to_html)
195
+ end
196
+
197
+ context "changing value of wikitext field should return new wikitext object" do
198
+ setup do
199
+ @old_body = @wikitext_post.body
200
+ @wikitext_post.body = "`@count = 20`"
201
+ end
202
+
203
+ should "still have an WikitextString object but not the same object" do
204
+ assert_kind_of WikitextString, @wikitext_post.body
205
+ assert_not_same @wikitext_post.body, @old_body
206
+ end
207
+
208
+ should "return correct text for `to_s`" do
209
+ assert_equal "`@count = 20`", @wikitext_post.body.to_s
210
+ end
211
+
212
+ should "return correct HTML for the `to_html` method" do
213
+ assert_match(/<tt>\@count\s\=\s20<\/tt>/, @wikitext_post.body.to_html)
214
+ end
215
+
216
+ teardown do
217
+ @old_body = nil
218
+ end
219
+ end
220
+
221
+ teardown do
222
+ @wikitext, @wikitext_post = nil
223
+ Post.delete_all
224
+ end
225
+ end
226
+
393
227
  context "with a plain text post" do
394
228
  setup do
395
229
  @plain_text = "Hahaha!!!"
@@ -403,8 +237,10 @@ class ActsAsMarkupTest < Test::Unit::TestCase
403
237
  should "return the original string with a `to_s` method call on the column value" do
404
238
  assert_equal @plain_text, @plain_text_post.body.to_s
405
239
  end
406
-
407
- should "eturn the original string with a `to_html` method call on the column value" do
240
+
241
+ # FIXME: why is this failing??? both objects are String, both have EXACTLY the same value when output
242
+ # in failure message. assert_equal does not require same object. This is very odd!
243
+ should "return the original string with a `to_html` method call on the column value" do
408
244
  assert_equal @plain_text, @plain_text_post.body.to_html
409
245
  end
410
246
 
@@ -470,6 +306,32 @@ class ActsAsMarkupTest < Test::Unit::TestCase
470
306
  end
471
307
  end
472
308
 
309
+ context 'with wikitext' do
310
+ setup do
311
+ class ::Post < ActiveRecord::Base
312
+ acts_as_wikitext :body
313
+ end
314
+ @post = Post.create!(:title => 'Blah', :body => @text)
315
+ end
316
+
317
+ should 'return a blank string for `to_s` method' do
318
+ assert_equal @post.body.to_s, ''
319
+ end
320
+
321
+ should 'return a blank string for `to_html` method' do
322
+ assert_match(/[\n\s]*/, @post.body.to_html)
323
+ end
324
+
325
+ should "have a RedCloth object returned for the column value" do
326
+ assert_kind_of WikitextString, @post.body
327
+ end
328
+
329
+ teardown do
330
+ @post = nil
331
+ Post.delete_all
332
+ end
333
+ end
334
+
473
335
  context 'with RDiscount Markdown' do
474
336
  setup do
475
337
  ActsAsMarkup.markdown_library = :rdiscount
@@ -556,7 +418,7 @@ class ActsAsMarkupTest < Test::Unit::TestCase
556
418
  should 'raise exception when a non-supported language is passed to acts_as_markup' do
557
419
  assert_raise ActsAsMarkup::UnsportedMarkupLanguage do
558
420
  class ::Post < ActiveRecord::Base
559
- acts_as_markup :language => :wiki, :columns => [:body]
421
+ acts_as_markup :language => :fake, :columns => [:body]
560
422
  end
561
423
  end
562
424
  end
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class ActsAsTextileTest < ActsAsMarkupTestCase
4
+ context 'acts_as_textile' do
5
+ setup do
6
+ @textile_text = "h2. Textile Test Text"
7
+ class ::Post < ActiveRecord::Base
8
+ acts_as_textile :body
9
+ end
10
+ @post = Post.create!(:title => 'Blah', :body => @textile_text)
11
+ end
12
+
13
+ should "have a RedCloth object returned for the column value" do
14
+ assert_kind_of RedCloth::TextileDoc, @post.body
15
+ end
16
+
17
+ should "return original textile text for a `to_s` method call on the column value" do
18
+ assert_equal @textile_text, @post.body.to_s
19
+ end
20
+
21
+ should "return formated html for a `to_html` method call on the column value" do
22
+ assert_match(/<h2>Textile Test Text<\/h2>/, @post.body.to_html)
23
+ end
24
+
25
+ context "changing value of textile field should return new textile object" do
26
+ setup do
27
+ @old_body = @post.body
28
+ @post.body = "@@count = 20@"
29
+ end
30
+
31
+ should "still have an RedCloth object but not the same object" do
32
+ assert_kind_of RedCloth::TextileDoc, @post.body
33
+ assert_not_same @post.body, @old_body
34
+ end
35
+
36
+ should "return correct text for `to_s`" do
37
+ assert_equal "@@count = 20@", @post.body.to_s
38
+ end
39
+
40
+ should "return correct HTML for the `to_html` method" do
41
+ assert_match(/<code>\@count\s\=\s20<\/code>/, @post.body.to_html)
42
+ end
43
+
44
+ teardown do
45
+ @old_body = nil
46
+ end
47
+ end
48
+
49
+ teardown do
50
+ @textile_text, @post = nil
51
+ Post.delete_all
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class ActsAsWikitextTest < ActsAsMarkupTestCase
4
+ context 'acts_as_wikitext' do
5
+ setup do
6
+ @wikitext = "== Wikitext Test Text =="
7
+ class ::Post < ActiveRecord::Base
8
+ acts_as_wikitext :body
9
+ end
10
+ @post = Post.create!(:title => 'Blah', :body => @wikitext)
11
+ end
12
+
13
+ should "have a WikitextString object returned for the column value" do
14
+ assert_kind_of WikitextString, @post.body
15
+ end
16
+
17
+ should "return original wikitext text for a `to_s` method call on the column value" do
18
+ assert_equal @wikitext, @post.body.to_s
19
+ end
20
+
21
+ should "return formated html for a `to_html` method call on the column value" do
22
+ assert_match(/<h2>Wikitext Test Text<\/h2>/, @post.body.to_html)
23
+ end
24
+
25
+ context "changing value of wikitext field should return new wikitext object" do
26
+ setup do
27
+ @old_body = @post.body
28
+ @post.body = "`@count = 20`"
29
+ end
30
+
31
+ should "still have an WikitextString object but not the same object" do
32
+ assert_kind_of WikitextString, @post.body
33
+ assert_not_same @post.body, @old_body
34
+ end
35
+
36
+ should "return correct text for `to_s`" do
37
+ assert_equal "`@count = 20`", @post.body.to_s
38
+ end
39
+
40
+ should "return correct HTML for the `to_html` method" do
41
+ assert_match(/<tt>\@count\s\=\s20<\/tt>/, @post.body.to_html)
42
+ end
43
+
44
+ teardown do
45
+ @old_body = nil
46
+ end
47
+ end
48
+
49
+ teardown do
50
+ @wikitext, @post = nil
51
+ Post.delete_all
52
+ end
53
+ end
54
+ end
data/test/test_helper.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'test/unit'
2
2
  require 'shoulda'
3
+ require 'active_support'
4
+ require 'active_support/test_case'
3
5
  require File.expand_path( File.join(File.dirname(__FILE__), %w[.. lib acts_as_markup]) )
4
6
 
5
7
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
@@ -38,3 +40,13 @@ def teardown_db
38
40
  ActiveRecord::Base.connection.drop_table(table)
39
41
  end
40
42
  end
43
+
44
+ class ActsAsMarkupTestCase < ActiveSupport::TestCase
45
+ def setup
46
+ setup_db
47
+ end
48
+
49
+ def teardown
50
+ teardown_db
51
+ end
52
+ end
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: 0.2.0
4
+ version: 0.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-08-07 00:00:00 -04:00
12
+ date: 2008-08-08 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -52,18 +52,29 @@ dependencies:
52
52
  - !ruby/object:Gem::Version
53
53
  version: 4.0.1
54
54
  version:
55
- description: Represent ActiveRecord Markdown or Textile text columns as Markdown or Textile objects using various external libraries to convert to HTML.
55
+ - !ruby/object:Gem::Dependency
56
+ name: wikitext
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 1.1.1
64
+ version:
65
+ description: Represent ActiveRecord Markdown, Textile, or Wiki text columns as Markdown, Textile or Wikitext objects using various external libraries to convert to HTML.
56
66
  email: brian.landau@viget.com
57
67
  executables: []
58
68
 
59
69
  extensions: []
60
70
 
61
71
  extra_rdoc_files:
62
- - LICENSE.txt
72
+ - CHANGELOG
73
+ - LICENSE
63
74
  - README.rdoc
64
75
  files:
65
- - History.txt
66
- - LICENSE.txt
76
+ - CHANGELOG
77
+ - LICENSE
67
78
  - Manifest.txt
68
79
  - README.rdoc
69
80
  - Rakefile
@@ -72,6 +83,7 @@ files:
72
83
  - lib/acts_as_markup.rb
73
84
  - lib/acts_as_markup/exts/rdiscount.rb
74
85
  - lib/acts_as_markup/exts/string.rb
86
+ - lib/acts_as_markup/exts/wikitext.rb
75
87
  - tasks/bones.rake
76
88
  - tasks/gem.rake
77
89
  - tasks/git.rake
@@ -81,7 +93,10 @@ files:
81
93
  - tasks/rubyforge.rake
82
94
  - tasks/setup.rb
83
95
  - tasks/test.rake
96
+ - test/acts_as_markdown_test.rb
84
97
  - test/acts_as_markup_test.rb
98
+ - test/acts_as_textile_test.rb
99
+ - test/acts_as_wikitext_test.rb
85
100
  - test/test_helper.rb
86
101
  has_rdoc: true
87
102
  homepage: http://viget.rubyforge.com/acts_as_markup
@@ -109,6 +124,9 @@ rubyforge_project: viget
109
124
  rubygems_version: 1.2.0
110
125
  signing_key:
111
126
  specification_version: 2
112
- summary: Represent ActiveRecord Markdown or Textile text columns as Markdown or Textile objects using various external libraries to convert to HTML
127
+ summary: Represent ActiveRecord Markdown, Textile, or Wiki text columns as Markdown, Textile or Wikitext objects using various external libraries to convert to HTML
113
128
  test_files:
129
+ - test/acts_as_markdown_test.rb
114
130
  - test/acts_as_markup_test.rb
131
+ - test/acts_as_textile_test.rb
132
+ - test/acts_as_wikitext_test.rb