envoy-cli 1.0.0rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +95 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile +4 -0
  7. data/bin/envoy +12 -0
  8. data/bin/envoy.bak +485 -0
  9. data/bootstrap/base/.envoyrc +1 -0
  10. data/bootstrap/base/.jshintrc +91 -0
  11. data/bootstrap/base/.nvmrc +1 -0
  12. data/bootstrap/base/config/.gitkeep +0 -0
  13. data/bootstrap/base/docs/.gitkeep +0 -0
  14. data/bootstrap/base/gulpfile.js +0 -0
  15. data/bootstrap/base/i18n/.gitkeep +0 -0
  16. data/bootstrap/base/index.js +5 -0
  17. data/bootstrap/base/lib/.gitkeep +0 -0
  18. data/bootstrap/base/routes/.gitkeep +0 -0
  19. data/bootstrap/base/views/.gitkeep +0 -0
  20. data/bootstrap/base/workers/.gitkeep +0 -0
  21. data/bootstrap/events/generic.json +6 -0
  22. data/bootstrap/events/host_notification.json +27 -0
  23. data/bootstrap/events/route.json +6 -0
  24. data/bootstrap/events/sms_host_notification.json +158 -0
  25. data/bootstrap/templates/docs/about.md.erb +3 -0
  26. data/bootstrap/templates/gitignore.erb +8 -0
  27. data/bootstrap/templates/index.js.erb +5 -0
  28. data/bootstrap/templates/license.md.erb +1 -0
  29. data/bootstrap/templates/npmignore.erb +0 -0
  30. data/bootstrap/templates/package.json +24 -0
  31. data/bootstrap/templates/readme.md.erb +9 -0
  32. data/bootstrap/templates/routes/callback.js.erb +10 -0
  33. data/bootstrap/templates/routes/html.js.erb +9 -0
  34. data/bootstrap/templates/routes/json.js.erb +9 -0
  35. data/bootstrap/templates/routes/other.js.erb +9 -0
  36. data/bootstrap/templates/views/hello.html.erb +91 -0
  37. data/bootstrap/templates/views/starter.html.erb +10 -0
  38. data/bootstrap/templates/worker.js.erb +10 -0
  39. data/envoy-cli.gemspec +29 -0
  40. data/lib/envoy.rb +70 -0
  41. data/lib/envoy/version.rb +3 -0
  42. data/lib/inc/commands.rb +74 -0
  43. data/lib/inc/generator.rb +159 -0
  44. data/lib/inc/mixins.rb +347 -0
  45. data/lib/inc/runner.rb +21 -0
  46. data/lib/tasks/plugin.rb +181 -0
  47. data/lib/tasks/routes.rb +39 -0
  48. data/lib/tasks/test.rb +68 -0
  49. data/lib/tasks/workers.rb +39 -0
  50. data/readme.md +0 -0
  51. metadata +276 -0
data/lib/inc/runner.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'inc/commands'
2
+ class Runner < Commands
3
+ def help(ometh = nil, subcommand = false)
4
+ if ometh && !respond_to?(ometh)
5
+ meth = self.class.basenamespace + ometh
6
+ klass, command = Thor::Util.find_class_and_command_by_namespace(meth)
7
+ self.class.handle_no_command_error(command, false) if klass.nil?
8
+ klass.start(["-h", command].compact, shell: shell)
9
+ else
10
+ super
11
+ end
12
+ end
13
+
14
+ def method_missing(meth, *args)
15
+ meth = meth.to_s.insert(0, self.class.basenamespace)
16
+ klass, command = Thor::Util.find_class_and_command_by_namespace(meth)
17
+ self.class.handle_no_command_error(command, false) if klass.nil?
18
+ args.unshift(command) if command
19
+ klass.start(args, shell: shell)
20
+ end
21
+ end
@@ -0,0 +1,181 @@
1
+ require 'net/http/uploadprogress'
2
+ module Envoy
3
+ class Plugin < Commands
4
+ include Mixins
5
+ include Envoy::Generator
6
+
7
+ # Packages and releases a version of a plugin
8
+ # @param release_type [String] One of minor, major, or patch
9
+ # @param base [Integer] Base version for minor or patch release
10
+ # @option local [Boolean] will use localhost:3000 as the API url
11
+ # @option profile [String] use the url and auth token saved for this profile
12
+ # @option retry [Boolean] do not recompile code, use last package
13
+
14
+ desc 'release <type> [base]', 'Release your plugin'
15
+ option :retry, type: :boolean
16
+
17
+ def release(release_type = nil, base = nil)
18
+ # Ask for request type if not provided
19
+ unless release_type && %w(patch minor major).include?(release_type)
20
+ release_type = prompt.select("What type of release is this?") do |menu|
21
+ menu.default 3
22
+ menu.choice 'Major version (breaking changes)', 'major'
23
+ menu.choice 'Minor version (non-breakng feature updates)', 'minor'
24
+ menu.choice 'Patch (bugfixes, refactoring, optimizations)', 'patch'
25
+ end
26
+ end
27
+
28
+ # get the version base for minor and patch types
29
+ if base.nil? && release_type != 'major'
30
+ base = prompt.ask("What is the base version for this release?", in: '0-900')
31
+ end
32
+
33
+ # ask for release notes unless deploying release to local
34
+ unless options.local || config[profile]['local']
35
+ notes = ask "Release Notes:"
36
+ if notes.empty?
37
+ error "Please provide at least a couple words about what this release is for."
38
+ exit
39
+ end
40
+ end
41
+
42
+ # request deploy permissions amd signed s3 url if necessary
43
+ res = jsonapi_post('Requesting deploy permissions', './platform/releases', {
44
+ type: 'platform-releases',
45
+ attributes: {
46
+ manifest: manifest,
47
+ path: options.local ? Dir.pwd : nil,
48
+ notes: notes || '',
49
+ provider: options.local && 'local' || 'lambda',
50
+ version_type: release_type,
51
+ version_base: base || nil
52
+ },
53
+ relationships: {
54
+ plugin: {
55
+ data: {
56
+ type: 'platform-plugins',
57
+ id: plugin_uuid
58
+ }
59
+ }
60
+ }
61
+ })
62
+
63
+ # zip and upload the package to s3 if not local
64
+ unless options.local
65
+ # allow for re-using the previous package if there was a network issue
66
+ if options.retry
67
+ say 'Using previously packaged plugin...'
68
+ else
69
+ spin 'Packing your plugin'
70
+ `grunt lambda_package`
71
+ spin_success
72
+ end
73
+
74
+ # find the upload file
75
+ # @todo this needs love
76
+ file = Dir.glob("#{Dir.pwd}/dist/*_latest.zip").first
77
+
78
+ # extract the upload url (signed S3 URL)
79
+ uri = URI.parse(res['data']['attributes']['upload-to'])
80
+
81
+ # grab our zip file for uploading
82
+ File.open(file, 'rb') do |io|
83
+ bar = TTY::ProgressBar.new(
84
+ "Uploading package - :current_byte (:percent) [:bar] :total_byte (:eta remaining) ",
85
+ total: io.size)
86
+
87
+ # build an upload request
88
+ request = Net::HTTP::Put.new(uri.request_uri)
89
+ request.content_length = io.size
90
+ request.body_stream = io
91
+
92
+ # Setup a progress monitor
93
+ Net::HTTP::UploadProgress.new(request) do |progress|
94
+ bar.current = progress.upload_size
95
+ end
96
+
97
+ # create a new http client and push this bad boy to the internetz
98
+ http = Net::HTTP.new(uri.host, uri.port)
99
+ http.use_ssl = true
100
+ http.request(request)
101
+ bar.finish
102
+ end
103
+ end
104
+
105
+ # let the server know we've uploaded the zip folder (or just complete directly if on local)
106
+ jsonapi_post('Completing release', "./platform/releases/#{res['data']['id']}/complete")
107
+
108
+ # @todo this url does not always work, figure out something better here
109
+ say 'Check out your new plugin at ' \
110
+ "\e[4m" + base_url("/platform/#{res['data']['attributes']['plugin-key']}/welcome") + "\e[0m"
111
+ end
112
+
113
+ desc 'bootstrap <dir>', 'Bootstrap your plugin'
114
+ def bootstrap(dir = false)
115
+ # seldestination_root = dir || Dir.pwd
116
+ @name = "Whatever Dude"
117
+ @key = "whatever-dude"
118
+ @version = "0.0.1"
119
+ @description = "Super basic description"
120
+ setup_directories
121
+ setup_config
122
+ setup_docs
123
+ setup_i18n
124
+ setup_npm
125
+ setup_readme
126
+ setup_tests
127
+ setup_license
128
+ setup_dotfiles
129
+ setup_route 'hello', type: 'html', view: 'hello'
130
+ run 'npm i --global-style'
131
+ end
132
+
133
+ desc 'init <dir>', 'Initialize your plugin'
134
+ option :bootstrap, type: :boolean
135
+ def init(dir = false)
136
+ bootstrap = options.bootstrap
137
+ if dir
138
+ # @TODO create dir if it doesn't already exist
139
+ Dir.chdir dir
140
+ end
141
+
142
+ if file_exist?('config/default.json') || file_exist?("config/#{profile.downcase}.json")
143
+ prompt.yes?("It looks you've already created a plugin here. Would you like to register it?") || exit
144
+ else
145
+ prompt.yes?("Are you sure you want to initialize a new plugin at #{Dir.pwd}?") || exit
146
+ bootstrap = true
147
+ end
148
+
149
+ @name = prompt.ask 'Plugin Name: ', require: true
150
+ @key = prompt.ask 'Unique Key (lowercase [a-z0-9] only): ', require: true
151
+
152
+ res = jsonapi_post('Creating plugin', './platform/plugins', {
153
+ type: 'platform-plugins',
154
+ attributes: { name: @name, key: @key }
155
+ })
156
+
157
+ if bootstrap
158
+ local_config.add "ENVOY_PROFILE", profile
159
+ @version = res.dig('data', 'attributes', 'version')
160
+ @description = ""
161
+ setup_directories
162
+ setup_config
163
+ setup_docs
164
+ setup_i18n
165
+ setup_npm
166
+ setup_readme
167
+ setup_tests
168
+ setup_license
169
+ setup_dotfiles
170
+ setup_route 'hello', type: 'html', view: 'hello'
171
+ run 'npm i --global-style'
172
+ end
173
+
174
+ local_config.add "ENVOY_#{profile.upcase}_PLUGIN_UUID", res['data']['id'], true
175
+ write_local_config!
176
+
177
+ say "✔ Your plugin is ready for development."
178
+ say "ℹ Run `npm install --global-style` before continuing." if options.bootstrap
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,39 @@
1
+ require 'launchy'
2
+ module Envoy
3
+ class Routes < Commands
4
+ include Mixins
5
+ include Envoy::Generator
6
+
7
+ desc 'add <name>', 'Add a route to your plugin'
8
+ def add(name)
9
+ setup_route name
10
+ end
11
+
12
+ desc 'remove <name>', 'Add a route to your plugin'
13
+ def remove(name)
14
+ teardown_route name
15
+ end
16
+
17
+ desc 'fake <name>', 'Add a route to your plugin'
18
+ def fake(name)
19
+ fake_data = read_data self.class.source_root + '/events/route.json'
20
+ fake_data['request_meta']['route'] = name
21
+
22
+ say_status 'request', indent_lines(pretty_json(min_json(fake_data))).lstrip, :magenta
23
+ output = `node_modules/.bin/invoke local #{fake_data.to_json.to_json}`
24
+ output = output.split('------%%------')
25
+ puts output
26
+ json = JSON.parse output[1]
27
+ if json.dig('payload', 'body', 'html')
28
+ tmpfile = ".tmp/response-#{Time.now.to_i}.html"
29
+ create_file tmpfile do
30
+ json.dig('payload', 'body', 'html')
31
+ end
32
+ Launchy.open(destination_root + '/' + tmpfile)
33
+ json
34
+ end
35
+ say_status 'stdout', indent_lines(output[0]).lstrip, :magenta
36
+ say_status 'response', indent_lines(pretty_json(min_json(json))).lstrip, :magenta
37
+ end
38
+ end
39
+ end
data/lib/tasks/test.rb ADDED
@@ -0,0 +1,68 @@
1
+ require 'tty-prompt'
2
+ require 'tty-spinner'
3
+ require 'tty-progressbar'
4
+
5
+ module Envoy
6
+ class Test < Commands
7
+
8
+ include Thor::Actions
9
+ include Mixins
10
+
11
+ desc 'prompt', 'Test various prompt options'
12
+ def prompt
13
+ prompt = TTY::Prompt.new
14
+ puts prompt.yes?('Do you like Ruby?')
15
+ puts prompt.select("Choose your destiny?", %w(Scorpion Kano Jax))
16
+ choices = %w(vodka beer wine whisky bourbon)
17
+ puts prompt.multi_select("Select drinks?", choices)
18
+
19
+ end
20
+
21
+ desc 'spinner', 'Test the spinner'
22
+ def spinner
23
+ spinner = TTY::Spinner.new(":spinner Loading ...", format: :triangle, interval: 10)
24
+ spinner.start
25
+ sleep(2)
26
+
27
+ spinner.error('Failed')
28
+ # spinner.success('Done!')
29
+ end
30
+
31
+ desc 'status', 'say status'
32
+ def status
33
+ say_status('Warning','You are so silly.'.on_red,:yellow)
34
+ # print_in_columns(['what','does','this','do'])
35
+ # print_in_columns(['it','does','this','too'])
36
+ print_wrapped(%Q(Enim non aliquip labore adipisicing deserunt commodo velit incididunt irure non minim. Sunt anim do amet veniam id adipisicing sint et voluptate voluptate quis reprehenderit. Esse elit consectetur ea enim cillum commodo aliquip exercitation elit officia. Do minim dolor in cupidatat eu deserunt nostrud aliqua non sit exercitation. Cupidatat occaecat nostrud labore dolore quis dolore laborum magna nisi. Ex ullamco esse id voluptate quis excepteur mollit aliqua esse aliquip ipsum.),indent:14)
37
+ end
38
+
39
+ desc 'progress', 'Test the progress bar'
40
+ def progress
41
+ bar = TTY::ProgressBar.new("downloading [:bar] :elapsed :percent", total: 30)
42
+ 30.times do
43
+ sleep(0.1)
44
+ bar.advance(1)
45
+ end
46
+ end
47
+
48
+ def self.source_root
49
+ File.dirname(__FILE__)
50
+ end
51
+
52
+ desc 'bootstrap', 'Test bootstrapping'
53
+ def bootstrap
54
+ create_file "sandbox/test.txt"
55
+ end
56
+
57
+ desc 'testindent', 'Test bootstrapping'
58
+ def testindent
59
+ say_status :hmm, 'yeah'
60
+ indent(7) do
61
+ say 'hooo yeah'
62
+ puts 'hey yeah'
63
+ end
64
+ # say 'hooo yeah'
65
+ # create_file "sandbox/test.txt"
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,39 @@
1
+ require 'launchy'
2
+ module Envoy
3
+ class Workers < Commands
4
+ include Mixins
5
+ include Envoy::Generator
6
+
7
+ desc 'add <name>', 'Add a worker to your plugin'
8
+ def add(name)
9
+ setup_worker name
10
+ end
11
+
12
+ desc 'remove <name>', 'Remove a worker from your plugin'
13
+ def remove(name)
14
+ teardown_worker name
15
+ end
16
+
17
+ desc 'fake <name>', 'Fake a worker event to your plugin'
18
+ def fake(name)
19
+ return error 'Not yet implemented'
20
+ fake_data = read_data self.class.source_root + '/events/worker.json'
21
+ fake_data['request_meta']['route'] = name
22
+
23
+ say_status 'request', indent_lines(pretty_json(min_json(fake_data))).lstrip, :magenta
24
+ output = `node_modules/.bin/invoke local #{fake_data.to_json.to_json}`
25
+ output = output.split('------%%------')
26
+ json = JSON.parse output[1]
27
+ if json.dig('payload', 'body', 'html')
28
+ tmpfile = ".tmp/response-#{Time.now.to_i}.html"
29
+ create_file tmpfile do
30
+ json.dig('payload', 'body', 'html')
31
+ end
32
+ Launchy.open(destination_root + '/' + tmpfile)
33
+ json
34
+ end
35
+ say_status 'stdout', indent_lines(output[0]).lstrip, :magenta
36
+ say_status 'response', indent_lines(pretty_json(min_json(json))).lstrip, :magenta
37
+ end
38
+ end
39
+ end
data/readme.md ADDED
File without changes
metadata ADDED
@@ -0,0 +1,276 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: envoy-cli
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0rc1
5
+ platform: ruby
6
+ authors:
7
+ - David Boskovic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-18 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'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.19.1
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '0.19'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.19.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: terminal-table
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.5'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.5.2
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.5'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 1.5.2
53
+ - !ruby/object:Gem::Dependency
54
+ name: colorize
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.7'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.7.7
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.7'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.7.7
73
+ - !ruby/object:Gem::Dependency
74
+ name: unirest
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.1'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.1.2
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.1.2
93
+ - !ruby/object:Gem::Dependency
94
+ name: parseconfig
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.0'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.0.8
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.0'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 1.0.8
113
+ - !ruby/object:Gem::Dependency
114
+ name: coderay
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '1.1'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 1.1.1
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '1.1'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 1.1.1
133
+ - !ruby/object:Gem::Dependency
134
+ name: launchy
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '2.4'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 2.4.3
143
+ type: :runtime
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '2.4'
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 2.4.3
153
+ - !ruby/object:Gem::Dependency
154
+ name: tty
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.5'
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: 0.5.0
163
+ type: :runtime
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '0.5'
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: 0.5.0
173
+ - !ruby/object:Gem::Dependency
174
+ name: net-http-uploadprogress
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '2.0'
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: 2.0.0
183
+ type: :runtime
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '2.0'
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 2.0.0
193
+ description: The Envoy command line interface handles almost all the heavy lifting
194
+ for you during development of platform plugins.
195
+ email:
196
+ - david@envoy.com
197
+ executables:
198
+ - envoy
199
+ extensions: []
200
+ extra_rdoc_files: []
201
+ files:
202
+ - ".gitignore"
203
+ - ".rspec"
204
+ - ".rubocop.yml"
205
+ - ".ruby-version"
206
+ - Gemfile
207
+ - bin/envoy
208
+ - bin/envoy.bak
209
+ - bootstrap/base/.envoyrc
210
+ - bootstrap/base/.jshintrc
211
+ - bootstrap/base/.nvmrc
212
+ - bootstrap/base/config/.gitkeep
213
+ - bootstrap/base/docs/.gitkeep
214
+ - bootstrap/base/gulpfile.js
215
+ - bootstrap/base/i18n/.gitkeep
216
+ - bootstrap/base/index.js
217
+ - bootstrap/base/lib/.gitkeep
218
+ - bootstrap/base/routes/.gitkeep
219
+ - bootstrap/base/views/.gitkeep
220
+ - bootstrap/base/workers/.gitkeep
221
+ - bootstrap/events/generic.json
222
+ - bootstrap/events/host_notification.json
223
+ - bootstrap/events/route.json
224
+ - bootstrap/events/sms_host_notification.json
225
+ - bootstrap/templates/docs/about.md.erb
226
+ - bootstrap/templates/gitignore.erb
227
+ - bootstrap/templates/index.js.erb
228
+ - bootstrap/templates/license.md.erb
229
+ - bootstrap/templates/npmignore.erb
230
+ - bootstrap/templates/package.json
231
+ - bootstrap/templates/readme.md.erb
232
+ - bootstrap/templates/routes/callback.js.erb
233
+ - bootstrap/templates/routes/html.js.erb
234
+ - bootstrap/templates/routes/json.js.erb
235
+ - bootstrap/templates/routes/other.js.erb
236
+ - bootstrap/templates/views/hello.html.erb
237
+ - bootstrap/templates/views/starter.html.erb
238
+ - bootstrap/templates/worker.js.erb
239
+ - envoy-cli.gemspec
240
+ - lib/envoy.rb
241
+ - lib/envoy/version.rb
242
+ - lib/inc/commands.rb
243
+ - lib/inc/generator.rb
244
+ - lib/inc/mixins.rb
245
+ - lib/inc/runner.rb
246
+ - lib/tasks/plugin.rb
247
+ - lib/tasks/routes.rb
248
+ - lib/tasks/test.rb
249
+ - lib/tasks/workers.rb
250
+ - readme.md
251
+ homepage: http://rubygemspec.org/gems/envoy-cli
252
+ licenses:
253
+ - MIT
254
+ metadata: {}
255
+ post_install_message:
256
+ rdoc_options: []
257
+ require_paths:
258
+ - lib
259
+ required_ruby_version: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - ">="
262
+ - !ruby/object:Gem::Version
263
+ version: '0'
264
+ required_rubygems_version: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - ">"
267
+ - !ruby/object:Gem::Version
268
+ version: 1.3.1
269
+ requirements: []
270
+ rubyforge_project:
271
+ rubygems_version: 2.6.4
272
+ signing_key:
273
+ specification_version: 4
274
+ summary: Envoy platform command line interface.
275
+ test_files: []
276
+ has_rdoc: