envoy-cli 1.0.0rc1 → 1.0.0rc2

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: dec124e3b5fc290be2ef15c35db1efe32015c810
4
- data.tar.gz: 3c60fd82c958edcec08994fc3b63a3ccc708ee23
3
+ metadata.gz: 09cc0766e2fbb6a44d96f4cd2ad4e7a3b8012f36
4
+ data.tar.gz: b152d8336231821b31d49c66ef5c647004013f12
5
5
  SHA512:
6
- metadata.gz: 556842fa3ea2aee9da0c13801b928ae013b9be5040b84ccd040ae24f978374767977066633d162ca12e83bbe268de2a7e775730852993b9722ae13fa684a2418
7
- data.tar.gz: fccef4834dc086872214a57ad7f0a04035b032ecbcdc5fb6c83da5f20b7c603a5fa9cdef95f16d0c4d7adbea5bd16f5313f6fbc7da441b38a1388db4cc0a2b38
6
+ metadata.gz: e6bd6788c27b249f1a7e33370f7cb400d2a1fd88600bdcd27fe443c6d20e6484f55431867395b4cd08b09f5fc55756e17baf3e9153e6f9d1b7b7ab685ea3ff39
7
+ data.tar.gz: d94b22579d54c2e21d04d8618f0dc814e060a4e2825faba6b54852ec8adcf81f1837f91e796622ad048a190504832f9f14d3919490a9cddd62aba3e0d6d562bf
@@ -0,0 +1,13 @@
1
+ var grunt = require('grunt');
2
+ grunt.loadNpmTasks('grunt-aws-lambda');
3
+
4
+ grunt.initConfig({
5
+ lambda_package: {
6
+ default: {
7
+ options: {
8
+ include_time:false,
9
+ include_version:false
10
+ }
11
+ }
12
+ }
13
+ });
@@ -1,5 +1,7 @@
1
1
  var Platform = require('envoy-platform-sdk');
2
- var platform = new Platform(require('./envoy-manifest.json'));
2
+ var platform = new Platform({
3
+ baseDir: __dirname
4
+ });
3
5
 
4
6
  require('dotenv').config();
5
7
  exports.handler = platform.handler();
@@ -1,24 +1,20 @@
1
1
  {
2
2
  "name": "",
3
- "version": "",
3
+ "version": "0.0.1",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "repository": "",
7
7
  "private": true,
8
- "scripts": {
9
- "setup": "./bin/setup",
10
- "invoke": "./bin/invoke"
11
- },
12
8
  "author": "",
13
9
  "license": "SEE LICENSE IN license.md",
14
10
  "devDependencies": {
11
+ "grunt": "^1.0.1",
12
+ "grunt-aws-lambda": "^0.12.0"
15
13
  },
16
14
  "dependencies": {
17
- "dotenv": "^2.0.0",
18
- "envoy-platform-sdk": "git+ssh://git@github.com/envoy/envoy-platform-sdk-nodejs.git"
15
+ "envoy-platform-sdk": "git+ssh://git@github.com/envoy/envoy-platform-sdk-nodejs.git#develop"
19
16
  },
20
17
  "bundledDependencies": [
21
- "dotenv",
22
18
  "envoy-platform-sdk"
23
19
  ]
24
20
  }
data/lib/envoy.rb CHANGED
@@ -1,16 +1,16 @@
1
- require 'envoy/version'
2
1
  require 'thor'
3
2
 
4
3
  require 'inc/runner'
5
4
  require 'inc/commands'
6
5
  require 'inc/mixins'
7
6
  require 'inc/generator'
7
+ require 'inc/schema_model'
8
8
 
9
9
  require 'unirest'
10
10
  require 'colorize'
11
11
 
12
12
  project_root = File.dirname(File.absolute_path(__FILE__))
13
- Dir.glob("#{project_root}/tasks/**/*.rb", &method(:require))
13
+ Dir.glob("#{project_root}/envoy/**/*.rb", &method(:require))
14
14
 
15
15
  module Envoy
16
16
  class Main < Commands
@@ -20,12 +20,12 @@ module Envoy
20
20
 
21
21
  # Authenticates the user by storing their auth_token in ~/.envoy-cfg
22
22
  # @param --local [String] will use localhost:3000 as the API url
23
- # @param --path [String] can be used to override the endpoint for this profile
23
+ # @param --endpoint [String] can be used to override the endpoint for this profile
24
24
  # @param --profile NAME [String] will save the login information for that profile, in order
25
25
  # to use that info, you must specify the same profile name on other requests
26
26
 
27
27
  desc "login", "Login to your account"
28
- option :path, type: :string
28
+ option :endpoint, type: :string
29
29
 
30
30
  def login
31
31
  # collect login information
@@ -55,7 +55,7 @@ module Envoy
55
55
  'access_token' => res['access_token']
56
56
  }
57
57
  conf['local'] = true if options.local
58
- conf['api_path'] = options.path if options.path
58
+ conf['api_path'] = options.endpoint if options.endpoint
59
59
 
60
60
  config.params[profile(options)] = conf
61
61
 
@@ -136,9 +136,14 @@ module Envoy
136
136
  bootstrap = options.bootstrap
137
137
  if dir
138
138
  # @TODO create dir if it doesn't already exist
139
+ unless Dir.exists? dir
140
+ Dir.mkdir dir
141
+ end
139
142
  Dir.chdir dir
140
143
  end
141
144
 
145
+ destination_root = Dir.pwd
146
+
142
147
  if file_exist?('config/default.json') || file_exist?("config/#{profile.downcase}.json")
143
148
  prompt.yes?("It looks you've already created a plugin here. Would you like to register it?") || exit
144
149
  else
@@ -5,7 +5,8 @@ module Envoy
5
5
  include Envoy::Generator
6
6
 
7
7
  desc 'add <name>', 'Add a route to your plugin'
8
- def add(name)
8
+ def add(name = false)
9
+ name ||= prompt.ask("Route name (lowercase alphanumeric):")
9
10
  setup_route name
10
11
  end
11
12
 
@@ -22,7 +23,6 @@ module Envoy
22
23
  say_status 'request', indent_lines(pretty_json(min_json(fake_data))).lstrip, :magenta
23
24
  output = `node_modules/.bin/invoke local #{fake_data.to_json.to_json}`
24
25
  output = output.split('------%%------')
25
- puts output
26
26
  json = JSON.parse output[1]
27
27
  if json.dig('payload', 'body', 'html')
28
28
  tmpfile = ".tmp/response-#{Time.now.to_i}.html"
@@ -0,0 +1,86 @@
1
+ module Envoy
2
+ class Schema < Commands
3
+ include Mixins
4
+ include Envoy::Generator
5
+ include Envoy::SchemaModel
6
+
7
+ desc 'add <name>', 'Add a schema to your plugin'
8
+ def add(name = false)
9
+ unless name
10
+ name = prompt.ask("Name (lowercase alphanumeric):") do |q|
11
+ q.required true
12
+ q.validate(/^[\w0-9\-]+$/)
13
+ q.modify :downcase
14
+ end
15
+ end
16
+ profiles = get_profiles
17
+
18
+ modify_profiles(profiles) do |profile, data|
19
+ if data.dig('schema', name)
20
+ next error "The schema <#{name}> already exists in environment <#{profile}>. Skipping."
21
+ end
22
+ data['schema'][name] = []
23
+ end
24
+ end
25
+
26
+ desc 'remove <name>', 'Remove a schema from your plugin'
27
+ def remove(name = nil)
28
+ profiles = get_profiles
29
+ schemas = []
30
+ read_profiles(profiles) do |_, data|
31
+ schemas |= data['schema'].keys
32
+ end
33
+
34
+ if schemas.empty?
35
+ error('No schemas to remove.') && exit
36
+ end
37
+
38
+ unless name
39
+ name = prompt.select("Select schema to remove:", schemas)
40
+ end
41
+
42
+ modify_profiles(profiles) do |profile, data|
43
+ unless data.dig('schema', name)
44
+ next warn "The schema <#{name}> does not exist in environment <#{profile}>. Skipping."
45
+ end
46
+ data['schema'].delete(name)
47
+ end
48
+ end
49
+
50
+ desc 'add-field <name>', 'Remove a schema from your plugin'
51
+ def add_field(schema = nil, key = nil)
52
+ profiles = get_profiles
53
+ schemas = []
54
+ read_profiles(profiles) do |_, data|
55
+ schemas |= data['schema'].keys
56
+ end
57
+
58
+ unless schema
59
+ schema = prompt.select("Select schema to add a field to:", schemas)
60
+ end
61
+
62
+ until key
63
+ key = prompt.ask("Key (required):")
64
+ end
65
+
66
+ type = choose_field_type
67
+
68
+ config = get_field_options type
69
+ config[:type] = type
70
+ config[:key] = key
71
+
72
+ modify_profiles(profiles) do |profile, data|
73
+ unless data.dig('schema', schema)
74
+ next warn "The schema <#{schema}> does not exist in environment <#{profile}>. Skipping."
75
+ end
76
+ if data['schema'][schema].detect { |f| f["key"] == key }
77
+ if prompt.yes?("Discovered schema field with key <#{key}> in <#{profile}:#{schema}>. Override?")
78
+ data.dig('schema', schema).push(config)
79
+ end
80
+ else
81
+ data.dig('schema', schema).push(config)
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
File without changes
data/lib/envoy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Envoy
2
- VERSION = "1.0.0rc1".freeze
2
+ VERSION = "1.0.0rc2".freeze
3
3
  end
File without changes
data/lib/inc/generator.rb CHANGED
@@ -12,7 +12,7 @@ module Envoy
12
12
  'installable_on' => ['location'],
13
13
  'oauth2' => {},
14
14
  'schema' => {},
15
- 'setup' => [],
15
+ 'setup_flow' => [],
16
16
  'routes' => [],
17
17
  'jobs_handled' => {}
18
18
  })
@@ -91,11 +91,45 @@ module Envoy
91
91
  .select { |file| file.end_with? '.json' }
92
92
  .map { |file| file.chomp('.json') }
93
93
  if choose && profiles.length > 1
94
- profiles = prompt.multi_select("Select profiles to add configuration to:", profiles)
94
+ profiles = prompt.multi_select("Select environments to apply this change to:", profiles)
95
95
  end
96
96
  profiles
97
97
  end
98
98
 
99
+ def get_profile(choose = true)
100
+ profiles = Dir.entries("#{destination_root}/config")
101
+ .select { |file| file.end_with? '.json' }
102
+ .map { |file| file.chomp('.json') }
103
+ if choose && profiles.length > 1
104
+ profile = prompt.select("Select environment to apply this change to", profiles)
105
+ else
106
+ profile = profiles[0]
107
+ end
108
+ profile
109
+ end
110
+
111
+ def modify_profiles(profiles)
112
+ read_profiles(profiles) do |profile, data|
113
+ state_hash = data.to_json.hash
114
+ yield profile, data
115
+ if state_hash != data.to_json.hash
116
+ write_data("config/#{profile}.json", data)
117
+ else
118
+ say_status("no change", "config/#{profile}.json", :yellow)
119
+ end
120
+ end
121
+ end
122
+
123
+ def read_profiles(profiles)
124
+ unless profiles.is_a? Array
125
+ profiles = [profiles]
126
+ end
127
+ profiles.each do |profile|
128
+ data = read_data("config/#{profile}.json")
129
+ yield profile, data
130
+ end
131
+ end
132
+
99
133
  def setup_worker(name)
100
134
  @job_name = name
101
135
  template "templates/worker.js.erb", "workers/#{name}.js"
@@ -0,0 +1,98 @@
1
+ module Envoy
2
+ module SchemaModel
3
+ SCHEMA_CONFIG = {
4
+ string: {
5
+ desc: 'Single-line Input',
6
+ asks: %w(label note is_required default_value read_only placeholder)
7
+ },
8
+ textarea: {
9
+ desc: 'Multi-line Input',
10
+ asks: %w(label note is_required default_value read_only placeholder)
11
+ },
12
+ checkbox: {
13
+ desc: 'Checkbox',
14
+ asks: %w(label note default_value)
15
+ },
16
+ select: {
17
+ desc: 'Select',
18
+ asks: %w(label note is_required default_value options)
19
+ },
20
+ divider: {
21
+ desc: 'Divider Line',
22
+ asks: []
23
+ },
24
+ note: {
25
+ desc: 'Paragraph of Text',
26
+ asks: %w(label note)
27
+ }
28
+ }.freeze
29
+
30
+ def choose_field_type
31
+ prompt.select("Choose field type") do |menu|
32
+ # menu.default :string
33
+ SCHEMA_CONFIG.each do |key, value|
34
+ menu.choice value[:desc] + " (#{key})", key
35
+ end
36
+ end
37
+ end
38
+
39
+ def get_field_options(type)
40
+ config = {}
41
+ SCHEMA_CONFIG[type.to_sym][:asks].each do |ask|
42
+ out = send("schema_ask_#{ask}")
43
+ config[out[0]] = out[1]
44
+ end
45
+ config
46
+ end
47
+
48
+ def schema_ask_label
49
+ ['label', prompt.ask("Label:")]
50
+ end
51
+
52
+ def schema_ask_note
53
+ ['note', prompt.ask("Note:")]
54
+ end
55
+
56
+ def schema_ask_default_value
57
+ value = prompt.ask("Default Value:")
58
+ ['default_value', value || nil]
59
+ end
60
+
61
+ def schema_ask_is_required
62
+ required = prompt.yes?("Required?")
63
+ ['is_required', required]
64
+ end
65
+
66
+ def schema_ask_read_only
67
+ required = prompt.yes?("Read Only?")
68
+ ['read_only', required]
69
+ end
70
+
71
+ def schema_ask_options
72
+ type = prompt.select("How should this select load its options?", {
73
+ "I'll specify the exact options now." => :static,
74
+ "It will load the options on demand from an endpoint." => :dynamic
75
+ })
76
+ if type == :static
77
+ continue = true
78
+ index = 1
79
+ options = []
80
+ while continue
81
+ say "> Option #{index}:"
82
+ value = prompt.ask("Value:", required: true)
83
+ label = prompt.ask("Label:", default: value)
84
+ continue = prompt.yes?("Add another option?")
85
+ index += 1
86
+ options.push({ value: value, label: label })
87
+ end
88
+ else
89
+ options = prompt.ask("Route name:")
90
+ end
91
+ ['options', options]
92
+ end
93
+
94
+ def schema_ask_placeholder
95
+ ['placeholder', prompt.ask('Placeholder')]
96
+ end
97
+ end
98
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envoy-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0rc1
4
+ version: 1.0.0rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Boskovic
@@ -206,12 +206,11 @@ files:
206
206
  - Gemfile
207
207
  - bin/envoy
208
208
  - bin/envoy.bak
209
- - bootstrap/base/.envoyrc
210
209
  - bootstrap/base/.jshintrc
211
210
  - bootstrap/base/.nvmrc
211
+ - bootstrap/base/Gruntfile.js
212
212
  - bootstrap/base/config/.gitkeep
213
213
  - bootstrap/base/docs/.gitkeep
214
- - bootstrap/base/gulpfile.js
215
214
  - bootstrap/base/i18n/.gitkeep
216
215
  - bootstrap/base/index.js
217
216
  - bootstrap/base/lib/.gitkeep
@@ -238,15 +237,17 @@ files:
238
237
  - bootstrap/templates/worker.js.erb
239
238
  - envoy-cli.gemspec
240
239
  - lib/envoy.rb
240
+ - lib/envoy/plugin.rb
241
+ - lib/envoy/routes.rb
242
+ - lib/envoy/schema.rb
243
+ - lib/envoy/test.rb
241
244
  - lib/envoy/version.rb
245
+ - lib/envoy/workers.rb
242
246
  - lib/inc/commands.rb
243
247
  - lib/inc/generator.rb
244
248
  - lib/inc/mixins.rb
245
249
  - 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
+ - lib/inc/schema_model.rb
250
251
  - readme.md
251
252
  homepage: http://rubygemspec.org/gems/envoy-cli
252
253
  licenses:
@@ -1 +0,0 @@
1
- {}
File without changes