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.
@@ -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
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path('../../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'awesomekit'
7
+
8
+ Awesomekit::CLI.start(ARGV)
@@ -0,0 +1,10 @@
1
+ module Awesomekit
2
+ VERSION = '0.0.1'
3
+ NAME = 'awesomekit'
4
+ end
5
+
6
+ require 'formatador'
7
+
8
+ require 'awesomekit/authenticator'
9
+ require 'awesomekit/client'
10
+ require 'awesomekit/cli'
@@ -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: []