lam 0.1.0 → 0.1.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.
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