jets 1.6.0 → 1.6.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 +4 -4
- data/CHANGELOG.md +8 -1
- data/Gemfile.lock +8 -8
- data/README.md +1 -1
- data/jets.gemspec +1 -1
- data/lib/jets.rb +4 -4
- data/lib/jets/application.rb +9 -2
- data/lib/jets/aws_info.rb +2 -2
- data/lib/jets/aws_services/stack_status.rb +1 -1
- data/lib/jets/booter.rb +3 -3
- data/lib/jets/builders/code_builder.rb +4 -5
- data/lib/jets/builders/code_size.rb +1 -1
- data/lib/jets/builders/gem_replacer.rb +1 -1
- data/lib/jets/builders/handler_generator.rb +2 -2
- data/lib/jets/builders/md5_zip.rb +1 -1
- data/lib/jets/builders/tidy.rb +1 -1
- data/lib/jets/builders/util.rb +3 -3
- data/lib/jets/cfn/ship.rb +1 -1
- data/lib/jets/cfn/status.rb +8 -8
- data/lib/jets/cfn/upload.rb +3 -3
- data/lib/jets/commands/call.rb +4 -4
- data/lib/jets/commands/delete.rb +7 -7
- data/lib/jets/commands/deploy.rb +5 -5
- data/lib/jets/commands/import/sequence.rb +1 -2
- data/lib/jets/commands/main.rb +1 -1
- data/lib/jets/commands/new.rb +2 -2
- data/lib/jets/commands/runner.rb +1 -1
- data/lib/jets/commands/sequence.rb +1 -2
- data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +8 -9
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +2 -0
- data/lib/jets/commands/url.rb +2 -2
- data/lib/jets/core.rb +3 -2
- data/lib/jets/erb.rb +2 -2
- data/lib/jets/mega/request.rb +17 -3
- data/lib/jets/poly_fun/base_executor.rb +1 -1
- data/lib/jets/rack_server.rb +1 -1
- data/lib/jets/resource/lambda/function/environment.rb +1 -1
- data/lib/jets/router.rb +1 -1
- data/lib/jets/spec_helpers.rb +52 -0
- data/lib/jets/spec_helpers/params.rb +10 -0
- data/lib/jets/spec_helpers/request.rb +98 -0
- data/lib/jets/spec_helpers/response.rb +5 -0
- data/lib/jets/stack/function.rb +1 -1
- data/lib/jets/turbo/rail.rb +2 -2
- data/lib/jets/version.rb +1 -1
- data/vendor/jets-gems/lib/jets/gems/check.rb +1 -1
- data/vendor/jets-gems/lib/jets/gems/extract/base.rb +1 -1
- metadata +20 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 35b8d7335c644339643a2c97c53d4e320967f43761949eeda46909b33f140776
|
|
4
|
+
data.tar.gz: 49d1cd847f9423e21d899107534a81c5d51c368999d60cefe70a89b39b434b9c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fa356ebc6da237b6046e44bf6307af25bfce9fec40746346b52d7a4bc774cdd25ef6a449573c14b3fed5b514ffddc8327c0c7d4fbdc65040abdd7a5749642271
|
|
7
|
+
data.tar.gz: 99b185e759621461ce327b014c51345fe11843732395b79d3604216c60ef668a56ba0004e14ef68faf7151dee2379ae81939084e03e4f6b6bb58cc28e716fcad
|
data/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
|
5
5
|
|
|
6
|
+
## [1.6.1]
|
|
7
|
+
- #162 from patchkit-net/feature/spec_helpers
|
|
8
|
+
- #163 from tongueroo/spec-helpers
|
|
9
|
+
- Add jets/spec/helpers.rb with rails-style controller testing helpers
|
|
10
|
+
- #164 from tongueroo/encoding-fix: use encoding from content-type for mega request
|
|
11
|
+
- use rainbow gem for terminal colors
|
|
12
|
+
|
|
6
13
|
## [1.6.0]
|
|
7
14
|
- #158 from mmyoji/fix-docs-urls
|
|
8
15
|
- #159 from patchkit-net/bugfix/invalid-longpath-collision Fix invalid collision detection on paths that already contains path variables
|
|
@@ -58,7 +65,7 @@ This project *loosely tries* to adhere to [Semantic Versioning](http://semver.or
|
|
|
58
65
|
|
|
59
66
|
## [1.5.0]
|
|
60
67
|
- #135 from tongueroo/remove-rails-constant Remove Rails Constant
|
|
61
|
-
- #136 from tongueroo/routes-namespace routes namespace support (will be adjusted)
|
|
68
|
+
- #136 from tongueroo/routes-namespace routes namespace support (experimental: will be adjusted)
|
|
62
69
|
|
|
63
70
|
## [1.4.11]
|
|
64
71
|
- #133 from tongueroo/custom-layer add custom lambda layer support
|
data/Gemfile.lock
CHANGED
|
@@ -11,7 +11,7 @@ GIT
|
|
|
11
11
|
PATH
|
|
12
12
|
remote: .
|
|
13
13
|
specs:
|
|
14
|
-
jets (1.6.
|
|
14
|
+
jets (1.6.1)
|
|
15
15
|
activerecord (~> 5.2.1)
|
|
16
16
|
activesupport (~> 5.2.1)
|
|
17
17
|
aws-sdk-apigateway
|
|
@@ -22,7 +22,6 @@ PATH
|
|
|
22
22
|
aws-sdk-s3
|
|
23
23
|
aws-sdk-sns
|
|
24
24
|
aws-sdk-sqs
|
|
25
|
-
colorize
|
|
26
25
|
dotenv
|
|
27
26
|
gems
|
|
28
27
|
hashie
|
|
@@ -33,6 +32,7 @@ PATH
|
|
|
33
32
|
mimemagic
|
|
34
33
|
rack
|
|
35
34
|
railties (~> 5.2.1)
|
|
35
|
+
rainbow
|
|
36
36
|
recursive-open-struct
|
|
37
37
|
text-table
|
|
38
38
|
thor
|
|
@@ -66,14 +66,14 @@ GEM
|
|
|
66
66
|
tzinfo (~> 1.1)
|
|
67
67
|
arel (9.0.0)
|
|
68
68
|
aws-eventstream (1.0.1)
|
|
69
|
-
aws-partitions (1.
|
|
69
|
+
aws-partitions (1.135.0)
|
|
70
70
|
aws-sdk-apigateway (1.23.0)
|
|
71
71
|
aws-sdk-core (~> 3, >= 3.39.0)
|
|
72
72
|
aws-sigv4 (~> 1.0)
|
|
73
73
|
aws-sdk-cloudformation (1.14.0)
|
|
74
74
|
aws-sdk-core (~> 3, >= 3.39.0)
|
|
75
75
|
aws-sigv4 (~> 1.0)
|
|
76
|
-
aws-sdk-cloudwatchlogs (1.
|
|
76
|
+
aws-sdk-cloudwatchlogs (1.13.0)
|
|
77
77
|
aws-sdk-core (~> 3, >= 3.39.0)
|
|
78
78
|
aws-sigv4 (~> 1.0)
|
|
79
79
|
aws-sdk-core (3.46.0)
|
|
@@ -103,25 +103,24 @@ GEM
|
|
|
103
103
|
aws-sigv4 (1.0.3)
|
|
104
104
|
builder (3.2.3)
|
|
105
105
|
byebug (10.0.2)
|
|
106
|
-
colorize (0.8.1)
|
|
107
106
|
concurrent-ruby (1.1.4)
|
|
108
107
|
crass (1.0.4)
|
|
109
108
|
diff-lcs (1.3)
|
|
110
109
|
dotenv (2.6.0)
|
|
111
|
-
dynomite (1.2.
|
|
110
|
+
dynomite (1.2.1)
|
|
112
111
|
activesupport
|
|
113
112
|
aws-sdk-dynamodb
|
|
114
113
|
erubi (1.8.0)
|
|
115
114
|
gems (1.1.1)
|
|
116
115
|
json
|
|
117
116
|
hashie (3.6.0)
|
|
118
|
-
i18n (1.5.
|
|
117
|
+
i18n (1.5.3)
|
|
119
118
|
concurrent-ruby (~> 1.0)
|
|
120
119
|
jets-html-sanitizer (1.0.4)
|
|
121
120
|
loofah (~> 2.2, >= 2.2.2)
|
|
122
121
|
jmespath (1.4.0)
|
|
123
122
|
json (2.1.0)
|
|
124
|
-
kramdown (
|
|
123
|
+
kramdown (2.0.0)
|
|
125
124
|
loofah (2.2.3)
|
|
126
125
|
crass (~> 1.0.2)
|
|
127
126
|
nokogiri (>= 1.5.9)
|
|
@@ -149,6 +148,7 @@ GEM
|
|
|
149
148
|
method_source
|
|
150
149
|
rake (>= 0.8.7)
|
|
151
150
|
thor (>= 0.19.0, < 2.0)
|
|
151
|
+
rainbow (3.0.0)
|
|
152
152
|
rake (12.3.2)
|
|
153
153
|
recursive-open-struct (1.1.0)
|
|
154
154
|
rspec (3.8.0)
|
data/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Ruby and Lambda splat out a baby and that child's name is [Jets](http://rubyonje
|
|
|
7
7
|

|
|
8
8
|
[](https://circleci.com/gh/tongueroo/jets)
|
|
9
9
|
[](https://badge.fury.io/rb/jets)
|
|
10
|
-
[](http://rubyonjets.com/
|
|
10
|
+
[](http://rubyonjets.com/support/)
|
|
11
11
|
|
|
12
12
|
**Upgrading**: If you are upgrading Jets, please check on the [Upgrading Notes](http://rubyonjets.com/docs/upgrading/).
|
|
13
13
|
|
data/jets.gemspec
CHANGED
|
@@ -39,7 +39,6 @@ Gem::Specification.new do |spec|
|
|
|
39
39
|
spec.add_dependency "aws-sdk-s3"
|
|
40
40
|
spec.add_dependency "aws-sdk-sns"
|
|
41
41
|
spec.add_dependency "aws-sdk-sqs"
|
|
42
|
-
spec.add_dependency "colorize"
|
|
43
42
|
spec.add_dependency "dotenv"
|
|
44
43
|
spec.add_dependency "gems" # jets-gems dependency
|
|
45
44
|
spec.add_dependency "hashie"
|
|
@@ -50,6 +49,7 @@ Gem::Specification.new do |spec|
|
|
|
50
49
|
spec.add_dependency "mimemagic"
|
|
51
50
|
spec.add_dependency "rack"
|
|
52
51
|
spec.add_dependency "railties", "~> 5.2.1" # ActiveRecord database_tasks.rb require this
|
|
52
|
+
spec.add_dependency "rainbow"
|
|
53
53
|
spec.add_dependency "recursive-open-struct"
|
|
54
54
|
spec.add_dependency "text-table"
|
|
55
55
|
spec.add_dependency "thor"
|
data/lib/jets.rb
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
$:.unshift(File.expand_path("../", __FILE__))
|
|
2
|
-
require "jets/version"
|
|
3
|
-
require "jets/camelizer"
|
|
4
2
|
require "active_support"
|
|
3
|
+
require "active_support/concern"
|
|
5
4
|
require "active_support/core_ext"
|
|
6
5
|
require "active_support/dependencies"
|
|
7
6
|
require "active_support/ordered_hash"
|
|
8
7
|
require "active_support/ordered_options"
|
|
9
|
-
require "active_support/concern"
|
|
10
|
-
require "colorize"
|
|
11
8
|
require "fileutils"
|
|
9
|
+
require "jets/camelizer"
|
|
10
|
+
require "jets/version"
|
|
12
11
|
require "memoist"
|
|
12
|
+
require "rainbow/ext/string"
|
|
13
13
|
|
|
14
14
|
module Jets
|
|
15
15
|
RUBY_VERSION = "2.5.3"
|
data/lib/jets/application.rb
CHANGED
|
@@ -90,6 +90,13 @@ class Jets::Application
|
|
|
90
90
|
config.lambda = ActiveSupport::OrderedOptions.new
|
|
91
91
|
config.lambda.layers = []
|
|
92
92
|
|
|
93
|
+
# Only used for Jets Afterburner, Mega Mode currently. This is a fallback default
|
|
94
|
+
# encoding. Usually, the Rails response will return a content-type header and
|
|
95
|
+
# the encoding in there is used when possible. Example Content-Type header:
|
|
96
|
+
# Content-Type text/html; charset=utf-8
|
|
97
|
+
config.encoding = ActiveSupport::OrderedOptions.new
|
|
98
|
+
config.encoding.default = "utf-8"
|
|
99
|
+
|
|
93
100
|
config
|
|
94
101
|
end
|
|
95
102
|
|
|
@@ -147,8 +154,8 @@ class Jets::Application
|
|
|
147
154
|
|
|
148
155
|
def deprecated_configs_message
|
|
149
156
|
unless config.ruby.lazy_load.nil?
|
|
150
|
-
puts "Detected config.ruby.lazy_load = #{config.ruby.lazy_load.inspect}".
|
|
151
|
-
puts "Deprecated: config.ruby.lazy_load".
|
|
157
|
+
puts "Detected config.ruby.lazy_load = #{config.ruby.lazy_load.inspect}".color(:yellow)
|
|
158
|
+
puts "Deprecated: config.ruby.lazy_load".color(:yellow)
|
|
152
159
|
puts "Gems are now bundled with with Lambda Layer and there's no need to lazy load them."
|
|
153
160
|
puts "Please remove the config in your config/application.rb or config/environments files."
|
|
154
161
|
puts "You can have Jets automatically do this by running:"
|
data/lib/jets/aws_info.rb
CHANGED
|
@@ -20,10 +20,10 @@ module Jets
|
|
|
20
20
|
if exit_code != 0
|
|
21
21
|
exception_message = region.split("\n").grep(/botocore\.exceptions/).first
|
|
22
22
|
if exception_message
|
|
23
|
-
puts "WARN: #{exception_message}".
|
|
23
|
+
puts "WARN: #{exception_message}".color(:yellow)
|
|
24
24
|
else
|
|
25
25
|
# show full message as warning
|
|
26
|
-
puts region.
|
|
26
|
+
puts region.color(:yellow)
|
|
27
27
|
end
|
|
28
28
|
puts "You can also get rid of this message by setting AWS_REGION or configuring ~/.aws/config with the region"
|
|
29
29
|
region = nil
|
|
@@ -36,7 +36,7 @@ module Jets::AwsServices
|
|
|
36
36
|
status = resp.stacks[0].stack_status
|
|
37
37
|
if status =~ /_IN_PROGRESS$/
|
|
38
38
|
puts "The '#{stack_name}' stack status is #{status}. " \
|
|
39
|
-
"Please wait until the stack is ready and try again.".
|
|
39
|
+
"Please wait until the stack is ready and try again.".color(:red)
|
|
40
40
|
exit 0
|
|
41
41
|
elsif resp.stacks[0].outputs.empty? && status != 'ROLLBACK_COMPLETE'
|
|
42
42
|
# This Happens when the miminal stack fails at the very beginning.
|
data/lib/jets/booter.rb
CHANGED
|
@@ -107,19 +107,19 @@ class Jets::Booter
|
|
|
107
107
|
# Cannot call this for the jets new
|
|
108
108
|
def confirm_jets_project!
|
|
109
109
|
unless File.exist?("#{Jets.root}config/application.rb")
|
|
110
|
-
puts "It does not look like you are running this command within a jets project. Please confirm that you are in a jets project and try again.".
|
|
110
|
+
puts "It does not look like you are running this command within a jets project. Please confirm that you are in a jets project and try again.".color(:red)
|
|
111
111
|
exit 1
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
def message
|
|
116
|
-
"Jets booting up in #{Jets.env.
|
|
116
|
+
"Jets booting up in #{Jets.env.color(:green)} mode!"
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
def check_config_ru!
|
|
120
120
|
config_ru = File.read("#{Jets.root}config.ru")
|
|
121
121
|
unless config_ru.include?("Jets.boot")
|
|
122
|
-
puts 'The config.ru file is missing Jets.boot. Please add Jets.boot after require "jets"'.
|
|
122
|
+
puts 'The config.ru file is missing Jets.boot. Please add Jets.boot after require "jets"'.color(:red)
|
|
123
123
|
puts "This was changed as made in Jets v1.1.0."
|
|
124
124
|
puts "To have Jets update the config.fu file for you, you can run:\n\n"
|
|
125
125
|
puts " jets upgrade"
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
require "action_view"
|
|
2
|
-
require "colorize"
|
|
3
2
|
require "fileutils"
|
|
4
3
|
require "net/http"
|
|
5
4
|
require "open-uri"
|
|
@@ -174,7 +173,7 @@ class Jets::Builders
|
|
|
174
173
|
# This is because the node and yarn has likely been set up correctly there.
|
|
175
174
|
def compile_assets
|
|
176
175
|
if ENV['JETS_SKIP_ASSETS']
|
|
177
|
-
puts "Skip compiling assets".
|
|
176
|
+
puts "Skip compiling assets".color(:yellow) # useful for debugging
|
|
178
177
|
return
|
|
179
178
|
end
|
|
180
179
|
|
|
@@ -206,7 +205,7 @@ class Jets::Builders
|
|
|
206
205
|
return unless Jets.rack? && rails? && !rails_api?
|
|
207
206
|
|
|
208
207
|
if ENV['JETS_SKIP_ASSETS']
|
|
209
|
-
puts "Skip compiling rack assets".
|
|
208
|
+
puts "Skip compiling rack assets".color(:yellow) # useful for debugging
|
|
210
209
|
return
|
|
211
210
|
end
|
|
212
211
|
|
|
@@ -270,7 +269,7 @@ class Jets::Builders
|
|
|
270
269
|
FileUtils.rm_rf("#{stage_area}/code") # remove current code folder
|
|
271
270
|
move_node_modules(Jets.root, Jets.build_root)
|
|
272
271
|
begin
|
|
273
|
-
# puts "cp -r #{@full_project_path} #{"#{stage_area}/code"}".
|
|
272
|
+
# puts "cp -r #{@full_project_path} #{"#{stage_area}/code"}".color(:yellow) # uncomment to debug
|
|
274
273
|
Jets::Util.cp_r(@full_project_path, "#{stage_area}/code")
|
|
275
274
|
ensure
|
|
276
275
|
move_node_modules(Jets.build_root, Jets.root) # move node_modules directory back
|
|
@@ -354,7 +353,7 @@ class Jets::Builders
|
|
|
354
353
|
unless ruby_version_supported?
|
|
355
354
|
puts "You are using Ruby version #{RUBY_VERSION} which is not supported by Jets."
|
|
356
355
|
ruby_variant = Jets::RUBY_VERSION.split('.')[0..1].join('.') + '.x'
|
|
357
|
-
abort("Jets uses Ruby #{Jets::RUBY_VERSION}. You should use a variant of Ruby #{ruby_variant}".
|
|
356
|
+
abort("Jets uses Ruby #{Jets::RUBY_VERSION}. You should use a variant of Ruby #{ruby_variant}".color(:red))
|
|
358
357
|
end
|
|
359
358
|
end
|
|
360
359
|
|
|
@@ -9,7 +9,7 @@ class Jets::Builders
|
|
|
9
9
|
|
|
10
10
|
def check
|
|
11
11
|
return if within_lambda_limit?
|
|
12
|
-
say "Over the Lambda size limit of #{LAMBDA_SIZE_LIMIT}MB".
|
|
12
|
+
say "Over the Lambda size limit of #{LAMBDA_SIZE_LIMIT}MB".color(:red)
|
|
13
13
|
say "Please reduce the size of your code."
|
|
14
14
|
display_sizes
|
|
15
15
|
exit 1
|
|
@@ -75,7 +75,7 @@ class Jets::Builders
|
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
unless missing.empty?
|
|
78
|
-
puts "ERROR: Missing source files. Please make sure these source files exist or remove their declarations".
|
|
78
|
+
puts "ERROR: Missing source files. Please make sure these source files exist or remove their declarations".color(:red)
|
|
79
79
|
puts missing
|
|
80
80
|
exit 1
|
|
81
81
|
end
|
|
@@ -114,7 +114,7 @@ class Jets::Builders
|
|
|
114
114
|
unless source_path
|
|
115
115
|
attributes = fun.template.values.first
|
|
116
116
|
function_name = attributes['Properties']['FunctionName']
|
|
117
|
-
puts "WARN: missing source file for: '#{function_name}' function".
|
|
117
|
+
puts "WARN: missing source file for: '#{function_name}' function".color(:yellow)
|
|
118
118
|
return
|
|
119
119
|
end
|
|
120
120
|
|
|
@@ -34,7 +34,7 @@ class Jets::Builders
|
|
|
34
34
|
FileUtils.mv(zip_dest, md5_dest)
|
|
35
35
|
|
|
36
36
|
file_size = number_to_human_size(File.size(md5_dest))
|
|
37
|
-
puts "Zip file created at: #{md5_dest.
|
|
37
|
+
puts "Zip file created at: #{md5_dest.color(:green)} (#{file_size})"
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
# /tmp/jets/demo/stage/zips/code.zip
|
data/lib/jets/builders/tidy.rb
CHANGED
|
@@ -90,7 +90,7 @@ class Jets::Builders
|
|
|
90
90
|
exists = File.exist?("#{path}/.gitkeep") || File.exist?("#{path}/.keep")
|
|
91
91
|
return if exists
|
|
92
92
|
|
|
93
|
-
# say " rm -rf #{path}".
|
|
93
|
+
# say " rm -rf #{path}".color(:yellow) # uncomment to debug
|
|
94
94
|
system("rm -rf #{path}") unless @noop
|
|
95
95
|
end
|
|
96
96
|
|
data/lib/jets/builders/util.rb
CHANGED
|
@@ -2,10 +2,10 @@ class Jets::Builders
|
|
|
2
2
|
module Util
|
|
3
3
|
private
|
|
4
4
|
def sh(command)
|
|
5
|
-
puts "=> #{command}".
|
|
5
|
+
puts "=> #{command}".color(:green)
|
|
6
6
|
success = system(command)
|
|
7
7
|
unless success
|
|
8
|
-
puts "#{command} failed to run.".
|
|
8
|
+
puts "#{command} failed to run.".color(:red)
|
|
9
9
|
puts caller[0]
|
|
10
10
|
exit 1
|
|
11
11
|
end
|
|
@@ -13,7 +13,7 @@ class Jets::Builders
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def headline(message)
|
|
16
|
-
puts "=> #{message}".
|
|
16
|
+
puts "=> #{message}".color(:cyan)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def build_area
|
data/lib/jets/cfn/ship.rb
CHANGED
|
@@ -23,7 +23,7 @@ class Jets::Cfn
|
|
|
23
23
|
confirm = prompt_for_iam(capabilities)
|
|
24
24
|
if confirm =~ /^y/
|
|
25
25
|
@options.merge!(capabilities: [capabilities])
|
|
26
|
-
puts "Re-running: #{command_with_iam(capabilities).
|
|
26
|
+
puts "Re-running: #{command_with_iam(capabilities).color(:green)}"
|
|
27
27
|
retry
|
|
28
28
|
else
|
|
29
29
|
puts "Exited"
|
data/lib/jets/cfn/status.rb
CHANGED
|
@@ -12,14 +12,14 @@ class Jets::Cfn
|
|
|
12
12
|
# used for the jets status command
|
|
13
13
|
def run
|
|
14
14
|
unless stack_exists?(@stack_name)
|
|
15
|
-
puts "The stack #{@stack_name.
|
|
15
|
+
puts "The stack #{@stack_name.color(:green)} does not exist."
|
|
16
16
|
return
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
resp = cfn.describe_stacks(stack_name: @stack_name)
|
|
20
20
|
stack = resp.stacks.first
|
|
21
21
|
|
|
22
|
-
puts "The current status for the stack #{@stack_name.
|
|
22
|
+
puts "The current status for the stack #{@stack_name.color(:green)} is #{stack.stack_status.color(:green)}"
|
|
23
23
|
if stack.stack_status =~ /_IN_PROGRESS$/
|
|
24
24
|
puts "Stack events (tailing):"
|
|
25
25
|
# tail all events until done
|
|
@@ -56,12 +56,12 @@ class Jets::Cfn
|
|
|
56
56
|
|
|
57
57
|
success = false
|
|
58
58
|
if last_event_status =~ /_FAILED/
|
|
59
|
-
puts "Stack failed: #{last_event_status}".
|
|
60
|
-
puts "Stack reason #{@events[0]["resource_status_reason"]}".
|
|
59
|
+
puts "Stack failed: #{last_event_status}".color(:red)
|
|
60
|
+
puts "Stack reason #{@events[0]["resource_status_reason"]}".color(:red)
|
|
61
61
|
elsif last_event_status =~ /_ROLLBACK_/
|
|
62
|
-
puts "Stack rolled back: #{last_event_status}".
|
|
62
|
+
puts "Stack rolled back: #{last_event_status}".color(:red)
|
|
63
63
|
else # success
|
|
64
|
-
puts "Stack success status: #{last_event_status}".
|
|
64
|
+
puts "Stack success status: #{last_event_status}".color(:green)
|
|
65
65
|
success = true
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -69,7 +69,7 @@ class Jets::Cfn
|
|
|
69
69
|
# once the stack is deleted. Gets here for stack create and update though.
|
|
70
70
|
return if @hide_time_took # set in run
|
|
71
71
|
took = Time.now - start_time
|
|
72
|
-
puts "Time took for stack deployment: #{pretty_time(took).green}."
|
|
72
|
+
puts "Time took for stack deployment: #{pretty_time(took).color(:green)}."
|
|
73
73
|
|
|
74
74
|
success
|
|
75
75
|
end
|
|
@@ -116,7 +116,7 @@ class Jets::Cfn
|
|
|
116
116
|
e["logical_resource_id"],
|
|
117
117
|
e["resource_status_reason"]
|
|
118
118
|
].join(" ")
|
|
119
|
-
message = message.
|
|
119
|
+
message = message.color(:red) if e["resource_status"] =~ /_FAILED/
|
|
120
120
|
puts message
|
|
121
121
|
end
|
|
122
122
|
|
data/lib/jets/cfn/upload.rb
CHANGED
|
@@ -45,15 +45,15 @@ class Jets::Cfn
|
|
|
45
45
|
s3_key = "jets/code/#{File.basename(path)}"
|
|
46
46
|
obj = s3_resource.bucket(bucket_name).object(s3_key)
|
|
47
47
|
obj.upload_file(path)
|
|
48
|
-
puts "Uploaded to s3://#{bucket_name}/#{s3_key}".
|
|
49
|
-
puts "Time to upload code to s3: #{pretty_time(Time.now-start_time).
|
|
48
|
+
puts "Uploaded to s3://#{bucket_name}/#{s3_key}".color(:green)
|
|
49
|
+
puts "Time to upload code to s3: #{pretty_time(Time.now-start_time).color(:green)}"
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def upload_assets
|
|
53
53
|
puts "Checking for modified public assets and uploading to S3."
|
|
54
54
|
start_time = Time.now
|
|
55
55
|
upload_public_assets
|
|
56
|
-
puts "Time for public assets to s3: #{pretty_time(Time.now-start_time).
|
|
56
|
+
puts "Time for public assets to s3: #{pretty_time(Time.now-start_time).color(:green)}"
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def upload_public_assets
|
data/lib/jets/commands/call.rb
CHANGED
|
@@ -67,12 +67,12 @@ class Jets::Commands::Call
|
|
|
67
67
|
begin
|
|
68
68
|
resp = lambda.invoke(options)
|
|
69
69
|
rescue Aws::Lambda::Errors::ResourceNotFoundException
|
|
70
|
-
puts "The function #{function_name} was not found. Maybe check the spelling or the AWS_PROFILE?".
|
|
70
|
+
puts "The function #{function_name} was not found. Maybe check the spelling or the AWS_PROFILE?".color(:red)
|
|
71
71
|
return
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
if @options[:show_log]
|
|
75
|
-
puts "Last 4KB of log in the x-amz-log-result header:".
|
|
75
|
+
puts "Last 4KB of log in the x-amz-log-result header:".color(:green)
|
|
76
76
|
puts Base64.decode64(resp.log_result)
|
|
77
77
|
end
|
|
78
78
|
|
|
@@ -104,7 +104,7 @@ class Jets::Commands::Call
|
|
|
104
104
|
|
|
105
105
|
check_valid_json!(text)
|
|
106
106
|
|
|
107
|
-
puts "Function name: #{function_name.
|
|
107
|
+
puts "Function name: #{function_name.color(:green)}" unless @options[:mute]
|
|
108
108
|
return text unless function_name.include?("_controller-")
|
|
109
109
|
return text if @options[:lambda_proxy] == false
|
|
110
110
|
|
|
@@ -117,7 +117,7 @@ class Jets::Commands::Call
|
|
|
117
117
|
path = text.gsub('file://','')
|
|
118
118
|
path = "#{Jets.root}#{path}" unless path[0..0] == '/'
|
|
119
119
|
unless File.exist?(path)
|
|
120
|
-
puts "File #{path} does not exist. Are you sure the file exists?".
|
|
120
|
+
puts "File #{path} does not exist. Are you sure the file exists?".color(:red)
|
|
121
121
|
exit
|
|
122
122
|
end
|
|
123
123
|
text = IO.read(path)
|
data/lib/jets/commands/delete.rb
CHANGED
|
@@ -20,13 +20,13 @@ class Jets::Commands::Delete
|
|
|
20
20
|
stack_in_progress?(parent_stack_name)
|
|
21
21
|
|
|
22
22
|
cfn.delete_stack(stack_name: parent_stack_name)
|
|
23
|
-
puts "Deleting #{Jets.config.project_namespace.
|
|
23
|
+
puts "Deleting #{Jets.config.project_namespace.color(:green)}..."
|
|
24
24
|
|
|
25
25
|
wait_for_stack if @options[:wait]
|
|
26
26
|
|
|
27
27
|
delete_logs
|
|
28
28
|
|
|
29
|
-
puts "Project #{Jets.config.project_namespace.
|
|
29
|
+
puts "Project #{Jets.config.project_namespace.color(:green)} deleted!"
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def wait_for_stack
|
|
@@ -34,7 +34,7 @@ class Jets::Commands::Delete
|
|
|
34
34
|
start_time = Time.now
|
|
35
35
|
status.wait
|
|
36
36
|
took = Time.now - start_time
|
|
37
|
-
puts "Time took for deletion: #{status.pretty_time(took).green}."
|
|
37
|
+
puts "Time took for deletion: #{status.pretty_time(took).color(:green)}."
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def delete_logs
|
|
@@ -49,7 +49,7 @@ class Jets::Commands::Delete
|
|
|
49
49
|
rescue Aws::CloudFormation::Errors::ValidationError
|
|
50
50
|
# Aws::CloudFormation::Errors::ValidationError is thrown when the stack
|
|
51
51
|
# does not exist
|
|
52
|
-
puts "The parent stack #{Jets.config.project_namespace.
|
|
52
|
+
puts "The parent stack #{Jets.config.project_namespace.color(:green)} for the project #{Jets.config.project_name.color(:green)} does not exist. So it cannot be deleted."
|
|
53
53
|
exit 0
|
|
54
54
|
end
|
|
55
55
|
end
|
|
@@ -104,12 +104,12 @@ class Jets::Commands::Delete
|
|
|
104
104
|
if @options[:sure]
|
|
105
105
|
sure = 'y'
|
|
106
106
|
else
|
|
107
|
-
puts "Are you sure you want to want to delete the #{Jets.config.project_namespace.
|
|
107
|
+
puts "Are you sure you want to want to delete the #{Jets.config.project_namespace.color(:green)} project? (y/N)"
|
|
108
108
|
sure = $stdin.gets
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
unless sure =~ /^y/
|
|
112
|
-
puts "Phew! Jets #{Jets.config.project_namespace.
|
|
112
|
+
puts "Phew! Jets #{Jets.config.project_namespace.color(:green)} project was not deleted."
|
|
113
113
|
exit 0
|
|
114
114
|
end
|
|
115
115
|
end
|
|
@@ -128,7 +128,7 @@ class Jets::Commands::Delete
|
|
|
128
128
|
|
|
129
129
|
if status =~ /_IN_PROGRESS$/
|
|
130
130
|
puts "The '#{@parent_stack_name}' stack status is #{status}. " \
|
|
131
|
-
"It is not in an updateable status. Please wait until the stack is ready and try again.".
|
|
131
|
+
"It is not in an updateable status. Please wait until the stack is ready and try again.".color(:red)
|
|
132
132
|
exit 0
|
|
133
133
|
elsif resp.stacks[0].outputs.empty?
|
|
134
134
|
# This Happens when the miminal stack fails at the very beginning.
|
data/lib/jets/commands/deploy.rb
CHANGED
|
@@ -7,7 +7,7 @@ module Jets::Commands
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def run
|
|
10
|
-
deployment_env = Jets.config.project_namespace.
|
|
10
|
+
deployment_env = Jets.config.project_namespace.color(:green)
|
|
11
11
|
puts "Deploying to Lambda #{deployment_env} environment..."
|
|
12
12
|
return if @options[:noop]
|
|
13
13
|
|
|
@@ -40,7 +40,7 @@ module Jets::Commands
|
|
|
40
40
|
|
|
41
41
|
def check_dev_mode
|
|
42
42
|
if File.exist?("#{Jets.root}dev.mode")
|
|
43
|
-
puts "The dev.mode file exists. Please removed it and run bundle update before you deploy.".
|
|
43
|
+
puts "The dev.mode file exists. Please removed it and run bundle update before you deploy.".color(:red)
|
|
44
44
|
exit 1
|
|
45
45
|
end
|
|
46
46
|
end
|
|
@@ -57,7 +57,7 @@ module Jets::Commands
|
|
|
57
57
|
def check_route_connected_functions
|
|
58
58
|
return if Jets::Router.all_routes_valid
|
|
59
59
|
|
|
60
|
-
puts "Deploy fail: The jets application contain invalid routes.".
|
|
60
|
+
puts "Deploy fail: The jets application contain invalid routes.".color(:red)
|
|
61
61
|
puts "Please double check the routes below map to valid controllers:"
|
|
62
62
|
Jets::Router.invalid_routes.each do |route|
|
|
63
63
|
puts " /#{route.path} => #{route.controller_name}##{route.action_name}"
|
|
@@ -121,8 +121,8 @@ module Jets::Commands
|
|
|
121
121
|
status =~ /_IN_PROGRESS$/
|
|
122
122
|
region = `aws configure get region`.strip rescue "us-east-1"
|
|
123
123
|
url = "https://console.aws.amazon.com/cloudformation/home?region=#{region}#/stacks"
|
|
124
|
-
puts "The parent stack of the #{Jets.config.project_name.
|
|
125
|
-
puts "Stack name #{stack_name.
|
|
124
|
+
puts "The parent stack of the #{Jets.config.project_name.color(:green)} project is not in an updateable state."
|
|
125
|
+
puts "Stack name #{stack_name.color(:yellow)} status #{stack["stack_status"].color(:yellow)}"
|
|
126
126
|
puts "Here's the CloudFormation url to check for more details #{url}"
|
|
127
127
|
exit 1
|
|
128
128
|
end
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
require 'bundler'
|
|
2
|
-
require 'colorize'
|
|
3
2
|
require 'fileutils'
|
|
4
3
|
require 'thor'
|
|
5
4
|
|
|
@@ -42,7 +41,7 @@ class Jets::Commands::Import
|
|
|
42
41
|
begin
|
|
43
42
|
directory ".", rack_folder, exclude_pattern: %r{.git}
|
|
44
43
|
rescue Thor::Error => e
|
|
45
|
-
puts e.message.
|
|
44
|
+
puts e.message.color(:red)
|
|
46
45
|
exit 1
|
|
47
46
|
end
|
|
48
47
|
end
|
data/lib/jets/commands/main.rb
CHANGED
|
@@ -42,7 +42,7 @@ module Jets::Commands
|
|
|
42
42
|
o = options
|
|
43
43
|
server_command = o[:reload] ? "shotgun" : "rackup"
|
|
44
44
|
command = "bundle exec #{server_command} --port #{o[:port]} --host #{o[:host]}"
|
|
45
|
-
puts "=> #{command}".
|
|
45
|
+
puts "=> #{command}".color(:green)
|
|
46
46
|
puts Jets::Booter.message
|
|
47
47
|
Jets::Booter.check_config_ru!
|
|
48
48
|
Jets::RackServer.start(options) unless ENV['JETS_RACK'] == '0' # rack server runs in background by default
|
data/lib/jets/commands/new.rb
CHANGED
|
@@ -41,7 +41,7 @@ module Jets::Commands
|
|
|
41
41
|
@database = false
|
|
42
42
|
@webpacker = false
|
|
43
43
|
else
|
|
44
|
-
puts "Invalid mode provided: #{@options[:mode].
|
|
44
|
+
puts "Invalid mode provided: #{@options[:mode].color(:red)}. Please pass in an valid mode: #{VALID_MODES.join(',').color(:green)}."
|
|
45
45
|
exit 1
|
|
46
46
|
end
|
|
47
47
|
end
|
|
@@ -68,7 +68,7 @@ module Jets::Commands
|
|
|
68
68
|
def webpacker_install
|
|
69
69
|
return unless @webpacker
|
|
70
70
|
unless yarn_installed?
|
|
71
|
-
puts "Yarn is not installed or has not been detected. Please double check that yarn has been installed.".
|
|
71
|
+
puts "Yarn is not installed or has not been detected. Please double check that yarn has been installed.".color(:red)
|
|
72
72
|
puts <<~EOL
|
|
73
73
|
To check:
|
|
74
74
|
|
data/lib/jets/commands/runner.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
require 'fileutils'
|
|
2
|
-
require 'colorize'
|
|
3
2
|
require 'thor'
|
|
4
3
|
require 'bundler'
|
|
5
4
|
|
|
@@ -27,7 +26,7 @@ private
|
|
|
27
26
|
def confirm_jets_project
|
|
28
27
|
jets_project = File.exist?("#{project_folder}/config/application.rb")
|
|
29
28
|
unless jets_project
|
|
30
|
-
puts "It does not look like the repo #{options[:repo]} is a jets project. Maybe double check that it is? Exited.".
|
|
29
|
+
puts "It does not look like the repo #{options[:repo]} is a jets project. Maybe double check that it is? Exited.".color(:red)
|
|
31
30
|
exit 1
|
|
32
31
|
end
|
|
33
32
|
end
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
# Example:
|
|
2
2
|
# describe PostsController, type: :controller do
|
|
3
3
|
# it "index returns a success response" do
|
|
4
|
-
#
|
|
5
|
-
#
|
|
6
|
-
# response
|
|
7
|
-
# # pp response
|
|
4
|
+
# get '/posts'
|
|
5
|
+
# expect(response.status).to eq 200
|
|
6
|
+
# pp response.body
|
|
8
7
|
# end
|
|
9
|
-
|
|
8
|
+
#
|
|
10
9
|
# it "show returns a success response" do
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
# response
|
|
14
|
-
#
|
|
10
|
+
# Post.create(id: 1) unless Post.find_by(id: 1) # TODO: set up factory_bot
|
|
11
|
+
# get '/posts/:id', id: 1
|
|
12
|
+
# expect(response.status).to eq 200
|
|
13
|
+
# pp response.body
|
|
15
14
|
# end
|
|
16
15
|
# end
|
data/lib/jets/commands/url.rb
CHANGED
|
@@ -9,7 +9,7 @@ module Jets::Commands
|
|
|
9
9
|
def display
|
|
10
10
|
stack_name = Jets::Naming.parent_stack_name
|
|
11
11
|
unless stack_exists?(stack_name)
|
|
12
|
-
puts "Stack for #{Jets.config.project_name.
|
|
12
|
+
puts "Stack for #{Jets.config.project_name.color(:green)} project for environment #{Jets.env.color(:green)}. Couldn't find #{stack_name.color(:green)} stack."
|
|
13
13
|
exit
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -21,7 +21,7 @@ module Jets::Commands
|
|
|
21
21
|
STDOUT.puts "API Gateway Endpoint: #{api_gateway_endpoint}"
|
|
22
22
|
show_custom_domain
|
|
23
23
|
else
|
|
24
|
-
puts "API Gateway not found. This jets app does have an API Gateway associated with it. Please double check your config/routes.rb if you were expecting to see a url for the app. Also check that #{stack_name.
|
|
24
|
+
puts "API Gateway not found. This jets app does have an API Gateway associated with it. Please double check your config/routes.rb if you were expecting to see a url for the app. Also check that #{stack_name.color(:green)} is a jets app."
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
|
data/lib/jets/core.rb
CHANGED
|
@@ -97,7 +97,8 @@ module Jets::Core
|
|
|
97
97
|
path =~ %r{/templates/} ||
|
|
98
98
|
path =~ %r{/turbo/project/} ||
|
|
99
99
|
path =~ %r{/version} ||
|
|
100
|
-
path =~ %r{/webpacker}
|
|
100
|
+
path =~ %r{/webpacker} ||
|
|
101
|
+
path =~ %r{/jets/spec}
|
|
101
102
|
end
|
|
102
103
|
|
|
103
104
|
def class_mappings(class_name)
|
|
@@ -159,7 +160,7 @@ module Jets::Core
|
|
|
159
160
|
end
|
|
160
161
|
|
|
161
162
|
def report_exception(exception)
|
|
162
|
-
puts "DEPRECATED: report_exception. Use on_exception instead.".
|
|
163
|
+
puts "DEPRECATED: report_exception. Use on_exception instead.".color(:yellow)
|
|
163
164
|
on_exception(exception)
|
|
164
165
|
end
|
|
165
166
|
|
data/lib/jets/erb.rb
CHANGED
|
@@ -24,7 +24,7 @@ class Jets::Erb
|
|
|
24
24
|
error_info ||= e.backtrace.grep(/\(erb\)/)[0]
|
|
25
25
|
raise unless error_info # unable to find the (erb):xxx: error line
|
|
26
26
|
line = error_info.split(':')[1].to_i
|
|
27
|
-
puts "Error evaluating ERB template on line #{line.to_s.
|
|
27
|
+
puts "Error evaluating ERB template on line #{line.to_s.color(:red)} of: #{path.sub(/^\.\//, '').color(:green)}"
|
|
28
28
|
|
|
29
29
|
template_lines = template.split("\n")
|
|
30
30
|
context = 5 # lines of context
|
|
@@ -33,7 +33,7 @@ class Jets::Erb
|
|
|
33
33
|
template_lines[top..bottom].each_with_index do |line_content, index|
|
|
34
34
|
line_number = top+index+1
|
|
35
35
|
if line_number == line
|
|
36
|
-
printf("%#{spacing}d %s\n".
|
|
36
|
+
printf("%#{spacing}d %s\n".color(:red), line_number, line_content)
|
|
37
37
|
else
|
|
38
38
|
printf("%#{spacing}d %s\n", line_number, line_content)
|
|
39
39
|
end
|
data/lib/jets/mega/request.rb
CHANGED
|
@@ -48,13 +48,27 @@ module Jets::Mega
|
|
|
48
48
|
|
|
49
49
|
puts_rack_output
|
|
50
50
|
|
|
51
|
+
status = response.code.to_i
|
|
52
|
+
headers = response.each_header.to_h
|
|
53
|
+
encoding = get_encoding(headers['content-type'])
|
|
54
|
+
body = response.body.force_encoding(encoding)
|
|
51
55
|
{
|
|
52
|
-
status:
|
|
53
|
-
headers:
|
|
54
|
-
body:
|
|
56
|
+
status: status,
|
|
57
|
+
headers: headers,
|
|
58
|
+
body: body,
|
|
55
59
|
}
|
|
56
60
|
end
|
|
57
61
|
|
|
62
|
+
def get_encoding(content_type)
|
|
63
|
+
default = Jets.config.encoding.default
|
|
64
|
+
return default unless content_type
|
|
65
|
+
|
|
66
|
+
md = content_type.match(/charset=(.+)/)
|
|
67
|
+
return default unless md
|
|
68
|
+
|
|
69
|
+
md[1]
|
|
70
|
+
end
|
|
71
|
+
|
|
58
72
|
# Grab the rack output from the /tmp/jets-output.log and puts it back in the
|
|
59
73
|
# main process' stdout
|
|
60
74
|
def puts_rack_output
|
|
@@ -87,7 +87,7 @@ class Jets::PolyFun
|
|
|
87
87
|
interpreter = @task.lang
|
|
88
88
|
command = %Q|#{interpreter} #{lambda_executor_script} '#{JSON.dump(event)}' '#{JSON.dump(context)}'|
|
|
89
89
|
stdout, stderr, status = Open3.capture3(command)
|
|
90
|
-
# puts "=> #{command}".
|
|
90
|
+
# puts "=> #{command}".color(:green)
|
|
91
91
|
# puts "stdout #{stdout}"
|
|
92
92
|
# puts "stderr #{stderr}"
|
|
93
93
|
# puts "status #{status}"
|
data/lib/jets/rack_server.rb
CHANGED
|
@@ -39,7 +39,7 @@ module Jets
|
|
|
39
39
|
args << " --host #{@options[:host]}" if @options[:host] # only forward the host option
|
|
40
40
|
# port is always 9292 for simplicity
|
|
41
41
|
command = "cd #{rack_project} && bin/rackup#{args}" # leads to the same wrapper rack scripts
|
|
42
|
-
puts "=> #{command}".
|
|
42
|
+
puts "=> #{command}".color(:green)
|
|
43
43
|
system(command)
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -27,7 +27,7 @@ class Jets::Resource::Lambda::Function
|
|
|
27
27
|
found_reserved_vars = variables.keys & reserved_variables
|
|
28
28
|
return if found_reserved_vars.empty?
|
|
29
29
|
|
|
30
|
-
puts "You have configured some environment variables that are reserved by AWS Lambda.".
|
|
30
|
+
puts "You have configured some environment variables that are reserved by AWS Lambda.".color(:red)
|
|
31
31
|
puts found_reserved_vars
|
|
32
32
|
puts "The deployment to AWS Lambda will failed when using reserved variables."
|
|
33
33
|
puts "Please remove these reserved variables. "
|
data/lib/jets/router.rb
CHANGED
|
@@ -71,7 +71,7 @@ module Jets
|
|
|
71
71
|
|
|
72
72
|
def api_mode?
|
|
73
73
|
if Jets.config.key?(:api_mode) || Jets.config.key?(:api_generator)
|
|
74
|
-
puts <<~EOL.
|
|
74
|
+
puts <<~EOL.color(:yellow)
|
|
75
75
|
DEPRECATED: Jets.config.api_generator
|
|
76
76
|
Instead, please update your config/application.rb to use:
|
|
77
77
|
Jets.config.mode = 'api'
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'base64'
|
|
4
|
+
|
|
5
|
+
module Jets
|
|
6
|
+
module SpecHelpers
|
|
7
|
+
autoload :Params, 'jets/spec_helpers/params'
|
|
8
|
+
autoload :Request, 'jets/spec_helpers/request'
|
|
9
|
+
autoload :Response, 'jets/spec_helpers/response'
|
|
10
|
+
|
|
11
|
+
attr_reader :request, :response
|
|
12
|
+
def initialize(*)
|
|
13
|
+
super
|
|
14
|
+
@request = Request.new(:get, '/', {}, Params.new)
|
|
15
|
+
@response = nil # will be set after http_call
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
rest_methods = %w[get post put patch delete]
|
|
19
|
+
rest_methods.each do |meth|
|
|
20
|
+
define_method(meth) do |path, **params|
|
|
21
|
+
http_call(method: meth, path: path, **params)
|
|
22
|
+
end
|
|
23
|
+
# Example:
|
|
24
|
+
# def get(path, **params)
|
|
25
|
+
# http_call(method: :get, path: path, **params)
|
|
26
|
+
# end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def http_call(method:, path:, **params)
|
|
30
|
+
request.method = method.to_sym
|
|
31
|
+
request.path = path
|
|
32
|
+
request.headers.deep_merge!(params.delete(:headers) || {})
|
|
33
|
+
|
|
34
|
+
request.params.body_params = params.delete(:params) || params || {}
|
|
35
|
+
request.params.path_params = params
|
|
36
|
+
|
|
37
|
+
@response = request.dispatch!
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def fixture_path(filename)
|
|
41
|
+
"#{Jets.root}/spec/fixtures/#{filename}"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def fixture_file(filename)
|
|
45
|
+
File.new(fixture_path(filename))
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
RSpec.configure do |c|
|
|
51
|
+
c.include Jets::SpecHelpers
|
|
52
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
module SpecHelpers
|
|
3
|
+
class Request
|
|
4
|
+
attr_accessor :method, :path, :headers, :params
|
|
5
|
+
def initialize(method, path, headers={}, params={})
|
|
6
|
+
@method, @path, @headers, @params = method, path, headers, params
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def event
|
|
10
|
+
json = {}
|
|
11
|
+
id_params = path.scan(%r{:([^/]+)}).flatten
|
|
12
|
+
expanded_path = path.dup
|
|
13
|
+
path_parameters = {}
|
|
14
|
+
|
|
15
|
+
id_params.each do |id_param|
|
|
16
|
+
raise "missing param: :#{id_param}" unless params.path_params.include? id_param.to_sym
|
|
17
|
+
|
|
18
|
+
path_param_value = params.path_params[id_param.to_sym]
|
|
19
|
+
raise "Path param :#{id_param} value cannot be blank" if path_param_value.blank?
|
|
20
|
+
|
|
21
|
+
expanded_path.gsub!(":#{id_param}", path_param_value.to_s)
|
|
22
|
+
path_parameters.deep_merge!(id_param => path_param_value.to_s)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
json['resource'] = path
|
|
26
|
+
json['path'] = expanded_path
|
|
27
|
+
json['httpMethod'] = method.to_s.upcase
|
|
28
|
+
json['pathParameters'] = path_parameters
|
|
29
|
+
json['headers'] = (headers || {}).stringify_keys
|
|
30
|
+
|
|
31
|
+
if method != :get
|
|
32
|
+
json['headers']['Content-Type'] = "multipart/form-data; boundary=#{multipart_boundary}"
|
|
33
|
+
body = +''
|
|
34
|
+
params.body_params.to_a.each do |e|
|
|
35
|
+
key, value = e
|
|
36
|
+
body << multipart_item(name: key, value: value)
|
|
37
|
+
end
|
|
38
|
+
body << multipart_end
|
|
39
|
+
|
|
40
|
+
json['body'] = Base64.encode64 body
|
|
41
|
+
json['isBase64Encoded'] = true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
json
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def multipart_boundary
|
|
48
|
+
@boundary ||= '-' * 16 + SecureRandom.hex(32)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def multipart_item(name:, value:)
|
|
52
|
+
if value.is_a? File
|
|
53
|
+
multipart_file(name: name, filename: File.basename(value.path),
|
|
54
|
+
data: ::IO.read(value.path))
|
|
55
|
+
else
|
|
56
|
+
multipart_text(name: name, text: value)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def multipart_text(name:, text:)
|
|
61
|
+
"--#{multipart_boundary}\r\nContent-Disposition: form-data; name=\"#{name}\"\r\n"\
|
|
62
|
+
"Content-Type: text/plain\r\n\r\n#{text}\r\n"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def multipart_file(name:, filename:, data:)
|
|
66
|
+
"--#{multipart_boundary}\r\nContent-Disposition: form-data; name=\"#{name}\"; "\
|
|
67
|
+
"filename=\"#{filename}\"\r\n\r\n#{data}\r\n"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def multipart_end
|
|
71
|
+
"--#{multipart_boundary}--"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def find_route!
|
|
75
|
+
path = self.path
|
|
76
|
+
path = path[0..-2] if path.end_with? '/'
|
|
77
|
+
path = path[1..-1] if path.start_with? '/'
|
|
78
|
+
|
|
79
|
+
route = Jets::Router.routes.find { |r| r.path == path && r.method == method.to_s.upcase }
|
|
80
|
+
raise "Route not found: #{method.to_s.upcase} #{path}" if route.blank?
|
|
81
|
+
|
|
82
|
+
route
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def dispatch!
|
|
86
|
+
route = find_route!
|
|
87
|
+
controller = Object.const_get(route.controller_name).new(event, {}, route.action_name)
|
|
88
|
+
response = controller.dispatch!
|
|
89
|
+
|
|
90
|
+
if !response.is_a?(Array) || response.size != 3
|
|
91
|
+
raise "Expected response to be an array of size 3. Are you rendering correctly?"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
Response.new(response[0].to_i, response[2].read)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
data/lib/jets/stack/function.rb
CHANGED
|
@@ -19,7 +19,7 @@ class Jets::Stack
|
|
|
19
19
|
ext = File.extname(source_file).sub(/^\./,'').to_sym
|
|
20
20
|
lang_map[ext]
|
|
21
21
|
else
|
|
22
|
-
puts "WARN: Unable to find a source file for function. Looked at: #{search_expression}".
|
|
22
|
+
puts "WARN: Unable to find a source file for function. Looked at: #{search_expression}".color(:yellow)
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
data/lib/jets/turbo/rail.rb
CHANGED
|
@@ -20,9 +20,9 @@ class Jets::Turbo
|
|
|
20
20
|
def afterburners_message
|
|
21
21
|
command = ARGV.first
|
|
22
22
|
if command == "deploy"
|
|
23
|
-
puts "=> Rails app detected: Enabling Jets Afterburner to deploy to AWS Lambda.".
|
|
23
|
+
puts "=> Rails app detected: Enabling Jets Afterburner to deploy to AWS Lambda.".color(:green)
|
|
24
24
|
else
|
|
25
|
-
puts "=> Rails app detected: Enabling Jets Afterburner.".
|
|
25
|
+
puts "=> Rails app detected: Enabling Jets Afterburner.".color(:green)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
data/lib/jets/version.rb
CHANGED
|
@@ -158,7 +158,7 @@ EOL
|
|
|
158
158
|
# Thanks: https://gist.github.com/aelesbao/1414b169a79162b1d795 and
|
|
159
159
|
# https://stackoverflow.com/questions/5165950/how-do-i-get-a-list-of-gems-that-are-installed-that-have-native-extensions
|
|
160
160
|
def specs_with_extensions
|
|
161
|
-
# puts "Jets::Gems::Check#specs_with_extensions".
|
|
161
|
+
# puts "Jets::Gems::Check#specs_with_extensions".color:red)
|
|
162
162
|
# puts "BUNDLE_GEMFILE #{ENV['BUNDLE_GEMFILE'].inspect}"
|
|
163
163
|
# puts "Jets.root #{Jets.root}"
|
|
164
164
|
# puts "Dir.pwd #{Dir.pwd}"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jets
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.6.
|
|
4
|
+
version: 1.6.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tung Nguyen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-01-
|
|
11
|
+
date: 2019-01-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -150,20 +150,6 @@ dependencies:
|
|
|
150
150
|
- - ">="
|
|
151
151
|
- !ruby/object:Gem::Version
|
|
152
152
|
version: '0'
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: colorize
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - ">="
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: '0'
|
|
160
|
-
type: :runtime
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
-
requirements:
|
|
164
|
-
- - ">="
|
|
165
|
-
- !ruby/object:Gem::Version
|
|
166
|
-
version: '0'
|
|
167
153
|
- !ruby/object:Gem::Dependency
|
|
168
154
|
name: dotenv
|
|
169
155
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -304,6 +290,20 @@ dependencies:
|
|
|
304
290
|
- - "~>"
|
|
305
291
|
- !ruby/object:Gem::Version
|
|
306
292
|
version: 5.2.1
|
|
293
|
+
- !ruby/object:Gem::Dependency
|
|
294
|
+
name: rainbow
|
|
295
|
+
requirement: !ruby/object:Gem::Requirement
|
|
296
|
+
requirements:
|
|
297
|
+
- - ">="
|
|
298
|
+
- !ruby/object:Gem::Version
|
|
299
|
+
version: '0'
|
|
300
|
+
type: :runtime
|
|
301
|
+
prerelease: false
|
|
302
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
303
|
+
requirements:
|
|
304
|
+
- - ">="
|
|
305
|
+
- !ruby/object:Gem::Version
|
|
306
|
+
version: '0'
|
|
307
307
|
- !ruby/object:Gem::Dependency
|
|
308
308
|
name: recursive-open-struct
|
|
309
309
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -749,6 +749,10 @@ files:
|
|
|
749
749
|
- lib/jets/rule.rb
|
|
750
750
|
- lib/jets/rule/base.rb
|
|
751
751
|
- lib/jets/rule/dsl.rb
|
|
752
|
+
- lib/jets/spec_helpers.rb
|
|
753
|
+
- lib/jets/spec_helpers/params.rb
|
|
754
|
+
- lib/jets/spec_helpers/request.rb
|
|
755
|
+
- lib/jets/spec_helpers/response.rb
|
|
752
756
|
- lib/jets/stack.rb
|
|
753
757
|
- lib/jets/stack/builder.rb
|
|
754
758
|
- lib/jets/stack/definition.rb
|