lard 0.0.0 → 0.0.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 +5 -5
- data/bin/lard +135 -16
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b3855d75d98f35843682b07d206f768e61ad2ee52f05e8e28114964a5b2ee23d
|
4
|
+
data.tar.gz: edbd5fe330e70a6448c256b644b611caac0d361d7302fd648466873ff6bd1e15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7269f61649e1dc2cfcb4dc8198b94e4c91ae593b7c8fada93317ebcf3c6c04762395f1344b63dcb77d09cfc7ac59c4d44d1b591c3e9cec5a56c714d000a76e86
|
7
|
+
data.tar.gz: 45e4f94c9b3e6b390411a3320d962c34fe1c64f7965026b43b7582c6e6957e448036639a12c3bc9435721c83e52e931a8190c15c8aaec3da1099d49403afb489
|
data/bin/lard
CHANGED
@@ -1,18 +1,137 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'httparty'
|
3
|
+
require 'paint'
|
4
|
+
require 'thor'
|
3
5
|
require 'yaml'
|
4
|
-
|
5
|
-
|
6
|
-
config = YAML.load_file 'lard.yml'
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
|
7
|
+
begin
|
8
|
+
config = YAML.load_file File.expand_path('~/.lard.yml')
|
9
|
+
rescue
|
10
|
+
STDERR.puts 'Unable to find your .lard.yml!'
|
11
|
+
STDERR.puts ' Please double-check this file:'
|
12
|
+
STDERR.puts ' ~/.lard.yml'
|
13
|
+
STDERR.puts ' And make sure it has your auth token:'
|
14
|
+
STDERR.puts ' token: yourhashgoeshere'
|
15
|
+
exit 1
|
16
|
+
end
|
17
|
+
|
18
|
+
begin
|
19
|
+
token = config['token']
|
20
|
+
rescue
|
21
|
+
STDERR.puts 'No token in ~/.lard.yml!'
|
22
|
+
exit 1
|
18
23
|
end
|
24
|
+
|
25
|
+
$options = {
|
26
|
+
headers: {
|
27
|
+
'Authorization' => "Token #{token}"
|
28
|
+
}
|
29
|
+
}
|
30
|
+
$folders = []
|
31
|
+
|
32
|
+
class Lard < Thor
|
33
|
+
include HTTParty
|
34
|
+
base_uri 'https://larder.io'
|
35
|
+
|
36
|
+
desc 'user', 'Prints information about the logged-in user'
|
37
|
+
def user
|
38
|
+
puts get('user')
|
39
|
+
end
|
40
|
+
|
41
|
+
desc 'folders', 'Lists all bookmark folders'
|
42
|
+
def folders
|
43
|
+
if $folders == []
|
44
|
+
fetch_folders
|
45
|
+
end
|
46
|
+
|
47
|
+
$folders.each do |folder|
|
48
|
+
print_folder_name folder
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
desc 'folder <NAME>', 'Lists all bookmarks in a given folder'
|
53
|
+
def folder(name)
|
54
|
+
folder = get_folder_by_name name
|
55
|
+
raise "No such folder" unless folder
|
56
|
+
|
57
|
+
print_folder_name folder
|
58
|
+
|
59
|
+
bookmarks = fetch_bookmarks folder[:id]
|
60
|
+
bookmarks.each do |bookmark|
|
61
|
+
print_bookmark bookmark
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def print_bookmark(bookmark)
|
68
|
+
puts Paint["#{bookmark[:title]}", :bright]
|
69
|
+
puts " #{bookmark[:description]}"
|
70
|
+
puts " #{bookmark[:url]}"
|
71
|
+
|
72
|
+
unless bookmark[:tags].empty?
|
73
|
+
print " "
|
74
|
+
bookmark[:tags].each do |tag|
|
75
|
+
print Paint["##{tag[:name]}", tag[:color]]
|
76
|
+
print " "
|
77
|
+
end
|
78
|
+
puts " "
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def print_folder_name(folder)
|
83
|
+
print Paint[folder[:name], folder[:color]]
|
84
|
+
puts ":\t#{folder[:links]} links"
|
85
|
+
end
|
86
|
+
|
87
|
+
def fetch_bookmarks(folder_id)
|
88
|
+
# TODO: Verify pagination logic
|
89
|
+
res = get "folders/#{folder_id}", { limit: 100 }
|
90
|
+
bookmarks = res[:results] || []
|
91
|
+
|
92
|
+
while res[:next] != nil
|
93
|
+
res = raw_get res[:next]
|
94
|
+
bookmarks.push *res[:results]
|
95
|
+
end
|
96
|
+
|
97
|
+
bookmarks
|
98
|
+
end
|
99
|
+
|
100
|
+
def fetch_folders
|
101
|
+
# TODO: Verify pagination logic
|
102
|
+
res = get 'folders'
|
103
|
+
$folders = res[:results]
|
104
|
+
|
105
|
+
while res[:next] != nil
|
106
|
+
params = { offset: res[:next] }
|
107
|
+
res = get 'folders', params
|
108
|
+
$folders.push *res[:results]
|
109
|
+
end
|
110
|
+
|
111
|
+
# TODO: Cache these folders
|
112
|
+
end
|
113
|
+
|
114
|
+
def get_folder_by_name(name)
|
115
|
+
fetch_folders unless $folders.length > 0
|
116
|
+
$folders.find do |folder|
|
117
|
+
folder[:name] == name
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def get(endpoint, params = nil)
|
122
|
+
query = { query: params }
|
123
|
+
opts = $options.merge query
|
124
|
+
res = self.class.get "#{prefix}#{endpoint}", opts
|
125
|
+
JSON.parse res.body, symbolize_names: true
|
126
|
+
end
|
127
|
+
|
128
|
+
def raw_get(url)
|
129
|
+
JSON.parse self.class.get(url, $options).body, symbolize_names: true
|
130
|
+
end
|
131
|
+
|
132
|
+
def prefix
|
133
|
+
'/api/1/@me/'
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
Lard.start(ARGV)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hawkins
|
@@ -37,7 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
37
37
|
version: '0'
|
38
38
|
requirements: []
|
39
39
|
rubyforge_project:
|
40
|
-
rubygems_version: 2.
|
40
|
+
rubygems_version: 2.7.7
|
41
41
|
signing_key:
|
42
42
|
specification_version: 4
|
43
43
|
summary: A third-party command line interface for larder.io
|