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 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
- @#{col.to_s} = #{markdown_klass}.new(self['#{col.to_s}'].to_s)
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"',
@@ -1,10 +1,10 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{acts_as_markup}
3
- s.version = "1.2.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-09-30}
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.2.0}
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 current_version >= 3 then
26
- s.add_runtime_dependency(%q<activesupport>, [">= 2.1.1"])
27
- s.add_runtime_dependency(%q<activerecord>, [">= 2.1.1"])
28
- s.add_runtime_dependency(%q<rdiscount>, [">= 1.2.9"])
29
- s.add_runtime_dependency(%q<RedCloth>, [">= 4.0.3"])
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.1.1"])
33
- s.add_dependency(%q<activerecord>, [">= 2.1.1"])
34
- s.add_dependency(%q<rdiscount>, [">= 1.2.9"])
35
- s.add_dependency(%q<RedCloth>, [">= 4.0.3"])
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.1.1"])
40
- s.add_dependency(%q<activerecord>, [">= 2.1.1"])
41
- s.add_dependency(%q<rdiscount>, [">= 1.2.9"])
42
- s.add_dependency(%q<RedCloth>, [">= 4.0.3"])
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
@@ -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 < ActiveRecrod
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 < ActiveRecrod
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[:columns].each do |col|
65
- unless options[:language].to_sym == :variable
66
- class_eval <<-EOV
67
- def #{col.to_s}
68
- if @#{col.to_s}
69
- unless self.#{col.to_s}_changed?
70
- return @#{col.to_s}
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
- EOV
76
- else
77
- class_eval <<-EOV
78
- def #{col.to_s}
79
- if @#{col.to_s}
80
- unless self.#{col.to_s}_changed? || self.#{options[:language_column].to_s}_changed?
81
- return @#{col.to_s}
82
- end
83
- end
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
- EOV
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
- acts_as_markup :language => :markdown, :columns => columns
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
- acts_as_markup :language => :textile, :columns => columns
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
- acts_as_markup :language => :wikitext, :columns => columns
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
- acts_as_markup :language => :rdoc, :columns => columns
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.to_s}"
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 'RedCloth'
184
+ return RedCloth
156
185
  when :wikitext
157
186
  require 'wikitext'
158
187
  require_extensions 'wikitext'
159
- return 'WikitextString'
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 'RDocText'
193
+ return RDocText
165
194
  else
166
- return 'String'
195
+ return String
167
196
  end
168
197
  end
169
198
 
@@ -2,7 +2,7 @@ require 'active_support'
2
2
 
3
3
  module ActsAsMarkup
4
4
  # :stopdoc:
5
- VERSION = '1.2.1'
5
+ VERSION = '1.3.0'
6
6
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
7
7
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
8
8
  # :startdoc:
@@ -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 'rake/gempackagetask'
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
- # A prerequisites task that all other tasks depend upon
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 "Build the gem file #{gem_file}"
82
- task :package => ['gem:prereqs', "#{pkg.package_dir}/#{gem_file}"]
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/^@/; Console::ANSICode.blue line
19
- when %r/^\+/; Console::ANSICode.green line
20
- when %r/^\-/; Console::ANSICode.red line
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.ann.file)}$",
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:package'] do |t|
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 = [(PROJ.gem.need_tar ? "#{pkg}.tgz" : nil),
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/**/test_*.rb'],
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
- rakefiles = Dir.glob('tasks/*.rake').sort
114
- rakefiles.unshift(rakefiles.delete('tasks/post_load.rake')).compact!
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(/&lt;i>Test&lt;\/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(/&lt;i&gt;Test&lt;\/i&gt;/, @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(/&lt;i&gt;Test&lt;\/i&gt;/, @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
@@ -1,5 +1,6 @@
1
1
  require 'test/unit'
2
2
  require 'rubygems'
3
+ gem 'sqlite3-ruby'
3
4
  require 'shoulda'
4
5
  require 'active_support'
5
6
  require 'active_support/test_case'
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.2.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-09-30 00:00:00 -04:00
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.1.1
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.1.1
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.9
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.3
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.2.0
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