hackpad-cli 0.1.0 → 0.1.1
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 +10 -0
- data/Gemfile +1 -0
- data/README.md +8 -3
- data/hackpad-cli.gemspec +2 -1
- data/lib/hackpad/cli/api.rb +3 -3
- data/lib/hackpad/cli/client.rb +29 -16
- data/lib/hackpad/cli/config.rb +76 -29
- data/lib/hackpad/cli/pad.rb +16 -17
- data/lib/hackpad/cli/padlist.rb +3 -3
- data/lib/hackpad/cli/runner.rb +13 -9
- data/lib/hackpad/cli/store.rb +6 -4
- data/lib/hackpad/cli/version.rb +1 -1
- data/spec/lib/hackpad/cli/api_spec.rb +1 -5
- data/spec/lib/hackpad/cli/client_spec.rb +92 -54
- data/spec/lib/hackpad/cli/config_spec.rb +41 -32
- data/spec/lib/hackpad/cli/pad_spec.rb +8 -10
- data/spec/lib/hackpad/cli/padlist_spec.rb +6 -6
- data/spec/lib/hackpad/cli/runner_spec.rb +13 -13
- data/spec/lib/hackpad/cli/store_spec.rb +17 -6
- data/spec/spec_helper.rb +14 -4
- metadata +17 -4
- data/lib/hackpad/cli/plain_colors.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5037a0a37741a8faadffe8bcf9a879f9cdebc73d
|
4
|
+
data.tar.gz: 13b30296a3f1bba92040cc4fd0938a2ccff19665
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bcc048e283ead0d1eff603cab042d039aeef5c501c86599645eea8215c45a2144a2dc18d13cb4303de5d27f3ce6c8e2fd6a9f14b144472a4b5309ce02d30e575
|
7
|
+
data.tar.gz: 35fe21d9f7ffee3887de231c4e736affbf5a686ff985d10f979b5897f036bc4cb3acfd8864e91ed957f16fff3edf58cb3e8cf200fa9234973b5f594ef77e4cd6
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
Hackpad-cli changelog
|
2
2
|
=====================
|
3
3
|
|
4
|
+
v0.1.1 - 2014-05-25
|
5
|
+
-------------------
|
6
|
+
|
7
|
+
- add a `default` command to switch workspaces
|
8
|
+
- renamed `check` into `getnew` to make it clearer what it does
|
9
|
+
- switch from colorize to paint gems (monkey patch of colorize was itchy)
|
10
|
+
- switch the prompt code to another gem called cliprompt
|
11
|
+
- add a command `workspaces` to list workspaces
|
12
|
+
- move config file from ~/.hackpad-cli/default.yml to ~/.hackpad-cli/default/config.yml
|
13
|
+
|
4
14
|
v0.1.0 - 2014-05-17
|
5
15
|
-------------------
|
6
16
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -42,14 +42,16 @@ Usage
|
|
42
42
|
|
43
43
|
```
|
44
44
|
Commands:
|
45
|
-
hpcli
|
45
|
+
hpcli default # change the default workspace.
|
46
|
+
hpcli getnew # Downloads the new pads the are not cached yet (options: -u to show urls).
|
46
47
|
hpcli help [COMMAND] # Describe available commands or one specific command
|
47
48
|
hpcli info [pad_id] # gets info for the pad <pad_id>.
|
48
49
|
hpcli list # Lists available pads (options: -u to show urls, -r to refresh).
|
49
50
|
hpcli search [term] # Lists available pads matching [term] (options: -u to show urls)
|
50
|
-
hpcli show [pad_id] [format] # shows pad <pad_id> in format [html,txt,md]
|
51
|
+
hpcli show [pad_id] [format] # shows pad <pad_id> in format [html,txt,md], default txt (options: -r to refresh).
|
51
52
|
hpcli stats # Lists configuration values.
|
52
53
|
hpcli version # Displays the hackpad-cli version.
|
54
|
+
hpcli workspaces # Lists configurated hackpad workspaces.
|
53
55
|
|
54
56
|
Options:
|
55
57
|
-c, [--configdir=CONFIGDIR] # Path to the hackpad-cli directory to use.
|
@@ -59,7 +61,7 @@ Options:
|
|
59
61
|
-p, [--plain], [--no-plain] # Add this if you don't want colors.
|
60
62
|
```
|
61
63
|
|
62
|
-
At first launch it will create your config dir (default ~/.hackpad-cli/), and will ask you questions to create the config file (default is
|
64
|
+
At first launch it will create your config dir (default ~/.hackpad-cli/), and will ask you questions to create the config file (default is `default/config.yml`). If you pass the `-w whatever` option at the end, it will ask questions again to write `whatever/config.yml` config file.
|
63
65
|
|
64
66
|
|
65
67
|
Roadmap and todoz
|
@@ -74,6 +76,9 @@ Check the [Changelog](CHANGELOG.md) for past evolutions.
|
|
74
76
|
- <s>display cached date in output</s>
|
75
77
|
- <s>write proper tests</s>
|
76
78
|
- for v0.2.0
|
79
|
+
- clean the markdown generated by reverse_markdown
|
80
|
+
- add a command for searching on local cache, in titles only or in body
|
81
|
+
- elaborate a better search syntax so we can have and/or and strings
|
77
82
|
- add commands for creating a new pad, linked to $EDITOR
|
78
83
|
- add a gateway to github so a pad could be copied over a wiki page directly or in a repo somehow
|
79
84
|
- for v0.3.0
|
data/hackpad-cli.gemspec
CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_dependency 'thor'
|
22
|
-
spec.add_dependency '
|
22
|
+
spec.add_dependency 'cliprompt', '~> 0.0.4'
|
23
|
+
spec.add_dependency 'paint'
|
23
24
|
spec.add_dependency 'oauth'
|
24
25
|
spec.add_dependency 'reverse_markdown'
|
25
26
|
|
data/lib/hackpad/cli/api.rb
CHANGED
@@ -13,9 +13,9 @@ module Hackpad
|
|
13
13
|
|
14
14
|
def prepare(config)
|
15
15
|
consumer = OAuth::Consumer.new(
|
16
|
-
config
|
17
|
-
config
|
18
|
-
site: config
|
16
|
+
config.client_id,
|
17
|
+
config.secret,
|
18
|
+
site: config.site
|
19
19
|
)
|
20
20
|
@token = OAuth::AccessToken.new consumer
|
21
21
|
end
|
data/lib/hackpad/cli/client.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'reverse_markdown'
|
2
|
-
require '
|
2
|
+
require 'paint'
|
3
3
|
|
4
4
|
require_relative 'config'
|
5
5
|
require_relative 'api'
|
@@ -11,19 +11,32 @@ module Hackpad
|
|
11
11
|
module Cli
|
12
12
|
class Client
|
13
13
|
|
14
|
-
|
14
|
+
attr_reader :config
|
15
|
+
|
16
|
+
def initialize(options, input = STDIN, output = STDOUT)
|
15
17
|
@output = output
|
18
|
+
@input = input
|
16
19
|
@options = options
|
17
|
-
|
18
|
-
|
20
|
+
@config = Config.new @options, input, output
|
21
|
+
Store.prepare @config
|
19
22
|
Api.prepare @config
|
20
|
-
if @options[:plain]
|
21
|
-
|
23
|
+
if @options[:plain] == true || @config.use_colors == false
|
24
|
+
Paint.mode = 0
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def workspaces
|
29
|
+
@config.workspaces.each do |s|
|
30
|
+
table s.name, s.site
|
22
31
|
end
|
23
32
|
end
|
24
33
|
|
34
|
+
def default
|
35
|
+
@config.change_default
|
36
|
+
end
|
37
|
+
|
25
38
|
def stats
|
26
|
-
table 'Site', @config
|
39
|
+
table 'Site', Paint[@config.site, :blue]
|
27
40
|
table 'Cached Pads', Store.count_pads
|
28
41
|
table 'Last Refresh', Store.last_refresh || 'not refreshed yet'
|
29
42
|
end
|
@@ -31,7 +44,7 @@ module Hackpad
|
|
31
44
|
def search(term, start = 0)
|
32
45
|
payload = Api.search(term, start)
|
33
46
|
payload.each do |a|
|
34
|
-
@output.puts "#{id_or_url a['id']} - #{unescape(a['title'])
|
47
|
+
@output.puts "#{id_or_url a['id']} - #{Paint[unescape(a['title']), :yellow]}"
|
35
48
|
@output.puts " #{extract a['snippet']}"
|
36
49
|
end
|
37
50
|
end
|
@@ -42,9 +55,9 @@ module Hackpad
|
|
42
55
|
}
|
43
56
|
end
|
44
57
|
|
45
|
-
def
|
58
|
+
def getnew
|
46
59
|
@output.puts 'New pads:'
|
47
|
-
padlist = Padlist.
|
60
|
+
padlist = Padlist.get_new
|
48
61
|
if padlist.count == 0
|
49
62
|
@output.puts 'There is no new pad.'
|
50
63
|
else
|
@@ -57,9 +70,9 @@ module Hackpad
|
|
57
70
|
def info(id)
|
58
71
|
pad = Pad.new id
|
59
72
|
pad.load 'txt'
|
60
|
-
table 'Id',
|
61
|
-
table 'Title',
|
62
|
-
table 'URI', "#{@config
|
73
|
+
table 'Id', Paint[id, :bold]
|
74
|
+
table 'Title', Paint[pad.title, :yellow]
|
75
|
+
table 'URI', "#{@config.site}/#{id}"
|
63
76
|
table 'Chars', "#{pad.chars}"
|
64
77
|
table 'Lines', "#{pad.lines}"
|
65
78
|
table 'Guest Policy', "#{pad.guest_policy}"
|
@@ -81,7 +94,7 @@ module Hackpad
|
|
81
94
|
private
|
82
95
|
|
83
96
|
def padline(pad)
|
84
|
-
"#{(@config
|
97
|
+
"#{(@config.site + '/') if @options[:urls]}#{pad.id} - #{pad.title}"
|
85
98
|
end
|
86
99
|
|
87
100
|
def unescape(s)
|
@@ -89,7 +102,7 @@ module Hackpad
|
|
89
102
|
end
|
90
103
|
|
91
104
|
def extract(s)
|
92
|
-
unescape(s).gsub(/<b class="hit">([^<]*)<\/b>/) { Regexp.last_match[1]
|
105
|
+
unescape(s).gsub(/<b class="hit">([^<]*)<\/b>/) { Paint[Regexp.last_match[1], :cyan, :bold] }
|
93
106
|
end
|
94
107
|
|
95
108
|
def table(key, value)
|
@@ -97,7 +110,7 @@ module Hackpad
|
|
97
110
|
end
|
98
111
|
|
99
112
|
def id_or_url(id)
|
100
|
-
"#{(@config
|
113
|
+
"#{(@config.site + '/') if @options[:urls]}#{Paint[id, :bold]}"
|
101
114
|
end
|
102
115
|
|
103
116
|
end
|
data/lib/hackpad/cli/config.rb
CHANGED
@@ -1,39 +1,86 @@
|
|
1
|
-
require '
|
1
|
+
require 'ostruct'
|
2
|
+
require 'cliprompt'
|
2
3
|
|
3
4
|
module Hackpad
|
4
5
|
module Cli
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
class Config < OpenStruct
|
7
|
+
|
8
|
+
include Cliprompt
|
9
|
+
|
10
|
+
def initialize(options = nil, input = STDIN, output = STDOUT)
|
11
|
+
super(options)
|
12
|
+
@@input = input
|
13
|
+
@@output = output
|
14
|
+
self.configdir ||= File.join(ENV['HOME'], '.hackpad-cli')
|
15
|
+
self.refresh ||= false
|
16
|
+
self.urls ||= false
|
17
|
+
self.output = output
|
18
|
+
setio input, output
|
19
|
+
patch_1
|
20
|
+
addvalues 'config'
|
21
|
+
self.workspace ||= 'default'
|
22
|
+
self.workspacedir = File.join(configdir, workspace)
|
23
|
+
addvalues 'workspace'
|
24
|
+
end
|
25
|
+
|
26
|
+
def addvalues(type)
|
27
|
+
dir = send("#{type}dir".to_sym)
|
28
|
+
file = File.join(dir, 'config.yml')
|
29
|
+
FileUtils.mkdir_p dir unless Dir.exist? dir
|
30
|
+
send("setup_#{type}".to_sym, file) unless File.exist? file
|
31
|
+
YAML.load_file(file).each do |k, v|
|
32
|
+
new_ostruct_member(k)
|
33
|
+
send("#{k}=", v)
|
15
34
|
end
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
35
|
+
end
|
36
|
+
|
37
|
+
def workspaces
|
38
|
+
w = Dir.glob(File.join(configdir, '*', 'config.yml')).reduce([]) do |a, path|
|
39
|
+
a << OpenStruct.new(name: File.basename(File.dirname(path)), site: YAML.load_file(path)['site'])
|
40
|
+
a
|
41
|
+
end
|
42
|
+
w.sort_by { |s| s.name }
|
43
|
+
end
|
44
|
+
|
45
|
+
def setup_config(file)
|
46
|
+
values = {}
|
47
|
+
output.puts Paint['Create a new hackpad-cli configuration:', :blue]
|
48
|
+
values['use_colors'] = guess 'HPCLI_COLORS', 'Do you want a colored output?', 'Yn'
|
49
|
+
values['workspace'] = guess 'HPCLI_WORKSPACE', 'What is the name of the default workspace?', 'default'
|
50
|
+
write(file, values)
|
51
|
+
end
|
52
|
+
|
53
|
+
def setup_workspace(file)
|
54
|
+
values = {}
|
55
|
+
output.puts Paint['Workspace configuration.', :blue]
|
56
|
+
output.puts Paint['Gather your information from https://<workspace>.hackpad.com/ep/account/settings/', :bold]
|
57
|
+
values['client_id'] = guess 'HPCLI_CLIENTID', 'What is your Client ID?'
|
58
|
+
values['secret'] = guess 'HPCLI_SECRET', 'What is your Secret Key?'
|
59
|
+
values['site'] = guess('HPCLI_URL', 'What is the URI of your workspace? (ex. https://xxx.hackapd.com)').gsub(/\/$/, '')
|
60
|
+
write(file, values)
|
61
|
+
end
|
62
|
+
|
63
|
+
def change_default
|
64
|
+
values = {}
|
65
|
+
values['use_colors'] = use_colors
|
66
|
+
values['workspace'] = ask 'What workspace do you want to use as default from now on?',
|
67
|
+
choices: workspaces.map(&:name),
|
68
|
+
default: workspace,
|
69
|
+
aslist: true
|
70
|
+
file = File.join(configdir, 'config.yml')
|
71
|
+
write(file, values)
|
72
|
+
end
|
73
|
+
|
74
|
+
def patch_1
|
75
|
+
if File.exist? File.join(configdir, "#{workspace}.yml")
|
76
|
+
FileUtils.mv File.join(configdir, "#{workspace}.yml"), File.join(configdir, workspace, 'config.yml')
|
29
77
|
end
|
30
78
|
end
|
31
79
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
back
|
80
|
+
def write(file, values)
|
81
|
+
File.open(file, 'w') do |f|
|
82
|
+
f.write YAML.dump(values)
|
83
|
+
end
|
37
84
|
end
|
38
85
|
|
39
86
|
end
|
data/lib/hackpad/cli/pad.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'reverse_markdown'
|
2
|
+
|
1
3
|
require_relative 'store'
|
2
4
|
require_relative 'api'
|
3
5
|
|
@@ -28,39 +30,36 @@ module Hackpad
|
|
28
30
|
@content.lines.count if @content
|
29
31
|
end
|
30
32
|
|
31
|
-
def load(ext, refresh = false
|
33
|
+
def load(ext, refresh = false)
|
32
34
|
fail UnknownFormat unless FORMATS.include? ext
|
33
35
|
fail UndefinedPad unless @id
|
34
|
-
if refresh || !Store.
|
35
|
-
|
36
|
+
if refresh || !Store.exist?(ext, @id)
|
37
|
+
load_from_provider Api, ext
|
38
|
+
Store.save(self, ext)
|
39
|
+
Store.save_options(@id, @options)
|
36
40
|
else
|
37
|
-
|
41
|
+
load_from_provider Store, ext
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
41
|
-
def
|
42
|
-
@content =
|
43
|
-
|
44
|
-
|
45
|
-
@guest_policy = options['options']['guestPolicy']
|
46
|
-
@moderated = options['options']['isModerated']
|
47
|
-
options['cached_at'] = Time.now
|
48
|
-
@cached_at = options['cached_at']
|
49
|
-
dosave && Store.save_options(@id, options)
|
45
|
+
def load_from_provider(klass, ext)
|
46
|
+
@content = klass.read @id, ext
|
47
|
+
@options = klass.read_options(@id)
|
48
|
+
load_options @options
|
50
49
|
end
|
51
50
|
|
52
|
-
def
|
53
|
-
@content = Store.read @id, ext
|
54
|
-
options = Store.read_options @id
|
51
|
+
def load_options(options)
|
55
52
|
@guest_policy = options['options']['guestPolicy']
|
56
53
|
@moderated = options['options']['isModerated']
|
54
|
+
options['cached_at'] ||= Time.now
|
57
55
|
@cached_at = options['cached_at']
|
58
56
|
end
|
59
57
|
|
60
58
|
def cached?
|
61
|
-
Store.
|
59
|
+
Store.exist? 'meta', @id
|
62
60
|
end
|
63
61
|
|
62
|
+
|
64
63
|
end
|
65
64
|
end
|
66
65
|
end
|
data/lib/hackpad/cli/padlist.rb
CHANGED
@@ -10,7 +10,7 @@ module Hackpad
|
|
10
10
|
|
11
11
|
def get_list(refresh = false, output = STDOUT)
|
12
12
|
all = []
|
13
|
-
if refresh || !Store.
|
13
|
+
if refresh || !Store.exist?('padlist')
|
14
14
|
output.print 'Refreshing '
|
15
15
|
list = Api.list
|
16
16
|
list.each do |a|
|
@@ -31,13 +31,13 @@ module Hackpad
|
|
31
31
|
OpenStruct.new(id: id, title: pad.title)
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
34
|
+
def get_new
|
35
35
|
all = []
|
36
36
|
list = Api.list
|
37
37
|
list.each do |a|
|
38
38
|
pad = Pad.new a
|
39
39
|
unless pad.cached?
|
40
|
-
pad.load 'txt'
|
40
|
+
pad.load 'txt'
|
41
41
|
all << OpenStruct.new(id: a, title: pad.title)
|
42
42
|
end
|
43
43
|
end
|
data/lib/hackpad/cli/runner.rb
CHANGED
@@ -43,6 +43,16 @@ module Hackpad
|
|
43
43
|
|
44
44
|
default_task :help
|
45
45
|
|
46
|
+
desc 'workspaces', 'Lists configurated hackpad workspaces.'
|
47
|
+
def workspaces
|
48
|
+
Hackpad::Cli::Client.new(options).workspaces
|
49
|
+
end
|
50
|
+
|
51
|
+
desc 'default', 'change the default workspace.'
|
52
|
+
def default
|
53
|
+
Hackpad::Cli::Client.new(options).default
|
54
|
+
end
|
55
|
+
|
46
56
|
desc 'stats', 'Lists configuration values.'
|
47
57
|
def stats
|
48
58
|
Hackpad::Cli::Client.new(options).stats
|
@@ -61,10 +71,10 @@ module Hackpad
|
|
61
71
|
Hackpad::Cli::Client.new(options).list
|
62
72
|
end
|
63
73
|
|
64
|
-
desc '
|
74
|
+
desc 'getnew', 'Downloads the new pads the are not cached yet (options: -u to show urls).'
|
65
75
|
method_option(*url_option)
|
66
|
-
def
|
67
|
-
Hackpad::Cli::Client.new(options).
|
76
|
+
def getnew
|
77
|
+
Hackpad::Cli::Client.new(options).getnew
|
68
78
|
end
|
69
79
|
|
70
80
|
desc 'info [pad_id]', 'gets info for the pad <pad_id>.'
|
@@ -83,12 +93,6 @@ module Hackpad
|
|
83
93
|
puts Hackpad::Cli::VERSION
|
84
94
|
end
|
85
95
|
|
86
|
-
desc 'colors', 'displays colorize color matrix.', hide: true
|
87
|
-
def colors
|
88
|
-
require 'colorize'
|
89
|
-
String.color_matrix ' xoxo '
|
90
|
-
end
|
91
|
-
|
92
96
|
end
|
93
97
|
end
|
94
98
|
end
|
data/lib/hackpad/cli/store.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'ostruct'
|
3
|
+
|
3
4
|
require_relative '../cli'
|
5
|
+
require_relative 'config'
|
4
6
|
|
5
7
|
module Hackpad
|
6
8
|
module Cli
|
@@ -8,9 +10,9 @@ module Hackpad
|
|
8
10
|
module_function
|
9
11
|
|
10
12
|
def prepare(config)
|
11
|
-
@refresh = config
|
12
|
-
|
13
|
-
@pads_dir = File.join(
|
13
|
+
@refresh = config.refresh
|
14
|
+
@configdir = config.configdir
|
15
|
+
@pads_dir = File.join(config.workspacedir, 'pads')
|
14
16
|
@list_cache = File.join(@pads_dir, 'padlist')
|
15
17
|
prepare_dirs @pads_dir
|
16
18
|
end
|
@@ -19,7 +21,7 @@ module Hackpad
|
|
19
21
|
(Hackpad::Cli::FORMATS + ['meta']).each { |f| FileUtils.mkdir_p File.join(base, f) }
|
20
22
|
end
|
21
23
|
|
22
|
-
def
|
24
|
+
def exist?(*path)
|
23
25
|
!@refresh && File.exist?(File.join(@pads_dir, *path))
|
24
26
|
end
|
25
27
|
|
data/lib/hackpad/cli/version.rb
CHANGED
@@ -7,9 +7,9 @@ require 'hackpad/cli/api'
|
|
7
7
|
WebMock.disable_net_connect!(allow: 'codeclimate.com')
|
8
8
|
|
9
9
|
describe Hackpad::Cli::Api do
|
10
|
+
let(:config) { OpenStruct.new(site: 'http://x.hackpad.com', client_id: '123', secret: 'aaa') }
|
10
11
|
|
11
12
|
describe '.search' do
|
12
|
-
let(:config) { { 'site' => 'http://x.hackpad.com', 'client_id' => '123', 'secret' => 'aaa' } }
|
13
13
|
before { Hackpad::Cli::Api.prepare config }
|
14
14
|
context 'when just a simple term is provided,' do
|
15
15
|
it 'returns expected json' do
|
@@ -25,7 +25,6 @@ describe Hackpad::Cli::Api do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
describe '.list' do
|
28
|
-
let(:config) { { 'site' => 'http://x.hackpad.com', 'client_id' => '123', 'secret' => 'aaa' } }
|
29
28
|
before { Hackpad::Cli::Api.prepare config }
|
30
29
|
it 'returns expected json' do
|
31
30
|
stub_request(:get, 'http://x.hackpad.com/api/1.0/pads/all')
|
@@ -35,7 +34,6 @@ describe Hackpad::Cli::Api do
|
|
35
34
|
end
|
36
35
|
|
37
36
|
describe '.read_options' do
|
38
|
-
let(:config) { { 'site' => 'http://x.hackpad.com', 'client_id' => '123', 'secret' => 'aaa' } }
|
39
37
|
before { Hackpad::Cli::Api.prepare config }
|
40
38
|
it 'returns expected json' do
|
41
39
|
stub_request(:get, 'http://x.hackpad.com/api/1.0/pad/aaa/options')
|
@@ -45,7 +43,6 @@ describe Hackpad::Cli::Api do
|
|
45
43
|
end
|
46
44
|
|
47
45
|
describe '.read' do
|
48
|
-
let(:config) { { 'site' => 'http://x.hackpad.com', 'client_id' => '123', 'secret' => 'aaa' } }
|
49
46
|
before { Hackpad::Cli::Api.prepare config }
|
50
47
|
it 'returns expected json' do
|
51
48
|
stub_request(:get, 'http://x.hackpad.com/api/1.0/pad/aaa/content.html')
|
@@ -55,7 +52,6 @@ describe Hackpad::Cli::Api do
|
|
55
52
|
end
|
56
53
|
|
57
54
|
describe '.get' do
|
58
|
-
let(:config) { { 'site' => 'http://x.hackpad.com', 'client_id' => '123', 'secret' => 'aaa' } }
|
59
55
|
before { Hackpad::Cli::Api.prepare config }
|
60
56
|
context 'when proper crendential are provided,' do
|
61
57
|
it 'all goes well' do
|
@@ -2,45 +2,88 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'hackpad/cli/client'
|
5
|
+
require 'pp'
|
5
6
|
|
6
7
|
describe Hackpad::Cli::Client do
|
7
8
|
let(:configdir) { File.expand_path('../../../../files', __FILE__) }
|
9
|
+
let(:configfile) { File.join(configdir, 'config.yml') }
|
10
|
+
let(:workspacedir) { File.join(configdir, 'default') }
|
11
|
+
let(:workspacefile) { File.join(workspacedir, 'config.yml') }
|
12
|
+
let(:configvars) { { 'use_colors' => true, 'workspace' => 'default' } }
|
13
|
+
let(:workspacevars) { { 'client_id' => '123', 'secret' => 'toto', 'site' => 'http://example.com' } }
|
8
14
|
let(:options) { { configdir: configdir, workspace: 'default' } }
|
9
15
|
let(:format) { "%-20s %s\n" }
|
16
|
+
let(:input) { StringIO.new }
|
17
|
+
let(:output) { StringIO.new }
|
18
|
+
before { FileUtils.mkdir_p configdir }
|
19
|
+
before { FileUtils.mkdir_p workspacedir }
|
20
|
+
before { File.open(configfile, 'w') { |f| f.puts YAML.dump(configvars) } }
|
21
|
+
before { File.open(workspacefile, 'w') { |f| f.puts YAML.dump(workspacevars) } }
|
22
|
+
after { FileUtils.rm configfile if File.exist?(configfile) }
|
23
|
+
after { FileUtils.rm workspacefile if File.exist?(workspacefile) }
|
10
24
|
|
11
25
|
describe '.new' do
|
12
26
|
before { Hackpad::Cli::Api.stub(:prepare) }
|
13
27
|
before { Hackpad::Cli::Store.stub(:prepare) }
|
14
|
-
before { Hackpad::Cli::Config.stub(:load) }
|
15
28
|
|
16
29
|
context 'when default options are passed,' do
|
17
30
|
let(:client) { Hackpad::Cli::Client.new options }
|
18
31
|
it { expect(client).to be_a Hackpad::Cli::Client }
|
19
|
-
context 'when colorization is expected,' do
|
20
|
-
it { expect('x'.blue).to eq "\e[0;34;49mx\e[0m" }
|
21
|
-
end
|
22
32
|
end
|
23
33
|
|
24
34
|
context 'when plain text is required,' do
|
25
35
|
context 'when colorization is not expected,' do
|
26
36
|
before { Hackpad::Cli::Client.new options.merge(plain: true) }
|
27
|
-
|
28
|
-
it { expect('x'.blue).to eq 'x' }
|
37
|
+
it { expect(Paint.mode).to eq 0 }
|
29
38
|
end
|
30
39
|
end
|
31
40
|
end
|
32
41
|
|
42
|
+
describe '.workspaces' do
|
43
|
+
let(:client) { Hackpad::Cli::Client.new(options, input, output) }
|
44
|
+
let(:workspacedir2) { File.join(configdir, 'default2') }
|
45
|
+
let(:workspacefile2) { File.join(workspacedir2, 'config.yml') }
|
46
|
+
let(:workspacevars2) { { 'client_id' => '321', 'secret' => 'otot', 'site' => 'http://2.example.com' } }
|
47
|
+
before { FileUtils.mkdir_p workspacedir2 }
|
48
|
+
before { File.open(workspacefile2, 'w') { |f| f.puts YAML.dump(workspacevars2) } }
|
49
|
+
after { FileUtils.rm workspacefile2 if File.exist?(workspacefile2) }
|
50
|
+
|
51
|
+
it do
|
52
|
+
expect(output).to receive(:printf).with(format, 'default', 'http://example.com')
|
53
|
+
expect(output).to receive(:printf).with(format, 'default2', 'http://2.example.com')
|
54
|
+
client.workspaces
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '.default' do
|
59
|
+
let(:client) { Hackpad::Cli::Client.new(options, input, output) }
|
60
|
+
let(:workspacedir2) { File.join(configdir, 'default2') }
|
61
|
+
let(:workspacefile2) { File.join(workspacedir2, 'config.yml') }
|
62
|
+
let(:workspacevars2) { { 'client_id' => '321', 'secret' => 'otot', 'site' => 'http://2.example.com' } }
|
63
|
+
before { input.stub(:gets).and_return('1') }
|
64
|
+
before { FileUtils.mkdir_p workspacedir2 }
|
65
|
+
before { File.open(workspacefile2, 'w') { |f| f.puts YAML.dump(workspacevars2) } }
|
66
|
+
after { FileUtils.rm workspacefile2 if File.exist?(workspacefile2) }
|
67
|
+
|
68
|
+
it do
|
69
|
+
expect(output).to receive(:puts).with('What workspace do you want to use as default from now on?')
|
70
|
+
expect(output).to receive(:printf).with("> %-3s %s\n", 0, "default")
|
71
|
+
expect(output).to receive(:printf).with(" %-3s %s\n", 1, "default2")
|
72
|
+
client.default
|
73
|
+
expect(YAML.load_file(configfile)['workspace']).to eq 'default2'
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
33
77
|
describe '.stats' do
|
34
78
|
let(:timestamp) { Time.new(2013, 10, 2) }
|
35
79
|
before { Hackpad::Cli::Store.stub(:prepare) }
|
36
|
-
before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
|
37
80
|
before { Hackpad::Cli::Store.stub(:count_pads).and_return(12) }
|
38
81
|
before { Hackpad::Cli::Store.stub(:last_refresh).and_return(timestamp) }
|
39
|
-
let(:client) { Hackpad::Cli::Client.new
|
82
|
+
let(:client) { Hackpad::Cli::Client.new(options, input, output) }
|
40
83
|
it do
|
41
|
-
expect(
|
42
|
-
expect(
|
43
|
-
expect(
|
84
|
+
expect(output).to receive(:printf).with(format, 'Site', Paint[workspacevars['site'], :blue])
|
85
|
+
expect(output).to receive(:printf).with(format, 'Cached Pads', 12)
|
86
|
+
expect(output).to receive(:printf).with(format, 'Last Refresh', timestamp)
|
44
87
|
client.stats
|
45
88
|
end
|
46
89
|
end
|
@@ -48,7 +91,6 @@ describe Hackpad::Cli::Client do
|
|
48
91
|
describe '.search' do
|
49
92
|
before { Hackpad::Cli::Api.stub(:prepare) }
|
50
93
|
before { Hackpad::Cli::Store.stub(:prepare) }
|
51
|
-
before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
|
52
94
|
before do
|
53
95
|
Hackpad::Cli::Api.stub(:search)
|
54
96
|
.with('xxx', 0)
|
@@ -61,18 +103,18 @@ describe Hackpad::Cli::Client do
|
|
61
103
|
)
|
62
104
|
end
|
63
105
|
context 'when default options are used,' do
|
64
|
-
let(:client) { Hackpad::Cli::Client.new
|
106
|
+
let(:client) { Hackpad::Cli::Client.new(options, input, output) }
|
65
107
|
it do
|
66
|
-
expect(
|
67
|
-
expect(
|
108
|
+
expect(output).to receive(:puts).with("#{Paint['xxxxxx', :bold]} - #{Paint['xtitle', :yellow]}")
|
109
|
+
expect(output).to receive(:puts).with(" context #{Paint['x', :cyan, :bold]} context")
|
68
110
|
client.search 'xxx'
|
69
111
|
end
|
70
112
|
end
|
71
113
|
context 'when options sets urls to true,' do
|
72
|
-
let(:client) { Hackpad::Cli::Client.new
|
114
|
+
let(:client) { Hackpad::Cli::Client.new(options.merge(urls: true), input, output) }
|
73
115
|
it do
|
74
|
-
expect(
|
75
|
-
expect(
|
116
|
+
expect(output).to receive(:puts).with("#{workspacevars['site']}/#{Paint['xxxxxx', :bold]} - #{Paint['xtitle', :yellow]}")
|
117
|
+
expect(output).to receive(:puts).with(" context #{Paint['x', :cyan, :bold]} context")
|
76
118
|
client.search 'xxx'
|
77
119
|
end
|
78
120
|
end
|
@@ -81,61 +123,59 @@ describe Hackpad::Cli::Client do
|
|
81
123
|
describe '.list' do
|
82
124
|
before { Hackpad::Cli::Api.stub(:prepare) }
|
83
125
|
before { Hackpad::Cli::Store.stub(:prepare) }
|
84
|
-
before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
|
85
126
|
before do
|
86
127
|
Hackpad::Cli::Padlist.stub(:get_list)
|
87
128
|
.and_return([OpenStruct.new(id: 'xxxxxx', title: 'xtitle')])
|
88
129
|
end
|
89
130
|
context 'when default options are used,' do
|
90
|
-
let(:client) { Hackpad::Cli::Client.new
|
131
|
+
let(:client) { Hackpad::Cli::Client.new(options, input, output) }
|
91
132
|
it do
|
92
|
-
expect(
|
133
|
+
expect(output).to receive(:puts).with(['xxxxxx - xtitle'])
|
93
134
|
client.list
|
94
135
|
end
|
95
136
|
end
|
96
137
|
context 'when options sets urls to true,' do
|
97
|
-
let(:client) { Hackpad::Cli::Client.new
|
138
|
+
let(:client) { Hackpad::Cli::Client.new(options.merge(urls: true), input, output) }
|
98
139
|
it do
|
99
|
-
expect(
|
140
|
+
expect(output).to receive(:puts).with(["#{workspacevars['site']}/xxxxxx - xtitle"])
|
100
141
|
client.list
|
101
142
|
end
|
102
143
|
end
|
103
144
|
end
|
104
145
|
|
105
|
-
describe '.
|
146
|
+
describe '.getnew' do
|
106
147
|
before { Hackpad::Cli::Api.stub(:prepare) }
|
107
148
|
before { Hackpad::Cli::Store.stub(:prepare) }
|
108
|
-
before { Hackpad::Cli::Config.stub(:load).and_return('site' => 'http://test.dev') }
|
109
149
|
|
110
150
|
context 'when there is a new pad,' do
|
111
151
|
before do
|
112
|
-
Hackpad::Cli::Padlist.stub(:
|
152
|
+
Hackpad::Cli::Padlist.stub(:get_new)
|
113
153
|
.and_return([OpenStruct.new(id: 'xxxxxx', title: 'xtitle')])
|
114
154
|
end
|
115
155
|
context 'when default options are used,' do
|
116
|
-
let(:client) { Hackpad::Cli::Client.new
|
156
|
+
let(:client) { Hackpad::Cli::Client.new(options, input, output) }
|
117
157
|
it do
|
118
|
-
expect(
|
119
|
-
expect(
|
120
|
-
client.
|
158
|
+
expect(output).to receive(:puts).with('New pads:')
|
159
|
+
expect(output).to receive(:puts).with(['xxxxxx - xtitle'])
|
160
|
+
client.getnew
|
121
161
|
end
|
122
162
|
end
|
123
163
|
context 'when options sets urls to true,' do
|
124
|
-
let(:client) { Hackpad::Cli::Client.new
|
164
|
+
let(:client) { Hackpad::Cli::Client.new(options.merge(urls: true), input, output) }
|
125
165
|
it do
|
126
|
-
expect(
|
127
|
-
expect(
|
128
|
-
client.
|
166
|
+
expect(output).to receive(:puts).with('New pads:')
|
167
|
+
expect(output).to receive(:puts).with(["#{workspacevars['site']}/xxxxxx - xtitle"])
|
168
|
+
client.getnew
|
129
169
|
end
|
130
170
|
end
|
131
171
|
end
|
132
172
|
context 'when there is no new pad,' do
|
133
|
-
before { Hackpad::Cli::Padlist.stub(:
|
134
|
-
let(:client) { Hackpad::Cli::Client.new
|
173
|
+
before { Hackpad::Cli::Padlist.stub(:get_new).and_return([]) }
|
174
|
+
let(:client) { Hackpad::Cli::Client.new(options, input, output) }
|
135
175
|
it do
|
136
|
-
expect(
|
137
|
-
expect(
|
138
|
-
client.
|
176
|
+
expect(output).to receive(:puts).with('New pads:')
|
177
|
+
expect(output).to receive(:puts).with('There is no new pad.')
|
178
|
+
client.getnew
|
139
179
|
end
|
140
180
|
end
|
141
181
|
end
|
@@ -143,8 +183,7 @@ describe Hackpad::Cli::Client do
|
|
143
183
|
describe '.info' do
|
144
184
|
before { Hackpad::Cli::Api.stub(:prepare) }
|
145
185
|
before { Hackpad::Cli::Store.stub(:prepare) }
|
146
|
-
|
147
|
-
let(:client) { Hackpad::Cli::Client.new options }
|
186
|
+
let(:client) { Hackpad::Cli::Client.new(options, input, output) }
|
148
187
|
let(:pad) { double Hackpad::Cli::Pad }
|
149
188
|
before { Hackpad::Cli::Pad.stub(:new).with('123').and_return pad }
|
150
189
|
|
@@ -162,14 +201,14 @@ describe Hackpad::Cli::Client do
|
|
162
201
|
before { pad.stub(:moderated).and_return('false') }
|
163
202
|
before { pad.stub(:cached_at).and_return }
|
164
203
|
it do
|
165
|
-
expect(
|
166
|
-
expect(
|
167
|
-
expect(
|
168
|
-
expect(
|
169
|
-
expect(
|
170
|
-
expect(
|
171
|
-
expect(
|
172
|
-
expect(
|
204
|
+
expect(output).to receive(:printf).with(format, 'Id', Paint["123", :bold])
|
205
|
+
expect(output).to receive(:printf).with(format, 'Title', Paint['title1', :yellow])
|
206
|
+
expect(output).to receive(:printf).with(format, 'URI', "#{workspacevars['site']}/123")
|
207
|
+
expect(output).to receive(:printf).with(format, 'Chars', '20')
|
208
|
+
expect(output).to receive(:printf).with(format, 'Lines', '2')
|
209
|
+
expect(output).to receive(:printf).with(format, 'Guest Policy', 'open')
|
210
|
+
expect(output).to receive(:printf).with(format, 'Moderated', 'false')
|
211
|
+
expect(output).to receive(:printf).with(format, 'Cached', 'unknown')
|
173
212
|
client.info '123'
|
174
213
|
end
|
175
214
|
end
|
@@ -179,8 +218,7 @@ describe Hackpad::Cli::Client do
|
|
179
218
|
describe '.show' do
|
180
219
|
before { Hackpad::Cli::Api.stub(:prepare) }
|
181
220
|
before { Hackpad::Cli::Store.stub(:prepare) }
|
182
|
-
|
183
|
-
let(:client) { Hackpad::Cli::Client.new options }
|
221
|
+
let(:client) { Hackpad::Cli::Client.new(options, input, output) }
|
184
222
|
let(:pad) { double Hackpad::Cli::Pad }
|
185
223
|
before { Hackpad::Cli::Pad.stub(:new).with('123').and_return pad }
|
186
224
|
before { pad.stub(:load) }
|
@@ -188,7 +226,7 @@ describe Hackpad::Cli::Client do
|
|
188
226
|
context 'when a txt version is asked,' do
|
189
227
|
before { pad.stub(:content).and_return('this is content') }
|
190
228
|
it do
|
191
|
-
expect(
|
229
|
+
expect(output).to receive(:puts).with('this is content')
|
192
230
|
client.show '123', 'txt'
|
193
231
|
end
|
194
232
|
end
|
@@ -196,7 +234,7 @@ describe Hackpad::Cli::Client do
|
|
196
234
|
context 'when a html version is asked,' do
|
197
235
|
before { pad.stub(:content).and_return('<ul><li>this is content</li></ul>') }
|
198
236
|
it do
|
199
|
-
expect(
|
237
|
+
expect(output).to receive(:puts).with('<ul><li>this is content</li></ul>')
|
200
238
|
client.show '123', 'html'
|
201
239
|
end
|
202
240
|
end
|
@@ -209,7 +247,7 @@ describe Hackpad::Cli::Client do
|
|
209
247
|
.and_return('- this is content')
|
210
248
|
end
|
211
249
|
it do
|
212
|
-
expect(
|
250
|
+
expect(output).to receive(:puts).with('- this is content')
|
213
251
|
client.show '123', 'md'
|
214
252
|
end
|
215
253
|
end
|
@@ -6,42 +6,51 @@ require 'hackpad/cli/config'
|
|
6
6
|
describe Hackpad::Cli::Config do
|
7
7
|
|
8
8
|
let(:configdir) { File.expand_path('../../../../files', __FILE__) }
|
9
|
-
let(:configfile) { File.join(configdir, '
|
9
|
+
let(:configfile) { File.join(configdir, 'config.yml') }
|
10
|
+
let(:workspacedir) { File.join(configdir, 'default') }
|
11
|
+
let(:workspacefile) { File.join(workspacedir, 'config.yml') }
|
10
12
|
let(:options) { { configdir: configdir, workspace: 'default' } }
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
describe '.
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
13
|
+
let(:input) { StringIO.new }
|
14
|
+
let(:output) { StringIO.new }
|
15
|
+
|
16
|
+
before { FileUtils.mkdir_p configdir unless Dir.exist?(configdir) }
|
17
|
+
before { FileUtils.mkdir_p workspacedir unless Dir.exist?(workspacedir) }
|
18
|
+
|
19
|
+
after { FileUtils.rm configfile if File.exist?(configfile) }
|
20
|
+
after { FileUtils.rm workspacefile if File.exist?(workspacefile) }
|
21
|
+
|
22
|
+
describe '.new' do
|
23
|
+
context 'when there is already config files created,' do
|
24
|
+
let(:configvars) { { 'use_colors' => true, 'workspace' => 'default' } }
|
25
|
+
let(:workspacevars) { { 'client_id' => '123', 'secret' => 'toto', 'site' => 'http://example.com' } }
|
26
|
+
before { File.open(configfile, 'w') { |f| f.puts YAML.dump(configvars) } }
|
27
|
+
before { File.open(workspacefile, 'w') { |f| f.puts YAML.dump(workspacevars) } }
|
28
|
+
let(:config) { Hackpad::Cli::Config.new(options) }
|
29
|
+
it {
|
30
|
+
expect(config.secret).to eq 'toto'
|
31
|
+
expect(config.site).to eq 'http://example.com'
|
32
|
+
}
|
33
|
+
end
|
34
|
+
context 'when there is no config files created,' do
|
35
|
+
before { input.stub(:gets).and_return('y', 'default', '123', 'toto','http://example.com') }
|
36
|
+
let(:config) { Hackpad::Cli::Config.new(options, input, output) }
|
37
|
+
it {
|
38
|
+
expect(config.secret).to eq 'toto'
|
39
|
+
expect(config.site).to eq 'http://example.com'
|
40
|
+
}
|
32
41
|
end
|
33
|
-
|
34
42
|
end
|
35
43
|
|
36
|
-
describe '.
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
44
|
+
describe '.patch_1' do
|
45
|
+
let(:oldconfigfile) { File.join(configdir, 'default.yml') }
|
46
|
+
let(:oldconfigvars) { { 'client_id' => '123', 'secret' => 'toto', 'site' => 'http://example.com' } }
|
47
|
+
before { File.open(oldconfigfile, 'w') { |f| f.puts YAML.dump(oldconfigvars) } }
|
48
|
+
before { input.stub(:gets).and_return('y', 'default') }
|
49
|
+
after { FileUtils.rm oldconfigfile if File.exist?(oldconfigfile) }
|
50
|
+
it do
|
51
|
+
Hackpad::Cli::Config.new(options, input, output)
|
52
|
+
expect(File.exist? oldconfigfile).to be_false
|
53
|
+
expect(File.exist? configfile).to be_true
|
45
54
|
end
|
46
55
|
end
|
47
56
|
|
@@ -15,7 +15,7 @@ describe Hackpad::Cli::Pad do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
describe '.cached?' do
|
18
|
-
before { Hackpad::Cli::Store.stub(:
|
18
|
+
before { Hackpad::Cli::Store.stub(:exist?).and_return true }
|
19
19
|
it { expect(pad.cached?).to be_true }
|
20
20
|
end
|
21
21
|
|
@@ -45,7 +45,7 @@ describe Hackpad::Cli::Pad do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
context 'when a pad is cached,' do
|
48
|
-
before { Hackpad::Cli::Store.stub(:
|
48
|
+
before { Hackpad::Cli::Store.stub(:exist?).and_return true }
|
49
49
|
context "when we don't want a refresh," do
|
50
50
|
describe '.load' do
|
51
51
|
context 'when unknown format is asked,' do
|
@@ -56,7 +56,7 @@ describe Hackpad::Cli::Pad do
|
|
56
56
|
it { expect { pad.load 'txt' }.to raise_error(Hackpad::Cli::UndefinedPad) }
|
57
57
|
end
|
58
58
|
context 'when all is ok,' do
|
59
|
-
before { pad.stub(:
|
59
|
+
before { pad.stub(:load_from_provider).with(Hackpad::Cli::Store, 'txt') }
|
60
60
|
it { expect { pad.load 'txt' }.not_to raise_error }
|
61
61
|
end
|
62
62
|
end
|
@@ -64,7 +64,7 @@ describe Hackpad::Cli::Pad do
|
|
64
64
|
let(:meta) { { 'options' => { 'guestPolicy' => 'open', 'isModerated' => false }, 'cached_at' => 'some time' } }
|
65
65
|
before { Hackpad::Cli::Store.stub(:read).with('123', 'txt').and_return("This\nis\nInformation!") }
|
66
66
|
before { Hackpad::Cli::Store.stub(:read_options).with('123').and_return(meta) }
|
67
|
-
before { pad.
|
67
|
+
before { pad.load_from_provider Hackpad::Cli::Store, 'txt' }
|
68
68
|
it { expect(pad.content).to eq "This\nis\nInformation!" }
|
69
69
|
it { expect(pad.guest_policy).to eq 'open' }
|
70
70
|
it { expect(pad.moderated).to be_false }
|
@@ -73,7 +73,9 @@ describe Hackpad::Cli::Pad do
|
|
73
73
|
end
|
74
74
|
context 'when we want a refresh,' do
|
75
75
|
describe '.load' do
|
76
|
-
before { pad.stub(:
|
76
|
+
before { pad.stub(:load_from_provider).with(Hackpad::Cli::Api, 'txt') }
|
77
|
+
before { Hackpad::Cli::Store.stub(:save) }
|
78
|
+
before { Hackpad::Cli::Store.stub(:save_options) }
|
77
79
|
it { expect { pad.load 'txt', true }.not_to raise_error }
|
78
80
|
end
|
79
81
|
describe '.load_from_api' do
|
@@ -83,11 +85,7 @@ describe Hackpad::Cli::Pad do
|
|
83
85
|
context 'when we want to save to cache,' do
|
84
86
|
before { Hackpad::Cli::Store.stub(:save) }
|
85
87
|
before { Hackpad::Cli::Store.stub(:save_options) }
|
86
|
-
before { pad.
|
87
|
-
it { expect(pad.content).to eq "This\nis\nInformation!" }
|
88
|
-
end
|
89
|
-
context "when we don't want to save to cache," do
|
90
|
-
before { pad.load_from_api 'txt', false }
|
88
|
+
before { pad.load_from_provider Hackpad::Cli::Api, 'txt' }
|
91
89
|
it { expect(pad.content).to eq "This\nis\nInformation!" }
|
92
90
|
end
|
93
91
|
end
|
@@ -9,7 +9,7 @@ describe Hackpad::Cli::Padlist do
|
|
9
9
|
let(:output) { StringIO.new }
|
10
10
|
|
11
11
|
context 'when no refresh is asked and cache exists,' do
|
12
|
-
before { Hackpad::Cli::Store.stub(:
|
12
|
+
before { Hackpad::Cli::Store.stub(:exist?).and_return(true) }
|
13
13
|
before { Hackpad::Cli::Store.stub(:read_list).and_return(Array.new) }
|
14
14
|
it { expect(subject.get_list).to be_an(Array) }
|
15
15
|
end
|
@@ -18,7 +18,7 @@ describe Hackpad::Cli::Padlist do
|
|
18
18
|
let(:pad1) { OpenStruct.new(id: '123', title: 'title1') }
|
19
19
|
let(:pad2) { OpenStruct.new(id: '456', title: 'title2') }
|
20
20
|
before { Hackpad::Cli::Api.stub(:list).and_return(%w(123 456)) }
|
21
|
-
before { Hackpad::Cli::Store.stub(:
|
21
|
+
before { Hackpad::Cli::Store.stub(:exist?).and_return(false, false) }
|
22
22
|
before { Hackpad::Cli::Padlist.stub(:get_pad).and_return(pad1, pad2) }
|
23
23
|
before { Hackpad::Cli::Store.stub(:save_list) }
|
24
24
|
it { expect(subject.get_list(false, output)).to be_an(Array) }
|
@@ -39,14 +39,14 @@ describe Hackpad::Cli::Padlist do
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
describe '.
|
42
|
+
describe '.get_new' do
|
43
43
|
before { Hackpad::Cli::Api.stub(:list).and_return(%w(123 456)) }
|
44
44
|
let(:pad) { double Hackpad::Cli::Pad }
|
45
45
|
before { Hackpad::Cli::Pad.stub(:new).and_return(pad, pad) }
|
46
46
|
|
47
47
|
context 'when there is no new pad,' do
|
48
48
|
before { pad.stub(:cached?).and_return(true, true) }
|
49
|
-
it { expect(subject.
|
49
|
+
it { expect(subject.get_new).to eq [] }
|
50
50
|
end
|
51
51
|
|
52
52
|
context 'when there is no one new pad,' do
|
@@ -54,7 +54,7 @@ describe Hackpad::Cli::Padlist do
|
|
54
54
|
before { pad.stub(:cached?).and_return(true, false) }
|
55
55
|
before { pad.stub(:load) }
|
56
56
|
before { pad.stub(:title).and_return('title2') }
|
57
|
-
it { expect(subject.
|
57
|
+
it { expect(subject.get_new).to eq [pad2] }
|
58
58
|
end
|
59
59
|
|
60
60
|
context 'when there is no 2 new pads,' do
|
@@ -63,7 +63,7 @@ describe Hackpad::Cli::Padlist do
|
|
63
63
|
before { pad.stub(:cached?).and_return(false, false) }
|
64
64
|
before { pad.stub(:load).and_return(nil, nil) }
|
65
65
|
before { pad.stub(:title).and_return('title1', 'title2') }
|
66
|
-
it { expect(subject.
|
66
|
+
it { expect(subject.get_new).to eq [pad1, pad2] }
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -26,10 +26,17 @@ describe Hackpad::Cli::Runner do
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
it 'calls the
|
30
|
-
Object.stub(:
|
29
|
+
it 'calls the workspaces method in client class' do
|
30
|
+
Object.stub(:workspaces)
|
31
31
|
cli.shell.mute do
|
32
|
-
cli.
|
32
|
+
cli.workspaces
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'calls the default method in client class' do
|
37
|
+
Object.stub(:default)
|
38
|
+
cli.shell.mute do
|
39
|
+
cli.default
|
33
40
|
end
|
34
41
|
end
|
35
42
|
|
@@ -40,10 +47,10 @@ describe Hackpad::Cli::Runner do
|
|
40
47
|
end
|
41
48
|
end
|
42
49
|
|
43
|
-
it 'calls the
|
44
|
-
Object.stub(:
|
50
|
+
it 'calls the getnew method in client class' do
|
51
|
+
Object.stub(:getnew)
|
45
52
|
cli.shell.mute do
|
46
|
-
cli.
|
53
|
+
cli.getnew
|
47
54
|
end
|
48
55
|
end
|
49
56
|
|
@@ -68,11 +75,4 @@ describe Hackpad::Cli::Runner do
|
|
68
75
|
end
|
69
76
|
end
|
70
77
|
|
71
|
-
it 'calls the colors method in client class' do
|
72
|
-
String.stub(:color_matrix).with(' xoxo ')
|
73
|
-
cli.shell.mute do
|
74
|
-
cli.colors
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
78
|
end
|
@@ -7,7 +7,12 @@ require 'hackpad/cli/pad'
|
|
7
7
|
describe Hackpad::Cli::Store do
|
8
8
|
|
9
9
|
let(:configdir) { File.expand_path('../../../../files', __FILE__) }
|
10
|
-
let(:options) {
|
10
|
+
let(:options) { OpenStruct.new(
|
11
|
+
configdir: configdir,
|
12
|
+
workspace: 'default',
|
13
|
+
workspacedir: File.join(configdir, 'default')
|
14
|
+
)
|
15
|
+
}
|
11
16
|
|
12
17
|
before :each do
|
13
18
|
subject.prepare options
|
@@ -25,27 +30,33 @@ describe Hackpad::Cli::Store do
|
|
25
30
|
it { expect(list[2].cached_at).to eq 'some time' }
|
26
31
|
end
|
27
32
|
|
28
|
-
describe '.
|
33
|
+
describe '.exist?' do
|
29
34
|
|
30
35
|
context 'when refresh option is set,' do
|
31
|
-
let(:options) {
|
36
|
+
let(:options) { OpenStruct.new(
|
37
|
+
configdir: configdir,
|
38
|
+
workspace: 'default',
|
39
|
+
workspacedir: File.join(configdir, 'default'),
|
40
|
+
refresh: true
|
41
|
+
)
|
42
|
+
}
|
32
43
|
before do
|
33
44
|
subject.prepare options
|
34
45
|
FileUtils.touch File.join(configdir, 'default', 'pads', 'txt', 'xxx')
|
35
46
|
end
|
36
47
|
after { FileUtils.rm File.join(configdir, 'default', 'pads', 'txt', 'xxx') }
|
37
|
-
it { expect(subject.
|
48
|
+
it { expect(subject.exist? 'txt', 'xxx').to be false }
|
38
49
|
end
|
39
50
|
|
40
51
|
context 'when refresh option is not set,' do
|
41
52
|
context "when config file don't exist," do
|
42
|
-
it { expect(subject.
|
53
|
+
it { expect(subject.exist? 'txt', 'xxx').to be false }
|
43
54
|
end
|
44
55
|
|
45
56
|
context 'when configfile exists,' do
|
46
57
|
before { FileUtils.touch File.join(configdir, 'default', 'pads', 'txt', 'xxx') }
|
47
58
|
after { FileUtils.rm File.join(configdir, 'default', 'pads', 'txt', 'xxx') }
|
48
|
-
it { expect(subject.
|
59
|
+
it { expect(subject.exist? 'txt', 'xxx').to be true }
|
49
60
|
end
|
50
61
|
end
|
51
62
|
|
data/spec/spec_helper.rb
CHANGED
@@ -2,11 +2,21 @@ $LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'bundler'
|
4
4
|
|
5
|
-
require 'coveralls'
|
6
|
-
Coveralls.wear!
|
7
5
|
|
8
|
-
|
9
|
-
|
6
|
+
if ENV['COV']
|
7
|
+
require 'simplecov'
|
8
|
+
SimpleCov.profiles.define :hpcli do
|
9
|
+
add_filter '/vendor/'
|
10
|
+
add_filter '/spec/'
|
11
|
+
end
|
12
|
+
SimpleCov.start :hpcli
|
13
|
+
else
|
14
|
+
require 'coveralls'
|
15
|
+
Coveralls.wear!
|
16
|
+
|
17
|
+
# require "codeclimate-test-reporter"
|
18
|
+
# CodeClimate::TestReporter.start
|
19
|
+
end
|
10
20
|
|
11
21
|
RSpec.configure do |config|
|
12
22
|
config.mock_with :rspec
|
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.1
|
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-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -25,7 +25,21 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: cliprompt
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.4
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.4
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: paint
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - ">="
|
@@ -177,7 +191,6 @@ files:
|
|
177
191
|
- lib/hackpad/cli/config.rb
|
178
192
|
- lib/hackpad/cli/pad.rb
|
179
193
|
- lib/hackpad/cli/padlist.rb
|
180
|
-
- lib/hackpad/cli/plain_colors.rb
|
181
194
|
- lib/hackpad/cli/runner.rb
|
182
195
|
- lib/hackpad/cli/store.rb
|
183
196
|
- lib/hackpad/cli/version.rb
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'colorize'
|
2
|
-
|
3
|
-
class String
|
4
|
-
def colorize(_)
|
5
|
-
self
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
String.send(:remove_const, :COLORS)
|
10
|
-
String.send(:remove_const, :MODES)
|
11
|
-
String.send(:remove_const, :REGEXP_PATTERN)
|
12
|
-
String.send(:remove_const, :COLOR_OFFSET)
|
13
|
-
String.send(:remove_const, :BACKGROUND_OFFSET)
|