awesomekit 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 +7 -0
- data/bin/awesomekit +8 -0
- data/lib/awesomekit.rb +10 -0
- data/lib/awesomekit/authenticator.rb +39 -0
- data/lib/awesomekit/cli.rb +83 -0
- data/lib/awesomekit/client.rb +61 -0
- metadata +151 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fa7ab5dc29d8d9f285b380e00960d32c61bb26bc
|
4
|
+
data.tar.gz: 4f64ed4474f314e6087f6e4fbb220d515ee9bd71
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 159a13a507dc51481402214e5588446cd0fe2f6c5ffcd229735d271a63736014018636f0bf2be4cd22c317454eac07e35f76e53fe4d7d5289ced052415151d63
|
7
|
+
data.tar.gz: f0ebc1288b930eafb1576c7168f2bdae1435d715fcd69e232d14bc2616792ad8231dd89d4786e989aa2a65ca6749034a8e07aa724e9d9acd154555d98dce31a5
|
data/bin/awesomekit
ADDED
data/lib/awesomekit.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Awesomekit
|
2
|
+
class Authenticator
|
3
|
+
CONFIG_FILE = '.typekit'
|
4
|
+
|
5
|
+
# PUBLIC: Return the current saved api_key
|
6
|
+
# If no key exists, prompt user for key
|
7
|
+
def self.api_key
|
8
|
+
if File.exist?(config)
|
9
|
+
File.open(config, 'r').gets
|
10
|
+
else
|
11
|
+
prompt_user_for_key
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# PUBLIC: Delete any existing api_key config file
|
16
|
+
def self.clear_api_key
|
17
|
+
File.unlink(config) if File.exist?(config)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.prompt_user_for_key
|
23
|
+
Formatador.display('[yellow]Please enter your Adobe Typekit API key: [/]')
|
24
|
+
api_key = STDIN.gets.chomp
|
25
|
+
save_key_to_config(api_key)
|
26
|
+
api_key
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.save_key_to_config(api_key)
|
30
|
+
File.open(config, 'w') do |file|
|
31
|
+
file.write(api_key)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.config
|
36
|
+
File.join(Dir.home, CONFIG_FILE)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Awesomekit
|
4
|
+
class CLI < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
desc 'logout', 'Remove your Adobe Typekit API key'
|
8
|
+
def logout
|
9
|
+
Awesomekit::Authenticator.clear_api_key
|
10
|
+
Formatador.display_line('[yellow]Successfully logged out[/]')
|
11
|
+
end
|
12
|
+
|
13
|
+
desc 'list', 'List available kits'
|
14
|
+
method_option :verbose, type: :boolean
|
15
|
+
method_option :published, default: false, type: :boolean, :aliases => "-p",
|
16
|
+
description: 'Flag to return information on the current
|
17
|
+
published version of the kit. Defaults to false, or draft kit version.'
|
18
|
+
def list
|
19
|
+
kits = typekit_client.get_kits
|
20
|
+
return not_found if kits.empty?
|
21
|
+
|
22
|
+
display_kits(kits)
|
23
|
+
|
24
|
+
if options[:verbose]
|
25
|
+
kits.each do |kit|
|
26
|
+
kit = typekit_client.get_kit(kit['id'], options[:published])
|
27
|
+
display_kit_detail(kit)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
desc 'show', 'Display a specific kit'
|
33
|
+
method_option :id, type: :string, required: true
|
34
|
+
method_option :published, default: false, type: :boolean, :aliases => "-p",
|
35
|
+
description: 'Flag to return information on the current
|
36
|
+
published version of the kit. Defaults to false, or draft kit version.'
|
37
|
+
def show
|
38
|
+
kit = typekit_client.get_kit(options[:id], options[:published])
|
39
|
+
|
40
|
+
display_kit_detail(kit)
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def display_kits(kits)
|
46
|
+
Formatador.display_line("[bold]Your Kits:[/]")
|
47
|
+
Formatador.display_table(kits)
|
48
|
+
end
|
49
|
+
|
50
|
+
def display_kit_detail(kit)
|
51
|
+
Formatador.display_line("[blue]Kit: #{kit['name']}[/]")
|
52
|
+
kit_data = [{
|
53
|
+
id: kit['id'],
|
54
|
+
domains: kit['domains'].join(','),
|
55
|
+
analytics: kit['analytics'].to_s
|
56
|
+
}]
|
57
|
+
Formatador.display_table(kit_data, [:id, :domains, :analytics])
|
58
|
+
|
59
|
+
Formatador.display_line("[bold]#{kit['name']} Families:[/]")
|
60
|
+
kit['families'].each do |family|
|
61
|
+
display_family_detail(family)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def display_family_detail(family)
|
66
|
+
family_data = [{
|
67
|
+
name: family['name'],
|
68
|
+
id: family['id'],
|
69
|
+
slug: family['slug'],
|
70
|
+
css_names: family['css_names'].join(',')
|
71
|
+
}]
|
72
|
+
Formatador.display_table(family_data, [:name, :id, :slug, :css_names])
|
73
|
+
end
|
74
|
+
|
75
|
+
def not_found
|
76
|
+
Formatador.display_line('[red]No kits found[/]')
|
77
|
+
end
|
78
|
+
|
79
|
+
def typekit_client
|
80
|
+
@client ||= Awesomekit::Client.new(Awesomekit::Authenticator.api_key)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Awesomekit
|
4
|
+
class Client
|
5
|
+
include HTTParty
|
6
|
+
|
7
|
+
base_uri 'https://typekit.com/api/v1/json'
|
8
|
+
|
9
|
+
def initialize(api_key)
|
10
|
+
self.class.headers('X-Typekit-Token' => api_key)
|
11
|
+
end
|
12
|
+
|
13
|
+
# PUBLIC: Returns a list of kits owned by the authenticating user
|
14
|
+
# Endpoint reference: https://typekit.com/docs/api/v1/:format/kits
|
15
|
+
def get_kits
|
16
|
+
response = self.class.get("/kits")
|
17
|
+
|
18
|
+
process_errors(response)
|
19
|
+
|
20
|
+
response['kits']
|
21
|
+
end
|
22
|
+
|
23
|
+
# PUBLIC: Returns information about a kit found by kit_id
|
24
|
+
# Endpoint reference: https://typekit.com/docs/api/v1/:format/kits/:kit
|
25
|
+
#
|
26
|
+
# published=false returns the default, current draft version of the kit
|
27
|
+
# published=true returns the current published version of a kit
|
28
|
+
def get_kit(kit_id, published=false)
|
29
|
+
if published
|
30
|
+
response = self.class.get("/kits/#{kit_id}/published")
|
31
|
+
else
|
32
|
+
response = self.class.get("/kits/#{kit_id}")
|
33
|
+
end
|
34
|
+
|
35
|
+
process_errors(response)
|
36
|
+
|
37
|
+
response['kit']
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# PRIVATE: Display any error messages returned by Typekit.
|
43
|
+
#
|
44
|
+
# Automatically removes an invalid api_key if error is a 401 not authorized,
|
45
|
+
# so the user will be prompted to enter a new key on their next request.
|
46
|
+
def process_errors(response)
|
47
|
+
if response['errors']
|
48
|
+
errors = '[red]The server responded with the following error(s):[/] '
|
49
|
+
errors << response['errors'].join(',')
|
50
|
+
|
51
|
+
if errors.include?('Not authorized')
|
52
|
+
Awesomekit::Authenticator.clear_api_key
|
53
|
+
end
|
54
|
+
|
55
|
+
Formatador.display_line(errors)
|
56
|
+
|
57
|
+
exit
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: awesomekit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Liz Hubertz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.19.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.19.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.14.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.14.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: formatador
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.2.5
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.2.5
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.3'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 3.3.0
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '3.3'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 3.3.0
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: webmock
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '1.21'
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 1.21.0
|
85
|
+
type: :development
|
86
|
+
prerelease: false
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '1.21'
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 1.21.0
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: vcr
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - "~>"
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '2.9'
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 2.9.3
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '2.9'
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: 2.9.3
|
115
|
+
description: Possibly the most "Awesome" CLI for Typekit Ever
|
116
|
+
email: liz.hubertz@gmail.com
|
117
|
+
executables:
|
118
|
+
- awesomekit
|
119
|
+
extensions: []
|
120
|
+
extra_rdoc_files: []
|
121
|
+
files:
|
122
|
+
- bin/awesomekit
|
123
|
+
- lib/awesomekit.rb
|
124
|
+
- lib/awesomekit/authenticator.rb
|
125
|
+
- lib/awesomekit/cli.rb
|
126
|
+
- lib/awesomekit/client.rb
|
127
|
+
homepage: https://github.com/lizhubertz/awesomekit
|
128
|
+
licenses:
|
129
|
+
- MIT
|
130
|
+
metadata: {}
|
131
|
+
post_install_message:
|
132
|
+
rdoc_options: []
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - ">="
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
140
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
requirements: []
|
146
|
+
rubyforge_project:
|
147
|
+
rubygems_version: 2.6.2
|
148
|
+
signing_key:
|
149
|
+
specification_version: 4
|
150
|
+
summary: Command Line Interface for interacting with the Typekit API
|
151
|
+
test_files: []
|