module ActsAsMarkupOn::ActiveRecordExtension::ClassMethods
Public Instance Methods
This is a convenience method for ‘acts_as_markup_on :language => :markdown, :columns => [:body]
` Additional options can be given at the end, if necessary.
# File lib/acts_as_markup_on/active_record_extension.rb, line 82 def acts_as_markdown_on(*columns) options = columns.extract_options! acts_as_markup_on options.merge(:language => :markdown, :columns => columns) end
This allows you to specify columns you want to define as containing Markdown, Textile, Wikitext or RDoc content. Then you can simply call .to_html
method on the attribute.
You can also specify the language as :variable
. The language used to process the column will be based on another column. By default a column named “markup_language
” is used, but this can be changed by providing a :language_column
option. When a value is accessed it will create the correct object (Markdown, Textile, Wikitext or RDoc) based on the value of the language column. If any value besides markdown, textile, mediawiki, or RDoc is supplied for the markup language the text will pass through as a string.
You can specify additional options to pass to the markup library by using :markdown_options
, :textile_options
or :mediawiki_options
. RDoc does not support any useful options. The options should be given as an array of arguments. You can specify options for more than one language when using :variable
. See each library’s documentation for more details on what options are available.
Examples¶ ↑
Using Markdown language¶ ↑
class Post < ActiveRecord acts_as_markup_on :language => :markdown, :columns => [:body] end @post = Post.find(:first) @post.body.to_s # => "## Markdown Headline" @post.body.to_html # => "<h2> Markdown Headline</h2>"
Using variable language¶ ↑
class Post < ActiveRecord acts_as_markup_on :language => :variable, :columns => [:body], :language_column => 'language_name' end @post = Post.find(:first) @post.language_name # => "markdown" @post.body.to_s # => "## Markdown Headline" @post.body.to_html # => "<h2> Markdown Headline</h2>"
Using options¶ ↑
class Post < ActiveRecord acts_as_markup_on :language => :markdown, :columns => [:body], :markdown_options => [ :filter_html ] end class Post < ActiveRecord acts_as_markup_on :language => :textile, :columns => [:body], :textile_options => [ [ :filter_html ] ] end class Post < ActiveRecord acts_as_markup_on :language => :mediawiki, :columns => [:body], :mediawiki_options => [ { :space_to_underscore => true } ] end
# File lib/acts_as_markup_on/active_record_extension.rb, line 67 def acts_as_markup_on(options) options.reverse_merge!(:language_column => :markup_language) markup_class = load_markup_class(options) unless options[:language].to_sym == :variable define_markup_columns_reader_methods(markup_class, options) else define_variable_markup_columns_reader_methods(markup_class, options) end end
This is a convenience method for ‘acts_as_markup_on :language => :mediawiki, :columns => [:body]
` Additional options can be given at the end, if necessary.
# File lib/acts_as_markup_on/active_record_extension.rb, line 100 def acts_as_mediawiki_on(*columns) options = columns.extract_options! acts_as_markup_on options.merge(:language => :mediawiki, :columns => columns) end
This is a convenience method for ‘acts_as_markup_on :language => :rdoc, :columns => [:body]
` Additional options can be given at the end, if necessary.
# File lib/acts_as_markup_on/active_record_extension.rb, line 109 def acts_as_rdoc_on(*columns) options = columns.extract_options! acts_as_markup_on options.merge(:language => :rdoc, :columns => columns) end
This is a convenience method for ‘acts_as_markup_on :language => :textile, :columns => [:body]
` Additional options can be given at the end, if necessary.
# File lib/acts_as_markup_on/active_record_extension.rb, line 91 def acts_as_textile_on(*columns) options = columns.extract_options! acts_as_markup_on options.merge(:language => :textile, :columns => columns) end
Private Instance Methods
# File lib/acts_as_markup_on/active_record_extension.rb, line 177 def define_markup_columns_reader_methods(markup_class, options) markup_options = options["#{options[:language]}_options".to_sym] || [] options[:columns].each do |col| define_method col do if instance_variable_defined?("@#{col}") && !send("#{col}_changed?") instance_variable_get("@#{col}") else instance_variable_set("@#{col}", markup_class.new(self[col].to_s, *markup_options)) end end end end
# File lib/acts_as_markup_on/active_record_extension.rb, line 191 def define_variable_markup_columns_reader_methods(markup_classes, options) options[:columns].each do |col| define_method col do if instance_variable_defined?("@#{col}") unless send("#{col}_changed?") || send("#{options[:language_column]}_changed?") return instance_variable_get("@#{col}") end end instance_variable_set("@#{col}", case send(options[:language_column]) when /markdown/i markup_classes[:markdown].new self[col].to_s, *(options[:markdown_options] || []) when /textile/i markup_classes[:textile].new self[col].to_s, *(options[:textile_options] || []) when /mediawiki/i markup_classes[:mediawiki].new self[col].to_s, *(options[:mediawiki_options] || []) when /rdoc/i markup_classes[:rdoc].new self[col].to_s else self[col] end) end end end
# File lib/acts_as_markup_on/active_record_extension.rb, line 116 def get_markdown_class if ActsAsMarkupOn::MARKDOWN_LIBS.keys.include? ActsAsMarkupOn.markdown_library markdown_library_names = ActsAsMarkupOn::MARKDOWN_LIBS[ActsAsMarkupOn.markdown_library] require markdown_library_names[:lib_name] require_extensions(markdown_library_names[:lib_name]) return markdown_library_names[:class_name].constantize else raise ActsAsMarkupOn::UnsportedMarkdownLibrary, "#{ActsAsMarkupOn.markdown_library} is not currently supported." end end
# File lib/acts_as_markup_on/active_record_extension.rb, line 127 def get_mediawiki_class if ActsAsMarkupOn::MEDIAWIKI_LIBS.keys.include? ActsAsMarkupOn.mediawiki_library mediawiki_library_names = ActsAsMarkupOn::MEDIAWIKI_LIBS[ActsAsMarkupOn.mediawiki_library] require mediawiki_library_names[:lib_name] require_extensions(mediawiki_library_names[:lib_name]) return mediawiki_library_names[:class_name].constantize else raise ActsAsMarkupOn::UnsportedMediawikiLibrary, "#{ActsAsMarkupOn.mediawiki_library} is not currently supported." end end
# File lib/acts_as_markup_on/active_record_extension.rb, line 162 def load_markup_class(options) case options[:language].to_sym when :markdown, :textile, :mediawiki, :rdoc require_library_and_get_class(options[:language].to_sym) when :variable markup_classes = {} [:textile, :mediawiki, :rdoc, :markdown].each do |language| markup_classes[language] = require_library_and_get_class(language) end markup_classes else raise ActsAsMarkupOn::UnsupportedMarkupLanguage, "#{options[:langauge]} is not a currently supported markup language." end end
# File lib/acts_as_markup_on/active_record_extension.rb, line 144 def require_library_and_get_class(language) case language when :markdown return get_markdown_class when :textile require 'redcloth' return RedCloth when :mediawiki return get_mediawiki_class when :rdoc require 'rdoc' require_extensions 'rdoc' return RDocText else return String end end