markdownizer 0.1.1 → 0.1.2

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/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  pkg/*
2
2
  *.gem
3
3
  .bundle
4
+ docs/
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- markdownizer (0.1.0)
4
+ markdownizer (0.1.2)
5
5
  activerecord (~> 3.0.3)
6
6
  coderay
7
7
  rdiscount
@@ -23,8 +23,14 @@ GEM
23
23
  builder (2.1.2)
24
24
  coderay (0.9.7)
25
25
  diff-lcs (1.1.2)
26
+ git (1.2.5)
26
27
  i18n (0.5.0)
28
+ mustache (0.12.0)
29
+ pygments (0.0.1.a)
27
30
  rdiscount (1.6.8)
31
+ rocco (0.5)
32
+ mustache
33
+ rdiscount
28
34
  rspec (2.4.0)
29
35
  rspec-core (~> 2.4.0)
30
36
  rspec-expectations (~> 2.4.0)
@@ -39,5 +45,11 @@ PLATFORMS
39
45
  ruby
40
46
 
41
47
  DEPENDENCIES
48
+ activerecord (~> 3.0.3)
49
+ coderay
50
+ git
42
51
  markdownizer!
52
+ pygments
53
+ rdiscount
54
+ rocco
43
55
  rspec (~> 2.4.0)
data/Rakefile CHANGED
@@ -1,6 +1,60 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
3
 
4
+ # Bring in Rocco tasks
5
+ require 'rocco/tasks'
6
+ require 'rake/clean'
7
+ Rocco::make 'docs/', 'lib/markdownizer.rb'
8
+
9
+ desc 'Build markdownizer docs'
10
+ task :docs => :rocco
11
+ directory 'docs/'
12
+
13
+ desc 'Build docs and open in browser for the reading'
14
+ task :read => :docs do
15
+ sh 'open docs/lib/rocco.html'
16
+ end
17
+
18
+ # Make index.html a copy of markdownizer.html
19
+ file 'docs/index.html' => 'docs/lib/markdownizer.html' do |f|
20
+ cp 'docs/lib/markdownizer.html', 'docs/index.html', :preserve => true
21
+ end
22
+ task :docs => 'docs/index.html'
23
+ CLEAN.include 'docs/index.html'
24
+
25
+ # Alias for docs task
26
+ task :doc => :docs
27
+
28
+ # GITHUB PAGES ===============================================================
29
+
30
+ site = 'docs'
31
+ source_branch = 'master'
32
+ deploy_branch = 'gh-pages'
33
+
34
+ desc "generate and deploy website to github user pages"
35
+ multitask :pages do
36
+ puts ">>> Deploying #{deploy_branch} branch to Github Pages <<<"
37
+ require 'git'
38
+ repo = Git.open('.')
39
+ puts "\n>>> Checking out #{deploy_branch} branch <<<\n"
40
+ repo.branch("#{deploy_branch}").checkout
41
+ (Dir["*"] - [site]).each { |f| rm_rf(f) }
42
+ Dir["#{site}/*"].each {|f| mv(f, "index.html")}
43
+ rm_rf(site)
44
+ puts "\n>>> Moving generated site files <<<\n"
45
+ Dir["**/*"].each {|f| repo.add(f) }
46
+ repo.status.deleted.each {|f, s| repo.remove(f)}
47
+ puts "\n>>> Commiting: Site updated at #{Time.now.utc} <<<\n"
48
+ message = ENV["MESSAGE"] || "Site updated at #{Time.now.utc}"
49
+ repo.commit(message)
50
+ puts "\n>>> Pushing generated site to #{deploy_branch} branch <<<\n"
51
+ repo.push
52
+ puts "\n>>> Github Pages deploy complete <<<\n"
53
+ repo.branch("#{source_branch}").checkout
54
+ end
55
+
56
+ # TESTS =====================================================================
57
+
4
58
  require 'rspec/core'
5
59
  require 'rspec/core/rake_task'
6
60
  RSpec::Core::RakeTask.new(:spec) do |spec|
data/Readme.md CHANGED
@@ -4,6 +4,9 @@ A simple gem for Rails 3 to render some ActiveRecord text field as Markdown!
4
4
 
5
5
  It mixes CodeRay and RDiscount to give you awesome code highlighting :)
6
6
 
7
+ You can check the generated Rocco documentation on the [project
8
+ page](http://codegram.github.com/markdownizer).
9
+
7
10
  ##Install
8
11
 
9
12
  In your Gemfile:
data/lib/markdownizer.rb CHANGED
@@ -1,3 +1,77 @@
1
+ # **Markdownizer** is a simple solution to a simple problem.
2
+ #
3
+ # It is a lightweight Rails 3 gem which enhances any ActiveRecord model with a
4
+ # singleton `markdownize!` method, which makes any text attribute renderable as
5
+ # Markdown. It mixes CodeRay and RDiscount to give you awesome code
6
+ # highlighting, too!
7
+ #
8
+ # If you have any suggestion regarding new features, Check out the [Github repo][gh],
9
+ # fork it and submit a nice pull request :)
10
+ #
11
+
12
+ #### Install Markdownizer
13
+
14
+ # Get Markdownizer in your Rails 3 app through your Gemfile:
15
+ #
16
+ # gem 'markdownizer'
17
+ #
18
+ # If you don't use Bundler, you can alternatively install Markdownizer with
19
+ # Rubygems:
20
+ #
21
+ # gem install markdownizer
22
+ #
23
+ # If you want code highlighting, you should run this generator too:
24
+ #
25
+ # rails generate markdownizer:install
26
+ #
27
+ # This will place a `markdownizer.css` file in your `public/stylesheets`
28
+ # folder. You will have to require it manually in your layouts, or through
29
+ # `jammit`, or whatever.
30
+ #
31
+ # [gh]: http://github.com/codegram/markdownizer
32
+
33
+ #### Usage
34
+
35
+ # In your model, let's say, `Post`:
36
+ #
37
+ # class Post < ActiveRecord::Base
38
+ # # In this case we want to treat :body as markdown
39
+ # # This will require `body` and `rendered_body` fields
40
+ # # to exist previously (otherwise it will raise an error).
41
+ # markdownize! :body
42
+ # end
43
+ #
44
+ # Then you can create a `Post` using Markdown syntax, like this:
45
+ #
46
+ # Post.create body: """
47
+ # # My H1 title
48
+ # Markdown is awesome!
49
+ # ## Some H2 title...
50
+ #
51
+ # {% code ruby %}
52
+ #
53
+ # # All this code will be highlighted properly! :)
54
+ # def my_method(*my_args)
55
+ # something do
56
+ # 3 + 4
57
+ # end
58
+ # end
59
+ #
60
+ # {% endcode %}
61
+ # """
62
+ #
63
+ # After that, in your view you just have to call `@post.rendered_body` and,
64
+ # provided you included the generated css in your layout, it will display nice
65
+ # and coloured :)
66
+
67
+ #### Show me the code!
68
+
69
+ # We'll need to include [RDiscount][rd]. This is the Markdown parsing library.
70
+ # Also, [CodeRay][cr] will provide code highlighting. We require `active_record` as
71
+ # well, since we want to extend it with our DSL.
72
+ #
73
+ # [rd]: http://github.com/rtomayko/rdiscount
74
+ # [cr]: http://github.com/rubychan/coderay
1
75
  require 'rdiscount'
2
76
  require 'coderay'
3
77
  require 'active_record' unless defined?(ActiveRecord)
@@ -5,25 +79,47 @@ require 'active_record' unless defined?(ActiveRecord)
5
79
  module Markdownizer
6
80
 
7
81
  class << self
82
+ # Here we define two helper methods. These will be called from the model to
83
+ # perform the corresponding conversions and parsings.
84
+
85
+ # `Markdownizer.markdown` method converts plain Markdown text to formatted html.
8
86
  def markdown(text)
9
87
  RDiscount.new(text).to_html
10
88
  end
11
89
 
90
+ # `Markdownizer.coderay` method parses a code block delimited from `{% code
91
+ # ruby %}` until `{% endcode %}` and replaces it with appropriate classes for
92
+ # code highlighting. It can take many languages aside from Ruby.
12
93
  def coderay(text)
13
- text.gsub(%r[\{% highlight (\w+?) %\}(.+?)\{% endhighlight %\}]m) do
94
+ text.gsub(%r[\{% code (\w+?) %\}(.+?)\{% endcode %\}]m) do
14
95
  CodeRay.scan($2, $1).div(:css => :class)
15
96
  end
16
97
  end
17
98
  end
18
99
 
100
+ #### Public interface
101
+
102
+ # The Markdownizer DSL is the public interface of the gem, and can be called
103
+ # from any ActiveRecord model.
19
104
  module DSL
105
+
106
+ # Calling `markdownize! :attribute` (where `:attribute` can be any database
107
+ # attribute with type `text`) will treat this field as Markdown.
20
108
  def markdownize! attribute
109
+ # Check that both `:attribute` and `:rendered_attribute` columns exist.
110
+ # If they don't, it raises an error indicating that the user should generate
111
+ # a migration.
21
112
  unless self.column_names.include?(attribute.to_s) &&
22
113
  self.column_names.include?("rendered_#{attribute}")
23
114
  raise "#{self.name} doesn't have required attributes :#{attribute} and :rendered_#{attribute}\nPlease generate a migration to add these attributes -- both should have type :text."
24
115
  end
116
+
117
+ # Create a `before_save` callback which will convert plain text to
118
+ # Markdownized html every time the model is saved.
25
119
  self.before_save :"render_#{attribute}"
26
120
 
121
+ # Define the converter method, which will assign the rendered html to the
122
+ # `:rendered_attribute` field.
27
123
  define_method :"render_#{attribute}" do
28
124
  self.send(:"rendered_#{attribute}=", Markdownizer.markdown(Markdownizer.coderay(self.send(attribute))))
29
125
  end
@@ -32,4 +128,7 @@ module Markdownizer
32
128
 
33
129
  end
34
130
 
131
+ # Finally, make our DSL available to any class inheriting from ActiveRecord::Base.
35
132
  ActiveRecord::Base.send(:extend, Markdownizer::DSL)
133
+
134
+ # And that's it!
@@ -1,3 +1,3 @@
1
1
  module Markdownizer
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/markdownizer.gemspec CHANGED
@@ -18,6 +18,9 @@ Gem::Specification.new do |s|
18
18
  s.add_runtime_dependency 'rdiscount'
19
19
  s.add_runtime_dependency 'coderay'
20
20
 
21
+ s.add_development_dependency 'rocco'
22
+ s.add_development_dependency 'git'
23
+ s.add_development_dependency 'pygments'
21
24
  s.add_development_dependency 'rspec', '~> 2.4.0'
22
25
 
23
26
  s.files = `git ls-files`.split("\n")
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 1
9
- version: 0.1.1
8
+ - 2
9
+ version: 0.1.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Josep M. Bach
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-02-02 00:00:00 +01:00
19
+ date: 2011-02-03 00:00:00 +01:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -61,9 +61,48 @@ dependencies:
61
61
  type: :runtime
62
62
  version_requirements: *id003
63
63
  - !ruby/object:Gem::Dependency
64
- name: rspec
64
+ name: rocco
65
65
  prerelease: false
66
66
  requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ type: :development
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: git
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ segments:
85
+ - 0
86
+ version: "0"
87
+ type: :development
88
+ version_requirements: *id005
89
+ - !ruby/object:Gem::Dependency
90
+ name: pygments
91
+ prerelease: false
92
+ requirement: &id006 !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ segments:
98
+ - 0
99
+ version: "0"
100
+ type: :development
101
+ version_requirements: *id006
102
+ - !ruby/object:Gem::Dependency
103
+ name: rspec
104
+ prerelease: false
105
+ requirement: &id007 !ruby/object:Gem::Requirement
67
106
  none: false
68
107
  requirements:
69
108
  - - ~>
@@ -74,7 +113,7 @@ dependencies:
74
113
  - 0
75
114
  version: 2.4.0
76
115
  type: :development
77
- version_requirements: *id004
116
+ version_requirements: *id007
78
117
  description: Render any text as markdown, with code highlighting and all!
79
118
  email:
80
119
  - info@codegram.com