mongoid_markdown_extension 0.1.6 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 98721c11aa15c68da195f8aa13d89a9f3cc2d204
4
- data.tar.gz: c2d7b530f4b39fef19e734d881bdcfd20579fc42
2
+ SHA256:
3
+ metadata.gz: ec8e015b5cfba63e62b5e27e5291363427d405becf26f9b8b798c61e42dcb080
4
+ data.tar.gz: 535cd7396fb5267661ad155a7f3037d80a03a87fb36db3e1209c097d82609310
5
5
  SHA512:
6
- metadata.gz: 3406c9a2a958ae0394739e30bdcedd5ea4a369a3ee75819f0c4de6881ed5adfea88bc507107f10e8397b9d893b7263a95710bd95368c0f0fd3f5fe92079717c3
7
- data.tar.gz: a22a1a4522e9ce2e022153a8868cf9e78d07891bf3ea87b192e1381588e0c3658e331df1bc2b32f63dc495045918b9413d6fc24aa535709bf235650927cd391f
6
+ metadata.gz: 2180a3997703c5a2a84624b754a29ffc59a233c82d1ffb328ba5cfd2a70d6e3463958cea22af745071958c95320a50cf4ee40459a39ebd4debe031f895b17599
7
+ data.tar.gz: f2cf2ea23f98fc0a576c7f9b4d99e3ae97a99a801ac8727358b6668b8ad255239292caf7eb7f70680df4ca7cb8b20dd8278a3b7e6265ed3cd3f0b3df0562d553
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.7.2
data/.travis.yml CHANGED
@@ -11,3 +11,14 @@ notifications:
11
11
  - tomas.celizna@gmail.com
12
12
  on_failure: change
13
13
  on_success: never
14
+
15
+ matrix:
16
+ include:
17
+ - rvm: 2.3.3
18
+ env: MONGOID_VERSION=4
19
+ - rvm: 2.3.3
20
+ env: MONGOID_VERSION=5
21
+ - rvm: 2.7.2
22
+ env: MONGOID_VERSION=6
23
+ - rvm: 2.7.2
24
+ env: MONGOID_VERSION=7
data/CHANGELOG.md ADDED
@@ -0,0 +1,20 @@
1
+ # CHANGELOG
2
+
3
+ ## 0.2.0
4
+
5
+ - Added `linebreaks` option to `to_inline_html`
6
+ - Added `inline_render_class` configuration option
7
+ - Fixed `to_inline_html`
8
+ - Fixed usage of String methods
9
+
10
+ ## 0.1.10
11
+
12
+ - Fixed passing configuration to `InlineRenderer`
13
+
14
+ ## 0.1.9
15
+
16
+ - `#to_stripped_s` removes leading & trailing white-space (null, horizontal tab, line feed, vertical tab, form feed, carriage return, space) using Ruby's `#strip`
17
+
18
+ ## 0.1.8
19
+
20
+ - Mongoid 7 compatibility
data/Gemfile CHANGED
@@ -1,4 +1,12 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in mongoid_markdown_extension.gemspec
4
- gemspec
4
+ gemspec
5
+
6
+ case version = ENV['MONGOID_VERSION'] || '~> 7.0'
7
+ when /7/ then gem 'mongoid', '~> 7.0'
8
+ when /6/ then gem 'mongoid', '~> 6.0'
9
+ when /5/ then gem 'mongoid', '~> 5.1'
10
+ when /4/ then gem 'mongoid', '~> 4.0'
11
+ else gem 'mongoid', version
12
+ end
@@ -1,3 +1,5 @@
1
+ require 'mongoid'
2
+
1
3
  require 'mongoid_markdown_extension/inline_renderer'
2
4
  require 'mongoid_markdown_extension/markdown'
3
5
  require 'mongoid_markdown_extension/version'
@@ -40,8 +40,11 @@ module MongoidMarkdownExtension
40
40
  nil
41
41
  end
42
42
 
43
- def paragraph(text)
44
- text + '<br /><br />'
43
+ def postprocess(full_document)
44
+ full_document
45
+ .gsub(/(<\/p>\s*<p>)+?/, '<br><br>')
46
+ .gsub(/(<\/?p>)+?/, '')
47
+ .chop
45
48
  end
46
49
  end
47
50
  end
@@ -3,87 +3,86 @@ require 'redcarpet/render_strip'
3
3
 
4
4
  module MongoidMarkdownExtension
5
5
  class Markdown < String
6
- def initialize(str)
7
- super str.to_s
8
- @str = str.to_s
6
+ class << self
7
+ attr_writer :configuration
9
8
  end
10
9
 
11
- def to_s
12
- @str
10
+ def self.configuration
11
+ @configuration ||= Configuration.new
13
12
  end
14
13
 
15
- def to_html
16
- markdown_renderer.render(@str).html_safe
14
+ def self.reset
15
+ @configuration = Configuration.new
17
16
  end
18
17
 
19
- def to_inline_html
20
- markdown_inline_renderer.render(@str).gsub(/(<br\s?\/?>)+?\Z/, '').html_safe
18
+ def self.configure
19
+ yield(configuration)
21
20
  end
22
21
 
23
- def to_stripped_s
24
- markdown_stripdown_renderer.render(@str)
22
+ def self.demongoize(value)
23
+ Markdown.new(value)
25
24
  end
26
25
 
27
- def mongoize
28
- @str
26
+ def self.mongoize(value)
27
+ case value
28
+ when Markdown then value.mongoize
29
+ else value
30
+ end
29
31
  end
30
32
 
31
- private # =============================================================
33
+ def self.evolve(value)
34
+ case value
35
+ when Markdown then value.mongoize
36
+ else value
37
+ end
38
+ end
32
39
 
33
- def markdown_renderer
34
- Redcarpet::Markdown.new(
35
- self.class.configuration.render_class.new(self.class.configuration.render_options),
36
- self.class.configuration.extensions
37
- )
40
+ def initialize(str)
41
+ super(str.to_s)
38
42
  end
39
43
 
40
- # TODO: how to combine custom render class with the InlineRenderer?
41
- def markdown_inline_renderer
42
- Redcarpet::Markdown.new(InlineRenderer, tables: false)
44
+ def to_html
45
+ markdown_renderer.render(to_s).html_safe
43
46
  end
44
47
 
45
- def markdown_stripdown_renderer
46
- Redcarpet::Markdown.new(Redcarpet::Render::StripDown, space_after_headers: true)
48
+ def to_inline_html(line_breaks: false)
49
+ rendered = markdown_inline_renderer.render(to_s).gsub(/(<br\s?\/?>)+?\z/, '')
50
+ rendered.gsub!(/(<br\s?\/?>)+?\Z/, '') if !line_breaks
51
+ rendered.html_safe
47
52
  end
48
53
 
49
- # ---------------------------------------------------------------------
54
+ def to_stripped_s
55
+ markdown_stripdown_renderer.render(to_s).try(:strip)
56
+ end
50
57
 
51
- class << self
52
- attr_accessor :configuration
58
+ private
53
59
 
54
- def configure
55
- @configuration ||= Configuration.new
56
- yield @configuration
57
- end
60
+ def markdown_renderer
61
+ render_class = MongoidMarkdownExtension::Markdown.configuration.render_class
62
+ render_options = MongoidMarkdownExtension::Markdown.configuration.render_options
63
+ extensions = MongoidMarkdownExtension::Markdown.configuration.extensions
58
64
 
59
- def configuration
60
- @configuration ||= Configuration.new
61
- end
65
+ Redcarpet::Markdown.new(render_class.new(render_options), extensions)
66
+ end
62
67
 
63
- def demongoize(value)
64
- Markdown.new(value)
65
- end
68
+ # TODO: how to combine custom render class with the InlineRenderer?
69
+ def markdown_inline_renderer
70
+ inline_render_class = MongoidMarkdownExtension::Markdown.configuration.inline_render_class
71
+ render_options = MongoidMarkdownExtension::Markdown.configuration.render_options
72
+ extensions = MongoidMarkdownExtension::Markdown.configuration.extensions
73
+ extensions[:tables] = false
66
74
 
67
- def mongoize(value)
68
- case value
69
- when Markdown then value.mongoize
70
- else value
71
- end
72
- end
75
+ Redcarpet::Markdown.new(inline_render_class.new(render_options), extensions)
76
+ end
73
77
 
74
- def evolve(value)
75
- case value
76
- when Markdown then value.mongoize
77
- else value
78
- end
79
- end
78
+ def markdown_stripdown_renderer
79
+ Redcarpet::Markdown.new(Redcarpet::Render::StripDown)
80
80
  end
81
81
  end
82
82
 
83
- # ---------------------------------------------------------------------
84
-
85
83
  class Configuration
86
84
  attr_accessor :extensions
85
+ attr_accessor :inline_render_class
87
86
  attr_accessor :render_class
88
87
  attr_accessor :render_options
89
88
 
@@ -96,6 +95,7 @@ module MongoidMarkdownExtension
96
95
  strikethrough: true,
97
96
  superscript: true
98
97
  }
98
+ @inline_render_class = MongoidMarkdownExtension::InlineRenderer
99
99
  @render_class = Redcarpet::Render::HTML
100
100
  @render_options = {}
101
101
  end
@@ -1,3 +1,3 @@
1
1
  module MongoidMarkdownExtension
2
- VERSION = '0.1.6'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -18,10 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'redcarpet', '>= 3.1.2'
22
- spec.add_dependency 'mongoid', '>= 4.0'
21
+ spec.add_dependency 'redcarpet', '~> 3.4'
22
+ spec.add_dependency 'mongoid', '>= 4.0', '< 8'
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 1.6'
24
+ spec.add_development_dependency 'bundler'
25
25
  spec.add_development_dependency 'coveralls'
26
26
  spec.add_development_dependency 'rake', '~> 10.0'
27
27
  end
@@ -1,7 +1,5 @@
1
1
  require 'test_helper'
2
2
 
3
- # ---------------------------------------------------------------------
4
-
5
3
  class MongoidMarkdownExtensionTest
6
4
  include Mongoid::Document
7
5
  field :body, type: MongoidMarkdownExtension::Markdown
@@ -29,15 +27,20 @@ module MongoidMarkdownExtension
29
27
  let(:string) { 'some text with _italic_' }
30
28
  subject { MongoidMarkdownExtension::Markdown.new(string) }
31
29
 
30
+ after(:each) do
31
+ MongoidMarkdownExtension::Markdown.reset
32
+ end
33
+
32
34
  describe 'configuration' do
33
35
  describe 'setup block' do
34
36
  it 'yields self' do
35
37
  MongoidMarkdownExtension::Markdown.configure do |config|
36
- config.must_be_kind_of Configuration
38
+ _(config).must_be_kind_of MongoidMarkdownExtension::Configuration
37
39
  end
38
40
  end
41
+
39
42
  it 'returns default values' do
40
- MongoidMarkdownExtension::Markdown.configuration.extensions.must_equal(
43
+ _(MongoidMarkdownExtension::Markdown.configuration.extensions).must_equal(
41
44
  autolink: true,
42
45
  footnotes: true,
43
46
  highlight: true,
@@ -45,80 +48,105 @@ module MongoidMarkdownExtension
45
48
  strikethrough: true,
46
49
  superscript: true
47
50
  )
48
- MongoidMarkdownExtension::Markdown.configuration.render_class.must_equal Redcarpet::Render::HTML
49
- MongoidMarkdownExtension::Markdown.configuration.render_options.must_equal({})
51
+ _(MongoidMarkdownExtension::Markdown.configuration.inline_render_class).must_equal MongoidMarkdownExtension::InlineRenderer
52
+ _(MongoidMarkdownExtension::Markdown.configuration.render_class).must_equal Redcarpet::Render::HTML
53
+ _(MongoidMarkdownExtension::Markdown.configuration.render_options).must_equal({})
50
54
  end
51
55
  end
52
56
  end
53
57
 
54
- # ---------------------------------------------------------------------
55
-
56
58
  describe '#to_s' do
57
59
  it 'returns the original value' do
58
- subject.to_s.must_equal string
60
+ _(subject.to_s).must_equal string
59
61
  end
60
62
  end
61
63
 
62
64
  describe '#to_html' do
63
65
  it 'survives nil' do
64
- MongoidMarkdownExtension::Markdown.new(nil).to_html.must_equal ''
66
+ _(MongoidMarkdownExtension::Markdown.new(nil).to_html).must_equal ''
65
67
  end
68
+
66
69
  it 'converts the string to html' do
67
- subject.to_html.must_equal Redcarpet::Markdown.new(Redcarpet::Render::HTML).render(string)
70
+ _(subject.to_html).must_equal Redcarpet::Markdown.new(Redcarpet::Render::HTML).render(string)
68
71
  end
69
72
  end
70
73
 
71
74
  describe '#to_inline_html' do
72
75
  let(:string) { "some text with _italic_\n\nfoo" }
76
+ let(:string_with_line_breaks) { "some text with line break \nfoo" }
73
77
 
74
78
  it 'survives nil' do
75
- MongoidMarkdownExtension::Markdown.new(nil).to_inline_html.must_equal ''
79
+ _(MongoidMarkdownExtension::Markdown.new(nil).to_inline_html).must_equal ''
76
80
  end
81
+
77
82
  it 'converts the string to html' do
78
- subject.to_inline_html.wont_include '<p>'
83
+ _(subject.to_inline_html).wont_include '<p>'
84
+ end
85
+
86
+ it 'replaces <p> with <br>' do
87
+ _(subject.to_inline_html).must_equal 'some text with <em>italic</em><br><br>foo'
79
88
  end
80
- it 'replaces <p> with <br />' do
81
- subject.to_inline_html.must_equal 'some text with <em>italic</em><br /><br />foo'
89
+
90
+ it 'allows line breaks' do
91
+ inline_html = MongoidMarkdownExtension::Markdown
92
+ .new(string_with_line_breaks)
93
+ .to_inline_html(line_breaks: true)
94
+ _(inline_html).must_equal "some text with line break<br>\nfoo"
82
95
  end
83
96
  end
84
97
 
85
98
  describe '#to_stripped_s' do
86
99
  it 'survives nil' do
87
- MongoidMarkdownExtension::Markdown.new(nil).to_stripped_s.must_equal ''
100
+ _(MongoidMarkdownExtension::Markdown.new(nil).to_stripped_s).must_equal ''
88
101
  end
102
+
89
103
  it 'converts the markdown to stripped string' do
90
- subject.to_stripped_s.wont_include '_'
104
+ _(subject.to_stripped_s).wont_include '_'
105
+ end
106
+
107
+ it 'removes newlines' do
108
+ _(subject.to_stripped_s).wont_include "\n"
91
109
  end
92
110
  end
93
111
 
94
112
  describe '#mongoize' do
95
113
  it 'returns string' do
96
- subject.mongoize.must_equal string
114
+ _(subject.mongoize).must_equal string
97
115
  end
98
116
  end
99
117
 
100
- # ---------------------------------------------------------------------
101
-
102
118
  describe '.mongoize' do
103
119
  describe 'when passed a string' do
104
120
  it 'returns it back' do
105
- MongoidMarkdownExtension::Markdown.mongoize(string).must_equal string
121
+ _(MongoidMarkdownExtension::Markdown.mongoize(string)).must_equal string
106
122
  end
107
123
  end
124
+
108
125
  describe 'when passed markdown object' do
109
126
  it 'returns its string' do
110
- MongoidMarkdownExtension::Markdown.mongoize(subject).must_be_kind_of String
127
+ _(MongoidMarkdownExtension::Markdown.mongoize(subject)).must_be_kind_of String
111
128
  end
112
129
  end
113
130
  end
114
131
 
115
132
  describe '.demongoize' do
116
133
  it 'does not change the value' do
117
- MongoidMarkdownExtension::Markdown.demongoize(string).must_equal string
134
+ _(MongoidMarkdownExtension::Markdown.demongoize(string)).must_equal string
118
135
  end
119
136
 
120
137
  it 'returns markdown object' do
121
- MongoidMarkdownExtension::Markdown.demongoize(string).must_be_kind_of MongoidMarkdownExtension::Markdown
138
+ _(MongoidMarkdownExtension::Markdown.demongoize(string)).must_be_kind_of MongoidMarkdownExtension::Markdown
139
+ end
140
+ end
141
+
142
+ describe "splitting" do
143
+ it "returns correctly instantiated markdown objects" do
144
+ markdown = MongoidMarkdownExtension::Markdown.new("foo\nbar\nfar\nboo")
145
+ split_markdown = markdown.split("\n")
146
+
147
+ _(split_markdown.first).must_be_kind_of MongoidMarkdownExtension::Markdown
148
+ _(split_markdown.first.to_s).must_equal "foo"
149
+ _(split_markdown.first.to_html).must_match /<p>foo<\/p>/
122
150
  end
123
151
  end
124
152
  end
data/test/test_helper.rb CHANGED
@@ -1,10 +1,11 @@
1
1
  require 'bundler/setup'
2
- require 'mongoid'
3
- require 'mongoid_markdown_extension'
2
+
4
3
  require 'minitest'
5
4
  require 'minitest/autorun'
6
5
  require 'minitest/spec'
7
6
 
7
+ require 'mongoid_markdown_extension'
8
+
8
9
  if ENV['CI']
9
10
  require 'coveralls'
10
11
  Coveralls.wear!
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_markdown_extension
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Celizna
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-24 00:00:00.000000000 Z
11
+ date: 2021-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redcarpet
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.1.2
19
+ version: '3.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.1.2
26
+ version: '3.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mongoid
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -31,6 +31,9 @@ dependencies:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '4.0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '8'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
@@ -38,20 +41,23 @@ dependencies:
38
41
  - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  version: '4.0'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '8'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: bundler
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - "~>"
51
+ - - ">="
46
52
  - !ruby/object:Gem::Version
47
- version: '1.6'
53
+ version: '0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - "~>"
58
+ - - ">="
53
59
  - !ruby/object:Gem::Version
54
- version: '1.6'
60
+ version: '0'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: coveralls
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -90,7 +96,9 @@ extra_rdoc_files: []
90
96
  files:
91
97
  - ".coveralls.yml"
92
98
  - ".gitignore"
99
+ - ".ruby-version"
93
100
  - ".travis.yml"
101
+ - CHANGELOG.md
94
102
  - Gemfile
95
103
  - LICENSE
96
104
  - README.md
@@ -121,8 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
129
  - !ruby/object:Gem::Version
122
130
  version: '0'
123
131
  requirements: []
124
- rubyforge_project:
125
- rubygems_version: 2.4.5.1
132
+ rubygems_version: 3.1.4
126
133
  signing_key:
127
134
  specification_version: 4
128
135
  summary: Custom field type for Mongoid that handles Markdown conversion via Redcarpet