pdsdk 0.3.0

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
+ SHA256:
3
+ metadata.gz: e6e27cba82c9da8c61a3346c8cb3396095dc56f075fc0af2fdcd76e7e7b2d564
4
+ data.tar.gz: 0df1c31b925550e9632dc39c5c22e63925aadf8b8b5e51cd966ee77181395f03
5
+ SHA512:
6
+ metadata.gz: 667976438fad199ff9d465a79ee022d040c5f5a160fe45757870b9ba05e546490710d18aafdeae550aa02b0f0badeaa56786550ce0f2eee2cff58b85813bd2d2
7
+ data.tar.gz: 1f5cd72717b8223a87715a03c51bb2779b4edf3113c79e575b8c88e3266dd3292feaf7f65868d01d6a18651a0c04468edda39065008d8e39e68982d4b2b91b2d
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.6.1
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,34 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ pipedream (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.3)
10
+ keycutter (1.0.0)
11
+ rspec (3.8.0)
12
+ rspec-core (~> 3.8.0)
13
+ rspec-expectations (~> 3.8.0)
14
+ rspec-mocks (~> 3.8.0)
15
+ rspec-core (3.8.0)
16
+ rspec-support (~> 3.8.0)
17
+ rspec-expectations (3.8.3)
18
+ diff-lcs (>= 1.2.0, < 2.0)
19
+ rspec-support (~> 3.8.0)
20
+ rspec-mocks (3.8.0)
21
+ diff-lcs (>= 1.2.0, < 2.0)
22
+ rspec-support (~> 3.8.0)
23
+ rspec-support (3.8.0)
24
+
25
+ PLATFORMS
26
+ ruby
27
+
28
+ DEPENDENCIES
29
+ keycutter
30
+ pipedream!
31
+ rspec
32
+
33
+ BUNDLED WITH
34
+ 1.17.2
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # sdk:ruby
2
+
3
+ ```ruby
4
+ require "pdsdk"
5
+
6
+ Pdsdk.send_event(API_KEY, hello: "world")
7
+
8
+ # with exports
9
+ Pdsdk.send_event(API_KEY, {
10
+ hello: "world"
11
+ }, exports: {
12
+ event: { hello: "world!" },
13
+ other_export: "howdy",
14
+ })
15
+ ```
16
+
17
+ If you do not provide an `event` export it will be set to the `raw_event` (first argument). `event` and `raw_event` MUST be a hash or the SDK request will be invalid.
18
+
19
+ ## Development
20
+
21
+ Setup: https://help.github.com/en/articles/configuring-rubygems-for-use-with-github-package-registry#authenticating-to-github-package-registry
22
+
23
+ To cut new version (TODO automate this):
24
+
25
+ ```
26
+ # update lib/pdsdk/version.rb to $VERSION
27
+ gem build pdsdk.gemspec
28
+ gem push pdsdk-$VERSION.gem
29
+ ```
data/lib/pdsdk/base.rb ADDED
@@ -0,0 +1,83 @@
1
+ require "pdsdk/version"
2
+ require "pdsdk/logger"
3
+ require "json"
4
+
5
+ module Pdsdk
6
+ class Error < StandardError
7
+ end
8
+
9
+ # TODO share these strings in some json config file across all SDKs?
10
+ ENV_KEY_PREFIX = "PD_"
11
+ ENV_SECRET_KEY_KEY = "#{ENV_KEY_PREFIX}SECRET_KEY"
12
+
13
+ class << self
14
+ def logger
15
+ @logger ||= Logger.new(STDOUT)
16
+ end
17
+
18
+ def logger=(v)
19
+ @logger = v
20
+ end
21
+
22
+ def bootstrap!
23
+ logger.info "bootstrapping..."
24
+
25
+ @secret_key = ENV[ENV_SECRET_KEY_KEY]
26
+ if !@secret_key
27
+ logger.warn "no $#{ENV_SECRET_KEY_KEY} detected, will not sign payloads"
28
+ end
29
+ end
30
+
31
+ # XXX self.send_message for string and becomes { message } ?
32
+ def send_event(api_key, raw_event, opts={})
33
+ hostname = ENV["PD_SDK_HOST"] || "sdk.m.pipedream.net"
34
+ proto = ENV["PD_SDK_PROTO"] || "https"
35
+ event = opts[:exports] || {}
36
+ event[:raw_event] = raw_event
37
+ if opts[:deployment]
38
+ _uri = "#{proto}://#{hostname}/pipelines/#{api_key}/deployments/#{opts[:deployment]}/events"
39
+ else
40
+ _uri = "#{proto}://#{hostname}/pipelines/#{api_key}/events"
41
+ end
42
+ uri = URI(_uri)
43
+ use_ssl = uri.scheme == "https"
44
+ @https ||= {}
45
+ # TODO ensure reconnects if client disconnects
46
+ @https[_uri] = http ||= Net::HTTP.start(uri.host, uri.port, use_ssl: use_ssl) # XXX assume https
47
+ logger.info "going to send event: #{event}" # TODO remove
48
+ payload = event.to_json
49
+ headers = {
50
+ "user-agent" => "pipedream-sdk:ruby/1",
51
+ "content-type" => "application/json",
52
+ "x-pd-sdk-version" => Pdsdk::VERSION,
53
+ }
54
+ headers["x-pd-sig"] = "sha256=#{OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret_key, payload)}" if @secret_key
55
+ req = Net::HTTP::Post.new(uri.request_uri, headers)
56
+ req.body = payload
57
+ resp = http.request(req)
58
+ logger.info "received response: #{resp}" # TODO remove
59
+ # XXX check we get { "success": "ok" } back?
60
+ resp.code.to_i
61
+ end
62
+
63
+ def load_metadata(metadata_path, merge_data)
64
+ metadata = {}
65
+ begin
66
+ metadata = JSON.parse(File.read(metadata_path))
67
+ rescue
68
+ # assume the service is not METADATA'ed, hence LOCAL development
69
+ branch = `git rev-parse --abbrev-ref HEAD`.strip rescue nil
70
+ metadata[:branch] = branch if !branch.blank?
71
+ git_ref = `git rev-parse HEAD`.strip rescue nil
72
+ metadata[:git_ref] = git_ref if !git_ref.blank?
73
+ end
74
+ metadata[:pdsdk_version] = Pdsdk::VERSION
75
+ metadata[:started_at] = Time.now.to_f
76
+ metadata[:name] = ENV["PD_METADATA_NAME"] || `hostname`.strip
77
+ metadata.merge!(merge_data) # XXX deep?
78
+ metadata
79
+ end
80
+ end
81
+ end
82
+
83
+ Pdsdk.bootstrap!
@@ -0,0 +1,4 @@
1
+ module Pdsdk
2
+ class Base
3
+ end
4
+ end
@@ -0,0 +1,18 @@
1
+ require "logger"
2
+
3
+ module Pdsdk
4
+ class Logger < ::Logger
5
+ LOG_PREFIX = "** [pdsdk] ".freeze
6
+ PROGNAME = "pdsdk"
7
+
8
+ def initialize(*)
9
+ super
10
+ @level = ::Logger::INFO
11
+ original_formatter = ::Logger::Formatter.new
12
+ @default_formatter = proc do |severity, datetime, _progname, msg|
13
+ msg = "#{LOG_PREFIX}#{msg}"
14
+ original_formatter.call(severity, datetime, PROGNAME, msg)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,3 @@
1
+ module Pdsdk
2
+ VERSION = "0.3.0"
3
+ end
data/lib/pdsdk.rb ADDED
@@ -0,0 +1 @@
1
+ require "pdsdk/base"
data/pdsdk.gemspec ADDED
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+ require "pdsdk/version"
3
+
4
+ Gem::Specification.new do |g|
5
+ g.name = "pdsdk"
6
+ g.version = Pdsdk::VERSION
7
+ g.date = "2019-10-14"
8
+ g.summary = g.description = "Pipedream SDK"
9
+ g.authors = ["Pipedream Team"]
10
+ g.email = "engineering@pipedream.com"
11
+ g.files = `git ls-files`.split("\n")
12
+ g.homepage = "https://github.com/PipedreamHQ/sdk/blob/master/ruby"
13
+ g.license = "MIT"
14
+ g.add_development_dependency "keycutter"
15
+ g.metadata = {"github_repo" => "ssh://github.com/PipedreamHQ/sdk"}
16
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pdsdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Pipedream Team
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: keycutter
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Pipedream SDK
28
+ email: engineering@pipedream.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - ".gitignore"
34
+ - ".ruby-version"
35
+ - Gemfile
36
+ - Gemfile.lock
37
+ - README.md
38
+ - lib/pdsdk.rb
39
+ - lib/pdsdk/base.rb
40
+ - lib/pdsdk/clients/base.rb
41
+ - lib/pdsdk/logger.rb
42
+ - lib/pdsdk/version.rb
43
+ - pdsdk.gemspec
44
+ homepage: https://github.com/PipedreamHQ/sdk/blob/master/ruby
45
+ licenses:
46
+ - MIT
47
+ metadata:
48
+ github_repo: ssh://github.com/PipedreamHQ/sdk
49
+ post_install_message:
50
+ rdoc_options: []
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubygems_version: 3.0.1
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: Pipedream SDK
68
+ test_files: []