devcenter 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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