curldown 1.0.2 → 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 +4 -4
- data/lib/curldown.rb +122 -44
- metadata +16 -18
- data/bin/curldown +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ac6237f445424ea2890467651d8562fb7ceb4fb539e0d4617623c5c74c709d6
|
4
|
+
data.tar.gz: 7c7eb51380d773a0554227823c92b5fdb7d2ded8cece4b7a064a6e8f460c7c19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: curldown
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Kent
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curb
|
@@ -16,70 +16,68 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.9'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: redcarpet
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '3.5'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.11'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.11'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pygments.rb
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0
|
61
|
+
version: '2.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0
|
68
|
+
version: '2.0'
|
69
69
|
description: A simple tool to parse hosted markdown files into html
|
70
70
|
email: ian@iankent.me
|
71
|
-
executables:
|
72
|
-
- curldown
|
71
|
+
executables: []
|
73
72
|
extensions: []
|
74
73
|
extra_rdoc_files: []
|
75
74
|
files:
|
76
|
-
- bin/curldown
|
77
75
|
- lib/curldown.rb
|
78
76
|
homepage: https://bitbucket.org/iankentforrestbrown/curldown
|
79
77
|
licenses:
|
80
78
|
- MIT
|
81
79
|
metadata: {}
|
82
|
-
post_install_message:
|
80
|
+
post_install_message:
|
83
81
|
rdoc_options: []
|
84
82
|
require_paths:
|
85
83
|
- lib
|
@@ -94,8 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
92
|
- !ruby/object:Gem::Version
|
95
93
|
version: '0'
|
96
94
|
requirements: []
|
97
|
-
rubygems_version: 3.1.
|
98
|
-
signing_key:
|
95
|
+
rubygems_version: 3.1.4
|
96
|
+
signing_key:
|
99
97
|
specification_version: 4
|
100
98
|
summary: Curldown
|
101
99
|
test_files: []
|
data/bin/curldown
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'curldown'
|
3
|
-
args = ARGV.dup
|
4
|
-
ARGV.clear
|
5
|
-
def set_options(args)
|
6
|
-
@options = {}
|
7
|
-
flags = [["-u","user"],["-r","repo"],["-b","branch"],["-f","file"]]
|
8
|
-
if args.inspect.include?("--url=")
|
9
|
-
args.each do |arg|
|
10
|
-
if arg.include?("--url=")
|
11
|
-
@options[:url] = arg[6..-1]
|
12
|
-
end
|
13
|
-
end
|
14
|
-
else
|
15
|
-
flags.each do |flag|
|
16
|
-
if args.include?(flag[0])
|
17
|
-
@options[flag[1].to_sym] = args[args.index(flag[0]) + 1]
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
if args.inspect.include?("--copy")
|
23
|
-
set_options(args)
|
24
|
-
IO.popen 'pbcopy', 'w' do |io|
|
25
|
-
io.print Curldown.new.get(@options)
|
26
|
-
end
|
27
|
-
puts "HTML has been copied to the clipboard"
|
28
|
-
else
|
29
|
-
set_options(args)
|
30
|
-
puts Curldown.new.get(@options)
|
31
|
-
end
|