curldown 0.1.0 → 2.0.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 +7 -0
- data/lib/curldown.rb +122 -44
- metadata +28 -55
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8ac6237f445424ea2890467651d8562fb7ceb4fb539e0d4617623c5c74c709d6
|
4
|
+
data.tar.gz: 7c7eb51380d773a0554227823c92b5fdb7d2ded8cece4b7a064a6e8f460c7c19
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c8a020822385969123c0c260be7cc2af3d7c2187826070111c73fecdfa73c97d9e13230875f32d701641d1b5a63961530eb3bb09fb9213a3954b30885e725d0f
|
7
|
+
data.tar.gz: 65b99e433ee55ea84bf6d251c509ae7a6f05c4c55ea39397be7bf519f5923d98af1ef59b847af03cb739389ebe6fdf292a75fb7cdcbb8bfc8df1215c6cf8e7e7
|
data/lib/curldown.rb
CHANGED
@@ -1,43 +1,60 @@
|
|
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
|
29
|
+
def initialize(user: false, repo: false, url: false, github: false, bitbucket: false)
|
30
|
+
if url
|
31
|
+
@raw = get(url, json: false)
|
32
|
+
else
|
33
|
+
if github
|
34
|
+
req = GitHub.new(user, repo)
|
35
|
+
elsif bitbucket
|
36
|
+
req = BitBucket.new(user, repo)
|
37
|
+
else
|
38
|
+
raise StandardError.new("Must specify either: github, bitbucket or url parameters.")
|
39
|
+
end
|
40
|
+
req.perform
|
41
|
+
@raw= req.readme_md
|
42
|
+
end
|
43
|
+
end
|
44
|
+
def render
|
45
|
+
md = Redcarpet::Markdown.new(Redcarpet::Render::HTML, fenced_code_blocks: true)
|
46
|
+
@html= md.render(@raw)
|
47
|
+
end
|
48
|
+
def highlight!
|
49
|
+
lexers = []
|
50
|
+
Pygments.lexers.each do |k,v|
|
51
|
+
lexers << v[:aliases]
|
52
|
+
end
|
53
|
+
lexers.flatten!
|
54
|
+
doc = Nokogiri::HTML(@html)
|
38
55
|
doc.css("pre").each do |pre|
|
39
|
-
if
|
40
|
-
lang = pre.attributes[
|
56
|
+
if lexers.include?(pre.children[0].attributes['class'].value)
|
57
|
+
lang = pre.children[0].attributes['class'].value
|
41
58
|
else
|
42
59
|
lang = "sh"
|
43
60
|
end
|
@@ -46,16 +63,77 @@ class Curldown
|
|
46
63
|
pre.add_next_sibling(parsed)
|
47
64
|
pre.remove
|
48
65
|
end
|
49
|
-
doc.css("body").children.to_html
|
50
|
-
else
|
51
|
-
raise "#{url} is responding with a 404 error"
|
66
|
+
@html = doc.css("body").children.to_html
|
52
67
|
end
|
68
|
+
|
53
69
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
70
|
+
class GitHub
|
71
|
+
include Curldown
|
72
|
+
CORE_URL = "https://raw.githubusercontent.com"
|
73
|
+
attr_accessor :user, :repo_name, :readme_md
|
74
|
+
def initialize(u, r)
|
75
|
+
@user= u
|
76
|
+
@repo_name= r
|
77
|
+
end
|
78
|
+
def perform
|
79
|
+
get_readme
|
80
|
+
end
|
81
|
+
def get_readme
|
82
|
+
["readme.md", "README.md", "README.MD", "Readme.md"].each{|file|
|
83
|
+
begin
|
84
|
+
@readme_md= get("#{CORE_URL}/#{@user}/#{@repo_name}/master/#{file}", json: false)
|
85
|
+
rescue
|
86
|
+
false
|
87
|
+
end
|
88
|
+
}
|
89
|
+
if !@readme_md
|
90
|
+
raise StandardError.new("No readme file found.")
|
91
|
+
else
|
92
|
+
@readme_md
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
class BitBucket
|
98
|
+
include Curldown
|
99
|
+
CORE_URL = "https://api.bitbucket.org/2.0"
|
100
|
+
attr_accessor :user, :repo_name, :commit, :tree, :readme_file, :repo_object, :readme_md
|
101
|
+
def initialize(u, r)
|
102
|
+
@user= u
|
103
|
+
@repo_name= r
|
104
|
+
end
|
105
|
+
def perform
|
106
|
+
get_repo
|
107
|
+
get_last_commit
|
108
|
+
get_tree_object
|
109
|
+
get_readme_file
|
110
|
+
get_readme_md
|
111
|
+
end
|
112
|
+
def get_repo
|
113
|
+
@repo_object= get("#{CORE_URL}/repositories/#{@user}/#{@repo_name}")
|
114
|
+
@repo_name= repo_object['name']
|
115
|
+
@repo_slug= repo_object['slug']
|
116
|
+
end
|
117
|
+
def get_last_commit
|
118
|
+
commits_url = repo_object['links']['commits']['href']
|
119
|
+
commits = get(commits_url)
|
120
|
+
@commit= commits['values'][0]['hash']
|
121
|
+
end
|
122
|
+
def get_tree_object
|
123
|
+
@tree= get("#{CORE_URL}/repositories/#{@user}/#{@repo_slug}/src/#{@commit}/")
|
124
|
+
end
|
125
|
+
def get_readme_file
|
126
|
+
tree['values'].each{|v|
|
127
|
+
if v['path'].match?(/readme.md/i)
|
128
|
+
@readme_file= v['path']
|
129
|
+
end
|
130
|
+
}
|
131
|
+
if !readme_file
|
132
|
+
raise RuntimeError.new("No readme file in repository")
|
133
|
+
end
|
134
|
+
end
|
135
|
+
def get_readme_md
|
136
|
+
@readme_md= get("https://bitbucket.org/#{@user}/#{@repo_name}/raw/#{@commit}/#{@readme_file}", json: false)
|
59
137
|
end
|
60
138
|
end
|
61
|
-
end
|
139
|
+
end
|
metadata
CHANGED
@@ -1,96 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: curldown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.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-01-12 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
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 0.5.1
|
70
|
-
type: :runtime
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 0.5.1
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: redcarpet
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
58
|
requirements:
|
83
|
-
- -
|
59
|
+
- - "~>"
|
84
60
|
- !ruby/object:Gem::Version
|
85
|
-
version: 2.
|
61
|
+
version: '2.0'
|
86
62
|
type: :runtime
|
87
63
|
prerelease: false
|
88
64
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
65
|
requirements:
|
91
|
-
- -
|
66
|
+
- - "~>"
|
92
67
|
- !ruby/object:Gem::Version
|
93
|
-
version: 2.
|
68
|
+
version: '2.0'
|
94
69
|
description: A simple tool to parse hosted markdown files into html
|
95
70
|
email: ian@iankent.me
|
96
71
|
executables: []
|
@@ -98,29 +73,27 @@ extensions: []
|
|
98
73
|
extra_rdoc_files: []
|
99
74
|
files:
|
100
75
|
- lib/curldown.rb
|
101
|
-
homepage:
|
76
|
+
homepage: https://bitbucket.org/iankentforrestbrown/curldown
|
102
77
|
licenses:
|
103
78
|
- MIT
|
104
|
-
|
79
|
+
metadata: {}
|
80
|
+
post_install_message:
|
105
81
|
rdoc_options: []
|
106
82
|
require_paths:
|
107
83
|
- lib
|
108
84
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
-
none: false
|
110
85
|
requirements:
|
111
|
-
- -
|
86
|
+
- - ">="
|
112
87
|
- !ruby/object:Gem::Version
|
113
88
|
version: '0'
|
114
89
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
90
|
requirements:
|
117
|
-
- -
|
91
|
+
- - ">="
|
118
92
|
- !ruby/object:Gem::Version
|
119
93
|
version: '0'
|
120
94
|
requirements: []
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
specification_version: 3
|
95
|
+
rubygems_version: 3.1.4
|
96
|
+
signing_key:
|
97
|
+
specification_version: 4
|
125
98
|
summary: Curldown
|
126
99
|
test_files: []
|