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.
Files changed (3) hide show
  1. checksums.yaml +5 -5
  2. data/bin/lard +135 -16
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3eb905dd58bfd781f08082eb9152912039990044
4
- data.tar.gz: 64e794fe5149fff67f1be6fb88aa2120cc351ee0
2
+ SHA256:
3
+ metadata.gz: b3855d75d98f35843682b07d206f768e61ad2ee52f05e8e28114964a5b2ee23d
4
+ data.tar.gz: edbd5fe330e70a6448c256b644b611caac0d361d7302fd648466873ff6bd1e15
5
5
  SHA512:
6
- metadata.gz: 0d44e9e395bfef6a7de5f4a4ed17d1eb0f41e180f46f083bd8c982131e69c76a81905bcbf4f581c2070c9640655f814b97b86fe290d451a215da7803ac334392
7
- data.tar.gz: 82325330e0a2476e55c3b603023aad2306fdbfcaee85b08f48110e0f1ea3e33d43c52aa4fbdf3501c72816dbc31aabda4960b88c7c9c96a38a7df62e49ee312c
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
- require './lib/lard'
5
-
6
- config = YAML.load_file 'lard.yml'
7
- lard = Lard.new config['token']
8
-
9
- case ARGV[0]
10
- when "user"
11
- lard.user
12
- when "folders"
13
- lard.folders
14
- when "folder"
15
- lard.folder ARGV[1]
16
- else
17
- lard.usage
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.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.5.2.3
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