hackpad-cli 0.1.1 → 0.1.2
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/CHANGELOG.md +8 -0
- data/README.md +1 -1
- data/hackpad-cli.gemspec +1 -1
- data/lib/hackpad/cli/api.rb +21 -3
- data/lib/hackpad/cli/client.rb +5 -8
- data/lib/hackpad/cli/pad.rb +0 -1
- data/lib/hackpad/cli/version.rb +1 -1
- data/spec/lib/hackpad/cli/api_spec.rb +15 -4
- data/spec/lib/hackpad/cli/client_spec.rb +3 -10
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 11393a54a4eee8671b2f1408c718cae2acf0636a
|
|
4
|
+
data.tar.gz: c8e34dc2fc56963f34fd9359d56567010571e5e1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3bdad090ea55e18a3919a8b284d73e30578ddb2624b0f1b156f72f9b83c3c7cde85cdd31fe1fe8bd6bd54ce34318c50466a594b2737cdae534477222a255df50
|
|
7
|
+
data.tar.gz: 0efabd1139cea5ab5386f57f5d581631b497086c4d60b3623e886822efc61f2505ae71991f5d834fced5755ee8b2226daf30aa5d4d4cb7f8f4decfcd5637dfa5
|
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
Hackpad-cli changelog
|
|
2
2
|
=====================
|
|
3
3
|
|
|
4
|
+
v0.1.2 - 2014-05-27
|
|
5
|
+
-------------------
|
|
6
|
+
|
|
7
|
+
- improve markdown cleanup:
|
|
8
|
+
- transform isolated bold in h3
|
|
9
|
+
- remove parasite lines in list that are left by non-displayed comments
|
|
10
|
+
- add a visual indication of currently used workspace in the `workspaces` command
|
|
11
|
+
|
|
4
12
|
v0.1.1 - 2014-05-25
|
|
5
13
|
-------------------
|
|
6
14
|
|
data/README.md
CHANGED
|
@@ -13,7 +13,7 @@ This is a command-line utility to check and manipulate hackpad documents.
|
|
|
13
13
|
It uses Hackpad REST API 1.0 https://hackpad.com/fQD2DRz22Wf and was tested with ruby 1.9.3 and 2.1.1.
|
|
14
14
|
|
|
15
15
|
Initially this tool was created to overcome the frustration of the md export of pads,
|
|
16
|
-
because we need to copy them to other places sometimes. Proper markdown would be appreciated. It does that by transforming the html in markdown with the https://github.com/xijo/reverse_markdown gem.
|
|
16
|
+
because we need to copy them to other places sometimes. Proper markdown would be appreciated. It does that by transforming the html in markdown with the https://github.com/xijo/reverse_markdown gem, and applying some extra cleaning over it.
|
|
17
17
|
|
|
18
18
|
Offline hackpad reading
|
|
19
19
|
-----------------------
|
data/hackpad-cli.gemspec
CHANGED
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
|
19
19
|
spec.require_paths = ['lib']
|
|
20
20
|
|
|
21
21
|
spec.add_dependency 'thor'
|
|
22
|
-
spec.add_dependency 'cliprompt', '~> 0.0.
|
|
22
|
+
spec.add_dependency 'cliprompt', '~> 0.0.5'
|
|
23
23
|
spec.add_dependency 'paint'
|
|
24
24
|
spec.add_dependency 'oauth'
|
|
25
25
|
spec.add_dependency 'reverse_markdown'
|
data/lib/hackpad/cli/api.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'oauth'
|
|
2
2
|
require 'net/http'
|
|
3
3
|
require 'json'
|
|
4
|
+
require 'reverse_markdown'
|
|
4
5
|
|
|
5
6
|
module Hackpad
|
|
6
7
|
module Cli
|
|
@@ -33,18 +34,35 @@ module Hackpad
|
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
def read(id, ext)
|
|
36
|
-
|
|
37
|
+
realext = (ext == 'md') ? 'html' : ext
|
|
38
|
+
get "/api/1.0/pad/#{id}/content.#{realext}", false, (ext == 'md')
|
|
37
39
|
end
|
|
38
40
|
|
|
39
|
-
def get(url, json = true)
|
|
41
|
+
def get(url, json = true, to_md = false)
|
|
40
42
|
res = @token.get url, 'User-Agent' => "hackpad-cli v#{Hackpad::Cli::VERSION}"
|
|
41
43
|
if res.is_a? Net::HTTPSuccess
|
|
42
|
-
json
|
|
44
|
+
if json
|
|
45
|
+
JSON.parse(res.body)
|
|
46
|
+
else
|
|
47
|
+
if to_md
|
|
48
|
+
cleanup_md(res.body)
|
|
49
|
+
else
|
|
50
|
+
res.body
|
|
51
|
+
end
|
|
52
|
+
end
|
|
43
53
|
else
|
|
44
54
|
fail ApiException, "HTTP error, code #{res.code}"
|
|
45
55
|
end
|
|
46
56
|
end
|
|
47
57
|
|
|
58
|
+
def cleanup_md(text)
|
|
59
|
+
back = ReverseMarkdown.convert(text, github_flavored: true).strip
|
|
60
|
+
back.sub!(/<head>.*<\/head>\n/m, '')
|
|
61
|
+
back.gsub!(/-([^\n]+)\n\n -/m, "-\\1\n -")
|
|
62
|
+
back.gsub!(/\n( )*-([^\n]+)\n?\n( )*-([^\n]+)\n?\n/m, "\n\\1-\\2\n\\3-\\4\n")
|
|
63
|
+
back.gsub(/\n\n\*\*([^\*]+)\*\*\n\n/, "\n\n### \\1\n\n")
|
|
64
|
+
end
|
|
65
|
+
|
|
48
66
|
end
|
|
49
67
|
end
|
|
50
68
|
end
|
data/lib/hackpad/cli/client.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require 'reverse_markdown'
|
|
2
1
|
require 'paint'
|
|
3
2
|
|
|
4
3
|
require_relative 'config'
|
|
@@ -27,6 +26,9 @@ module Hackpad
|
|
|
27
26
|
|
|
28
27
|
def workspaces
|
|
29
28
|
@config.workspaces.each do |s|
|
|
29
|
+
if s.name == @config.workspace
|
|
30
|
+
s.name = "> #{s.name}"
|
|
31
|
+
end
|
|
30
32
|
table s.name, s.site
|
|
31
33
|
end
|
|
32
34
|
end
|
|
@@ -81,14 +83,9 @@ module Hackpad
|
|
|
81
83
|
end
|
|
82
84
|
|
|
83
85
|
def show(id, format)
|
|
84
|
-
ext = (format == 'md') ? 'html' : format
|
|
85
86
|
pad = Pad.new id
|
|
86
|
-
pad.load
|
|
87
|
-
|
|
88
|
-
@output.puts ReverseMarkdown.convert(pad.content, github_flavored: true)
|
|
89
|
-
else
|
|
90
|
-
@output.puts pad.content
|
|
91
|
-
end
|
|
87
|
+
pad.load format
|
|
88
|
+
@output.puts pad.content
|
|
92
89
|
end
|
|
93
90
|
|
|
94
91
|
private
|
data/lib/hackpad/cli/pad.rb
CHANGED
data/lib/hackpad/cli/version.rb
CHANGED
|
@@ -44,11 +44,22 @@ describe Hackpad::Cli::Api do
|
|
|
44
44
|
|
|
45
45
|
describe '.read' do
|
|
46
46
|
before { Hackpad::Cli::Api.prepare config }
|
|
47
|
-
|
|
48
|
-
stub_request(:get, 'http://x.hackpad.com/api/1.0/pad/aaa/content.html')
|
|
49
|
-
.to_return(body: '<b>blah</b>', status: 200)
|
|
50
|
-
expect(subject.read('aaa', 'html')).to eq('<b>blah</b>')
|
|
47
|
+
context 'when we want html,' do
|
|
48
|
+
before { stub_request(:get, 'http://x.hackpad.com/api/1.0/pad/aaa/content.html')
|
|
49
|
+
.to_return(body: '<b>blah</b>', status: 200) }
|
|
50
|
+
it { expect(subject.read('aaa', 'html')).to eq('<b>blah</b>') }
|
|
51
|
+
end
|
|
52
|
+
context 'when we want txt,' do
|
|
53
|
+
before { stub_request(:get, 'http://x.hackpad.com/api/1.0/pad/aaa/content.txt')
|
|
54
|
+
.to_return(body: 'blah', status: 200) }
|
|
55
|
+
it { expect(subject.read('aaa', 'txt')).to eq('blah') }
|
|
51
56
|
end
|
|
57
|
+
context 'when we want md,' do
|
|
58
|
+
before { stub_request(:get, 'http://x.hackpad.com/api/1.0/pad/aaa/content.html')
|
|
59
|
+
.to_return(body: '<b>blah</b>', status: 200) }
|
|
60
|
+
it { expect(subject.read('aaa', 'md')).to eq('**blah**') }
|
|
61
|
+
end
|
|
62
|
+
|
|
52
63
|
end
|
|
53
64
|
|
|
54
65
|
describe '.get' do
|
|
@@ -49,7 +49,7 @@ describe Hackpad::Cli::Client do
|
|
|
49
49
|
after { FileUtils.rm workspacefile2 if File.exist?(workspacefile2) }
|
|
50
50
|
|
|
51
51
|
it do
|
|
52
|
-
expect(output).to receive(:printf).with(format, 'default', 'http://example.com')
|
|
52
|
+
expect(output).to receive(:printf).with(format, '> default', 'http://example.com')
|
|
53
53
|
expect(output).to receive(:printf).with(format, 'default2', 'http://2.example.com')
|
|
54
54
|
client.workspaces
|
|
55
55
|
end
|
|
@@ -66,9 +66,7 @@ describe Hackpad::Cli::Client do
|
|
|
66
66
|
after { FileUtils.rm workspacefile2 if File.exist?(workspacefile2) }
|
|
67
67
|
|
|
68
68
|
it do
|
|
69
|
-
expect(output).to receive(:
|
|
70
|
-
expect(output).to receive(:printf).with("> %-3s %s\n", 0, "default")
|
|
71
|
-
expect(output).to receive(:printf).with(" %-3s %s\n", 1, "default2")
|
|
69
|
+
expect(output).to receive(:print).with("What workspace do you want to use as default from now on? \n> 0 default\n 1 default2\nChoose a number: [0] ")
|
|
72
70
|
client.default
|
|
73
71
|
expect(YAML.load_file(configfile)['workspace']).to eq 'default2'
|
|
74
72
|
end
|
|
@@ -240,12 +238,7 @@ describe Hackpad::Cli::Client do
|
|
|
240
238
|
end
|
|
241
239
|
|
|
242
240
|
context 'when a markdown version is asked,' do
|
|
243
|
-
before { pad.stub(:content).and_return('
|
|
244
|
-
before do
|
|
245
|
-
ReverseMarkdown.stub(:convert)
|
|
246
|
-
.with('<ul><li>this is content</li></ul>', github_flavored: true)
|
|
247
|
-
.and_return('- this is content')
|
|
248
|
-
end
|
|
241
|
+
before { pad.stub(:content).and_return('- this is content') }
|
|
249
242
|
it do
|
|
250
243
|
expect(output).to receive(:puts).with('- this is content')
|
|
251
244
|
client.show '123', 'md'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hackpad-cli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- mose
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-05-
|
|
11
|
+
date: 2014-05-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -30,14 +30,14 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.0.
|
|
33
|
+
version: 0.0.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: 0.0.
|
|
40
|
+
version: 0.0.5
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: paint
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|