jets 0.8.4 → 0.8.5
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 +4 -0
- data/Gemfile.lock +14 -14
- data/lib/jets.rb +1 -1
- data/lib/jets/application.rb +1 -1
- data/lib/jets/camelizer.rb +64 -0
- data/lib/jets/cfn/builders/interface.rb +1 -1
- data/lib/jets/commands/delete.rb +5 -5
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +1 -1
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +1 -1
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +1 -1
- data/lib/jets/controller/renderers/template_renderer.rb +41 -23
- data/lib/jets/resource.rb +2 -2
- data/lib/jets/resource/iam/policy_document.rb +1 -1
- data/lib/jets/resource/permission.rb +2 -2
- data/lib/jets/version.rb +1 -1
- metadata +3 -3
- data/lib/jets/pascalize.rb +0 -58
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 96421520e6785d9b0ecf33b41d2e2b86d7d516f417c634fa0ec537b50ec462c1
|
|
4
|
+
data.tar.gz: 36c7a0111342c116e6c9fa90da21f8b6beadf0657a3e88f38c94fc1741e3ad09
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8cc413d4a3c20e6b039d19c40ce28e2cc018c334bc6183b907832235ab43df113c78b22fe9c05b69f03627cb42c72ca46889cf4523ac160ad7caaaee2b85b785
|
|
7
|
+
data.tar.gz: 4e4f81cd56d96bc637fc8d1bad521039f9c1693e4f2e9b46a98f047bad200ac239b8af66269d1f4330a71ee61a73ce202419e64236563cf118e12ca6ec2b706d
|
data/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
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
|
+
## [0.8.5]
|
|
7
|
+
- Rename to Camelizer PR #23
|
|
8
|
+
- Fix helpers PR #22 from tongueroo/helpers
|
|
9
|
+
|
|
6
10
|
## [0.8.4]
|
|
7
11
|
- fix custom iam policies
|
|
8
12
|
- fix edge case: allow stack to be delete in rollback completed state
|
data/Gemfile.lock
CHANGED
|
@@ -11,7 +11,7 @@ GIT
|
|
|
11
11
|
PATH
|
|
12
12
|
remote: .
|
|
13
13
|
specs:
|
|
14
|
-
jets (0.8.
|
|
14
|
+
jets (0.8.5)
|
|
15
15
|
actionpack (>= 5.2.1)
|
|
16
16
|
actionview (>= 5.2.1)
|
|
17
17
|
activerecord (>= 5.2.1)
|
|
@@ -66,28 +66,28 @@ GEM
|
|
|
66
66
|
arel (9.0.0)
|
|
67
67
|
aws-eventstream (1.0.1)
|
|
68
68
|
aws-partitions (1.102.0)
|
|
69
|
-
aws-sdk-cloudformation (1.
|
|
70
|
-
aws-sdk-core (~> 3)
|
|
69
|
+
aws-sdk-cloudformation (1.8.0)
|
|
70
|
+
aws-sdk-core (~> 3, >= 3.26.0)
|
|
71
71
|
aws-sigv4 (~> 1.0)
|
|
72
|
-
aws-sdk-cloudwatchlogs (1.
|
|
73
|
-
aws-sdk-core (~> 3)
|
|
72
|
+
aws-sdk-cloudwatchlogs (1.7.0)
|
|
73
|
+
aws-sdk-core (~> 3, >= 3.26.0)
|
|
74
74
|
aws-sigv4 (~> 1.0)
|
|
75
|
-
aws-sdk-core (3.
|
|
75
|
+
aws-sdk-core (3.27.0)
|
|
76
76
|
aws-eventstream (~> 1.0)
|
|
77
77
|
aws-partitions (~> 1.0)
|
|
78
78
|
aws-sigv4 (~> 1.0)
|
|
79
79
|
jmespath (~> 1.0)
|
|
80
|
-
aws-sdk-dynamodb (1.
|
|
81
|
-
aws-sdk-core (~> 3)
|
|
80
|
+
aws-sdk-dynamodb (1.13.0)
|
|
81
|
+
aws-sdk-core (~> 3, >= 3.26.0)
|
|
82
82
|
aws-sigv4 (~> 1.0)
|
|
83
|
-
aws-sdk-kms (1.
|
|
84
|
-
aws-sdk-core (~> 3)
|
|
83
|
+
aws-sdk-kms (1.9.0)
|
|
84
|
+
aws-sdk-core (~> 3, >= 3.26.0)
|
|
85
85
|
aws-sigv4 (~> 1.0)
|
|
86
|
-
aws-sdk-lambda (1.
|
|
87
|
-
aws-sdk-core (~> 3)
|
|
86
|
+
aws-sdk-lambda (1.10.0)
|
|
87
|
+
aws-sdk-core (~> 3, >= 3.26.0)
|
|
88
88
|
aws-sigv4 (~> 1.0)
|
|
89
|
-
aws-sdk-s3 (1.
|
|
90
|
-
aws-sdk-core (~> 3, >= 3.
|
|
89
|
+
aws-sdk-s3 (1.19.0)
|
|
90
|
+
aws-sdk-core (~> 3, >= 3.26.0)
|
|
91
91
|
aws-sdk-kms (~> 1)
|
|
92
92
|
aws-sigv4 (~> 1.0)
|
|
93
93
|
aws-sigv4 (1.0.3)
|
data/lib/jets.rb
CHANGED
data/lib/jets/application.rb
CHANGED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Custom Camelizer with CloudFormation specific handling.
|
|
2
|
+
# Based on: https://stackoverflow.com/questions/8706930/converting-nested-hash-keys-from-camelcase-to-snake-case-in-ruby
|
|
3
|
+
module Jets
|
|
4
|
+
class Camelizer
|
|
5
|
+
class << self
|
|
6
|
+
def transform(value, parent_keys=[])
|
|
7
|
+
case value
|
|
8
|
+
when Array
|
|
9
|
+
value.map { |v| transform(v) }
|
|
10
|
+
when Hash
|
|
11
|
+
initializer = value.map do |k, v|
|
|
12
|
+
new_key = camelize_key(k, parent_keys)
|
|
13
|
+
[new_key, transform(v, parent_keys+[new_key])]
|
|
14
|
+
end
|
|
15
|
+
Hash[initializer]
|
|
16
|
+
else
|
|
17
|
+
value # do not transform values
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def camelize_key(k, parent_keys=[])
|
|
22
|
+
k = k.to_s
|
|
23
|
+
|
|
24
|
+
if passthrough?(k, parent_keys)
|
|
25
|
+
k # pass through untouch
|
|
26
|
+
elsif parent_keys.last == "EventPattern" # top-level
|
|
27
|
+
k.dasherize
|
|
28
|
+
elsif parent_keys.include?("EventPattern")
|
|
29
|
+
# Any keys at 2nd level under EventPattern will be pascalized
|
|
30
|
+
pascalize(k)
|
|
31
|
+
else
|
|
32
|
+
camelize(k)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def passthrough?(k, parent_keys)
|
|
37
|
+
parent_keys.include?("Variables") || # do not transform keys anything under Variables
|
|
38
|
+
parent_keys.include?("ResponseParameters") || # do not transform keys anything under Variables
|
|
39
|
+
k.include?('-') || k.include?('/')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def camelize(value)
|
|
43
|
+
return value if value.is_a?(Integer)
|
|
44
|
+
|
|
45
|
+
value = value.to_s.camelize
|
|
46
|
+
special_map[value] || value
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def pascalize(value)
|
|
50
|
+
new_value = value.camelize
|
|
51
|
+
first_char = new_value[0..0].downcase
|
|
52
|
+
new_value[0] = first_char
|
|
53
|
+
new_value
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Some keys have special mappings
|
|
57
|
+
def special_map
|
|
58
|
+
{
|
|
59
|
+
"TemplateUrl" => "TemplateURL"
|
|
60
|
+
}
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -110,7 +110,7 @@ class Jets::Cfn::Builders
|
|
|
110
110
|
# )
|
|
111
111
|
#
|
|
112
112
|
def add_template_resource(logical_id, type, options)
|
|
113
|
-
options = Jets::
|
|
113
|
+
options = Jets::Camelizer.transform(options)
|
|
114
114
|
|
|
115
115
|
attributes = if options.include?('Type')
|
|
116
116
|
base = { 'Type' => type }
|
data/lib/jets/commands/delete.rb
CHANGED
|
@@ -56,6 +56,7 @@ class Jets::Commands::Delete
|
|
|
56
56
|
|
|
57
57
|
def empty_s3_bucket
|
|
58
58
|
return unless s3_bucket_name # Happens when minimal stack fails to build
|
|
59
|
+
return unless bucket_exists?(s3_bucket_name)
|
|
59
60
|
|
|
60
61
|
resp = s3.list_objects(bucket: s3_bucket_name)
|
|
61
62
|
if resp.contents.size > 0
|
|
@@ -74,7 +75,6 @@ class Jets::Commands::Delete
|
|
|
74
75
|
|
|
75
76
|
def s3_bucket_name
|
|
76
77
|
return @s3_bucket_name if defined?(@s3_bucket_name)
|
|
77
|
-
return unless bucket_exists?
|
|
78
78
|
|
|
79
79
|
resp = cfn.describe_stacks(stack_name: parent_stack_name)
|
|
80
80
|
outputs = resp.stacks[0].outputs
|
|
@@ -86,10 +86,10 @@ class Jets::Commands::Delete
|
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
# Thanks: https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/s3-example-does-bucket-exist.html
|
|
89
|
-
def bucket_exists?
|
|
89
|
+
def bucket_exists?(bucket_name)
|
|
90
90
|
bucket_exists = false
|
|
91
91
|
begin
|
|
92
|
-
resp = s3.head_bucket(bucket:
|
|
92
|
+
resp = s3.head_bucket(bucket: bucket_name, use_accelerate_endpoint: false)
|
|
93
93
|
bucket_exists = true
|
|
94
94
|
rescue
|
|
95
95
|
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
|
|
107
|
+
puts "Are you sure you want to want to delete the #{Jets.config.project_namespace.colorize(:green)} project? (y/N)"
|
|
108
108
|
sure = $stdin.gets
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
unless sure =~ /^y/
|
|
112
|
-
puts "Phew! Jets
|
|
112
|
+
puts "Phew! Jets #{Jets.config.project_namespace.colorize(:green)} project was not deleted."
|
|
113
113
|
exit 0
|
|
114
114
|
end
|
|
115
115
|
end
|
|
@@ -3,7 +3,7 @@ Jets.application.configure do
|
|
|
3
3
|
config.api_generator = <%= !!@options[:api] %>
|
|
4
4
|
|
|
5
5
|
# config.prewarm.enable = true # default is true
|
|
6
|
-
# config.prewarm.rate = '
|
|
6
|
+
# config.prewarm.rate = '30 minutes' # default is '30 minutes'
|
|
7
7
|
# config.prewarm.concurrency = 2 # default is 2
|
|
8
8
|
# config.prewarm.public_ratio = 10 # default is 10
|
|
9
9
|
|
|
@@ -11,8 +11,6 @@ module Jets::Controller::Renderers
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def render
|
|
14
|
-
setup_action_controller # setup only when necessary
|
|
15
|
-
|
|
16
14
|
# Rails rendering does heavy lifting
|
|
17
15
|
renderer = ActionController::Base.renderer.new(renderer_options)
|
|
18
16
|
body = renderer.render(render_options)
|
|
@@ -73,35 +71,55 @@ module Jets::Controller::Renderers
|
|
|
73
71
|
render_options
|
|
74
72
|
end
|
|
75
73
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
# laod helpers
|
|
81
|
-
helper_class = self.class.name.to_s.sub("Controller", "Helper")
|
|
82
|
-
helper_path = "#{Jets.root}app/helpers/#{helper_class.underscore}.rb"
|
|
83
|
-
ActiveSupport.on_load :action_view do
|
|
84
|
-
include ApplicationHelper
|
|
85
|
-
include helper_class.constantize if File.exist?(helper_path)
|
|
86
|
-
end
|
|
74
|
+
class << self
|
|
75
|
+
def setup!
|
|
76
|
+
require "action_controller"
|
|
77
|
+
require "jets/rails_overrides"
|
|
87
78
|
|
|
88
|
-
|
|
79
|
+
# Load helpers
|
|
80
|
+
# Assign local variable because scoe in the `:action_view do` changes
|
|
81
|
+
app_helper_classes = find_app_helper_classes
|
|
82
|
+
ActiveSupport.on_load :action_view do
|
|
83
|
+
include ApplicationHelper # include first
|
|
84
|
+
app_helper_classes.each do |helper_class|
|
|
85
|
+
include helper_class
|
|
86
|
+
end
|
|
87
|
+
end
|
|
89
88
|
|
|
90
|
-
|
|
91
|
-
end
|
|
89
|
+
ActionController::Base.append_view_path("#{Jets.root}app/views")
|
|
92
90
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
require 'webpacker/helper'
|
|
91
|
+
setup_webpacker if Jets.webpacker?
|
|
92
|
+
end
|
|
96
93
|
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
# Does not include ApplicationHelper, will include ApplicationHelper explicitly first.
|
|
95
|
+
def find_app_helper_classes
|
|
96
|
+
klasses = []
|
|
97
|
+
expression = "#{Jets.root}app/helpers/**/*"
|
|
98
|
+
Dir.glob(expression).each do |path|
|
|
99
|
+
next unless File.file?(path)
|
|
100
|
+
class_name = path.sub("#{Jets.root}app/helpers/","").sub(/\.rb/,'')
|
|
101
|
+
unless class_name == "application_helper"
|
|
102
|
+
klasses << class_name.classify.constantize # autoload
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
klasses
|
|
99
106
|
end
|
|
100
107
|
|
|
101
|
-
|
|
102
|
-
|
|
108
|
+
def setup_webpacker
|
|
109
|
+
require 'webpacker'
|
|
110
|
+
require 'webpacker/helper'
|
|
111
|
+
|
|
112
|
+
ActiveSupport.on_load :action_controller do
|
|
113
|
+
ActionController::Base.helper Webpacker::Helper
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
ActiveSupport.on_load :action_view do
|
|
117
|
+
include Webpacker::Helper
|
|
118
|
+
end
|
|
103
119
|
end
|
|
104
120
|
end
|
|
105
121
|
|
|
106
122
|
end
|
|
107
123
|
end
|
|
124
|
+
|
|
125
|
+
Jets::Controller::Renderers::TemplateRenderer.setup!
|
data/lib/jets/resource.rb
CHANGED
|
@@ -20,7 +20,7 @@ class Jets::Resource
|
|
|
20
20
|
id = definition.keys.first
|
|
21
21
|
# replace possible {namespace} in the logical id
|
|
22
22
|
id = replacer.replace_value(id)
|
|
23
|
-
Jets::
|
|
23
|
+
Jets::Camelizer.camelize(id)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def type
|
|
@@ -34,7 +34,7 @@ class Jets::Resource
|
|
|
34
34
|
def attributes
|
|
35
35
|
attributes = definition.values.first
|
|
36
36
|
attributes = replacer.replace_placeholders(attributes)
|
|
37
|
-
Jets::
|
|
37
|
+
Jets::Camelizer.transform(attributes)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def parameters
|
|
@@ -16,7 +16,7 @@ module Jets::Resource::Iam
|
|
|
16
16
|
|
|
17
17
|
def policy_document
|
|
18
18
|
definitions.map { |definition| standardize(definition) }
|
|
19
|
-
Jets::
|
|
19
|
+
Jets::Camelizer.transform(@policy)
|
|
20
20
|
end
|
|
21
21
|
memoize :policy_document # only process policy_document once
|
|
22
22
|
|
|
@@ -16,7 +16,7 @@ class Jets::Resource
|
|
|
16
16
|
logical_id = [logical_id, counter].compact.join('')
|
|
17
17
|
# replace possible {namespace} in the logical id
|
|
18
18
|
logical_id = replacer.replace_value(logical_id)
|
|
19
|
-
Jets::
|
|
19
|
+
Jets::Camelizer.camelize(logical_id)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def type
|
|
@@ -38,7 +38,7 @@ class Jets::Resource
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
attributes = replacer.replace_placeholders(attributes)
|
|
41
|
-
Jets::
|
|
41
|
+
Jets::Camelizer.transform(attributes)
|
|
42
42
|
end
|
|
43
43
|
memoize :attributes
|
|
44
44
|
|
data/lib/jets/version.rb
CHANGED
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: 0.8.
|
|
4
|
+
version: 0.8.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tung Nguyen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-09-
|
|
11
|
+
date: 2018-09-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -439,6 +439,7 @@ files:
|
|
|
439
439
|
- lib/jets/builders/handler_generator.rb
|
|
440
440
|
- lib/jets/builders/node-hello.js
|
|
441
441
|
- lib/jets/builders/node-shim.js
|
|
442
|
+
- lib/jets/camelizer.rb
|
|
442
443
|
- lib/jets/cfn.rb
|
|
443
444
|
- lib/jets/cfn/builders.rb
|
|
444
445
|
- lib/jets/cfn/builders/api_deployment_builder.rb
|
|
@@ -591,7 +592,6 @@ files:
|
|
|
591
592
|
- lib/jets/lambda/task.rb
|
|
592
593
|
- lib/jets/logger.rb
|
|
593
594
|
- lib/jets/naming.rb
|
|
594
|
-
- lib/jets/pascalize.rb
|
|
595
595
|
- lib/jets/poly_fun.rb
|
|
596
596
|
- lib/jets/poly_fun/base_executor.rb
|
|
597
597
|
- lib/jets/poly_fun/lambda_executor.rb
|
data/lib/jets/pascalize.rb
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
module Jets
|
|
2
|
-
class Pascalize
|
|
3
|
-
class << self
|
|
4
|
-
# Specialized pascalize that will not pascalize keys under the
|
|
5
|
-
# Variables part of the hash structure.
|
|
6
|
-
# Based on: https://stackoverflow.com/questions/8706930/converting-nested-hash-keys-from-camelcase-to-snake-case-in-ruby
|
|
7
|
-
def pascalize(value, parent_keys=[])
|
|
8
|
-
case value
|
|
9
|
-
when Array
|
|
10
|
-
value.map { |v| pascalize(v) }
|
|
11
|
-
when Hash
|
|
12
|
-
initializer = value.map do |k, v|
|
|
13
|
-
new_key = pascal_key(k, parent_keys)
|
|
14
|
-
[new_key, pascalize(v, parent_keys+[new_key])]
|
|
15
|
-
end
|
|
16
|
-
Hash[initializer]
|
|
17
|
-
else
|
|
18
|
-
value
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def pascal_key(k, parent_keys=[])
|
|
23
|
-
k = k.to_s
|
|
24
|
-
if parent_keys.include?("Variables") # do not pascalize keys anything under Variables
|
|
25
|
-
k # pass through untouch
|
|
26
|
-
elsif parent_keys.include?("ResponseParameters")
|
|
27
|
-
k # pass through untouch
|
|
28
|
-
elsif k.include?('-') || k.include?('/')
|
|
29
|
-
k # pass through untouch
|
|
30
|
-
elsif parent_keys.last == "EventPattern" # top-level
|
|
31
|
-
k.dasherize
|
|
32
|
-
elsif parent_keys.include?("EventPattern")
|
|
33
|
-
# any keys at 2nd level under EventPattern will be camelize
|
|
34
|
-
new_k = k.camelize # an earlier pascalize has made the first char upcase
|
|
35
|
-
# so we need to downcase it again
|
|
36
|
-
first_char = new_k[0..0].downcase
|
|
37
|
-
new_k[0] = first_char
|
|
38
|
-
new_k
|
|
39
|
-
else
|
|
40
|
-
pascalize_string(k)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def pascalize_string(s)
|
|
45
|
-
s = s.to_s.camelize
|
|
46
|
-
s = s.slice(0,1).capitalize + s.slice(1..-1) # capitalize first letter only
|
|
47
|
-
special_map[s] || s
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Some keys have special mappings
|
|
51
|
-
def special_map
|
|
52
|
-
{
|
|
53
|
-
"TemplateUrl" => "TemplateURL"
|
|
54
|
-
}
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|