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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/curldown.rb +122 -44
  3. metadata +28 -55
@@ -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
@@ -1,43 +1,60 @@
1
- ['curb','github/markup','nokogiri','pygments.rb'].each do |gem| require gem end
2
- class Curldown
3
- @@lexers = []
4
- Pygments.lexers.each do |a|
5
- @@lexers << a[1][:aliases]
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
- @@lexers.flatten!
8
- def initialize
9
- @options = {:user => nil, :repo => nil, :branch => "master", :file => "readme.md", :url => nil}
10
- end
11
- def options
12
- @options
13
- end
14
- def options=(options)
15
- @options.merge!(options)
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
- false
23
+ raise StandardError.new("get method returned #{http.status} code when calling #{http.url}")
32
24
  end
25
+ response
33
26
  end
34
- def fetch(url)
35
- if check_response_code(url)
36
- html = GitHub::Markup.render("markdown.md", Curl.get(url).body_str)
37
- doc = Nokogiri::HTML(html)
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 @@lexers.include?(pre.attributes["lang"].value)
40
- lang = pre.attributes["lang"].value
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
- def url_path
55
- if @options[:url]
56
- @options[:url]
57
- else
58
- "https://raw.github.com/#{@options[:user]}/#{@options[:repo]}/#{@options[:branch]}/#{@options[:file]}"
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.1.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: 2013-07-06 00:00:00.000000000 Z
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.8.4
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.8.4
26
+ version: '0.9'
30
27
  - !ruby/object:Gem::Dependency
31
- name: github-markup
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: 0.7.5
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: 0.7.5
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.6.0
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.6.0
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.3.0
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.3.0
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: http://code.iankent.me/curldown
76
+ homepage: https://bitbucket.org/iankentforrestbrown/curldown
102
77
  licenses:
103
78
  - MIT
104
- post_install_message:
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
- rubyforge_project:
122
- rubygems_version: 1.8.25
123
- signing_key:
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: []