jets 1.9.18 → 1.9.19

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 571d8c17d9ca179f5d8ca50a0a7e236852c1cfa9bc53704b74f28d6056a24606
4
- data.tar.gz: f06f81427e21b1085be5bd2e82399426d57a2a2bb6b7e7f8ca9c29f753e4853e
3
+ metadata.gz: '06684dfe45f0cb90c0809eb24f3bcb36f8dfbd4c5e1c69fcf46eb86c140325a4'
4
+ data.tar.gz: 8e5a0ff622207135ae9013d6ab300db68bb3ffbbaa368641e248937992c6e932
5
5
  SHA512:
6
- metadata.gz: aca85c2ec33d54d03a3ed0fcd670c47f7880a79f093711022c1d843ff4515089c5b9b8074c4e24a194784d07abda4b7e5763fb6b636e627d56278413ddc1d526
7
- data.tar.gz: d00d6b66ba32ea8b65ac908c65ea7545e50bb87c1dbde705c2e492f0a9fef3aac39ab9aa10f1c1759fb77f4992b02c4b44e411f4759546293931152c061585b6
6
+ metadata.gz: dd974cacee0866e00091a817ba4e7e2b476674ff096e8b3139da5b35fcf24fa237a69ee77d9ac981b2582bca135042137eee3ab37449e788b6937ea43ef2e11e
7
+ data.tar.gz: 82ffb01f43d6261220c96d329a7a26ddc1439c27c341460dc8d2de32c4b59f8507aa6a6c7291f1ed4a5439782546f5bdea7442b5906cb3d9d415b2a54b838c6a
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/).
5
5
 
6
+ ## [1.9.19]
7
+ - #295 dotenv env extra support, fix precedence again
8
+ - #296 automatically add vpc permissions when using vpc_config at the application-wide iam level
9
+
6
10
  ## [1.9.18]
7
11
  - #233 SSM Parameter Store support for dotenv files
8
12
  - #293 Improvements to SSM Parameter Store support
@@ -5,7 +5,7 @@ class Jets::Application
5
5
  include Singleton
6
6
  extend Memoist
7
7
  include Jets::Middleware
8
- include DefaultConfig
8
+ include Defaults
9
9
 
10
10
  def configure(&block)
11
11
  instance_eval(&block) if block
@@ -108,33 +108,6 @@ class Jets::Application
108
108
  loader.setup
109
109
  end
110
110
 
111
- # Essentially folders under app folder will be the default_autoload_paths. Example:
112
- # app/controllers
113
- # app/helpers
114
- # app/jobs
115
- # app/models
116
- # app/rules
117
- # app/shared/resources
118
- #
119
- # Also include:
120
- # app/models/concerns
121
- # app/controllers/concerns
122
- def default_autoload_paths
123
- paths = []
124
- each_app_autoload_path("#{Jets.root}/app/*") do |path|
125
- paths << path
126
- end
127
- # Handle concerns folders
128
- each_app_autoload_path("#{Jets.root}/app/**/concerns") do |path|
129
- paths << path
130
- end
131
-
132
- paths << "#{Jets.root}/app/shared/resources"
133
- paths << "#{Jets.root}/app/shared/extensions"
134
-
135
- paths
136
- end
137
-
138
111
  def each_app_autoload_path(expression)
139
112
  Dir.glob(expression).each do |p|
140
113
  p.sub!('./','')
@@ -189,37 +162,6 @@ class Jets::Application
189
162
  config.managed_policy_definitions ||= [] # default empty
190
163
  end
191
164
 
192
- def self.default_iam_policy
193
- project_namespace = Jets.project_namespace
194
- logs = {
195
- action: ["logs:*"],
196
- effect: "Allow",
197
- resource: "arn:aws:logs:#{Jets.aws.region}:#{Jets.aws.account}:log-group:/aws/lambda/#{project_namespace}-*",
198
- }
199
- s3_bucket = Jets.aws.s3_bucket
200
- s3_readonly = {
201
- action: ["s3:Get*", "s3:List*"],
202
- effect: "Allow",
203
- resource: "arn:aws:s3:::#{s3_bucket}*",
204
- }
205
- s3_bucket = {
206
- action: ["s3:ListAllMyBuckets", "s3:HeadBucket"],
207
- effect: "Allow",
208
- resource: "arn:aws:s3:::*", # scoped to all buckets
209
- }
210
- policies = [logs, s3_readonly, s3_bucket]
211
-
212
- if Jets::Stack.has_resources?
213
- cloudformation = {
214
- action: ["cloudformation:DescribeStacks"],
215
- effect: "Allow",
216
- resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
217
- }
218
- policies << cloudformation
219
- end
220
- policies
221
- end
222
-
223
165
  # It is pretty easy to attempt to set environment variables without
224
166
  # the correct AWS Environment.Variables path struture.
225
167
  # Auto-fix it for convenience.
@@ -1,5 +1,53 @@
1
1
  class Jets::Application
2
- module DefaultConfig
2
+ module Defaults
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ def self.default_iam_policy
7
+ project_namespace = Jets.project_namespace
8
+ logs = {
9
+ action: ["logs:*"],
10
+ effect: "Allow",
11
+ resource: "arn:aws:logs:#{Jets.aws.region}:#{Jets.aws.account}:log-group:/aws/lambda/#{project_namespace}-*",
12
+ }
13
+ s3_bucket = Jets.aws.s3_bucket
14
+ s3_readonly = {
15
+ action: ["s3:Get*", "s3:List*"],
16
+ effect: "Allow",
17
+ resource: "arn:aws:s3:::#{s3_bucket}*",
18
+ }
19
+ s3_bucket = {
20
+ action: ["s3:ListAllMyBuckets", "s3:HeadBucket"],
21
+ effect: "Allow",
22
+ resource: "arn:aws:s3:::*", # scoped to all buckets
23
+ }
24
+ policies = [logs, s3_readonly, s3_bucket]
25
+
26
+ if Jets::Stack.has_resources?
27
+ cloudformation = {
28
+ action: ["cloudformation:DescribeStacks"],
29
+ effect: "Allow",
30
+ resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
31
+ }
32
+ policies << cloudformation
33
+ end
34
+
35
+ if Jets.config.function.vpc_config
36
+ vpc = %w[
37
+ ec2:CreateNetworkInterface
38
+ ec2:DeleteNetworkInterface
39
+ ec2:DescribeNetworkInterfaces
40
+ ec2:DescribeVpcs
41
+ ec2:DescribeSubnets
42
+ ec2:DescribeSecurityGroups
43
+ ]
44
+ policies += vpc
45
+ end
46
+
47
+ policies
48
+ end
49
+ end
50
+
3
51
  def default_config
4
52
  config = ActiveSupport::OrderedOptions.new
5
53
  config.project_name = parse_project_name # must set early because other configs requires this
@@ -91,5 +139,32 @@ class Jets::Application
91
139
 
92
140
  config
93
141
  end
142
+
143
+ # Essentially folders under app folder will be the default_autoload_paths. Example:
144
+ # app/controllers
145
+ # app/helpers
146
+ # app/jobs
147
+ # app/models
148
+ # app/rules
149
+ # app/shared/resources
150
+ #
151
+ # Also include:
152
+ # app/models/concerns
153
+ # app/controllers/concerns
154
+ def default_autoload_paths
155
+ paths = []
156
+ each_app_autoload_path("#{Jets.root}/app/*") do |path|
157
+ paths << path
158
+ end
159
+ # Handle concerns folders
160
+ each_app_autoload_path("#{Jets.root}/app/**/concerns") do |path|
161
+ paths << path
162
+ end
163
+
164
+ paths << "#{Jets.root}/app/shared/resources"
165
+ paths << "#{Jets.root}/app/shared/extensions"
166
+
167
+ paths
168
+ end
94
169
  end
95
170
  end
@@ -32,8 +32,8 @@ Jets.application.configure do
32
32
  # More examples:
33
33
  # config.function.dead_letter_config = { target_arn: "arn" }
34
34
  # config.function.vpc_config = {
35
- # security_group_ids: [ "sg-1", "sg-2" ],
36
- # subnet_ids: [ "subnet-1", "subnet-2" ]
35
+ # security_group_ids: %w[sg-1 sg-2],
36
+ # subnet_ids: %w[subnet-1 subnet-2],
37
37
  # }
38
38
  # The config.function settings to the CloudFormation Lambda Function properties.
39
39
  # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html
data/lib/jets/dotenv.rb CHANGED
@@ -6,23 +6,22 @@ class Jets::Dotenv
6
6
  end
7
7
 
8
8
  def initialize(remote=false)
9
- @remote = remote
10
- @remote = ENV['JETS_ENV_REMOTE'] if ENV['JETS_ENV_REMOTE']
9
+ @remote = ENV['JETS_ENV_REMOTE'] || remote
11
10
  end
12
11
 
13
12
  def load!
14
13
  vars = ::Dotenv.load(*dotenv_files)
15
- ssm = Ssm.new(vars)
16
- ssm.interpolate!
14
+ Ssm.new(vars).interpolate!
17
15
  end
18
16
 
19
17
  # dotenv files with the following precedence:
20
18
  #
21
- # - .env.development.remote (highest)
19
+ # - .env.development.jets_env_extra (highest)
20
+ # - .env.development.remote (2nd highest)
22
21
  # - .env.development.local
23
22
  # - .env.development
24
23
  # - .env.local - This file is loaded for all environments _except_ `test`.
25
- # - .env` - The original (lowest)
24
+ # - .env - The original (lowest)
26
25
  #
27
26
  def dotenv_files
28
27
  files = [
@@ -32,7 +31,10 @@ class Jets::Dotenv
32
31
  root.join(".env.#{Jets.env}.local"),
33
32
  ]
34
33
  files << root.join(".env.#{Jets.env}.remote") if @remote
35
- files.reverse.compact # reverse so the precedence is right
34
+ if ENV["JETS_ENV_EXTRA"]
35
+ files << root.join(".env.#{Jets.env}.#{ENV["JETS_ENV_EXTRA"]}")
36
+ end
37
+ files.compact
36
38
  end
37
39
 
38
40
  def root
@@ -33,7 +33,7 @@ class Jets::Resource::ApiGateway::RestApi::Routes
33
33
  Example: /posts/:id and /posts/:post_id/reveal should both be /posts/:id and /posts/:id/reveal.
34
34
 
35
35
  Please check your `config/routes.rb` and remove the colliding routes.
36
- More info: http://rubyonjets.com/docs/considerations-api-gateway/
36
+ More info: http://rubyonjets.com/docs/considerations/api-gateway/
37
37
  EOL
38
38
  end
39
39
 
data/lib/jets/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "1.9.18"
2
+ VERSION = "1.9.19"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jets
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.18
4
+ version: 1.9.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
@@ -578,7 +578,7 @@ files:
578
578
  - jets.gemspec
579
579
  - lib/jets.rb
580
580
  - lib/jets/application.rb
581
- - lib/jets/application/default_config.rb
581
+ - lib/jets/application/defaults.rb
582
582
  - lib/jets/autoloaders.rb
583
583
  - lib/jets/aws_info.rb
584
584
  - lib/jets/aws_services.rb