zendesk_apps_tools 1.35.3 → 1.35.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 343966d2380b3c6d32c9fc42d96267f3206b7006
4
- data.tar.gz: 7d71b9491415e36fc335ab2a1d2b47b33756ecda
3
+ metadata.gz: 4342a16a235ffb9c17d645b0b4671daf9af7ca82
4
+ data.tar.gz: fd5be11e0931293a51a78b53238cde0922895873
5
5
  SHA512:
6
- metadata.gz: 0b59451499cb844d058bbafc5009b72c1e07a12e53ed6f9cfc3f1fe1c121dd9ddd1b10f062ede756d143b6b58f395427be46b42cc01f72a94d7e624a91da1070
7
- data.tar.gz: 2da8f6270e4fb93e0f5b895dfec71152fab50939c614f716eb7c2b54b7b9c075a202805e503370c8af5dc356476349e21ff98b807cf299905332e342ee2d6fea
6
+ metadata.gz: 7b39f3699022df810613fdf8604e29592d5203e93ec185edf549649e3fbdcfbb70bda50e268e7c98dec94d5a9ee3c5af908b43f8aa83a5a729debfb206ad0127
7
+ data.tar.gz: 9c66857e215dac587315f9eb2ae699635be503219abc3ab83ff59df20fb4cd946a249e93b836ef256f0774affaee5f36fc3658b8b493d438d59cb183fc481240
@@ -8,22 +8,23 @@ Feature: create a template for a new zendesk app
8
8
  | author email | john@example.com |
9
9
  | author url | http://myapp.com |
10
10
  | app name | John Test App |
11
+ | iframe uri | assets/iframe.html |
11
12
  | app dir | |
12
13
 
13
14
  Then the app file "manifest.json" is created
14
15
  And I reset the working directory
15
16
 
16
- Scenario: create a template for a new zendesk app by running 'zat new' command
17
- Given an app directory "tmp/aruba" exists
18
- When I run "zat new" command with the following details:
19
- | author name | John Citizen |
20
- | author email | john@example.com |
21
- | author url | http://myapp.com |
22
- | app name | John Test App |
23
- | app dir | tmp/aruba |
17
+ Scenario: create a template for a new zendesk app by running 'zat new --v1' command
18
+ Given an app directory "tmp/aruba" exists
19
+ When I run "zat new --v1" command with the following details:
20
+ | author name | John Citizen |
21
+ | author email | john@example.com |
22
+ | author url | http://myapp.com |
23
+ | app name | John Test App |
24
+ | app dir | tmp/aruba |
24
25
 
25
- Then the app file "tmp/aruba/manifest.json" is created with:
26
- """
26
+ Then the app file "tmp/aruba/manifest.json" is created with:
27
+ """
27
28
  {
28
29
  "name": "John Test App",
29
30
  "author": {
@@ -37,9 +38,9 @@ Feature: create a template for a new zendesk app
37
38
  "version": "1.0",
38
39
  "frameworkVersion": "1.0"
39
40
  }
40
- """
41
- And the app file "tmp/aruba/app.js" is created with:
42
- """
41
+ """
42
+ And the app file "tmp/aruba/app.js" is created with:
43
+ """
43
44
  (function() {
44
45
 
45
46
  return {
@@ -52,9 +53,9 @@ Feature: create a template for a new zendesk app
52
53
  };
53
54
 
54
55
  }());
55
- """
56
- And the app file "tmp/aruba/templates/layout.hdbs" is created with:
57
- """
56
+ """
57
+ And the app file "tmp/aruba/templates/layout.hdbs" is created with:
58
+ """
58
59
  <header>
59
60
  <span class="logo"></span>
60
61
  <h3>{{setting "name"}}</h3>
@@ -65,9 +66,9 @@ Feature: create a template for a new zendesk app
65
66
  {{author.name}}
66
67
  </a>
67
68
  </footer>
68
- """
69
- And the app file "tmp/aruba/translations/en.json" is created with:
70
- """
69
+ """
70
+ And the app file "tmp/aruba/translations/en.json" is created with:
71
+ """
71
72
  {
72
73
  "app": {
73
74
  "description": "Play the famous zen tunes in your help desk.",
@@ -84,21 +85,21 @@ Feature: create a template for a new zendesk app
84
85
  "role": "Role",
85
86
  "groups": "Groups"
86
87
  }
87
- """
88
+ """
88
89
 
89
- Scenario: create a template for a new iframe only app by running 'zat new --v2' command
90
- Given an app directory "tmp/aruba" exists
91
- And I move to the app directory
92
- When I run "zat new --v2" command with the following details:
93
- | author name | John Citizen |
94
- | author email | john@example.com |
95
- | author url | http://myapp.com |
96
- | app name | John Test App |
97
- | iframe uri | assets/index.html |
98
- | app dir | tmp/aruba |
90
+ Scenario: create a template for a new iframe only app by running 'zat new' command
91
+ Given an app directory "tmp/aruba" exists
92
+ And I move to the app directory
93
+ When I run "zat new" command with the following details:
94
+ | author name | John Citizen |
95
+ | author email | john@example.com |
96
+ | author url | http://myapp.com |
97
+ | app name | John Test App |
98
+ | iframe uri | assets/iframe.html |
99
+ | app dir | tmp/aruba |
99
100
 
100
- Then the app file "tmp/aruba/manifest.json" is created with:
101
- """
101
+ Then the app file "tmp/aruba/manifest.json" is created with:
102
+ """
102
103
  {
103
104
  "name": "John Test App",
104
105
  "author": {
@@ -109,10 +110,10 @@ Feature: create a template for a new zendesk app
109
110
  "defaultLocale": "en",
110
111
  "private": true,
111
112
  "location": { "zendesk":
112
- { "ticket_sidebar": "assets/index.html" }
113
+ { "ticket_sidebar": "assets/iframe.html" }
113
114
  },
114
115
  "version": "1.0",
115
116
  "frameworkVersion": "2.0"
116
117
  }
117
- """
118
+ """
118
119
  And I reset the working directory
@@ -1,21 +1,33 @@
1
1
  Feature: package a zendesk app into a zip file
2
2
 
3
3
  Background: create a new zendesk app
4
- Given an app is created in directory "tmp/aruba"
4
+
5
5
 
6
6
  Scenario: package a zendesk app by running 'zat package' command
7
+ Given an app is created in directory "tmp/aruba"
7
8
  When I run the command "zat package --path tmp/aruba" to package the app
8
- And the command output should contain "adding app.js"
9
+ And the command output should contain "adding assets/iframe.html"
9
10
  And the command output should contain "adding assets/logo-small.png"
10
11
  And the command output should contain "adding assets/logo.png"
11
12
  And the command output should contain "adding manifest.json"
12
- And the command output should contain "adding templates/layout.hdbs"
13
13
  And the command output should contain "adding translations/en.json"
14
14
  And the command output should contain "created"
15
15
  And the zip file should exist in directory "tmp/aruba/tmp"
16
16
 
17
+ Scenario: package a v1 zendesk app by running 'zat package' command
18
+ Given a v1 app is created in directory "tmp/aruba"
19
+ When I run the command "zat package --path tmp/aruba" to package the app
20
+ And the command output should contain "adding app.js"
21
+ And the command output should contain "adding templates/layout.hdbs"
22
+ And the command output should contain "adding assets/logo-small.png"
23
+ And the command output should contain "adding assets/logo.png"
24
+ And the command output should contain "adding manifest.json"
25
+ And the command output should contain "adding translations/en.json"
26
+ And the command output should contain "created"
27
+ And the zip file should exist in directory "tmp/aruba/tmp"
17
28
 
18
29
  Scenario: package a zendesk app by running 'zat package' command
30
+ Given an app is created in directory "tmp/aruba"
19
31
  When I create a symlink from "./templates/translation.erb.tt" to "tmp/aruba/assets/translation.erb.tt"
20
32
  Then "tmp/aruba/assets/translation.erb.tt" should be a symlink
21
33
  When I run the command "zat package --path tmp/aruba" to package the app
@@ -17,14 +17,16 @@ Given /^an app directory "(.*?)" exists$/ do |app_dir|
17
17
  FileUtils.mkdir_p(@app_dir)
18
18
  end
19
19
 
20
- Given /^an app is created in directory "(.*?)"$/ do |app_dir|
20
+ Given /^a(n|(?: v1)) app is created in directory "(.*?)"$/ do |version, app_dir|
21
+ v1 = !!version[/v1/]
21
22
  steps %(
22
23
  Given an app directory "#{app_dir}" exists
23
- And I run "zat new" command with the following details:
24
+ And I run "zat new #{'--v1' if v1}" command with the following details:
24
25
  | author name | John Citizen |
25
26
  | author email | john@example.com |
26
27
  | author url | http://myapp.com |
27
28
  | app name | John Test App |
29
+ #{'| iframe uri | assets/iframe.html |' unless v1}
28
30
  | app dir | #{app_dir} |
29
31
  )
30
32
  end
@@ -10,11 +10,6 @@ module ZendeskAppsTools
10
10
  include Thor::Actions
11
11
  include ZendeskAppsTools::CommandHelpers
12
12
 
13
- SHARED_OPTIONS = {
14
- ['path', '-p'] => './',
15
- clean: false
16
- }.freeze
17
-
18
13
  map %w(-v) => :version
19
14
 
20
15
  source_root File.expand_path(File.join(File.dirname(__FILE__), '../..'))
@@ -28,9 +23,11 @@ module ZendeskAppsTools
28
23
  desc 'new', 'Generate a new app'
29
24
  method_option :'iframe-only', type: :boolean,
30
25
  default: false,
31
- desc: 'Create an iFrame Only app template',
32
- aliases: ['-i', '--v2']
26
+ hide: true,
27
+ aliases: ['--v2']
28
+ method_option :v1, type: :boolean, default: false, desc: 'Create a version 1 app template'
33
29
  def new
30
+ check_new_options
34
31
  enter = ->(variable) { "Enter this app author's #{variable}:\n" }
35
32
  invalid = ->(variable) { "Invalid #{variable}, try again:" }
36
33
  @author_name = get_value_from_stdin(enter.call('name'),
@@ -45,24 +42,24 @@ module ZendeskAppsTools
45
42
  @app_name = get_value_from_stdin("Enter a name for this new app:\n",
46
43
  error_msg: invalid.call('app name'))
47
44
 
48
- @iframe_location = if options[:'iframe-only']
45
+ @iframe_location = if options[:v1]
46
+ '_legacy'
47
+ else
49
48
  iframe_uri_text = 'Enter your iFrame URI or leave it blank to use'\
50
49
  " a default local template page:\n"
51
50
  get_value_from_stdin(iframe_uri_text, allow_empty: true, default: 'assets/iframe.html')
52
- else
53
- '_legacy'
54
51
  end
55
52
 
56
53
  prompt_new_app_dir
57
54
 
58
- skeleton = options[:'iframe-only'] ? 'app_template_iframe' : 'app_template'
59
- is_custom_iframe = options[:'iframe-only'] && @iframe_location != 'assets/iframe.html'
55
+ skeleton = options[:v1] ? 'app_template' : 'app_template_iframe'
56
+ is_custom_iframe = !options[:v1] && @iframe_location != 'assets/iframe.html'
60
57
  directory_options = is_custom_iframe ? { exclude_pattern: /iframe.html/ } : {}
61
58
  directory(skeleton, @app_dir, directory_options)
62
59
  end
63
60
 
64
61
  desc 'validate', 'Validate your app'
65
- method_options SHARED_OPTIONS
62
+ shared_options(except: [:unattended])
66
63
  def validate
67
64
  setup_path(options[:path])
68
65
  begin
@@ -91,7 +88,7 @@ module ZendeskAppsTools
91
88
  end
92
89
 
93
90
  desc 'package', 'Package your app'
94
- method_options SHARED_OPTIONS
91
+ shared_options(except: [:unattended])
95
92
  def package
96
93
  return false unless invoke(:validate, [])
97
94
 
@@ -152,7 +149,7 @@ module ZendeskAppsTools
152
149
  end
153
150
 
154
151
  desc 'create', 'Create app on your account'
155
- method_options SHARED_OPTIONS
152
+ shared_options
156
153
  method_option :zipfile, default: nil, required: false, type: :string
157
154
  def create
158
155
  cache.clear
@@ -166,7 +163,7 @@ module ZendeskAppsTools
166
163
  end
167
164
 
168
165
  desc 'update', 'Update app on the server'
169
- method_options SHARED_OPTIONS
166
+ shared_options
170
167
  method_option :zipfile, default: nil, required: false, type: :string
171
168
  def update
172
169
  cache.clear
@@ -186,6 +183,17 @@ module ZendeskAppsTools
186
183
 
187
184
  protected
188
185
 
186
+ def check_new_options
187
+ if options[:'iframe-only']
188
+ if options[:v1]
189
+ say_error_and_exit "Apps can't be created with both --v1 and --v2 (or --iframe-only)."
190
+ else
191
+ warning = 'v2 is the default for new apps, the --v2 and --iframe-only options have no effect.'
192
+ say_status 'warning', warning, :yellow
193
+ end
194
+ end
195
+ end
196
+
189
197
  def setup_path(path)
190
198
  @destination_stack << relative_to_original_destination_root(path) unless @destination_stack.last == path
191
199
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'zendesk_apps_tools/common'
2
3
  require 'zendesk_apps_tools/api_connection'
3
4
  require 'zendesk_apps_tools/deploy'
@@ -14,6 +15,10 @@ module ZendeskAppsTools
14
15
  include ZendeskAppsTools::Directory
15
16
  include ZendeskAppsTools::PackageHelper
16
17
 
18
+ def self.included(base)
19
+ base.extend(ClassMethods)
20
+ end
21
+
17
22
  def cache
18
23
  @cache ||= begin
19
24
  require 'zendesk_apps_tools/cache'
@@ -1,5 +1,33 @@
1
+ # frozen_string_literal: true
1
2
  module ZendeskAppsTools
2
3
  module Common
4
+ module ClassMethods
5
+ def shared_options(except: [])
6
+ unless except.include? :path
7
+ method_option :path,
8
+ type: :string,
9
+ default: './',
10
+ aliases: ['-p']
11
+ end
12
+ unless except.include? :clean
13
+ method_option :clean,
14
+ type: :boolean,
15
+ default: false
16
+ end
17
+ unless except.include? :unattended
18
+ method_option :unattended,
19
+ type: :boolean,
20
+ default: false,
21
+ desc: 'Experimental: Never prompt for input, expecting all input from the original invocation. Many '\
22
+ 'commands invoked with this option will just crash.'
23
+ end
24
+ end
25
+ end
26
+
27
+ def self.included(base)
28
+ base.extend(ClassMethods)
29
+ end
30
+
3
31
  def say_error_and_exit(msg)
4
32
  say_error msg
5
33
  exit 1
@@ -10,6 +38,7 @@ module ZendeskAppsTools
10
38
  end
11
39
 
12
40
  def get_value_from_stdin(prompt, opts = {})
41
+ error_if_unattended(prompt)
13
42
  options = {
14
43
  valid_regex: opts[:allow_empty] ? /^.*$/ : /\S+/,
15
44
  error_msg: 'Invalid, try again:',
@@ -20,20 +49,26 @@ module ZendeskAppsTools
20
49
 
21
50
  while input = ask(prompt, thor_options)
22
51
  return '' if options[:allow_empty] && input.empty?
23
- if input.to_s =~ options[:valid_regex]
24
- break
25
- else
26
- say_error options[:error_msg]
27
- end
52
+ break if input.to_s =~ options[:valid_regex]
53
+ say_error options[:error_msg]
28
54
  end
29
55
 
30
56
  input
31
57
  end
32
58
 
33
59
  def get_password_from_stdin(prompt)
60
+ error_if_unattended(prompt)
34
61
  password = ask(prompt, echo: false)
35
62
  say ''
36
63
  password
37
64
  end
65
+
66
+ private
67
+
68
+ def error_if_unattended(prompt)
69
+ return unless options[:unattended]
70
+ say_error 'Would have prompted for a value interactively, but we are running unattended.'
71
+ say_error_and_exit prompt
72
+ end
38
73
  end
39
74
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'thor'
2
3
  require 'json'
3
4
  require 'zendesk_apps_tools/common'
@@ -12,7 +13,7 @@ module ZendeskAppsTools
12
13
  LOCALE_ENDPOINT = 'https://support.zendesk.com/api/v2/locales/agent.json'
13
14
 
14
15
  desc 'to_yml', 'Create Zendesk translation file from en.json'
15
- method_option :path, default: './', required: false
16
+ shared_options(except: [:clean])
16
17
  def to_yml
17
18
  setup_path(options[:path]) if options[:path]
18
19
  manifest = JSON.parse(File.open("#{destination_root}/manifest.json").read)
@@ -22,72 +23,56 @@ module ZendeskAppsTools
22
23
  app_name = get_value_from_stdin('What is the name of this app?', error_msg: 'Invalid name, try again:')
23
24
  end
24
25
 
25
- en_json = JSON.parse(File.open("#{destination_root}/translations/en.json").read)
26
-
27
- package = en_json['app']['package']
28
- say('No package defined inside en.json! Abort.', :red) and exit 1 unless package
26
+ package = package_name_from_json(error_out: true)
29
27
  en_json['app'].delete('package')
30
28
 
31
29
  write_yml(en_json, app_name, package)
32
30
  end
33
31
 
34
32
  desc 'to_json', 'Convert Zendesk translation yml to I18n formatted json'
35
- method_option :path, default: './', required: false
33
+ shared_options(except: [:clean])
36
34
  def to_json
37
35
  require 'yaml'
38
36
  setup_path(options[:path]) if options[:path]
39
37
  en_yml = YAML.load_file("#{destination_root}/translations/en.yml")
40
38
  package = /^txt.apps.([^\.]+)/.match(en_yml['parts'][0]['translation']['key'])[1]
41
39
  translations = en_yml['parts'].map { |part| part['translation'] }
42
- en_json = array_to_nested_hash(translations)['txt']['apps'][package]
43
- en_json['app']['package'] = package
40
+ en_hash = array_to_nested_hash(translations)['txt']['apps'][package]
41
+ en_hash['app']['package'] = package
44
42
 
45
- write_json('translations/en.json', en_json)
43
+ write_json('translations/en.json', en_hash)
46
44
  end
47
45
 
48
46
  desc 'update', 'Update translation files from Zendesk'
49
- method_option :path, default: './', required: false
50
- def update()
47
+ shared_options(except: [:clean])
48
+ method_option :package_name, type: :string
49
+ def update
51
50
  setup_path(options[:path]) if options[:path]
52
- app_package = get_value_from_stdin('What is the package name for this app? (without app_)', valid_regex: /^[a-z_]+$/, error_msg: 'Invalid package name, try again:')
53
-
54
- key_prefix = "txt.apps.#{app_package}."
55
-
56
- say('Fetching translations...')
57
- require 'net/http'
58
- require 'faraday'
59
- locale_response = Faraday.get(LOCALE_ENDPOINT)
60
-
61
- if locale_response.status == 200
62
- locales = JSON.parse(locale_response.body)['locales']
63
-
64
- locales = locales.map { |locale| fetch_locale_async locale, app_package}.map(&:value)
65
-
66
- locales.each do |locale|
67
- translations = locale['translations']
51
+ app_package = package_name_for_update
52
+ locale_list
53
+ .map { |locale| fetch_locale_async locale, app_package }
54
+ .each do |locale_thread|
55
+ locale = locale_thread.value
56
+ translations = locale['translations']
68
57
 
69
58
  locale_name = ZendeskAppsTools::LocaleIdentifier.new(locale['locale']).locale_id
70
- write_json("#{destination_root}/translations/#{locale_name}.json", nest_translations_hash(translations, key_prefix))
59
+ write_json(
60
+ "#{destination_root}/translations/#{locale_name}.json",
61
+ nest_translations_hash(translations, "txt.apps.#{app_package}.")
62
+ )
71
63
  end
72
- say('Translations updated', :green)
73
-
74
- elsif locale_response.status == 401
75
- say('Authentication failed', :red)
76
- end
64
+ say('Translations updated', :green)
77
65
  end
78
66
 
79
67
  desc 'pseudotranslate', 'Generate a Pseudo-translation to use for testing. This will pretend to be French.'
80
- method_option :path, default: './', required: false
68
+ shared_options(except: [:clean])
81
69
  def pseudotranslate
82
70
  setup_path(options[:path]) if options[:path]
83
71
 
84
- en_json = JSON.parse(File.open("#{destination_root}/translations/en.json").read)
85
-
86
- package = en_json['app']['package']
87
- say('No package defined inside en.json! Abort.', :red) and exit 1 unless package
72
+ package = package_name_from_json(error_out: true)
88
73
 
89
74
  pseudo = build_pseudotranslation(en_json, package)
90
- write_json("translations/fr.json", pseudo)
75
+ write_json('translations/fr.json', pseudo)
91
76
  end
92
77
 
93
78
  def self.source_root
@@ -108,7 +93,7 @@ module ZendeskAppsTools
108
93
  end
109
94
 
110
95
  def write_json(filename, translations_hash)
111
- create_file(filename, JSON.pretty_generate(translations_hash) + "\n")
96
+ create_file(filename, JSON.pretty_generate(translations_hash) + "\n", force: options[:unattended])
112
97
  end
113
98
 
114
99
  def nest_translations_hash(translations_hash, key_prefix)
@@ -134,7 +119,9 @@ module ZendeskAppsTools
134
119
  def write_yml(en_json, app_name, package_name)
135
120
  titles = to_flattened_namespaced_hash(en_json, :title)
136
121
  values = to_flattened_namespaced_hash(en_json, :value)
137
- @translations = titles.each { |k, v| titles[k] = { 'title' => v, 'value' => escape_special_characters(values[k]) } }
122
+ @translations = titles.each do |k, v|
123
+ titles[k] = { 'title' => v, 'value' => escape_special_characters(values[k]) }
124
+ end
138
125
  @app_name = app_name
139
126
  @package_name = package_name
140
127
  template(File.join(Translate.source_root, 'templates/translation.erb.tt'), 'translations/en.yml')
@@ -158,7 +145,7 @@ module ZendeskAppsTools
158
145
  end
159
146
 
160
147
  def array_to_nested_hash(array)
161
- array.inject({}) do |result, item|
148
+ array.each_with_object({}) do |item, result|
162
149
  keys = item['key'].split('.')
163
150
  current = result
164
151
  keys[0..-2].each do |key|
@@ -176,6 +163,41 @@ module ZendeskAppsTools
176
163
  translations['app.package'] = package_name # don't pseudo translate the package name
177
164
  nest_translations_hash(translations, '')
178
165
  end
166
+
167
+ def locale_list
168
+ say('Fetching translations...')
169
+ require 'net/http'
170
+ require 'faraday'
171
+ locale_response = Faraday.get(LOCALE_ENDPOINT)
172
+
173
+ return JSON.parse(locale_response.body)['locales'] if locale_response.status == 200
174
+ if locale_response.status == 401
175
+ say_error_and_exit 'Authentication failed'
176
+ else
177
+ say_error_and_exit "Failed to download locales, got HTTP status #{locale_response.status}"
178
+ end
179
+ end
180
+
181
+ def package_name_for_update
182
+ options[:package_name] ||
183
+ package_name_from_json(error_out: options[:unattended]) ||
184
+ get_value_from_stdin('What is the package name for this app? (without leading app_)',
185
+ valid_regex: /^[a-z_]+$/,
186
+ error_msg: 'Invalid package name, try again:')
187
+ end
188
+
189
+ def en_json
190
+ @en_json ||= begin
191
+ path = "#{destination_root}/translations/en.json"
192
+ JSON.parse(File.open(path).read) if File.exist? path
193
+ end
194
+ end
195
+
196
+ def package_name_from_json(error_out: false)
197
+ package = en_json && en_json['app']['package']
198
+ return package if package
199
+ say_error_and_exit 'No package defined inside en.json!' if error_out
200
+ end
179
201
  end
180
202
  end
181
203
  end
@@ -1,3 +1,3 @@
1
1
  module ZendeskAppsTools
2
- VERSION = "1.35.3"
2
+ VERSION = "1.35.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zendesk_apps_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.35.3
4
+ version: 1.35.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - James A. Rosen
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-09-27 00:00:00.000000000 Z
14
+ date: 2016-10-13 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: thor