hecks-serverless 0.1.7 → 0.1.8
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 +4 -4
- data/bin/hecks_serverless +49 -0
- data/lib/Domain +32 -0
- data/{resources/pizzas.js → lib/resources/handler.js.tt} +2 -2
- data/lib/resources/serverless.yml +9 -0
- data/lib/serverless.yml +33 -0
- metadata +23 -7
- data/bin/hecks-serverless +0 -10
- data/resources/serverless.yml +0 -115
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ac8cbc90f1f1adb0009c5c1a4e45cfda63b2bc1
|
4
|
+
data.tar.gz: fecb81abb24c150b0543c49824ec71f38e103736
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c5327bdd87f7830921335efa7da67681986a4dc1933f546f8dc4fa4e8e2c1faf9dbf7b5c119e298f849ee11455b3db7031c2a35325953a45358ff6fc0f2ef6c2
|
7
|
+
data.tar.gz: d247149a1cb24f3a8b2a3a1e3323684d18f15aaa0feed9b3159331d9247576c8e10b36a065e08fc92fc0738165153673ff70c7bba2da2571ba878d6e3a419fd6
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'hecks'
|
3
|
+
load(File.dirname(__FILE__) + '/../lib/Domain')
|
4
|
+
|
5
|
+
module Hecks
|
6
|
+
class Serverless
|
7
|
+
class CLI < Thor
|
8
|
+
include Thor::Actions
|
9
|
+
package_name 'hecks_serverless'
|
10
|
+
|
11
|
+
def self.source_root
|
12
|
+
File.dirname(__FILE__) + '/../lib/resources'
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "generate", "generate config for running a function on lambda"
|
16
|
+
def generate
|
17
|
+
copy_file "serverless.yml"
|
18
|
+
domain_modules = DOMAIN.domain_modules.values
|
19
|
+
|
20
|
+
text = domain_modules.flat_map do |dmodule|
|
21
|
+
@domain_module = dmodule
|
22
|
+
template "handler.js", "serverless/#{dmodule.name.downcase}.js"
|
23
|
+
['create', 'read', 'update', 'delete'].flat_map do |function|
|
24
|
+
line(dmodule, function)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
insert_into_file "serverless.yml",
|
29
|
+
"\n" + text.join("\n"),
|
30
|
+
:after => "functions:"
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def domain_module
|
36
|
+
@domain_module.name.downcase
|
37
|
+
end
|
38
|
+
|
39
|
+
def line(domain_module, function)
|
40
|
+
<<-LINE
|
41
|
+
#{domain_module.name.downcase}.#{function}:
|
42
|
+
handler: serverless/#{domain_module.name.downcase}.#{function}
|
43
|
+
LINE
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
Hecks::Serverless::CLI.start(ARGV)
|
data/lib/Domain
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# New builder format (drop the types!):
|
4
|
+
# Pizzas::Pizza(:name, :description)
|
5
|
+
# *Toppings
|
6
|
+
# named_by :Chef
|
7
|
+
# Pizzas::Chef(:name)
|
8
|
+
#
|
9
|
+
# Orders::Order
|
10
|
+
# \*LineItem(:pizza_name, :quantity, :price)
|
11
|
+
# \Pizzas::Pizza
|
12
|
+
# NOTE: Domain should generate english sentences
|
13
|
+
# A pizza has many toppings, a name, and a description
|
14
|
+
# A pizza is named by a chef
|
15
|
+
# A chef has a name
|
16
|
+
# An Order has many line items
|
17
|
+
# A Line Item has a a pizza, pizza_name, a quantity and a price
|
18
|
+
|
19
|
+
|
20
|
+
DOMAIN ||= Hecks::Domain::DomainBuilder.build "pizza_builder" do |pizza_builder|
|
21
|
+
pizza_builder.module 'Pizzas' do |pizzas|
|
22
|
+
pizzas.head("Pizza").attributes('name:string', 'description:string', 'toppings:[topping]', 'chef:chef')
|
23
|
+
pizzas.value("Topping").attributes('name:string')
|
24
|
+
pizzas.value("Chef").attributes('name:string')
|
25
|
+
end
|
26
|
+
|
27
|
+
pizza_builder.module 'Orders' do |orders|
|
28
|
+
orders.head("Order").attributes('line_items:[line_item]')
|
29
|
+
orders.value("LineItem").attributes('pizza_name:string', 'quantity:integer', 'price:currency', "pizza:pizzas::pizza")
|
30
|
+
orders.reference("pizzas::pizza")
|
31
|
+
end
|
32
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
const exec = require('child_process').exec
|
3
3
|
|
4
4
|
module.exports.create = (event, context, callback) => {
|
5
|
-
var command =
|
5
|
+
var command = "package/osx/app -m <%= domain_module %> -c create -d '" + JSON.stringify(event) + "'"
|
6
6
|
|
7
7
|
exec(command, (err, stdout, stderr) => {
|
8
8
|
if (err) { console.error(err); return }
|
@@ -10,7 +10,7 @@ module.exports.create = (event, context, callback) => {
|
|
10
10
|
console.error(stderr)
|
11
11
|
const response = {
|
12
12
|
statusCode: Object.keys(result.errors).length > 0 ? 500 : 200,
|
13
|
-
body: { message: 'create command called on the
|
13
|
+
body: { message: 'create command called on the <%= domain_module %> module', input: event, result: result, errors: result['errors']}
|
14
14
|
};
|
15
15
|
callback(null, response);
|
16
16
|
});
|
data/lib/serverless.yml
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
service: pizza-builder
|
2
|
+
provider:
|
3
|
+
name: aws
|
4
|
+
runtime: nodejs4.3
|
5
|
+
exclude:
|
6
|
+
- spec/**
|
7
|
+
- tmp/**
|
8
|
+
- package/osx/**
|
9
|
+
functions:
|
10
|
+
pizzas.create:
|
11
|
+
handler: serverless/pizzas.create
|
12
|
+
|
13
|
+
pizzas.read:
|
14
|
+
handler: serverless/pizzas.read
|
15
|
+
|
16
|
+
pizzas.update:
|
17
|
+
handler: serverless/pizzas.update
|
18
|
+
|
19
|
+
pizzas.delete:
|
20
|
+
handler: serverless/pizzas.delete
|
21
|
+
|
22
|
+
orders.create:
|
23
|
+
handler: serverless/orders.create
|
24
|
+
|
25
|
+
orders.read:
|
26
|
+
handler: serverless/orders.read
|
27
|
+
|
28
|
+
orders.update:
|
29
|
+
handler: serverless/orders.update
|
30
|
+
|
31
|
+
orders.delete:
|
32
|
+
handler: serverless/orders.delete
|
33
|
+
|
metadata
CHANGED
@@ -1,25 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hecks-serverless
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Young
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
12
|
-
dependencies:
|
11
|
+
date: 2017-04-14 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.19'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.19'
|
13
27
|
description: Hecks Serverless
|
14
28
|
email: chris@example.com
|
15
29
|
executables:
|
16
|
-
-
|
30
|
+
- hecks_serverless
|
17
31
|
extensions: []
|
18
32
|
extra_rdoc_files: []
|
19
33
|
files:
|
20
|
-
- bin/
|
21
|
-
-
|
22
|
-
- resources/
|
34
|
+
- bin/hecks_serverless
|
35
|
+
- lib/Domain
|
36
|
+
- lib/resources/handler.js.tt
|
37
|
+
- lib/resources/serverless.yml
|
38
|
+
- lib/serverless.yml
|
23
39
|
homepage: https://github.com/chrisyoung/hecks-serverless
|
24
40
|
licenses:
|
25
41
|
- MIT
|
data/bin/hecks-serverless
DELETED
data/resources/serverless.yml
DELETED
@@ -1,115 +0,0 @@
|
|
1
|
-
# Welcome to Serverless!
|
2
|
-
#
|
3
|
-
# This file is the main config file for your service.
|
4
|
-
# It's very minimal at this point and uses default values.
|
5
|
-
# You can always add more config options for more control.
|
6
|
-
# We've included some commented out config examples here.
|
7
|
-
# Just uncomment any of them to get that config option.
|
8
|
-
#
|
9
|
-
# For full config options, check the docs:
|
10
|
-
# docs.serverless.com
|
11
|
-
#
|
12
|
-
# Happy Coding!
|
13
|
-
|
14
|
-
service: aws-nodejs # NOTE: update this with your service name
|
15
|
-
|
16
|
-
# You can pin your service to only deploy with a specific Serverless version
|
17
|
-
# Check out our docs for more details
|
18
|
-
# frameworkVersion: "=X.X.X"
|
19
|
-
|
20
|
-
provider:
|
21
|
-
name: aws
|
22
|
-
runtime: nodejs4.3
|
23
|
-
|
24
|
-
# you can overwrite defaults here
|
25
|
-
# stage: dev
|
26
|
-
# region: us-east-1
|
27
|
-
|
28
|
-
# you can add statements to the Lambda function's IAM Role here
|
29
|
-
# iamRoleStatements:
|
30
|
-
# - Effect: "Allow"
|
31
|
-
# Action:
|
32
|
-
# - "s3:ListBucket"
|
33
|
-
# Resource: { "Fn::Join" : ["", ["arn:aws:s3:::", { "Ref" : "ServerlessDeploymentBucket" } ] ] }
|
34
|
-
# - Effect: "Allow"
|
35
|
-
# Action:
|
36
|
-
# - "s3:PutObject"
|
37
|
-
# Resource:
|
38
|
-
# Fn::Join:
|
39
|
-
# - ""
|
40
|
-
# - - "arn:aws:s3:::"
|
41
|
-
# - "Ref" : "ServerlessDeploymentBucket"
|
42
|
-
|
43
|
-
# you can define service wide environment variables here
|
44
|
-
# environment:
|
45
|
-
# variable1: value1
|
46
|
-
|
47
|
-
# you can add packaging information here
|
48
|
-
#package:
|
49
|
-
# include:
|
50
|
-
# - include-me.js
|
51
|
-
# - include-me-dir/**
|
52
|
-
exclude:
|
53
|
-
# - exclude-me.js
|
54
|
-
- spec/**
|
55
|
-
- tmp/**
|
56
|
-
- package/osx/**
|
57
|
-
functions:
|
58
|
-
# PIZZAS
|
59
|
-
pizzas.create:
|
60
|
-
handler: serverless/pizzas.create
|
61
|
-
pizzas.read:
|
62
|
-
handler: serverless/pizzas.read
|
63
|
-
pizzas.update:
|
64
|
-
handler: serverless/pizzas.update
|
65
|
-
pizzas.delete:
|
66
|
-
handler: serverless/pizzas.delete
|
67
|
-
# ORDERS
|
68
|
-
orders.create:
|
69
|
-
handler: serverless/orders.create
|
70
|
-
orders.read:
|
71
|
-
handler: serverless/orders.read
|
72
|
-
orders.update:
|
73
|
-
handler: serverless/orders.update
|
74
|
-
orders.delete:
|
75
|
-
handler: serverless/orders.delete
|
76
|
-
|
77
|
-
# The following are a few example events you can configure
|
78
|
-
# NOTE: Please make sure to change your handler code to work with those events
|
79
|
-
# Check the event documentation for details
|
80
|
-
# events:
|
81
|
-
# - http:
|
82
|
-
# path: users/create
|
83
|
-
# method: get
|
84
|
-
# - s3: ${env:BUCKET}
|
85
|
-
# - schedule: rate(10 minutes)
|
86
|
-
# - sns: greeter-topic
|
87
|
-
# - stream: arn:aws:dynamodb:region:XXXXXX:table/foo/stream/1970-01-01T00:00:00.000
|
88
|
-
# - alexaSkill
|
89
|
-
# - iot:
|
90
|
-
# sql: "SELECT * FROM 'some_topic'"
|
91
|
-
# - cloudwatchEvent:
|
92
|
-
# event:
|
93
|
-
# source:
|
94
|
-
# - "aws.ec2"
|
95
|
-
# detail-type:
|
96
|
-
# - "EC2 Instance State-change Notification"
|
97
|
-
# detail:
|
98
|
-
# state:
|
99
|
-
# - pending
|
100
|
-
|
101
|
-
# Define function environment variables here
|
102
|
-
# environment:
|
103
|
-
# variable2: value2
|
104
|
-
|
105
|
-
# you can add CloudFormation resource templates here
|
106
|
-
#resources:
|
107
|
-
# Resources:
|
108
|
-
# NewResource:
|
109
|
-
# Type: AWS::S3::Bucket
|
110
|
-
# Properties:
|
111
|
-
# BucketName: my-new-bucket
|
112
|
-
# Outputs:
|
113
|
-
# NewOutput:
|
114
|
-
# Description: "Description for the output"
|
115
|
-
# Value: "Some output value"
|