lam 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +16 -8
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +3 -3
  6. data/Gemfile.lock +107 -0
  7. data/Guardfile +22 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +19 -17
  10. data/Rakefile +4 -0
  11. data/bin/lam +14 -0
  12. data/bin/lamb +14 -0
  13. data/lam.gemspec +18 -20
  14. data/lib/lam.rb +10 -1
  15. data/lib/lam/base_controller.rb +54 -0
  16. data/lib/lam/build.rb +43 -0
  17. data/lib/lam/build/handler_generator.rb +34 -0
  18. data/lib/lam/build/lambda_deducer.rb +47 -0
  19. data/lib/lam/build/templates/handler.js +156 -0
  20. data/lib/lam/build/traveling_ruby.rb +108 -0
  21. data/lib/lam/cli.rb +23 -0
  22. data/lib/lam/cli/help.rb +19 -0
  23. data/lib/lam/command.rb +25 -0
  24. data/lib/lam/process.rb +18 -0
  25. data/lib/lam/process/base_processor.rb +23 -0
  26. data/lib/lam/process/controller_processor.rb +36 -0
  27. data/lib/lam/process/help.rb +11 -0
  28. data/lib/lam/process/processor_deducer.rb +52 -0
  29. data/lib/lam/util.rb +13 -0
  30. data/lib/lam/version.rb +1 -1
  31. data/notes/design.md +43 -0
  32. data/notes/traveling-ruby-packaging-lam.md +26 -0
  33. data/notes/traveling-ruby-packaging.md +103 -0
  34. data/notes/traveling-ruby.md +82 -0
  35. data/spec/fixtures/project/.gitignore +3 -0
  36. data/spec/fixtures/project/.ruby-version +1 -0
  37. data/spec/fixtures/project/Gemfile +4 -0
  38. data/spec/fixtures/project/Gemfile.lock +35 -0
  39. data/spec/fixtures/project/app/controllers/application_controller.rb +2 -0
  40. data/spec/fixtures/project/app/controllers/posts_controller.rb +12 -0
  41. data/spec/fixtures/project/bin/lam +22 -0
  42. data/spec/fixtures/project/handlers/controllers/posts.js +156 -0
  43. data/spec/lib/cli_spec.rb +20 -0
  44. data/spec/lib/lam/base_controller_spec.rb +18 -0
  45. data/spec/lib/lam/build/lambda_deducer_spec.rb +20 -0
  46. data/spec/lib/lam/build_spec.rb +29 -0
  47. data/spec/lib/lam/process/controller_processor_spec.rb +22 -0
  48. data/spec/lib/lam/process/infer_spec.rb +24 -0
  49. data/spec/lib/lam/process_spec.rb +18 -0
  50. data/spec/spec_helper.rb +25 -0
  51. metadata +191 -21
  52. data/bin/console +0 -14
  53. data/bin/setup +0 -8
@@ -0,0 +1,22 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ # Figure out where this script is located.
6
+ PROJECTDIR="`dirname \"$0\"`"
7
+ PROJECTDIR="`cd \"$PROJECTDIR/..\" && pwd`"
8
+
9
+ # Tell Bundler where the Gemfile and gems are.
10
+ # IMPORTANT: the Gemfile must be in the same bundled/gems folder
11
+ export BUNDLE_GEMFILE="$PROJECTDIR/Gemfile"
12
+ unset BUNDLE_IGNORE_CONFIG
13
+
14
+ # Run the actual app using the bundled Ruby interpreter, with Bundler activated.
15
+ os=$(uname)
16
+ if [[ "$os" == 'Darwin' ]]; then
17
+ # used macosx ruby for development
18
+ exec lam "$@"
19
+ else
20
+ # used bundled ruby for Lambda
21
+ exec "$PROJECTDIR/bundled/ruby/bin/ruby" -rbundler/setup "$PROJECTDIR/bundled/gems/ruby/2.2.0/bin/lam" "$@"
22
+ fi
@@ -0,0 +1,156 @@
1
+ 'use strict';
2
+
3
+ // handler: handlers/controllers/posts.create
4
+ const spawn = require('child_process').spawn;
5
+
6
+ // Once hooked up to API Gateway can use the curl command to test:
7
+ // curl -s -X POST -d @event.json https://endpoint | jq .
8
+
9
+ // Filters out lines so only the error lines remain.
10
+ // Uses the "RubyError: " marker to find the starting error lines.
11
+ //
12
+ // Input: String
13
+ // random line
14
+ // RubyError: RuntimeError: error in submethod
15
+ // line1
16
+ // line2
17
+ // line3
18
+ //
19
+ // Output: String
20
+ // RubyError: RuntimeError: error in submethod
21
+ // line1
22
+ // line2
23
+ // line3
24
+ function filterErrorLines(text) {
25
+ var lines = text.split("\n")
26
+ var markerIndex = lines.findIndex(line => line.startsWith("RubyError: ") )
27
+ lines = lines.filter((line, index) => index >= markerIndex )
28
+ return lines.join("\n")
29
+ }
30
+
31
+ // Produces an Error object that displays in the AWS Lambda test console nicely.
32
+ // The backtrace are the ruby lines, not the nodejs shim error lines.
33
+ // The json payload in the Lambda console looks something like this:
34
+ //
35
+ // {
36
+ // "errorMessage": "RubyError: RuntimeError: error in submethod",
37
+ // "errorType": "RubyError",
38
+ // "stackTrace": [
39
+ // [
40
+ // "line1",
41
+ // "line2",
42
+ // "line3"
43
+ // ]
44
+ // ]
45
+ // }
46
+ //
47
+ // Input: String
48
+ // RubyError: RuntimeError: error in submethod
49
+ // line1
50
+ // line2
51
+ // line3
52
+ //
53
+ // Output: Error object
54
+ // { RubyError: RuntimeError: error in submethod
55
+ // line1
56
+ // line2
57
+ // line3 name: 'RubyError' }
58
+ function customError(text) {
59
+ text = filterErrorLines(text) // filter for error lines only
60
+ var lines = text.split("\n")
61
+ var message = lines[0]
62
+ var error = new Error(message)
63
+ error.name = message.split(':')[0]
64
+ error.stack = lines.slice(0, lines.length-1) // drop final empty line
65
+ .map(e => e.replace(/^\s+/g,'')) // trim leading whitespaces
66
+ .join("\n")
67
+ return error
68
+ }
69
+
70
+ module.exports.create = (event, context, callback) => {
71
+ // To test on mac, set these environment variables:
72
+ // export RUBY_BIN=$HOME/.rbenv/shims/ruby
73
+ // export PROCESSOR_COMMAND="lam process controller"
74
+
75
+ // Command: lam process controller [event] [context] [handler]
76
+ const processor_command = process.env.PROCESSOR_COMMAND || "lam"
77
+ var args = [
78
+ "process",
79
+ "controller",
80
+ JSON.stringify(event),
81
+ JSON.stringify(context),
82
+ "handlers/controllers/posts.create"
83
+ ]
84
+ // console.log("processor_command %o", processor_command)
85
+ // console.log("args %o", args)
86
+
87
+ var ruby = spawn("bin/lam", args);
88
+
89
+ // string concatation in javascript is faster than array concatation
90
+ // http://bit.ly/2gBMDs6
91
+ var stdout_buffer = ""; // stdout buffer
92
+ // In the processor_command we do NOT call puts directly and write to stdout
93
+ // because it will mess up the eventual response that we want API Gateway to
94
+ // process.
95
+ // The Lambda prints out function to whatever the return value the ruby method
96
+ ruby.stdout.on('data', function(data) {
97
+ // Not using console.log because it decorates output with a newline.
98
+ //
99
+ // Uncomment process.stdout.write to see stdout streamed for debugging.
100
+ // process.stdout.write(data)
101
+ stdout_buffer += data;
102
+ });
103
+
104
+ // react to potential errors
105
+ var stderr_buffer = "";
106
+ ruby.stderr.on('data', function(data) {
107
+ // not using console.error because it decorates output with a newline
108
+ stderr_buffer += data
109
+ process.stderr.write(data)
110
+ });
111
+
112
+ //finalize when ruby process is done.
113
+ ruby.on('close', function(exit_code) {
114
+ // http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-handler.html#nodejs-prog-model-handler-callback
115
+
116
+ // succcess
117
+ if (exit_code == 0) {
118
+ var result
119
+ try {
120
+ result = JSON.parse(stdout_buffer)
121
+ } catch(e) {
122
+ // if json cannot be parse assume simple text output intended
123
+ process.stderr.write("WARN: error parsing json, assuming plain text is desired.")
124
+ result = stdout_buffer
125
+ }
126
+ callback(null, result);
127
+
128
+ // callback(null, stdout_buffer);
129
+ } else {
130
+
131
+ // TODO: if this works, allow a way to not decorate the error in case
132
+ // it actually errors in javascript land
133
+ // Customize error object with ruby error info
134
+ var error = customError(stderr_buffer)
135
+ callback(error);
136
+ // console.log("error!")
137
+ }
138
+ });
139
+ }
140
+
141
+ // for local testing
142
+ if (process.platform == "darwin") {
143
+ // fake event and context
144
+ var event = {"hello": "world"}
145
+ // var event = {"body": {"hello": "world"}} // API Gateway wrapper structure
146
+ var context = {"fake": "context"}
147
+ module.exports.create(event, context, (error, message) => {
148
+ console.error("\nLOCAL TESTING OUTPUT")
149
+ if (error) {
150
+ console.error("error message: %o", error)
151
+ } else {
152
+ console.error("success message %o", message)
153
+ // console.log(JSON.stringify(message)) // stringify
154
+ }
155
+ })
156
+ }
@@ -0,0 +1,20 @@
1
+ require "spec_helper"
2
+
3
+ # to run specs with what"s remembered from vcr
4
+ # $ rake
5
+ #
6
+ # to run specs with new fresh data from aws api calls
7
+ # $ rake clean:vcr ; time rake
8
+ describe Lam::CLI do
9
+ before(:all) do
10
+ @args = "--noop"
11
+ end
12
+
13
+ describe "lam" do
14
+ it "build" do
15
+ out = execute("bin/lam build #{@args}")
16
+ # puts out
17
+ expect(out).to include("Building project")
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ require "spec_helper"
2
+
3
+ # For testing lambda_function_names
4
+ class FakeController < Lam::BaseController
5
+ def handler1; end
6
+ def handler2; end
7
+ end
8
+
9
+ describe Lam::BaseController do
10
+ describe "lambda_functions" do
11
+ it "should only list public user defined methods" do
12
+ controller = FakeController.new(nil, nil)
13
+ expect(controller.lambda_functions).to eq(
14
+ [:handler1, :handler2]
15
+ )
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ require_relative "../../../spec_helper"
2
+
3
+ describe Lam::Build::LambdaDeducer do
4
+ let(:deducer) do
5
+ Lam::Build::LambdaDeducer.new("app/controllers/posts_controller.rb")
6
+ end
7
+
8
+ describe "LambdaDeducer" do
9
+ it "deduces lambda js info" do
10
+ deducer.run
11
+ expect(deducer.handlers).to eq([
12
+ {
13
+ handler: "handlers/controllers/posts.create",
14
+ js_path: "handlers/controllers/posts.js",
15
+ js_method: "create"
16
+ }
17
+ ])
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ describe Lam::Build do
4
+ before(:each) do
5
+ FileUtils.rm_f("spec/fixtures/project/handlers/controllers/posts.js")
6
+ end
7
+ let(:build) do
8
+ Lam::Build.new(noop: true)
9
+ end
10
+
11
+ describe "Build" do
12
+ it "#handlers" do
13
+ expect(build.handlers).to eq([
14
+ {
15
+ handler: "handlers/controllers/posts.create",
16
+ js_path: "handlers/controllers/posts.js",
17
+ js_method: "create"
18
+ }
19
+ ])
20
+ end
21
+
22
+ it "builds handlers javascript files" do
23
+ build.build
24
+ file_exist = File.exist?("#{Lam.root}handlers/controllers/posts.js")
25
+ expect(file_exist).to be true
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,22 @@
1
+ require_relative "../../../spec_helper"
2
+
3
+ describe Lam::Process::ControllerProcessor do
4
+ before(:all) do
5
+ @event = { "we" => "love", "using" => "Lambda" }
6
+ @context = {"test" => "1"}
7
+ end
8
+ let(:processor) do
9
+ Lam::Process::ControllerProcessor.new(
10
+ JSON.dump(@event),
11
+ JSON.dump(@context),
12
+ 'handlers/controllers/posts.create' # handler
13
+ )
14
+ end
15
+
16
+ describe "ControllerProcessor" do
17
+ it "find public_instance_methods" do
18
+ processor.run
19
+ expect(processor.event).to eq(@event)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ require "spec_helper"
2
+
3
+ describe Lam::Process::ProcessorDeducer do
4
+ describe "ProcessorDeducer" do
5
+ let(:deducer) { Lam::Process::ProcessorDeducer.new(handle) }
6
+
7
+ context("controller") do
8
+ let(:handle) { "handlers/controllers/posts.create" }
9
+ it "deduces processor info" do
10
+ expect(deducer.controller[:path]).to include "app/controllers/posts_controller.rb"
11
+ expect(deducer.controller[:code]).to eq "PostsController.new(event, context).create"
12
+ end
13
+ end
14
+
15
+ context("function") do
16
+ let(:handle) { "handlers/functions/posts.create" }
17
+ it "deduces processor info" do
18
+ expect(deducer.function[:path]).to include "app/functions/posts.rb"
19
+ expect(deducer.function[:code]).to eq "create(event, context)"
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ require_relative "../../spec_helper"
2
+
3
+ describe Lam::Process do
4
+ before(:all) do
5
+ # @args = "--noop --project-root spec/fixtures/my_project"
6
+ @args = '\'{ "we" : "love", "using" : "Lambda" }\' \'{"test": "1"}\' "handlers/controllers/posts.create"'
7
+ end
8
+
9
+ describe "lam process" do
10
+ it "controller [event] [context] [handler]" do
11
+ out = execute("bin/lam process controller #{@args}")
12
+ # pp out # uncomment to debug
13
+ data = JSON.parse(out)
14
+ expect(data["statusCode"]).to eq 200
15
+ expect(data["body"]).to eq({"we"=>"love", "using"=>"Lambda"})
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ ENV["TEST"] = "1"
2
+ ENV["PROJECT_ROOT"] = "./spec/fixtures/project"
3
+
4
+ # require "simplecov"
5
+ # SimpleCov.start
6
+
7
+ require "pp"
8
+ require "byebug"
9
+ require "fileutils"
10
+
11
+ root = File.expand_path("../../", __FILE__)
12
+ require "#{root}/lib/lam"
13
+
14
+ module Helpers
15
+ def execute(cmd)
16
+ puts "Running: #{cmd}" if ENV["DEBUG"]
17
+ out = `#{cmd}`
18
+ puts out if ENV["DEBUG"]
19
+ out
20
+ end
21
+ end
22
+
23
+ RSpec.configure do |c|
24
+ c.include Helpers
25
+ end
metadata CHANGED
@@ -1,63 +1,217 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-10 00:00:00.000000000 Z
11
+ date: 2017-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hashie
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: colorize
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
13
69
  - !ruby/object:Gem::Dependency
14
70
  name: bundler
15
71
  requirement: !ruby/object:Gem::Requirement
16
72
  requirements:
17
- - - "~>"
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
18
88
  - !ruby/object:Gem::Version
19
- version: 1.16.a
89
+ version: '0'
20
90
  type: :development
21
91
  prerelease: false
22
92
  version_requirements: !ruby/object:Gem::Requirement
23
93
  requirements:
24
- - - "~>"
94
+ - - ">="
25
95
  - !ruby/object:Gem::Version
26
- version: 1.16.a
96
+ version: '0'
27
97
  - !ruby/object:Gem::Dependency
28
98
  name: rake
29
99
  requirement: !ruby/object:Gem::Requirement
30
100
  requirements:
31
- - - "~>"
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: guard-bundler
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: guard-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
32
144
  - !ruby/object:Gem::Version
33
- version: '10.0'
145
+ version: '0'
34
146
  type: :development
35
147
  prerelease: false
36
148
  version_requirements: !ruby/object:Gem::Requirement
37
149
  requirements:
38
- - - "~>"
150
+ - - ">="
39
151
  - !ruby/object:Gem::Version
40
- version: '10.0'
41
- description: Lambda tool
152
+ version: '0'
153
+ description: Test
42
154
  email:
43
155
  - tongueroo@gmail.com
44
- executables: []
156
+ executables:
157
+ - lam
158
+ - lamb
45
159
  extensions: []
46
160
  extra_rdoc_files: []
47
161
  files:
48
162
  - ".gitignore"
163
+ - ".rspec"
164
+ - ".ruby-version"
49
165
  - Gemfile
166
+ - Gemfile.lock
167
+ - Guardfile
168
+ - LICENSE.txt
50
169
  - README.md
51
170
  - Rakefile
52
- - bin/console
53
- - bin/setup
171
+ - bin/lam
172
+ - bin/lamb
54
173
  - lam.gemspec
55
174
  - lib/lam.rb
175
+ - lib/lam/base_controller.rb
176
+ - lib/lam/build.rb
177
+ - lib/lam/build/handler_generator.rb
178
+ - lib/lam/build/lambda_deducer.rb
179
+ - lib/lam/build/templates/handler.js
180
+ - lib/lam/build/traveling_ruby.rb
181
+ - lib/lam/cli.rb
182
+ - lib/lam/cli/help.rb
183
+ - lib/lam/command.rb
184
+ - lib/lam/process.rb
185
+ - lib/lam/process/base_processor.rb
186
+ - lib/lam/process/controller_processor.rb
187
+ - lib/lam/process/help.rb
188
+ - lib/lam/process/processor_deducer.rb
189
+ - lib/lam/util.rb
56
190
  - lib/lam/version.rb
191
+ - notes/design.md
192
+ - notes/traveling-ruby-packaging-lam.md
193
+ - notes/traveling-ruby-packaging.md
194
+ - notes/traveling-ruby.md
195
+ - spec/fixtures/project/.gitignore
196
+ - spec/fixtures/project/.ruby-version
197
+ - spec/fixtures/project/Gemfile
198
+ - spec/fixtures/project/Gemfile.lock
199
+ - spec/fixtures/project/app/controllers/application_controller.rb
200
+ - spec/fixtures/project/app/controllers/posts_controller.rb
201
+ - spec/fixtures/project/bin/lam
202
+ - spec/fixtures/project/handlers/controllers/posts.js
203
+ - spec/lib/cli_spec.rb
204
+ - spec/lib/lam/base_controller_spec.rb
205
+ - spec/lib/lam/build/lambda_deducer_spec.rb
206
+ - spec/lib/lam/build_spec.rb
207
+ - spec/lib/lam/process/controller_processor_spec.rb
208
+ - spec/lib/lam/process/infer_spec.rb
209
+ - spec/lib/lam/process_spec.rb
210
+ - spec/spec_helper.rb
57
211
  homepage: https://github.com/tongueroo/lam
58
- licenses: []
59
- metadata:
60
- allowed_push_host: https://rubygems.org
212
+ licenses:
213
+ - MIT
214
+ metadata: {}
61
215
  post_install_message:
62
216
  rdoc_options: []
63
217
  require_paths:
@@ -74,8 +228,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
228
  version: '0'
75
229
  requirements: []
76
230
  rubyforge_project:
77
- rubygems_version: 2.6.11
231
+ rubygems_version: 2.4.5
78
232
  signing_key:
79
233
  specification_version: 4
80
- summary: Lambda tool
81
- test_files: []
234
+ summary: Test
235
+ test_files:
236
+ - spec/fixtures/project/.gitignore
237
+ - spec/fixtures/project/.ruby-version
238
+ - spec/fixtures/project/Gemfile
239
+ - spec/fixtures/project/Gemfile.lock
240
+ - spec/fixtures/project/app/controllers/application_controller.rb
241
+ - spec/fixtures/project/app/controllers/posts_controller.rb
242
+ - spec/fixtures/project/bin/lam
243
+ - spec/fixtures/project/handlers/controllers/posts.js
244
+ - spec/lib/cli_spec.rb
245
+ - spec/lib/lam/base_controller_spec.rb
246
+ - spec/lib/lam/build/lambda_deducer_spec.rb
247
+ - spec/lib/lam/build_spec.rb
248
+ - spec/lib/lam/process/controller_processor_spec.rb
249
+ - spec/lib/lam/process/infer_spec.rb
250
+ - spec/lib/lam/process_spec.rb
251
+ - spec/spec_helper.rb