tck-lambdas 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.
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: []