jets 1.7.1 → 1.7.2

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: 942f8fc372f792fb74d2f82f89e5744215231f22c9efece5fe10a39aac902ac6
4
- data.tar.gz: 949a6e399d24b1bf799338b79c7780b9f980eeef523a2d229fb18a5a955cc8f9
3
+ metadata.gz: 3d4b8b6547644c895f4b9f86ea9c58d1732f89bd68cc3f71a73cf4d2a6733eb0
4
+ data.tar.gz: e6447ef5b8099c9c405be40315cf9aa2dc711958158a79a86f578c1f0258117d
5
5
  SHA512:
6
- metadata.gz: 46dd773229c40a4721f6a39adcc0331781070ad0e1c99f73ce95f44d99f75e4890b5e895162e5b2161439e60704cde6ce01a8c06d636faf52c297ce968a0267e
7
- data.tar.gz: a3704b48c2d4b2377ff182626a326503313c2bca027dc61be2f4a92b565a2343f419c9838f85a8fea0f257900bc1fb7a5f5462cb80454a5705f793f20b3db2e8
6
+ metadata.gz: 5a90c4010311c435bc32714738dd83ece60822a8c34cb9d848c198bd0d8d9518129a764c5edf3ea873747f3ff38d3630ec991a907f5afd9acf6befabada4fd58
7
+ data.tar.gz: b2013f481f5be249ee7798bb746306d25e52ff9f1515020b28c3e7e7583511ea3796666734a202c3514235d0d6816ce28e677ef397238c88531a44116f0cbbb7
data/.circleci/config.yml CHANGED
@@ -28,7 +28,7 @@ jobs:
28
28
  # Download and cache dependencies
29
29
  - restore_cache:
30
30
  keys:
31
- - v2-dependencies-{{ checksum "Gemfile.lock" }}
31
+ - v2-dependencies-{{ checksum "jets.gemspec" }}
32
32
  # fallback to using the latest cache if no exact match is found
33
33
  - v2-dependencies-
34
34
 
@@ -40,7 +40,7 @@ jobs:
40
40
  - save_cache:
41
41
  paths:
42
42
  - ./vendor/bundle
43
- key: v2-dependencies-{{ checksum "Gemfile.lock" }}
43
+ key: v2-dependencies-{{ checksum "jets.gemspec" }}
44
44
 
45
45
  # Database setup
46
46
  # - run: bundle exec rake db:create
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ spec/fixtures/project/handlers
20
20
  demo*
21
21
  /html
22
22
  spec/fixtures/apps/franky/dynamodb/migrate
23
+ Gemfile.lock
data/CHANGELOG.md CHANGED
@@ -3,6 +3,11 @@
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.7.2]
7
+ - #189: spec_helpers: `get` request now converts dangling params to query params. `query` keyword can be used to do the same thing explicitly.
8
+ - #190 SNS Event Lambda Trigger Support
9
+ - Start rack server on 127.0.0.1 for mega mode
10
+
6
11
  ## [1.7.1]
7
12
  - fix Turbines with no initializer blocks
8
13
 
data/lib/jets/job/dsl.rb CHANGED
@@ -8,11 +8,15 @@
8
8
  #
9
9
  module Jets::Job::Dsl
10
10
  extend ActiveSupport::Concern
11
- autoload :EventSourceMapping, "jets/job/dsl/event_source_mapping"
11
+ autoload :EventSourceMapping, "jets/job/dsl/event_source_mapping" # base for sqs_event, etc
12
+ autoload :SnsEvent, "jets/job/dsl/sns_event"
13
+ autoload :SqsEvent, "jets/job/dsl/sqs_event"
12
14
 
13
15
  included do
14
16
  class << self
15
17
  include EventSourceMapping
18
+ include SnsEvent
19
+ include SqsEvent
16
20
 
17
21
  # Public: Creates CloudWatch Event Rule
18
22
  #
@@ -41,30 +45,27 @@ module Jets::Job::Dsl
41
45
  end
42
46
 
43
47
  def schedule_job(expression, props={})
44
- @associated_properties = nil # dont use any current associated_properties
45
- props = props.merge(schedule_expression: expression)
46
- associated_properties(props)
47
- # Eager define resource
48
- resource(events_rule_definition) # add associated resources immediately
49
- @associated_properties = nil # reset for next definition, since we're defining eagerly
48
+ with_fresh_properties(multiple_resources: false) do
49
+ props = props.merge(schedule_expression: expression)
50
+ associated_properties(props)
51
+ resource(events_rule_definition) # add associated resource immediately
52
+ end
50
53
  end
51
54
 
52
55
  def event_pattern(details={}, props={})
53
- @associated_properties = nil # dont use any current associated_properties
54
- props = props.merge(event_pattern: details)
55
- associated_properties(props)
56
- # Eager define resource
57
- resource(events_rule_definition) # add associated resources immediately
58
- @associated_properties = nil # reset for next definition, since we're defining eagerly
56
+ with_fresh_properties(multiple_resources: false) do
57
+ props = props.merge(event_pattern: details)
58
+ associated_properties(props)
59
+ resource(events_rule_definition) # add associated resource immediately
60
+ end
59
61
  add_descriptions # useful: generic description in the Event Rule console
60
62
  end
61
63
 
62
64
  def events_rule(props={})
63
- @associated_properties = nil # dont use any current associated_properties
64
- associated_properties(props)
65
- # Eager define resource
66
- resource(events_rule_definition) # add associated resources immediately
67
- @associated_properties = nil # reset for next definition, since we're defining eagerly
65
+ with_fresh_properties(multiple_resources: false) do
66
+ associated_properties(props)
67
+ resource(events_rule_definition) # add associated resource immediately
68
+ end
68
69
  end
69
70
 
70
71
  # Works with eager definitions
@@ -1,66 +1,11 @@
1
+ # SqsEvent uses this module
1
2
  module Jets::Job::Dsl
2
3
  module EventSourceMapping
3
- def declare_queue(props)
4
- props ||= {} # since options.delete(:queue_properties) can be nil
5
- r = Jets::Resource::Sqs::Queue.new(props)
6
- with_resource_options(fresh_properties: true, multiple: true) do
7
- resource(r.definition) # add associated resources immediately
8
- end
9
- end
10
-
11
4
  def event_source_mapping(props={})
12
5
  r = Jets::Resource::Lambda::EventSourceMapping.new(props)
13
- with_resource_options(fresh_properties: true, multiple: true) do
14
- resource(r.definition) # add associated resources immediately
15
- end
16
- end
17
-
18
- def sqs_event(queue_name, options={})
19
- if queue_name == :generate_queue
20
- queue_arn = "!GetAtt {namespace}SqsQueue.Arn"
21
- default_iam_policy = default_sqs_iam_policy('*') # Dont have access to full ARN on initial creation
22
- declare_queue(options.delete(:queue_properties)) # delete to avoid using them for event_source_mapping
23
- elsif queue_name.include?('!Ref') # reference shared resource
24
- queue_arn = queue_name
25
- default_iam_policy = default_sqs_iam_policy('*') # Dont have access to full ARN on initial creation
26
- else # short-handle existing queue or full queue arn
27
- queue_arn = full_queue_arn(queue_name)
28
- default_iam_policy = default_sqs_iam_policy(queue_arn)
6
+ with_fresh_properties do
7
+ resource(r.definition) # add associated resource immediately
29
8
  end
30
-
31
- # Create iam policy allows access to queue
32
- # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
33
- iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
34
- iam_policy(iam_policy_props) unless iam_policy_props == :disable
35
-
36
- props = options # by this time options only has EventSourceMapping properties
37
- default = {
38
- event_source_arn: queue_arn
39
- }
40
- props = default.merge(props)
41
-
42
- event_source_mapping(props)
43
- end
44
-
45
- # Expands simple queue name to full arn. Example:
46
- #
47
- # hello-queue
48
- # To:
49
- # arn:aws:sqs:us-west-2:112233445566:hello-queue
50
- def full_queue_arn(queue_name)
51
- return queue_name if queue_name.include?("arn:aws:sqs")
52
-
53
- "arn:aws:sqs:#{Jets.aws.region}:#{Jets.aws.account}:#{queue_name}"
54
- end
55
-
56
- def default_sqs_iam_policy(queue_name_arn='*')
57
- {
58
- action: ["sqs:ReceiveMessage",
59
- "sqs:DeleteMessage",
60
- "sqs:GetQueueAttributes"],
61
- effect: "Allow",
62
- resource: queue_name_arn,
63
- }
64
9
  end
65
10
  end
66
11
  end
@@ -0,0 +1,46 @@
1
+ module Jets::Job::Dsl
2
+ module SnsEvent
3
+ def sns_event(topic_name, props={})
4
+ if topic_name.to_s =~ /generate/
5
+ declare_sns_topic(props.delete(:topic_properties))
6
+ topic_arn = "!Ref {namespace}SnsTopic"
7
+ props.merge!(topic_arn: topic_arn)
8
+ declare_sns_subscription(props)
9
+ elsif topic_name.include?('!Ref') # reference shared resource
10
+ topic_arn = topic_name # contains !Ref
11
+ props.merge!(topic_arn: topic_arn)
12
+ declare_sns_subscription(props)
13
+ else # existing topic: short name or full arn
14
+ topic_arn = full_sns_topic_arn(topic_name)
15
+ props.merge!(topic_arn: topic_arn)
16
+ declare_sns_subscription(props)
17
+ end
18
+ end
19
+
20
+ def declare_sns_topic(props={})
21
+ props ||= {} # props.delete(:topic_properties) can be nil
22
+ r = Jets::Resource::Sns::Topic.new(props)
23
+ with_fresh_properties do
24
+ resource(r.definition) # add associated resource immediately
25
+ end
26
+ end
27
+
28
+ def declare_sns_subscription(props={})
29
+ r = Jets::Resource::Sns::Subscription.new(props)
30
+ with_fresh_properties do
31
+ resource(r.definition) # add associated resource immediately
32
+ end
33
+ end
34
+
35
+ # Expands simple topic name to full arn. Example:
36
+ #
37
+ # hello-topic
38
+ # To:
39
+ # arn:aws:sns:us-west-2:112233445566:hello-topic
40
+ def full_sns_topic_arn(topic_name)
41
+ return topic_name if topic_name.include?("arn:aws:sns")
42
+
43
+ "arn:aws:sns:#{Jets.aws.region}:#{Jets.aws.account}:#{topic_name}"
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,96 @@
1
+ # ## Event Source Mapping
2
+ #
3
+ # Underneath the hood, the `sqs_event` method sets up a [Lambda::EventSourceMapping](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html). So:
4
+ #
5
+ # ```ruby
6
+ # class HardJob
7
+ # class_timeout 30 # must be less than or equal to the SQS queue default timeout
8
+ #
9
+ # sqs_event "hello-queue"
10
+ # def dig
11
+ # puts "dig event #{JSON.dump(event)}"
12
+ # end
13
+ # end
14
+ # ```
15
+ #
16
+ # Cloud also be written with something like this:
17
+ #
18
+ # ```ruby
19
+ # class HardJob
20
+ # class_timeout 30 # must be less than or equal to the SQS queue default timeout
21
+ #
22
+ # event_source_mapping(
23
+ # event_source_arn: "arn:aws:sqs:us-west-2:112233445566:hello-queue",
24
+ # )
25
+ # iam_policy(
26
+ # action: ["sqs:ReceiveMessage",
27
+ # "sqs:DeleteMessage",
28
+ # "sqs:GetQueueAttributes"],
29
+ # effect: "Allow",
30
+ # resource: "arn:aws:sqs:us-west-2:112233445566:hello-queue",
31
+ # )
32
+ # def dig
33
+ # puts "dig event #{JSON.dump(event)}"
34
+ # end
35
+ # end
36
+ # ```
37
+ #
38
+ module Jets::Job::Dsl
39
+ module SqsEvent
40
+ def sqs_event(queue_name, options={})
41
+ if queue_name.to_s =~ /generate/
42
+ queue_arn = "!GetAtt {namespace}SqsQueue.Arn"
43
+ default_iam_policy = default_sqs_iam_policy('*') # Dont have access to full ARN on initial creation
44
+ declare_sqs_queue(options.delete(:queue_properties)) # delete to avoid using them for event_source_mapping
45
+ elsif queue_name.include?('!Ref') # reference shared resource
46
+ queue_arn = queue_name
47
+ default_iam_policy = default_sqs_iam_policy('*') # Dont have access to full ARN on initial creation
48
+ else # existing queue: short name or full arn
49
+ queue_arn = full_sqs_queue_arn(queue_name)
50
+ default_iam_policy = default_sqs_iam_policy(queue_arn)
51
+ end
52
+
53
+ # Create iam policy allows access to queue
54
+ # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
55
+ iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
56
+ iam_policy(iam_policy_props) unless iam_policy_props == :disable
57
+
58
+ props = options # by this time options only has EventSourceMapping properties
59
+ default = {
60
+ event_source_arn: queue_arn
61
+ }
62
+ props = default.merge(props)
63
+
64
+ event_source_mapping(props)
65
+ end
66
+
67
+ def declare_sqs_queue(props)
68
+ props ||= {} # since options.delete(:queue_properties) can be nil
69
+ r = Jets::Resource::Sqs::Queue.new(props)
70
+ with_fresh_properties do
71
+ resource(r.definition) # add associated resource immediately
72
+ end
73
+ end
74
+
75
+ # Expands simple queue name to full arn. Example:
76
+ #
77
+ # hello-queue
78
+ # To:
79
+ # arn:aws:sqs:us-west-2:112233445566:hello-queue
80
+ def full_sqs_queue_arn(queue_name)
81
+ return queue_name if queue_name.include?("arn:aws:sqs")
82
+
83
+ "arn:aws:sqs:#{Jets.aws.region}:#{Jets.aws.account}:#{queue_name}"
84
+ end
85
+
86
+ def default_sqs_iam_policy(queue_name_arn='*')
87
+ {
88
+ action: ["sqs:ReceiveMessage",
89
+ "sqs:DeleteMessage",
90
+ "sqs:GetQueueAttributes"],
91
+ effect: "Allow",
92
+ resource: queue_name_arn,
93
+ }
94
+ end
95
+ end
96
+ end
@@ -155,7 +155,7 @@ module Jets::Lambda::Dsl
155
155
  # interfere with being able to pass in any keys for the properties hash at the end.
156
156
  #
157
157
  # TODO: If there's a cleaner way of doing this, let me know.
158
- def with_resource_options(fresh_properties: false, multiple_resources: false)
158
+ def with_fresh_properties(fresh_properties: true, multiple_resources: true)
159
159
  @associated_properties = nil if fresh_properties # dont use any current associated_properties
160
160
  @multiple_resources = multiple_resources
161
161
 
@@ -36,8 +36,14 @@ module Jets
36
36
  # down to the sub bin/rackup command cleans up the child process fine.
37
37
  Bundler.with_clean_env do
38
38
  args = ''
39
- args << " --host #{@options[:host]}" if @options[:host] # only forward the host option
40
- # port is always 9292 for simplicity
39
+ # only forward the host option, port is always 9292 for simplicity
40
+ if @options[:host]
41
+ args << " --host #{@options[:host]}"
42
+ else
43
+ args << " --host 127.0.0.1" # using the default localhost is not starting up https://stackoverflow.com/questions/4356646/address-family-not-supported-by-protocol-family
44
+ end
45
+
46
+
41
47
  command = "cd #{rack_project} && bin/rackup#{args}" # leads to the same wrapper rack scripts
42
48
  puts "=> #{command}".color(:green)
43
49
  system(command)
@@ -1,3 +1,4 @@
1
1
  module Jets::Resource::Sns
2
2
  autoload :Topic, 'jets/resource/sns/topic'
3
+ autoload :Subscription, 'jets/resource/sns/subscription'
3
4
  end
@@ -0,0 +1,29 @@
1
+ # CloudFormation SNS Subscription docs: https://amzn.to/2SJtN3C
2
+ module Jets::Resource::Sns
3
+ class Subscription < Jets::Resource::Base
4
+ def initialize(props)
5
+ @props = props # associated_properties from dsl.rb
6
+ end
7
+
8
+ def definition
9
+ {
10
+ subscription_logical_id => {
11
+ type: "AWS::SNS::Subscription",
12
+ properties: merged_properties,
13
+ }
14
+ }
15
+ end
16
+
17
+ # Do not name this method properties, that is a computed method of `Jets::Resource::Base`
18
+ def merged_properties
19
+ {
20
+ endpoint: "!GetAtt {namespace}LambdaFunction.Arn",
21
+ protocol: "lambda",
22
+ }.deep_merge(@props)
23
+ end
24
+
25
+ def subscription_logical_id
26
+ "{namespace}_sns_subscription"
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,35 @@
1
+ # CloudFormation SNS Topic docs: https://amzn.to/2MYbUZc
2
+ module Jets::Resource::Sns
3
+ class Topic < Jets::Resource::Base
4
+ def initialize(props)
5
+ @props = props # associated_properties from dsl.rb
6
+ end
7
+
8
+ def definition
9
+ {
10
+ topic_logical_id => {
11
+ type: "AWS::SNS::Topic",
12
+ properties: merged_properties,
13
+ }
14
+ }
15
+ end
16
+
17
+ # Do not name this method properties, that is a computed method of `Jets::Resource::Base`
18
+ def merged_properties
19
+ display_name = "{namespace} Topic"[0..99] # limit is 100 chars
20
+ {
21
+ display_name: display_name,
22
+ # Not setting subscription this way but instead with a SNS::Subscription resource so the interface
23
+ # is consistent. Leaving comment in here to remind me and in case decide to change this.
24
+ # subscription: [
25
+ # endpoint: "!GetAtt {namespace}LambdaFunction.Arn",
26
+ # protocol: "lambda"
27
+ # ]
28
+ }.deep_merge(@props)
29
+ end
30
+
31
+ def topic_logical_id
32
+ "{namespace}_sns_topic"
33
+ end
34
+ end
35
+ end
@@ -32,6 +32,11 @@ module Jets
32
32
  request.headers.deep_merge!(params.delete(:headers) || {})
33
33
 
34
34
  request.params.body_params = params.delete(:params) || params || {}
35
+
36
+ request.params.query_params = params.delete(:query)
37
+ request.params.query_params ||= params if request.method == :get
38
+ request.params.query_params ||= {}
39
+
35
40
  request.params.path_params = params
36
41
 
37
42
  @response = request.dispatch!
@@ -1,9 +1,9 @@
1
1
  module Jets
2
2
  module SpecHelpers
3
3
  class Params
4
- attr_accessor :path_params, :body_params
5
- def initialize(path_params={}, body_params={})
6
- @path_params, @body_params = path_params, body_params
4
+ attr_accessor :path_params, :body_params, :query_params
5
+ def initialize(path_params={}, body_params={}, query_params={})
6
+ @path_params, @body_params, @query_params = path_params, body_params, query_params
7
7
  end
8
8
  end
9
9
  end
@@ -41,6 +41,12 @@ module Jets
41
41
  json['isBase64Encoded'] = true
42
42
  end
43
43
 
44
+ params.query_params.to_a.each do |e|
45
+ key, value = e
46
+ json['queryStringParameters'] ||= {}
47
+ json['queryStringParameters'][key.to_s] = value.to_s
48
+ end
49
+
44
50
  json
45
51
  end
46
52
 
@@ -2,7 +2,7 @@ module Jets::Stack::Main::Dsl
2
2
  module Sns
3
3
  def sns_topic(id, props={})
4
4
  resource(id, "AWS::SNS::Topic", props)
5
- output(id)
5
+ output(id) # Topic Arn
6
6
  end
7
7
 
8
8
  def sns_subscription(id, props={})
data/lib/jets/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "1.7.1"
2
+ VERSION = "1.7.2"
3
3
  end
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.7.1
4
+ version: 1.7.2
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-02-08 00:00:00.000000000 Z
11
+ date: 2019-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -438,7 +438,6 @@ files:
438
438
  - Dockerfile
439
439
  - Dockerfile.base
440
440
  - Gemfile
441
- - Gemfile.lock
442
441
  - Guardfile
443
442
  - LICENSE.txt
444
443
  - Procfile
@@ -653,6 +652,8 @@ files:
653
652
  - lib/jets/job/base.rb
654
653
  - lib/jets/job/dsl.rb
655
654
  - lib/jets/job/dsl/event_source_mapping.rb
655
+ - lib/jets/job/dsl/sns_event.rb
656
+ - lib/jets/job/dsl/sqs_event.rb
656
657
  - lib/jets/klass.rb
657
658
  - lib/jets/lambda.rb
658
659
  - lib/jets/lambda/dsl.rb
@@ -744,6 +745,8 @@ files:
744
745
  - lib/jets/resource/route53/record_set.rb
745
746
  - lib/jets/resource/s3.rb
746
747
  - lib/jets/resource/sns.rb
748
+ - lib/jets/resource/sns/subscription.rb
749
+ - lib/jets/resource/sns/topic.rb
747
750
  - lib/jets/resource/sqs.rb
748
751
  - lib/jets/resource/sqs/queue.rb
749
752
  - lib/jets/resource/standardizer.rb
data/Gemfile.lock DELETED
@@ -1,190 +0,0 @@
1
- GIT
2
- remote: https://github.com/tongueroo/webpacker.git
3
- revision: 3651cc317358018ebd16de75df3b8184adf1b818
4
- branch: jets
5
- specs:
6
- webpacker (3.2.0)
7
- activesupport (>= 4.2)
8
- rack-proxy (>= 0.6.1)
9
- railties (>= 4.2)
10
-
11
- PATH
12
- remote: .
13
- specs:
14
- jets (1.7.1)
15
- activerecord (~> 5.2.1)
16
- activesupport (~> 5.2.1)
17
- aws-sdk-apigateway
18
- aws-sdk-cloudformation
19
- aws-sdk-cloudwatchlogs
20
- aws-sdk-dynamodb
21
- aws-sdk-lambda
22
- aws-sdk-s3
23
- aws-sdk-sns
24
- aws-sdk-sqs
25
- dotenv
26
- gems
27
- hashie
28
- jets-html-sanitizer
29
- json
30
- kramdown
31
- memoist
32
- mimemagic
33
- rack
34
- railties (~> 5.2.1)
35
- rainbow
36
- recursive-open-struct
37
- text-table
38
- thor
39
-
40
- GEM
41
- remote: https://rubygems.org/
42
- specs:
43
- actionpack (5.2.2)
44
- actionview (= 5.2.2)
45
- activesupport (= 5.2.2)
46
- rack (~> 2.0)
47
- rack-test (>= 0.6.3)
48
- rails-dom-testing (~> 2.0)
49
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
50
- actionview (5.2.2)
51
- activesupport (= 5.2.2)
52
- builder (~> 3.1)
53
- erubi (~> 1.4)
54
- rails-dom-testing (~> 2.0)
55
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
56
- activemodel (5.2.2)
57
- activesupport (= 5.2.2)
58
- activerecord (5.2.2)
59
- activemodel (= 5.2.2)
60
- activesupport (= 5.2.2)
61
- arel (>= 9.0)
62
- activesupport (5.2.2)
63
- concurrent-ruby (~> 1.0, >= 1.0.2)
64
- i18n (>= 0.7, < 2)
65
- minitest (~> 5.1)
66
- tzinfo (~> 1.1)
67
- arel (9.0.0)
68
- aws-eventstream (1.0.1)
69
- aws-partitions (1.136.0)
70
- aws-sdk-apigateway (1.23.0)
71
- aws-sdk-core (~> 3, >= 3.39.0)
72
- aws-sigv4 (~> 1.0)
73
- aws-sdk-cloudformation (1.14.0)
74
- aws-sdk-core (~> 3, >= 3.39.0)
75
- aws-sigv4 (~> 1.0)
76
- aws-sdk-cloudwatchlogs (1.13.0)
77
- aws-sdk-core (~> 3, >= 3.39.0)
78
- aws-sigv4 (~> 1.0)
79
- aws-sdk-core (3.46.0)
80
- aws-eventstream (~> 1.0)
81
- aws-partitions (~> 1.0)
82
- aws-sigv4 (~> 1.0)
83
- jmespath (~> 1.0)
84
- aws-sdk-dynamodb (1.20.0)
85
- aws-sdk-core (~> 3, >= 3.39.0)
86
- aws-sigv4 (~> 1.0)
87
- aws-sdk-kms (1.13.0)
88
- aws-sdk-core (~> 3, >= 3.39.0)
89
- aws-sigv4 (~> 1.0)
90
- aws-sdk-lambda (1.17.0)
91
- aws-sdk-core (~> 3, >= 3.39.0)
92
- aws-sigv4 (~> 1.0)
93
- aws-sdk-s3 (1.30.1)
94
- aws-sdk-core (~> 3, >= 3.39.0)
95
- aws-sdk-kms (~> 1)
96
- aws-sigv4 (~> 1.0)
97
- aws-sdk-sns (1.9.0)
98
- aws-sdk-core (~> 3, >= 3.39.0)
99
- aws-sigv4 (~> 1.0)
100
- aws-sdk-sqs (1.10.0)
101
- aws-sdk-core (~> 3, >= 3.39.0)
102
- aws-sigv4 (~> 1.0)
103
- aws-sigv4 (1.0.3)
104
- builder (3.2.3)
105
- byebug (10.0.2)
106
- concurrent-ruby (1.1.4)
107
- crass (1.0.4)
108
- diff-lcs (1.3)
109
- dotenv (2.6.0)
110
- dynomite (1.2.2)
111
- activesupport
112
- aws-sdk-dynamodb
113
- erubi (1.8.0)
114
- gems (1.1.1)
115
- json
116
- hashie (3.6.0)
117
- i18n (1.5.3)
118
- concurrent-ruby (~> 1.0)
119
- jets-html-sanitizer (1.0.4)
120
- loofah (~> 2.2, >= 2.2.2)
121
- jmespath (1.4.0)
122
- json (2.1.0)
123
- kramdown (2.1.0)
124
- loofah (2.2.3)
125
- crass (~> 1.0.2)
126
- nokogiri (>= 1.5.9)
127
- memoist (0.16.0)
128
- method_source (0.9.2)
129
- mimemagic (0.3.3)
130
- mini_portile2 (2.4.0)
131
- minitest (5.11.3)
132
- mysql2 (0.5.2)
133
- nokogiri (1.10.1)
134
- mini_portile2 (~> 2.4.0)
135
- rack (2.0.6)
136
- rack-proxy (0.6.5)
137
- rack
138
- rack-test (1.1.0)
139
- rack (>= 1.0, < 3)
140
- rails-dom-testing (2.0.3)
141
- activesupport (>= 4.2.0)
142
- nokogiri (>= 1.6)
143
- rails-html-sanitizer (1.0.4)
144
- loofah (~> 2.2, >= 2.2.2)
145
- railties (5.2.2)
146
- actionpack (= 5.2.2)
147
- activesupport (= 5.2.2)
148
- method_source
149
- rake (>= 0.8.7)
150
- thor (>= 0.19.0, < 2.0)
151
- rainbow (3.0.0)
152
- rake (12.3.2)
153
- recursive-open-struct (1.1.0)
154
- rspec (3.8.0)
155
- rspec-core (~> 3.8.0)
156
- rspec-expectations (~> 3.8.0)
157
- rspec-mocks (~> 3.8.0)
158
- rspec-core (3.8.0)
159
- rspec-support (~> 3.8.0)
160
- rspec-expectations (3.8.2)
161
- diff-lcs (>= 1.2.0, < 2.0)
162
- rspec-support (~> 3.8.0)
163
- rspec-mocks (3.8.0)
164
- diff-lcs (>= 1.2.0, < 2.0)
165
- rspec-support (~> 3.8.0)
166
- rspec-support (3.8.0)
167
- rspec_junit_formatter (0.4.1)
168
- rspec-core (>= 2, < 4, != 2.12.0)
169
- text-table (1.2.4)
170
- thor (0.20.3)
171
- thread_safe (0.3.6)
172
- tzinfo (1.2.5)
173
- thread_safe (~> 0.1)
174
-
175
- PLATFORMS
176
- ruby
177
-
178
- DEPENDENCIES
179
- bundler
180
- byebug
181
- dynomite
182
- jets!
183
- mysql2 (~> 0.5.2)
184
- rake
185
- rspec
186
- rspec_junit_formatter
187
- webpacker!
188
-
189
- BUNDLED WITH
190
- 1.17.3