devcenter 0.0.8 → 0.0.9
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/devcenter.gemspec +1 -0
- data/lib/devcenter/gem_version_checker.rb +11 -15
- data/lib/devcenter/md_parser.rb +42 -11
- data/lib/devcenter/version.rb +1 -1
- metadata +17 -1
data/devcenter.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |gem|
|
|
22
22
|
gem.add_runtime_dependency('excon', '~>0.15.4')
|
23
23
|
gem.add_runtime_dependency('launchy', '~>2.1.0')
|
24
24
|
gem.add_runtime_dependency('maruku', '~>0.6.1')
|
25
|
+
gem.add_runtime_dependency('sanitize', '~>2.0.3')
|
25
26
|
gem.add_runtime_dependency('nokogiri', '~>1.5.5')
|
26
27
|
gem.add_runtime_dependency('coderay', '~>1.0.8')
|
27
28
|
gem.add_runtime_dependency('thin', '~>1.5.0')
|
@@ -1,22 +1,18 @@
|
|
1
1
|
require_relative 'version'
|
2
2
|
|
3
|
-
module Devcenter
|
3
|
+
module Devcenter::GemVersionChecker
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
remote && (Gem::Version.new(remote) > Gem::Version.new(Devcenter::VERSION))
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.last_remote_version
|
13
|
-
json = Excon.get('https://rubygems.org/api/v1/versions/devcenter.json').body
|
14
|
-
versions = JSON.parse(json).map{ |v| v['number'] }
|
15
|
-
versions.sort{ |a,b| Gem::Version.new(a) <=> Gem::Version.new(b) }.last
|
16
|
-
rescue
|
17
|
-
nil
|
18
|
-
end
|
5
|
+
def self.new_version_available?
|
6
|
+
remote = last_remote_version
|
7
|
+
remote && (Gem::Version.new(remote) > Gem::Version.new(Devcenter::VERSION))
|
8
|
+
end
|
19
9
|
|
10
|
+
def self.last_remote_version
|
11
|
+
json = Excon.get('https://rubygems.org/api/v1/versions/devcenter.json').body
|
12
|
+
versions = JSON.parse(json).map{ |v| v['number'] }
|
13
|
+
versions.sort{ |a,b| Gem::Version.new(a) <=> Gem::Version.new(b) }.last
|
14
|
+
rescue
|
15
|
+
nil
|
20
16
|
end
|
21
17
|
|
22
18
|
end
|
data/lib/devcenter/md_parser.rb
CHANGED
@@ -2,11 +2,52 @@
|
|
2
2
|
require 'maruku'
|
3
3
|
require 'nokogiri'
|
4
4
|
require 'coderay'
|
5
|
+
require 'sanitize'
|
5
6
|
|
6
7
|
module Devcenter::MdParser
|
7
8
|
class InvalidMarkdownError < Exception; end
|
8
9
|
class InvalidRawHTMLError < Exception; end
|
9
10
|
|
11
|
+
def self.to_html(markdown)
|
12
|
+
html = to_unsanitized_html(markdown)
|
13
|
+
html = sanitize(html)
|
14
|
+
highlight(html)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.to_unsanitized_html(markdown)
|
18
|
+
html = Maruku.new(markdown, :on_error => :raise).to_html
|
19
|
+
html = Nokogiri::HTML::DocumentFragment.parse(html).to_html(:encoding => 'utf-8')
|
20
|
+
verify_raw_html(html)
|
21
|
+
html = underscores_to_dashes_in_subheader_anchors(html)
|
22
|
+
rescue InvalidRawHTMLError => e
|
23
|
+
raise InvalidMarkdownError, e.message
|
24
|
+
rescue => e
|
25
|
+
raise InvalidMarkdownError, parse_maruku_error(e.message)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.sanitize(html)
|
29
|
+
Sanitize.clean(html, sanitize_config)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.sanitize_config
|
33
|
+
return @@sanitize_config if defined?(@@sanitize_config)
|
34
|
+
config = Sanitize::Config::RELAXED
|
35
|
+
config[:attributes][:all] += %w{ id class style name width height border align }
|
36
|
+
config[:attributes]['a'] += %w{ target }
|
37
|
+
config[:elements] += %w{ div span hr tt }
|
38
|
+
|
39
|
+
# embedded videos
|
40
|
+
config[:attributes][:all] += %w{ value src type allowscriptaccess allowfullscreen }
|
41
|
+
config[:elements] += %w{ object param embed }
|
42
|
+
config[:add_attributes] = {
|
43
|
+
'object' => {'allowscriptaccess' => 'never'},
|
44
|
+
'embed' => {'allowscriptaccess' => 'never'},
|
45
|
+
'param' => {'allowscriptaccess' => 'never'}
|
46
|
+
}
|
47
|
+
|
48
|
+
@@sanitize_config = config.merge({remove_contents: true, allow_comments: true})
|
49
|
+
end
|
50
|
+
|
10
51
|
def self.highlight(html)
|
11
52
|
element = "pre>code"
|
12
53
|
pattern = /\A\s*:::(\w+)\s*\n/i
|
@@ -37,19 +78,9 @@ module Devcenter::MdParser
|
|
37
78
|
end
|
38
79
|
end
|
39
80
|
|
40
|
-
def self.to_html(markdown)
|
41
|
-
html = Maruku.new(markdown, :on_error => :raise).to_html
|
42
|
-
verify_raw_html(html)
|
43
|
-
html = underscores_to_dashes_in_subheader_anchors(html)
|
44
|
-
highlight(html)
|
45
|
-
rescue InvalidRawHTMLError => e
|
46
|
-
raise InvalidMarkdownError, e.message
|
47
|
-
rescue => e
|
48
|
-
raise InvalidMarkdownError, parse_maruku_error(e.message)
|
49
|
-
end
|
50
|
-
|
51
81
|
def self.underscores_to_dashes_in_subheader_anchors(html)
|
52
82
|
doc = Nokogiri::HTML::DocumentFragment.parse(html)
|
83
|
+
|
53
84
|
doc.css("h2,h3,h4,h5,h6").each do |node|
|
54
85
|
if node.attributes['id'] && node.attributes['id'].value
|
55
86
|
node.attributes['id'].value = node.attributes['id'].value.gsub(/_+/,'-')
|
data/lib/devcenter/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devcenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -108,6 +108,22 @@ dependencies:
|
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 0.6.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: sanitize
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ~>
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 2.0.3
|
119
|
+
type: :runtime
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ~>
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 2.0.3
|
111
127
|
- !ruby/object:Gem::Dependency
|
112
128
|
name: nokogiri
|
113
129
|
requirement: !ruby/object:Gem::Requirement
|