fdk 0.0.1 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b7a564f14b0f61260a330e08debfe705ccc5843b
4
- data.tar.gz: aed28341f97120c579414d2e73007b9f57ce8188
3
+ metadata.gz: 889ac354ba75007c3c66504348de355f1e9df299
4
+ data.tar.gz: 57a526258372f03fb5277e6f0b8614879a729d5a
5
5
  SHA512:
6
- metadata.gz: 7fd389a7f528f957169587477e5db8a547dd992aa964667c99782af011f41a0dc2e68cb10f45ed437c295a482a3d60bbf8c13c76bb36b20c03f0aba3210e43dc
7
- data.tar.gz: 973be6fd2a97c2a1315044de4a06363641a6fb8b492c331c48aa2c0730efbf0c0fde2b9a7dca9b5ccc155997617efa6f2939685f9befe1b15549bc1686a416cd
6
+ metadata.gz: 0e34f13c1f3296853605b3331d9154904dce1dbfc3c7c12fe8256246a9e7715d7b340cbb8ba1877a0c714544f03a3ddc0cc7998f109589760604d16610b4f59c
7
+ data.tar.gz: 37a51d0e2fc38dd1aa6974f445bd4aa85f8165827f52084d27930ab24a83bedb694e4e691e45382c0e5f0296897cea462fa4e80501db6f300db51c4d6a8191d3
data/README.md CHANGED
@@ -36,16 +36,40 @@ FDK.call(myfunc)
36
36
  ```ruby
37
37
  require 'fdk'
38
38
 
39
+ def myfunc(context, input)
40
+ return {message: "Hello World!"}
41
+ end
42
+
43
+ FDK.handle(:myfunc)
44
+
39
45
  def call(context, input)
40
46
  # Do some work here
41
- STDERR.puts "input: " + input
42
- return "I got: " + input + "!"
47
+ return "Hello " + input + "!"
43
48
  end
44
49
  ```
45
50
 
46
- ## Example in root dir
51
+ ## Running the example that is in the root directory of this repo
52
+
53
+ ```sh
54
+ echo '{"name":"coolio"}' | fn run
55
+ ```
47
56
 
48
57
  ```sh
49
- echo '{"yo":"dawg"}' | fn run
58
+ fn deploy --app myapp --local && echo '{"name":"coolio"}' | fn call myapp /fdk-ruby
50
59
  ```
51
60
 
61
+ Change to hot:
62
+
63
+ Update func.yaml: `format: json`
64
+
65
+ ```sh
66
+ fn deploy --app myapp --local && echo '{"name":"coolio"}' | fn call myapp /fdk-ruby
67
+ ```
68
+
69
+ ## Compare cold and hot
70
+
71
+ Run
72
+
73
+ ```sh
74
+ ruby loop.rb
75
+ ```
@@ -1,10 +1,16 @@
1
1
  module FDK
2
+
3
+ # Config looks up values in the env vars
4
+ class Config
5
+ def [](key)
6
+ return ENV[key.upcase]
7
+ end
8
+ end
9
+
2
10
  class Context
3
11
 
4
- # fixed
5
- attr_accessor :app_name, :path, :format, :memory, :type, :config
6
- # per request
7
- attr_accessor :request_url, :call_id, :headers
12
+ # TODO: Rethink FN_PATH, if it's a reference to the route, maybe it should be FN_ROUTE? eg: if it's a dynamic path, this env var would
13
+ # show the route's path (ie: route identifier), eg: /users/:name, not the actual path.
8
14
 
9
15
  # FN_REQUEST_URL - the full URL for the request (parsing example)
10
16
  # FN_APP_NAME - the name of the application that matched this route, eg: myapp
@@ -18,23 +24,29 @@ module FDK
18
24
  # $X - any configuration values you've set for the Application or the Route. Replace X with the upper cased name of the config variable you set. Ex: minio_secret=secret will be exposed via MINIO_SECRET env var.
19
25
  # FN_PARAM_$Y
20
26
 
21
- def initialize()
22
- config = {}
23
- ENV.each_pair do |k,v|
24
- puts "#{k}: #{v}"
25
- if k.start_with? "FN_"
26
- k2 = k[3..-1].downcase
27
- self.instance_variable_set("@#{k2}".to_sym, v)
28
- next
29
- end
30
- config[k] = v
31
- end
32
- headers = {}
27
+ attr_reader :payload, :config
28
+
29
+ def initialize(payload)
30
+ @payload = payload
33
31
  end
34
32
 
35
- # This returns the per request data, such as headers, request_id, etc
36
- def [](key)
37
- return config[key]
33
+ def config
34
+ return @config if @config
35
+ @config = Config.new
36
+ return @config
38
37
  end
38
+
39
+ def call_id
40
+ payload['call_id']
41
+ end
42
+
43
+ def content_type
44
+ payload['content_type']
45
+ end
46
+
47
+ def protocol
48
+ payload['protocol']
49
+ end
50
+
39
51
  end
40
52
  end
@@ -2,24 +2,79 @@
2
2
  # Executes it with input
3
3
  # Responds with output
4
4
 
5
+ require 'json'
6
+
5
7
  module FDK
6
- def self.included(base)
7
- puts "MODULE FDK INCLUDED"
8
- p base
9
- end
10
8
 
11
9
  def self.handle(func)
12
- puts "Calling func: " + func.to_s
13
- if ENV['FN_FORMAT'] == "json"
14
- # TODO:
10
+ # STDERR.puts `env`
11
+ format = ENV['FN_FORMAT']
12
+ if format == "json"
13
+ obs = ""
14
+ endbracket=false
15
+ STDIN.each do |line|
16
+ # STDERR.puts "LINE: --#{line}--"
17
+ # STDERR.flush
18
+ ls = line.strip
19
+ STDERR.puts "ls: #{ls}"
20
+ if ls == "}"
21
+ STDERR.puts "endbracket true"
22
+ endbracket=true
23
+ elsif ls == "" && endbracket
24
+ # TODO: this isn't very robust, probably needs to be better :/
25
+ STDERR.puts "OBJECT: #{obs}"
26
+ payload = JSON.parse(obs)
27
+ # STDERR.puts "payload: #{payload.inspect}"
28
+ c = Context.new(payload)
29
+ # STDERR.puts "context: " + c.inspect
30
+ # STDERR.flush
31
+ body = payload['body']
32
+ if c.content_type == 'application/json'
33
+ body = JSON.parse(body)
34
+ end
35
+ # TODO: begin/rescue so we can respond with proper error response and code
36
+ s = FDK.single_event(func, c, body)
37
+ response = {
38
+ headers: {
39
+ 'Content-Type' => 'application/json'
40
+ },
41
+ 'status_code' => 200,
42
+ body: s.to_json,
43
+ }
44
+ STDOUT.puts response.to_json
45
+ STDOUT.puts
46
+ STDOUT.flush
47
+ obs = ""
48
+ next
49
+ else
50
+ endbracket = false
51
+ end
52
+ obs += line
53
+ end
54
+ elsif format == "default"
55
+ # TODO: check if content type json, and if so, parse it before passing it in
56
+ body = STDIN.read
57
+ payload = {}
58
+ payload['call_id'] = ENV['FN_CALL_ID']
59
+ payload['content_type'] = ENV['FN_HEADER_Content_Type']
60
+ payload['protocol'] = {
61
+ 'type' => 'http',
62
+ 'request_url' => ENV['FN_REQUEST_URL']
63
+ }
64
+ # STDERR.puts "payload: #{payload}"
65
+ c = Context.new(payload)
66
+ if c.content_type == "application/json"
67
+ # STDERR.puts "parsing json"
68
+ body = JSON.parse(body)
69
+ end
70
+ puts FDK.single_event(func, c, body).to_json
15
71
  else
16
- c = Context.new()
17
- payload = STDIN.read
18
- FDK.single_event(func, c, payload)
72
+ raise "Format #{format} not supported in Ruby FDK."
19
73
  end
20
74
  end
75
+
21
76
  def self.single_event(func, c, i)
22
- o = send func, c, i
23
- puts o
77
+ s = send func, c, i
78
+ return s
24
79
  end
25
80
  end
@@ -1,5 +1,5 @@
1
1
  module FDK
2
2
 
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.5"
4
4
 
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Travis Reeder
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-29 00:00:00.000000000 Z
11
+ date: 2017-11-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -63,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  version: '0'
64
64
  requirements: []
65
65
  rubyforge_project:
66
- rubygems_version: 2.6.13
66
+ rubygems_version: 2.6.14
67
67
  signing_key:
68
68
  specification_version: 4
69
69
  summary: Ruby FDK for Fn Project