tck-lambdas 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 991043c924a86317c83c10887ef66bd2b6ea375a
4
+ data.tar.gz: fec64010314f12a60d4008c24bf9d008c75db400
5
+ SHA512:
6
+ metadata.gz: c9eb6303bd232a315ace43c9114c5f1c0239b38ee83d65506aef637692e38e8f0121775c9b161c5e614fa47e4211b0e8dcc161b02fa31e9819b6bfd71f391815
7
+ data.tar.gz: 8fb8108486f0d6f9b344b4f4c544c42f7985c6601f4bb6dfb5a74e186f11d2fbcd129ebcd61bba1c088f2c73fb23544ff4c21dcc7cbaca29a45f51750d234997
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 The Cocktail Experience, S.L.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,107 @@
1
+ # Tck::Lambdas
2
+
3
+ _Tck::Lambdas_ es una _gema_ que facilita la utilización de una _AWS Lambda_ en el contexto de un proyecto _Ruby_ introduciendo en el mismo tareas de _Rake_ que realizan las **órdenes AWS** que debemos ejecutar habitualmente desde la _línea de comandos_.
4
+
5
+ Por ejemplo, si tenemos una _función lambda_ llamada **shine** y queremos subir una mejora en su código tendríamos que, por un lado generar el _zip_ con dicha mejora, y por otro actualizar el mismo en _AWS Lambda_ (con la función ``aws lambda update-function-code`` o a través de su consola web).
6
+
7
+ Si hemos instalado la gema _Tck::Lambdas_ en nuestro proyecto y hemos indicado en que el mismo hace uso de la _lambda shine_ (bundle exec ``tck-lambdas use shine``), lanzaríamos la siguiente orden para crear el _zip_:
8
+
9
+ $ rake lambdas:shine:create_zip
10
+
11
+ Y esta para subir el mismo a _AWS Lambda_ (para _"desplegar"_ la mejora):
12
+
13
+ $ rake lambdas:shine:upload_zip
14
+
15
+ Si sólo tenemos esa _lambda_, creando el _alias_ necesario en nuestro _Rakefile_ (``task deploy_lambda: "lambdas:shine:upload_zip"``) podríamos lanzar simplemente:
16
+
17
+ $ rake deploy_lambda
18
+
19
+ Usando una _lambda_
20
+ -------------------
21
+
22
+ Vamos a meter un _formulario de contacto_ en nuestro **proyecto Amazing** y queremos usar la *lambda contact_form*. Instalamos la _gema Tck::Lambdas_ y le indicamos que nuestro proyecto hace uso de la _lambda_ llamada *contact_form*:
23
+
24
+ $ echo "gem 'tck-lambdas'" >> Gemfile # Metemos la gema en nuestro Gemfile...
25
+ $ bundle # - la instalamos y...
26
+ $ bundle exec tck-lambdas use contact_form # - y usamos la lambda:
27
+ => lambdas/contact_form/ created with the lambda sources & tests.
28
+ => task/lambdas/contact_form.rake created with common tasks.
29
+ => .lambdas.yml created with the contact_form lambda conf.
30
+
31
+ Tal y como nos avisa ha creado, entre otras cosas, el fichero *.lambdas.yml* con la configuración para nuestra función _lambda_ con el siguiente contenido:
32
+
33
+ contact_form:
34
+ function-name: tck_project_contact_form
35
+ handler: tck_project_contact_form.handler
36
+ timeout: 30
37
+ memory-size: 128
38
+ runtime: nodejs4.3
39
+ role: lambda_contact_form_role
40
+
41
+ Todos los valores por defecto deberían ser válidos excepto el nombre de la función (_function-name_), su manejador (_handler_), y su role.
42
+
43
+ En el nombre del la función y su manejador tenemos que sustituir *tck_project* por el nombre de nuestro proyecto (quedándonos con *amazing_contact_form* y *amazing_contact_form.handler* respectivamente).
44
+
45
+ El role tenemos que sustituirlo por el que corresponda de los que nos devuelve AWS:
46
+
47
+ aws iam list-roles --query "Roles[].[RoleName,Arn]"
48
+
49
+ Con dichos cambios en nuestro *.lambdas.yml* ejecutamos la siguiente tarea de _rake_:
50
+
51
+ $ rake lambdas:contact_form:create_lambda
52
+
53
+ Dicha orden nos creará, **además de la función _lambda_** necesaria para el entorno de producción, **otra con el mismo nombre terminada en *_test* para la ejecución de sus tests** (en nuestro ejemplo si lanzamos ``aws lambda list-functions`` deberíamos tener dos nuevas funciones llamadas *amazing_contact_form* y *amazing_contact_form_test*).
54
+
55
+ Por lo tanto, si todo ha ido bien deberíamos poder lanzar los tests de nuestra _lambda_ con éxito:
56
+
57
+ $ rake lambdas:contact_form:test
58
+
59
+ Modificando una _lambda_
60
+ ------------------------
61
+
62
+ El código de la _lambda_ lo tenemos dentro de *lambdas/contact_form/source* y para añadir una mejora al mismo debemos seguir los siguientes pasos de cara a desplegarla:
63
+
64
+ 1. Escribir la mejora
65
+ 2. Crear el _zip_:
66
+ ``rake lambdas:contact_form:create_zip``
67
+ 3. Subir el nuevo _zip_ a la _lambda_ de tests:
68
+ ``rake lambdas:contact_form:upload_test``
69
+ 4. Lanzar los tests:
70
+ ``rake lambdas:contact_form:test``
71
+ (...volviendo al primer paso hasta que pasen)
72
+ 5. Actualizar la _lambda_ de producción:
73
+ ``rake lambdas:contact_form:upload_zip``
74
+
75
+ Los pasos 2, 3 y 4 son implementados por la tarea **:build_lambda**, lo que nos permite reducir los pasos necesarios a 3:
76
+
77
+ 1. Escribir la mejora
78
+ 2. Lanzar el _build_:
79
+ ``rake lambdas:contact_form:build_lambda``
80
+ (...hasta que pasen los tests)
81
+ 3. Actualizar la _lambda_ de producción:
82
+ ``rake lambdas:contact_form:upload_zip``
83
+
84
+ ## Installation
85
+
86
+ Add this line to your application's Gemfile:
87
+
88
+ ```ruby
89
+ gem 'tck-lambdas'
90
+ ```
91
+
92
+ And then execute:
93
+
94
+ $ bundle
95
+
96
+ Or install it yourself as:
97
+
98
+ $ gem install tck-lambdas
99
+
100
+ ## Contributing
101
+
102
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/tck-lambdas. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
103
+
104
+
105
+ ## License
106
+
107
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/exe/tck-lambdas ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require "tck/lambdas"
3
+ Tck::Lambdas::CLI.start(ARGV)
@@ -0,0 +1,2 @@
1
+ require "tck/lambdas/version"
2
+ require "tck/lambdas/cli"
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ group [:development, :test] do
4
+ gem "rake"
5
+ gem "tck-lambdas"
6
+ end
7
+
8
+ group :test do
9
+ gem "minitest"
10
+ end
@@ -0,0 +1,12 @@
1
+ # Copyright 2016 The Cocktail Experience, S.L.
2
+ require "rake/testtask"
3
+
4
+ require_relative "lib/tck/lambdas/aws_function"
5
+ load "lib/tasks/lambdas.rake"
6
+
7
+ namespace :lambdas do
8
+ Rake::TestTask.new(:test) do |t|
9
+ t.libs = %w(lib)
10
+ t.pattern = "lambdas/test.rb"
11
+ end
12
+ end
@@ -0,0 +1,74 @@
1
+ # Copyright (c) The Cocktail Experience S.L. (2016)
2
+ require "yaml"
3
+ require "tmpdir"
4
+
5
+ module Tck
6
+ module Lambdas
7
+ class AwsFunction
8
+ attr_reader :name
9
+ attr_reader :conf
10
+
11
+ def self.tmpdir
12
+ @tmpdir ||= Dir.tmpdir + "/tck_lambdas"
13
+ end
14
+
15
+ def self.yaml
16
+ @yaml ||= File.exist?('.lambdas.yml') ? YAML.load_file('.lambdas.yml') : nil
17
+ end
18
+
19
+ def self.clean_tmps!
20
+ FileUtils.mkdir_p tmpdir
21
+ FileUtils.rm_rf Dir.glob("#{tmpdir}/*")
22
+ end
23
+
24
+ def initialize(name)
25
+ @name = name.to_s
26
+ @conf = yaml[@name]
27
+ end
28
+
29
+ def test_function_name
30
+ "#{@conf['function-name']}_test"
31
+ end
32
+
33
+ def method_missing(method, *args, &block)
34
+ m = method.to_s
35
+ @conf[m] || @conf[m.gsub("_","-")] || super
36
+ end
37
+
38
+ def dir
39
+ @dir ||= "lambdas/#{name}"
40
+ end
41
+
42
+ def tmpdir
43
+ self.class.tmpdir
44
+ end
45
+
46
+ def zip_file
47
+ @zip_file ||= "#{tmpdir}/#{function_name}.zip"
48
+ end
49
+
50
+ def invoke_events_in_directory(event_type)
51
+ puts "lambdas/#{name}/#{event_type}/*.json"
52
+ Dir["lambdas/#{name}/test/#{event_type}/*.json"].each do |json_file|
53
+ filename = File.basename(json_file)
54
+ output = "#{tmpdir}/#{filename}.output"
55
+ invoke_lambda json_file, output
56
+ yield filename, File.read(output)
57
+ end
58
+ end
59
+
60
+ def invoke_lambda(payload_file, output_file)
61
+ cmd = "aws lambda invoke " <<
62
+ "--function-name #{@conf['function-name']}_test " <<
63
+ "--payload file://#{payload_file} #{output_file}"
64
+ puts "$ #{cmd}"
65
+ `#{cmd}`
66
+ end
67
+
68
+ def yaml
69
+ self.class.yaml
70
+ end
71
+ end
72
+ end
73
+ end
74
+
@@ -0,0 +1,44 @@
1
+ # Copyright (c) The Cocktail Experience S.L. (2016)
2
+ require "thor"
3
+ require_relative "aws_function"
4
+
5
+ module Tck
6
+ module Lambdas
7
+ class CLI < Thor
8
+ include Thor::Actions
9
+
10
+ def self.source_root
11
+ File.dirname(__FILE__)
12
+ end
13
+
14
+ desc "list", "List currently used functions in AWS Lambda."
15
+ def list
16
+ if yaml = Tck::Lambdas::AwsFunction.yaml
17
+ yaml.each do |lambda_name, properties|
18
+ puts " - #{properties["function-name"]} (cloned from '#{lambda_name}')"
19
+ end
20
+ else
21
+ puts "No lambdas found in this directory... :("
22
+ end
23
+ end
24
+
25
+ desc "use NAME", "Use the AWS Lambda function known as NAME at The Cocktail."
26
+ def use(name)
27
+ puts "#{CLI.source_root}/#{name}"
28
+ if File.directory?("#{CLI.source_root}/#{name}")
29
+ @lambda = Tck::Lambdas::AwsFunction.new(name)
30
+
31
+ copy_file "Rakefile"
32
+ copy_file "Gemfile"
33
+ template "templates/lambdas.yml.erb", ".lambdas.yml"
34
+ template "templates/lambdas.rake.erb", "lib/tasks/lambdas.rake"
35
+ copy_file "aws_function.rb", "lib/tck/lambdas/aws_function.rb"
36
+ copy_file "test.rb", "lambdas/test.rb"
37
+ directory name, "lambdas/#{name}"
38
+ else
39
+ raise "Sorry, '#{name}' is not a valid lambda name."
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,13 @@
1
+ /* Copyright 2016 The Cocktail Experience, S.L. */
2
+ module.exports = {
3
+ domains: {
4
+ 'the-cocktail.com': {
5
+ emailAddress: "Contact Form Lambda <tests@the-cocktail.com>",
6
+ emailSubject: "New contact submitted in the contact form"
7
+ },
8
+ 'thecocktailventures.com': {
9
+ emailAddress: "TckVentures Website <ventures@the-cocktail.com>",
10
+ emailSubject: "New contact with The Cocktail Ventures"
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,58 @@
1
+ /* Copyright 2016 The Cocktail Experience, S.L. */
2
+ var AWS = require('aws-sdk');
3
+ var ses = new AWS.SES({apiVersion: '2010-12-01'});
4
+ var conf = require('./conf');
5
+ var utils = require('./utils');
6
+
7
+ exports.handler = function(event, context) {
8
+ console.log('Received event:', JSON.stringify(event, null, 2));
9
+
10
+ if (!event.domain) { context.fail('domain: empty'); return; }
11
+
12
+ var domain = conf.domains[event.domain];
13
+
14
+ if (!domain) { context.fail('domain: not found'); return; }
15
+
16
+ console.log(domain.emailAddress);
17
+
18
+ if (!event.email) { context.fail('email: empty'); return; }
19
+ if (!event.message || event.message === '') { context.fail('message: empty'); return; }
20
+
21
+ var email = unescape(event.email);
22
+ if (!utils.validateEmail(email)) { context.fail('email: format'); return; }
23
+
24
+ var messageParts = [];
25
+
26
+ if (event.name) messageParts.push("Name: " + event.name);
27
+ if (event.company) messageParts.push("Company: " + event.company);
28
+ if (event.phone) messageParts.push("Phone: " + event.phone);
29
+ messageParts.push("Email: " + event.email);
30
+ messageParts.push("\r\n" + event.message);
31
+
32
+ var params = {
33
+ Destination: {
34
+ ToAddresses: [ domain.emailAddress ],
35
+ BccAddresses: [ "fernando.gs@gmail.com" ]
36
+ },
37
+ Message: {
38
+ Body: { Text: { Data: messageParts.join("\r\n"), Charset: 'UTF-8' } },
39
+ Subject: { Data: domain.emailSubject, Charset: 'UTF-8' }
40
+ },
41
+ Source: domain.emailAddress,
42
+ ReplyToAddresses: [ email ]
43
+ };
44
+
45
+ if ((event.cc) && (event.cc == "1")) {
46
+ params.Destination.CcAddresses = [ event.email ];
47
+ }
48
+
49
+ ses.sendEmail(params, function(err, data) {
50
+ if (err) {
51
+ console.log(err, err.stack);
52
+ context.fail(err);
53
+ } else {
54
+ console.log(data);
55
+ context.succeed(0);
56
+ }
57
+ });
58
+ };
@@ -0,0 +1,21 @@
1
+ /* Copyright 2016 The Cocktail Experience, S.L. */
2
+ module.exports = {
3
+ validateEmail: function(email) {
4
+ var tester = /^[-!#$%&'*+\/0-9=?A-Z^_a-z{|}~](\.?[-!#$%&'*+/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-?\.?[a-zA-Z0-9])*(\.[a-zA-Z](-?[a-zA-Z0-9])*)+$/;
5
+ if (!email) return false;
6
+
7
+ if(email.length>254) return false;
8
+
9
+ var valid = tester.test(email);
10
+ if(!valid) return false;
11
+
12
+ // Further checking of some things regex can't handle
13
+ var parts = email.split("@");
14
+ if(parts[0].length>64) return false;
15
+
16
+ var domainParts = parts[1].split(".");
17
+ if(domainParts.some(function(part) { return part.length>63; })) return false;
18
+
19
+ return true;
20
+ }
21
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "Probando Nueva Lambda",
3
+ "company": "TckExperience",
4
+ "phone": "699433244",
5
+ "email": "fernando.gs@gmail.com",
6
+ "message": "Disculpa las molestias"
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "domain": "tck.com",
3
+ "name": "Probando Nueva Lambda",
4
+ "company": "TckExperience",
5
+ "phone": "699433244",
6
+ "email": "fernando.gs@gmail.com",
7
+ "message": "Disculpa las molestias"
8
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "domain": "the-cocktail.com",
3
+ "name": "Probando Nueva Lambda",
4
+ "company": "TckExperience",
5
+ "phone": "699433244",
6
+ "message": "Disculpa las molestias"
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "domain": "the-cocktail.com",
3
+ "name": "Probando Nueva Lambda",
4
+ "company": "TckExperience",
5
+ "phone": "699433244",
6
+ "email": "email@the-cocktail",
7
+ "message": "Disculpa las molestias"
8
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "domain": "the-cocktail.com",
3
+ "name": "Probando Nueva Lambda",
4
+ "company": "TckExperience",
5
+ "phone": "699433244",
6
+ "email": "fernando.gs@gmail.com"
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "domain": "the-cocktail.com",
3
+ "name": "Probando Nueva Lambda",
4
+ "company": "TckExperience",
5
+ "phone": "600123456",
6
+ "email": "tcklambdas@gmail.com",
7
+ "message": "Disculpa las molestias"
8
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "domain": "the-cocktail.com",
3
+ "name": "Probando Nueva Lambda",
4
+ "company": "TckExperience",
5
+ "phone": "6123456789",
6
+ "email": "tcklambdas@gmail.com",
7
+ "cc": "1",
8
+ "message": "Disculpa las molestias"
9
+ }
@@ -0,0 +1,54 @@
1
+ namespace :lambdas do
2
+ namespace :<%= @lambda.name %> do
3
+ task test: "lambdas:test"
4
+
5
+ desc "Update the <%= @lambda.name %> lambda code (creating & uploading the ZIP file)"
6
+ task upload_zip: :create_zip do
7
+ tck_lambda = Tck::Lambdas::AwsFunction.new(:<%= @lambda.name %>)
8
+
9
+ params = "--function-name #{tck_lambda.function_name} " <<
10
+ "--zip-file fileb://#{tck_lambda.zip_file}"
11
+
12
+ puts `aws lambda update-function-code #{params}`
13
+ end
14
+
15
+ desc "Generate lambda's ZIP file w/ source/* code"
16
+ task :create_zip do
17
+ tck_lambda = Tck::Lambdas::AwsFunction.new(:<%= @lambda.name %>)
18
+ puts "Creating #{tck_lambda.zip_file}..."
19
+ FileUtils.rm(tck_lambda.zip_file, force: true)
20
+ cmd = "cd #{tck_lambda.dir}/source &&\\\n" <<
21
+ "mv #{tck_lambda.name}.js #{tck_lambda.function_name}.js &&\\\n" <<
22
+ "zip -r #{tck_lambda.zip_file} * &&\\\n" <<
23
+ "mv #{tck_lambda.function_name}.js #{tck_lambda.name}.js"
24
+ puts cmd
25
+ puts `#{cmd}`
26
+ end
27
+
28
+ desc "Create the <%= @lambda.name %> lambda function in AWS Lambda w/ .lambda.yml."
29
+ task create_lambda: :create_zip do
30
+ tck_lambda = Tck::Lambdas::AwsFunction.new(:<%= @lambda.name %>)
31
+ puts "\n#{tck_lambda.function_name} & #{tck_lambda.test_function_name} lambdas will be created with:"
32
+ puts "\n #{tck_lambda.zip_file}\n\n...using the following parameters read from current .lambdas.yml:"
33
+ tck_lambda.conf.each do |prop, value|
34
+ puts " - #{prop}: #{value}"
35
+ end
36
+ []
37
+ printf "\nContinue?? Press [Ctrl+C] to cancel."
38
+ STDIN.gets
39
+ [tck_lambda.function_name, tck_lambda.test_function_name].each do |function_name|
40
+ params = "--function-name #{function_name} " <<
41
+ "--handler #{tck_lambda.handler} " <<
42
+ "--runtime #{tck_lambda.runtime} " <<
43
+ "--role #{tck_lambda.role} " <<
44
+ "--memory-size #{tck_lambda.memory_size} " <<
45
+ "--timeout #{tck_lambda.timeout} " <<
46
+ "--description \"#{tck_lambda.description}\" " <<
47
+ "--zip-file fileb://#{tck_lambda.zip_file}"
48
+ cmd = "aws lambda create-function #{params}"
49
+ puts cmd
50
+ puts `#{cmd}`
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,9 @@
1
+ # The Cockatil's AWS Lambda functions configuration
2
+ <%= @lambda.name %>:
3
+ function-name: project_name_<%= @lambda.name %>
4
+ handler: project_name_<%= @lambda.name %>.handler
5
+ timeout: 30
6
+ memory-size: 128
7
+ runtime: nodejs4.3
8
+ role: lambda_<%= @lambda.name %>_role
9
+ description: Project-Name instance of the Tck's <%= @lambda.name %> lambda
@@ -0,0 +1,31 @@
1
+ # Copyright 2016 The Cocktail Experience, S.L.
2
+ require "minitest/autorun"
3
+ require "json"
4
+ require_relative "../lib/tck/lambdas/aws_function"
5
+
6
+ Tck::Lambdas::AwsFunction.clean_tmps!
7
+
8
+ Dir['lambdas/*/'].each do |directory|
9
+ lambda_name = directory[8..-2]
10
+
11
+ describe "The Cocktail #{lambda_name} lambda" do
12
+ it "returns 0 when the payload has the right params" do
13
+ aws_lambda = Tck::Lambdas::AwsFunction.new(lambda_name)
14
+ puts "\nTesting #{aws_lambda.function_name} lambda SUCCESS scenarios:"
15
+ aws_lambda.invoke_events_in_directory("succeeded") do |filename, output|
16
+ expect(output).must_equal "0"
17
+ puts "OK!"
18
+ end
19
+ end
20
+
21
+ it "returns the right error for each wrong payload" do
22
+ aws_lambda = Tck::Lambdas::AwsFunction.new(lambda_name)
23
+ puts "\nTesting #{aws_lambda.function_name} lambda FAILURE scenarios:"
24
+ aws_lambda.invoke_events_in_directory("failed") do |filename, output|
25
+ error_words = JSON.parse(output)["errorMessage"].scan(/(\w+)/)
26
+ expect(error_words.join("_").+(".json")).must_equal filename
27
+ puts "OK!"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,5 @@
1
+ module Tck
2
+ module Lambdas
3
+ VERSION = "0.1.1"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tck-lambdas
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Fernando Garcia Samblas
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-07-07 00:00:00.000000000 Z
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: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.12'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.12'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
69
+ description: A Ruby's Rake wrapper over the *aws lambda* CLI (aws-cli/1.10.37).
70
+ email:
71
+ - fernando.garcia@the-cocktail.com
72
+ executables:
73
+ - tck-lambdas
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - LICENSE
78
+ - README.md
79
+ - exe/tck-lambdas
80
+ - lib/tck/lambdas.rb
81
+ - lib/tck/lambdas/Gemfile
82
+ - lib/tck/lambdas/Rakefile
83
+ - lib/tck/lambdas/aws_function.rb
84
+ - lib/tck/lambdas/cli.rb
85
+ - lib/tck/lambdas/contact_form/source/conf.js
86
+ - lib/tck/lambdas/contact_form/source/contact_form.js
87
+ - lib/tck/lambdas/contact_form/source/utils.js
88
+ - lib/tck/lambdas/contact_form/test/failed/domain_empty.json
89
+ - lib/tck/lambdas/contact_form/test/failed/domain_not_found.json
90
+ - lib/tck/lambdas/contact_form/test/failed/email_empty.json
91
+ - lib/tck/lambdas/contact_form/test/failed/email_format.json
92
+ - lib/tck/lambdas/contact_form/test/failed/message_empty.json
93
+ - lib/tck/lambdas/contact_form/test/succeeded/basic.json
94
+ - lib/tck/lambdas/contact_form/test/succeeded/with_cc.json
95
+ - lib/tck/lambdas/templates/lambdas.rake.erb
96
+ - lib/tck/lambdas/templates/lambdas.yml.erb
97
+ - lib/tck/lambdas/test.rb
98
+ - lib/tck/lambdas/version.rb
99
+ homepage: https://github.com/the-cocktail/tck-lambdas
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.5.1
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: The Cocktail's AWS Lambda functions manager.
123
+ test_files: []