reverse_markdown 0.5.0 → 0.5.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d29227386b5418e906da5a4cb42ce616a2d3872b
4
- data.tar.gz: 0f433297212a99d783573daac3fd3723e7d9f6a0
3
+ metadata.gz: 2cd83465e91f441918e2b09ff1a9aca35b029e74
4
+ data.tar.gz: b605fad98b1666375bc80a1d16db02388a6aa43a
5
5
  SHA512:
6
- metadata.gz: 23ff8eb3e7a76e197b5526fcdf6c14d899e1ec600f1b40046d5584e2c40d62a9f22734656b5843f38ec5fa53dcf3a31f7b9baa7c2962e993eb07e5d4486f3afa
7
- data.tar.gz: 2e46ce50817a0e735329dd2e73a9d47943e284a7cfb440362c8f8b6b1cbbb4d9945a6c492bafe8bd34843b7987fe1556410d29d4f6b34ce1d7936c570759f5dc
6
+ metadata.gz: aad0b3de89e84616aa8c1de8af86949a3ae6559c90ed1361aac5e747f163b5e419fdebaab60288dfe0da3153890a5320fb80f0ee575800dcf3c7e49be5b0cc3d
7
+ data.tar.gz: dfde7c437ca43d2a87ed4d009b4870766b27e81e75a708092777b709eeac4795fd441c2e9652f2db91e59d02ec1131bf7016d0d6513e597d7618c93589c6b26c
data/.travis.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  rvm:
2
+ - 1.9.3
2
3
  - 2.0.0
3
4
  - 2.1.0
4
5
  - 2.1.1
data/README.md CHANGED
@@ -4,20 +4,29 @@ Transform html into markdown. Useful for example if you want to import html into
4
4
 
5
5
  [![Build Status](https://secure.travis-ci.org/xijo/reverse_markdown.png?branch=master)](https://travis-ci.org/xijo/reverse_markdown) [![Gem Version](https://badge.fury.io/rb/reverse_markdown.png)](http://badge.fury.io/rb/reverse_markdown) [![Code Climate](https://codeclimate.com/github/xijo/reverse_markdown.png)](https://codeclimate.com/github/xijo/reverse_markdown) [![Code Climate](https://codeclimate.com/github/xijo/reverse_markdown/coverage.png)](https://codeclimate.com/github/xijo/reverse_markdown)
6
6
 
7
- ## Migrate to 0.5.0
7
+ ## Changelog
8
+
9
+ ### 0.5.1 - April 2014
10
+
11
+ 1. Adds support for ruby versions 1.9.3 back in
12
+ 2. More options for handling of unknown tags
13
+ 3. Bugfixes in `li` indentation behavior
14
+
15
+ ### 0.5.0 - March 2014
8
16
 
9
17
  There were some breaking changes, please make sure you don't miss them:
10
18
 
11
- 1. Only ruby versions 2.0.0 or a above are supported
19
+ 1. Only ruby versions 2.0.0 or above are supported
12
20
  2. There is no `Mapper` class any more. Just use `ReverseMarkdown.convert(input, options)`
13
21
  3. Config option `github_style_code_blocks` changed its name to `github_flavored`
14
22
 
15
23
  Please open an issue and let me know about it if you have any trouble with the new version.
16
24
 
25
+
17
26
  ## Requirements
18
27
 
19
28
  1. [Nokogiri](http://nokogiri.org/)
20
- 2. Ruby 2.0.0 or higher
29
+ 2. Ruby 1.9.3 or higher
21
30
 
22
31
  ## Installation
23
32
 
@@ -67,15 +76,19 @@ $ cat file.html | reverse_markdown > file.md
67
76
 
68
77
  The following options are available:
69
78
 
70
- - `ignore_unknown_tags` (default `true`) - bypass unknown tags instead of raising an `ReverseMarkdown::UnknownTagError`
71
- - `github_flavored` (default `false`) - use [github flavored markdown](https://help.github.com/articles/github-flavored-markdown) (yet only code blocks are supported)
79
+ - `unknown_tags` (default `pass_through`) - how to handle unknown tags. Valid options are:
80
+ - `pass_through` - Include the unknown tag completely into the result
81
+ - `drop` - Drop the unknown tag and its content
82
+ - `bypass` - Ignore the unknown tag but try to convert its content
83
+ - `raise` - Raise an error to let you know
84
+ - `github_flavored` (default `false`) - use [github flavored markdown](https://help.github.com/articles/github-flavored-markdown) (yet only code blocks are supported)
72
85
 
73
86
  ### As options
74
87
 
75
88
  Just pass your chosen configuration options in after the input
76
89
 
77
90
  ```ruby
78
- ReverseMarkdown.convert(input, ignore_unknown_tags: false, github_flavored: true)
91
+ ReverseMarkdown.convert(input, unknown_tags: :raise, github_flavored: true)
79
92
  ```
80
93
 
81
94
  ### Preconfigure
@@ -92,6 +105,7 @@ end
92
105
 
93
106
  # Related stuff
94
107
 
108
+ - [Write custom converters](https://github.com/xijo/reverse_markdown/wiki/Write-your-own-converter) - Wiki entry about how to write your own converter
95
109
  - [html_massage](https://github.com/harlantwood/html_massage) - A gem by Harlan T. Wood to convert regular sites into markdown using reverse_markdown
96
110
  - [word-to-markdown](https://github.com/benbalter/word-to-markdown) - Convert word docs into markdown while using reverse_markdown, by Ben Balter
97
111
  - [markdown syntax](http://daringfireball.net/projects/markdown) - The markdown syntax specification
@@ -9,9 +9,11 @@ require 'reverse_markdown/converters/base'
9
9
  require 'reverse_markdown/converters/a'
10
10
  require 'reverse_markdown/converters/blockquote'
11
11
  require 'reverse_markdown/converters/br'
12
+ require 'reverse_markdown/converters/bypass'
12
13
  require 'reverse_markdown/converters/code'
14
+ require 'reverse_markdown/converters/del'
13
15
  require 'reverse_markdown/converters/div'
14
- require 'reverse_markdown/converters/dump'
16
+ require 'reverse_markdown/converters/drop'
15
17
  require 'reverse_markdown/converters/em'
16
18
  require 'reverse_markdown/converters/h'
17
19
  require 'reverse_markdown/converters/hr'
@@ -24,8 +26,8 @@ require 'reverse_markdown/converters/pre'
24
26
  require 'reverse_markdown/converters/strong'
25
27
  require 'reverse_markdown/converters/table'
26
28
  require 'reverse_markdown/converters/td'
27
- require 'reverse_markdown/converters/tr'
28
29
  require 'reverse_markdown/converters/text'
30
+ require 'reverse_markdown/converters/tr'
29
31
 
30
32
  module ReverseMarkdown
31
33
 
@@ -38,6 +38,12 @@ module ReverseMarkdown
38
38
  end
39
39
  end
40
40
 
41
+ result = result.gsub /\s?~{2,}.*?~{2,}\s?/ do |match|
42
+ preserve_border_whitespaces(match, default_border: ' ') do
43
+ match.strip.sub('~~ ', '~~').sub(' ~~', '~~')
44
+ end
45
+ end
46
+
41
47
  result.gsub /\s?\[.*?\]\s?/ do |match|
42
48
  preserve_border_whitespaces(match) do
43
49
  match.strip.sub('[ ', '[').sub(' ]', ']')
@@ -47,10 +53,11 @@ module ReverseMarkdown
47
53
 
48
54
  private
49
55
 
50
- def preserve_border_whitespaces(string, default_border: '', &block)
51
- string_start = present_or_default(string[/\A\s*/], default_border)
52
- string_end = present_or_default(string[/\s*\Z/], default_border)
53
- result = yield
56
+ def preserve_border_whitespaces(string, options = {}, &block)
57
+ default_border = options.fetch(:default_border, '')
58
+ string_start = present_or_default(string[/\A\s*/], default_border)
59
+ string_end = present_or_default(string[/\s*\Z/], default_border)
60
+ result = yield
54
61
  string_start + result + string_end
55
62
  end
56
63
 
@@ -1,6 +1,6 @@
1
1
  module ReverseMarkdown
2
2
  class Config
3
- attr_accessor :ignore_unknown_tags, :github_flavored
3
+ attr_accessor :unknown_tags, :github_flavored
4
4
 
5
5
  def initialize
6
6
  reset
@@ -13,8 +13,8 @@ module ReverseMarkdown
13
13
  end
14
14
 
15
15
  def reset
16
- @ignore_unknown_tags = true
17
- @github_flavored = false
16
+ @unknown_tags = :pass_through
17
+ @github_flavored = false
18
18
  end
19
19
  end
20
20
  end
@@ -12,10 +12,17 @@ module ReverseMarkdown
12
12
  private
13
13
 
14
14
  def self.default_converter(tag_name)
15
- if ReverseMarkdown.config.ignore_unknown_tags
16
- ReverseMarkdown::Converters::Dump.new
17
- else
15
+ case ReverseMarkdown.config.unknown_tags.to_sym
16
+ when :pass_through
17
+ ReverseMarkdown::Converters::PassThrough.new
18
+ when :drop
19
+ ReverseMarkdown::Converters::Drop.new
20
+ when :bypass
21
+ ReverseMarkdown::Converters::Bypass.new
22
+ when :raise
18
23
  raise UnknownTagError, "unknown tag: #{tag_name}"
24
+ else
25
+ raise InvalidConfigurationError, "unknown value #{ReverseMarkdown.config.unknown_tags.inspect} for ReverseMarkdown.config.unknown_tags"
19
26
  end
20
27
  end
21
28
  end
@@ -4,7 +4,7 @@ module ReverseMarkdown
4
4
  def convert(node)
5
5
  content = treat_children(node).strip
6
6
  content = ReverseMarkdown.cleaner.remove_newlines(content)
7
- '> ' << content.lines.join('> ')
7
+ '> ' << content.lines.to_a.join('> ')
8
8
  end
9
9
  end
10
10
 
@@ -0,0 +1,14 @@
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Bypass < Base
4
+ def convert(node)
5
+ treat_children(node)
6
+ end
7
+ end
8
+
9
+ register :document, Bypass.new
10
+ register :html, Bypass.new
11
+ register :body, Bypass.new
12
+ register :span, Bypass.new
13
+ end
14
+ end
@@ -0,0 +1,29 @@
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Del < Base
4
+ def convert(node)
5
+ content = treat_children(node)
6
+ if disabled? || content.strip.empty? || already_crossed_out?(node)
7
+ content
8
+ else
9
+ "~~#{content}~~"
10
+ end
11
+ end
12
+
13
+ def enabled?
14
+ ReverseMarkdown.config.github_flavored
15
+ end
16
+
17
+ def disabled?
18
+ !enabled?
19
+ end
20
+
21
+ def already_crossed_out?(node)
22
+ node.ancestors('del').size > 0 || node.ancestors('strike').size > 0
23
+ end
24
+ end
25
+
26
+ register :strike, Del.new
27
+ register :del, Del.new
28
+ end
29
+ end
@@ -1,8 +1,8 @@
1
1
  module ReverseMarkdown
2
2
  module Converters
3
- class Dump < Base
3
+ class Drop < Base
4
4
  def convert(node)
5
- node.to_s
5
+ ''
6
6
  end
7
7
  end
8
8
  end
@@ -19,7 +19,7 @@ module ReverseMarkdown
19
19
 
20
20
  def indentation_for(node)
21
21
  length = node.ancestors('ol').size + node.ancestors('ul').size
22
- ' ' * (length - 1)
22
+ ' ' * [length - 1, 0].max
23
23
  end
24
24
  end
25
25
 
@@ -2,13 +2,8 @@ module ReverseMarkdown
2
2
  module Converters
3
3
  class PassThrough < Base
4
4
  def convert(node)
5
- treat_children(node)
5
+ node.to_s
6
6
  end
7
7
  end
8
-
9
- register :document, PassThrough.new
10
- register :html, PassThrough.new
11
- register :body, PassThrough.new
12
- register :span, PassThrough.new
13
8
  end
14
9
  end
@@ -7,7 +7,7 @@ module ReverseMarkdown
7
7
  if ReverseMarkdown.config.github_flavored
8
8
  "```\n" << node.text.strip << "\n```\n"
9
9
  else
10
- "\n\n " << node.text.strip.lines.join(" ") << "\n\n"
10
+ "\n\n " << node.text.strip.lines.to_a.join(" ") << "\n\n"
11
11
  end
12
12
  end
13
13
  end
@@ -4,4 +4,7 @@ module ReverseMarkdown
4
4
 
5
5
  class UnknownTagError < Error
6
6
  end
7
+
8
+ class InvalidConfigurationError < Error
9
+ end
7
10
  end
@@ -1,3 +1,3 @@
1
1
  module ReverseMarkdown
2
- VERSION = "0.5.0"
2
+ VERSION = "0.5.1"
3
3
  end
@@ -24,6 +24,6 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency 'simplecov'
25
25
  s.add_development_dependency 'rake'
26
26
  s.add_development_dependency 'redcarpet'
27
- s.add_development_dependency 'byebug'
27
+ # s.add_development_dependency 'byebug'
28
28
  s.add_development_dependency 'codeclimate-test-reporter'
29
29
  end
@@ -6,16 +6,34 @@ describe ReverseMarkdown do
6
6
  let(:document) { Nokogiri::HTML(input) }
7
7
  let(:result) { ReverseMarkdown.convert(input) }
8
8
 
9
- context 'with ignore_unknown_tags enabled' do
10
- before { ReverseMarkdown.config.ignore_unknown_tags = true }
9
+ context 'with unknown_tags = :pass_through' do
10
+ before { ReverseMarkdown.config.unknown_tags = :pass_through }
11
11
 
12
12
  it { result.should include "<foo><bar>Foo with bar</bar></foo>" }
13
13
  end
14
14
 
15
- context 'with ignore_unknown_tags disabled' do
16
- before { ReverseMarkdown.config.ignore_unknown_tags = false }
15
+ context 'with unknown_tags = :raise' do
16
+ before { ReverseMarkdown.config.unknown_tags = :raise }
17
17
 
18
18
  it { expect { result }.to raise_error(ReverseMarkdown::UnknownTagError) }
19
19
  end
20
+
21
+ context 'with unknown_tags = :drop' do
22
+ before { ReverseMarkdown.config.unknown_tags = :drop }
23
+
24
+ it { result.should eq '' }
25
+ end
26
+
27
+ context 'with unknown_tags = :bypass' do
28
+ before { ReverseMarkdown.config.unknown_tags = :bypass }
29
+
30
+ it { result.should eq "Foo with bar\n\n" }
31
+ end
32
+
33
+ context 'with unknown_tags = :something_wrong' do
34
+ before { ReverseMarkdown.config.unknown_tags = :something_wrong }
35
+
36
+ it { expect { result }.to raise_error(ReverseMarkdown::InvalidConfigurationError) }
37
+ end
20
38
  end
21
39
 
@@ -71,6 +71,12 @@ describe ReverseMarkdown::Cleaner do
71
71
  result = cleaner.clean_tag_borders(input)
72
72
  result.should eq "1 __italic__ 2 __italic__ 3 __italic__ 4"
73
73
  end
74
+
75
+ it 'cleans strikethrough stuff as well' do
76
+ input = "1 ~~italic ~~ 2 ~~ italic~~ 3~~italic ~~4"
77
+ result = cleaner.clean_tag_borders(input)
78
+ result.should eq "1 ~~italic~~ 2 ~~italic~~ 3 ~~italic~~ 4"
79
+ end
74
80
  end
75
81
 
76
82
  end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe ReverseMarkdown::Converters::Del do
4
+ let(:converter) { ReverseMarkdown::Converters::Del.new }
5
+
6
+ context 'with github_flavored = true' do
7
+ before { ReverseMarkdown.config.github_flavored = true }
8
+
9
+ it 'converts the input as expected' do
10
+ input = Nokogiri::XML.parse('<del>deldeldel</del>').root
11
+ converter.convert(input).should eq '~~deldeldel~~'
12
+ end
13
+
14
+ it 'skips empty tags' do
15
+ input = Nokogiri::XML.parse('<del></del>').root
16
+ converter.convert(input).should eq ''
17
+ end
18
+
19
+ it 'knows about its enabled/disabled state' do
20
+ converter.should be_enabled
21
+ converter.should_not be_disabled
22
+ end
23
+ end
24
+
25
+ context 'with github_flavored = false' do
26
+ before { ReverseMarkdown.config.github_flavored = false }
27
+
28
+ it 'does not convert anything' do
29
+ input = Nokogiri::XML.parse('<del>deldeldel</del>').root
30
+ converter.convert(input).should eq 'deldeldel'
31
+ end
32
+
33
+ it 'knows about its enabled/disabled state' do
34
+ converter.should_not be_enabled
35
+ converter.should be_disabled
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ReverseMarkdown::Converters::Li do
4
+
5
+ let(:converter) { ReverseMarkdown::Converters::Li.new }
6
+
7
+ it 'does not fail without a valid parent context' do
8
+ input = Nokogiri::XML.parse("<li>foo</li>").root
9
+ result = converter.convert(input)
10
+ result.should eq "- foo\n"
11
+ end
12
+
13
+ end
data/spec/spec_helper.rb CHANGED
@@ -2,7 +2,7 @@ require 'codeclimate-test-reporter'
2
2
  CodeClimate::TestReporter.start
3
3
 
4
4
  require 'simplecov'
5
- require 'byebug'
5
+ # require 'byebug'
6
6
 
7
7
  SimpleCov.adapters.define 'gem' do
8
8
  add_filter '/spec/'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reverse_markdown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johannes Opper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-02 00:00:00.000000000 Z
11
+ date: 2014-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -80,20 +80,6 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: byebug
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: codeclimate-test-reporter
99
85
  requirement: !ruby/object:Gem::Requirement
@@ -132,9 +118,11 @@ files:
132
118
  - lib/reverse_markdown/converters/base.rb
133
119
  - lib/reverse_markdown/converters/blockquote.rb
134
120
  - lib/reverse_markdown/converters/br.rb
121
+ - lib/reverse_markdown/converters/bypass.rb
135
122
  - lib/reverse_markdown/converters/code.rb
123
+ - lib/reverse_markdown/converters/del.rb
136
124
  - lib/reverse_markdown/converters/div.rb
137
- - lib/reverse_markdown/converters/dump.rb
125
+ - lib/reverse_markdown/converters/drop.rb
138
126
  - lib/reverse_markdown/converters/em.rb
139
127
  - lib/reverse_markdown/converters/h.rb
140
128
  - lib/reverse_markdown/converters/hr.rb
@@ -180,6 +168,8 @@ files:
180
168
  - spec/lib/reverse_markdown/cleaner_spec.rb
181
169
  - spec/lib/reverse_markdown/converters/blockquote_spec.rb
182
170
  - spec/lib/reverse_markdown/converters/br_spec.rb
171
+ - spec/lib/reverse_markdown/converters/del_spec.rb
172
+ - spec/lib/reverse_markdown/converters/li_spec.rb
183
173
  - spec/lib/reverse_markdown_spec.rb
184
174
  - spec/spec_helper.rb
185
175
  homepage: http://github.com/xijo/reverse_markdown
@@ -234,5 +224,7 @@ test_files:
234
224
  - spec/lib/reverse_markdown/cleaner_spec.rb
235
225
  - spec/lib/reverse_markdown/converters/blockquote_spec.rb
236
226
  - spec/lib/reverse_markdown/converters/br_spec.rb
227
+ - spec/lib/reverse_markdown/converters/del_spec.rb
228
+ - spec/lib/reverse_markdown/converters/li_spec.rb
237
229
  - spec/lib/reverse_markdown_spec.rb
238
230
  - spec/spec_helper.rb