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 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
- module GemVersionChecker
6
-
7
- def self.new_version_available?
8
- remote = last_remote_version
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
@@ -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(/_+/,'-')
@@ -1,3 +1,3 @@
1
1
  module Devcenter
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
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.8
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