curldown 0.2.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/curldown.rb +124 -44
- metadata +28 -39
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5ea9b6021f6c175cfcc850480ff92f96980dc1286c745ef25fe9a5a011670abb
|
4
|
+
data.tar.gz: f9e98da7a5337a801288dcafdcb5286d19673cf3777a464605130f5740a78354
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5e3534e2a6ef8e7e35943ae47130b8863ba05289500e0bdd9a76dfbfd67e2ea8efbe67907a66f89bd7d280680fd947a4f074efc024c8ba489a15eec97eaa00d8
|
7
|
+
data.tar.gz: 43a93ba4c4f92c96b9d23111649bd2f53f78e165ca9a27e260ad8bf3bb2f48a7bebf80184bbac480a26525da1d94a6c945671d119e271fcb3ceb66249aeca161
|
data/lib/curldown.rb
CHANGED
@@ -1,43 +1,59 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require 'curb'
|
2
|
+
require 'json'
|
3
|
+
require 'redcarpet'
|
4
|
+
require 'nokogiri'
|
5
|
+
require 'pygments.rb'
|
6
|
+
module Curldown
|
7
|
+
def self.render(user: false, repo: false, url: false, github: false, bitbucket: false)
|
8
|
+
instance = Render.new(user: user, repo: repo, url: url, github: github, bitbucket: bitbucket)
|
9
|
+
instance.render
|
10
|
+
instance.highlight!
|
11
|
+
instance
|
6
12
|
end
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
17
|
-
def get(*options)
|
18
|
-
if !options.empty?
|
19
|
-
@options.merge!(options[0])
|
20
|
-
end
|
21
|
-
if @options[:url]
|
22
|
-
fetch(@options[:url])
|
23
|
-
else
|
24
|
-
fetch("https://raw.github.com/#{@options[:user]}/#{@options[:repo]}/#{@options[:branch]}/#{@options[:file]}")
|
25
|
-
end
|
26
|
-
end
|
27
|
-
def check_response_code(url)
|
28
|
-
if Curl.get(url).response_code == 200
|
29
|
-
true
|
13
|
+
def get(url, json: true)
|
14
|
+
http = Curl::Easy.new(url)
|
15
|
+
http.perform
|
16
|
+
if http.status[0] == "2"
|
17
|
+
if json
|
18
|
+
response = JSON.parse(http.body_str)
|
19
|
+
else
|
20
|
+
response = http.body_str
|
21
|
+
end
|
30
22
|
else
|
31
|
-
|
23
|
+
raise StandardError.new("get method returned #{http.status} code when calling #{http.url}")
|
32
24
|
end
|
25
|
+
response
|
33
26
|
end
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
27
|
+
class Render
|
28
|
+
attr_accessor :user, :repo, :url, :github, :bitbucket, :raw, :html, :lexers
|
29
|
+
def initialize(user: false, repo: false, url: false, github: false, bitbucket: false)
|
30
|
+
@lexers = []
|
31
|
+
Pygments.lexers.each{|k,v| @lexers << v[:aliases] }
|
32
|
+
@lexers.flatten!
|
33
|
+
if url
|
34
|
+
@raw = get(url, json: false)
|
35
|
+
else
|
36
|
+
if github
|
37
|
+
req = GitHub.new(user, repo)
|
38
|
+
elsif bitbucket
|
39
|
+
req = BitBucket.new(user, repo)
|
40
|
+
else
|
41
|
+
raise StandardError.new("Must specify either: github, bitbucket or url parameters.")
|
42
|
+
end
|
43
|
+
req.perform
|
44
|
+
@raw= req.readme_md
|
45
|
+
end
|
46
|
+
end
|
47
|
+
def render
|
48
|
+
md = Redcarpet::Markdown.new(Redcarpet::Render::HTML, fenced_code_blocks: true)
|
49
|
+
@html= md.render(@raw)
|
50
|
+
end
|
51
|
+
def highlight!
|
52
|
+
doc = Nokogiri::HTML(@html)
|
38
53
|
doc.css("pre").each do |pre|
|
39
|
-
|
40
|
-
|
54
|
+
attrs = pre.children[0].attributes['class']
|
55
|
+
if attrs
|
56
|
+
lang = validate_lexer(attrs.value)
|
41
57
|
else
|
42
58
|
lang = "sh"
|
43
59
|
end
|
@@ -46,16 +62,80 @@ class Curldown
|
|
46
62
|
pre.add_next_sibling(parsed)
|
47
63
|
pre.remove
|
48
64
|
end
|
49
|
-
doc.css("body").children.to_html
|
50
|
-
|
51
|
-
|
65
|
+
@html = doc.css("body").children.to_html
|
66
|
+
end
|
67
|
+
def validate_lexer(string)
|
68
|
+
@lexers.include?(string) ? string : "sh"
|
52
69
|
end
|
70
|
+
|
53
71
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
72
|
+
class GitHub
|
73
|
+
include Curldown
|
74
|
+
CORE_URL = "https://raw.githubusercontent.com"
|
75
|
+
attr_accessor :user, :repo_name, :readme_md
|
76
|
+
def initialize(u, r)
|
77
|
+
@user= u
|
78
|
+
@repo_name= r
|
79
|
+
end
|
80
|
+
def perform
|
81
|
+
get_readme
|
82
|
+
end
|
83
|
+
def get_readme
|
84
|
+
["readme.md", "README.md", "README.MD", "Readme.md"].each{|file|
|
85
|
+
begin
|
86
|
+
@readme_md= get("#{CORE_URL}/#{@user}/#{@repo_name}/master/#{file}", json: false)
|
87
|
+
rescue
|
88
|
+
false
|
89
|
+
end
|
90
|
+
}
|
91
|
+
if !@readme_md
|
92
|
+
raise StandardError.new("No readme file found.")
|
93
|
+
else
|
94
|
+
@readme_md
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
class BitBucket
|
100
|
+
include Curldown
|
101
|
+
CORE_URL = "https://api.bitbucket.org/2.0"
|
102
|
+
attr_accessor :user, :repo_name, :commit, :tree, :readme_file, :repo_object, :readme_md
|
103
|
+
def initialize(u, r)
|
104
|
+
@user= u
|
105
|
+
@repo_name= r
|
106
|
+
end
|
107
|
+
def perform
|
108
|
+
get_repo
|
109
|
+
get_last_commit
|
110
|
+
get_tree_object
|
111
|
+
get_readme_file
|
112
|
+
get_readme_md
|
113
|
+
end
|
114
|
+
def get_repo
|
115
|
+
@repo_object= get("#{CORE_URL}/repositories/#{@user}/#{@repo_name}")
|
116
|
+
@repo_name= repo_object['name']
|
117
|
+
@repo_slug= repo_object['slug']
|
118
|
+
end
|
119
|
+
def get_last_commit
|
120
|
+
commits_url = repo_object['links']['commits']['href']
|
121
|
+
commits = get(commits_url)
|
122
|
+
@commit= commits['values'][0]['hash']
|
123
|
+
end
|
124
|
+
def get_tree_object
|
125
|
+
@tree= get("#{CORE_URL}/repositories/#{@user}/#{@repo_slug}/src/#{@commit}/")
|
126
|
+
end
|
127
|
+
def get_readme_file
|
128
|
+
tree['values'].each{|v|
|
129
|
+
if v['path'].match?(/readme.md/i)
|
130
|
+
@readme_file= v['path']
|
131
|
+
end
|
132
|
+
}
|
133
|
+
if !readme_file
|
134
|
+
raise RuntimeError.new("No readme file in repository")
|
135
|
+
end
|
136
|
+
end
|
137
|
+
def get_readme_md
|
138
|
+
@readme_md= get("https://bitbucket.org/#{@user}/#{@repo_name}/raw/#{@commit}/#{@readme_file}", json: false)
|
59
139
|
end
|
60
140
|
end
|
61
|
-
end
|
141
|
+
end
|
metadata
CHANGED
@@ -1,80 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: curldown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Ian Kent
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2021-03-23 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: curb
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version: 0.
|
19
|
+
version: '0.9'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
26
|
+
version: '0.9'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
28
|
+
name: redcarpet
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - "~>"
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
33
|
+
version: '3.5'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - "~>"
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
version: '3.5'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: nokogiri
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.
|
47
|
+
version: '1.11'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - "~>"
|
60
53
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
54
|
+
version: '1.11'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: pygments.rb
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0
|
61
|
+
version: '2.0'
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0
|
68
|
+
version: '2.0'
|
78
69
|
description: A simple tool to parse hosted markdown files into html
|
79
70
|
email: ian@iankent.me
|
80
71
|
executables: []
|
@@ -82,29 +73,27 @@ extensions: []
|
|
82
73
|
extra_rdoc_files: []
|
83
74
|
files:
|
84
75
|
- lib/curldown.rb
|
85
|
-
homepage:
|
76
|
+
homepage: https://bitbucket.org/iankentforrestbrown/curldown
|
86
77
|
licenses:
|
87
78
|
- MIT
|
88
|
-
|
79
|
+
metadata: {}
|
80
|
+
post_install_message:
|
89
81
|
rdoc_options: []
|
90
82
|
require_paths:
|
91
83
|
- lib
|
92
84
|
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
85
|
requirements:
|
95
|
-
- -
|
86
|
+
- - ">="
|
96
87
|
- !ruby/object:Gem::Version
|
97
88
|
version: '0'
|
98
89
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
90
|
requirements:
|
101
|
-
- -
|
91
|
+
- - ">="
|
102
92
|
- !ruby/object:Gem::Version
|
103
93
|
version: '0'
|
104
94
|
requirements: []
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
specification_version: 3
|
95
|
+
rubygems_version: 3.1.4
|
96
|
+
signing_key:
|
97
|
+
specification_version: 4
|
109
98
|
summary: Curldown
|
110
99
|
test_files: []
|