zeus_ruby 0.4.3

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: 3873b938b7c7c99cb598df8216deda6e3113545ebb7bd6115a2e0d9b3b981cf6
4
+ data.tar.gz: 46cc6dc477c2c5438e6da37f28e98a40144e440026cc9b994fefe8eec46c73f7
5
+ SHA512:
6
+ metadata.gz: d55296fb48980e4edbf2335891773c4afa77f09c93131513e155c1ac5687ac4c848aa92c220bcc1e7b6a0566ce742088222d919f2eb00c3758282cc82ce07027
7
+ data.tar.gz: b68355a4e882ed7a7c5025e940fb1e66eb5b207797eb8a238727d172f192871a7a05ce45ce92b3d8ead0f14020fa502b018882728c1a80711b1ba0cf8784a7f4
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in zeus-sdk.gemspec
4
+ gemspec
5
+
6
+ gem "rake", "~> 12.0"
7
+ gem "rspec", "~> 3.0"
8
+ gem "activesupport"
9
+ gem "jwt"
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # Zeus
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/zeus/sdk`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'zeus-ruby'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle install
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install zeus-sdk
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/zeus-sdk.
36
+
37
+
38
+ ## License
39
+
40
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/lib/zeus.rb ADDED
@@ -0,0 +1,24 @@
1
+ require "active_support"
2
+
3
+ module Zeus
4
+ class Error < StandardError; end
5
+
6
+ require "zeus/version"
7
+ require "zeus/env"
8
+
9
+ module V1
10
+ module Client
11
+ require "zeus/v1/client/service_base"
12
+ require "zeus/v1/client/core"
13
+ require "zeus/v1/client/secrets"
14
+ require "zeus/v1/client/auth"
15
+ require "zeus/v1/client/assets"
16
+ require "zeus/v1/client/content"
17
+ require "zeus/v1/client/multiplayer"
18
+ # models
19
+ require "zeus/v1/client/models/auth/user"
20
+ require "zeus/v1/client/models/multiplayer/document"
21
+ require "zeus/v1/client/models/multiplayer/node"
22
+ end
23
+ end
24
+ end
data/lib/zeus/env.rb ADDED
@@ -0,0 +1,4 @@
1
+ module Zeus
2
+ ENVIRONMENT = ENV['RACK_ENV'] || ENV['RAILS_ENV']
3
+ IS_PRODUCTION = ENVIRONMENT == "production"
4
+ end
@@ -0,0 +1,11 @@
1
+ require "httparty"
2
+
3
+ module Zeus::V1::Client
4
+ class Assets
5
+ SUBDOMAIN = "assets"
6
+ LOCAL_PORT = 3004
7
+
8
+ include HTTParty
9
+ include ServiceBase
10
+ end
11
+ end
@@ -0,0 +1,60 @@
1
+ require "httparty"
2
+ require "jwt"
3
+
4
+ module Zeus::V1::Client
5
+ class Auth
6
+ SUBDOMAIN = "auth"
7
+ LOCAL_PORT = 3003
8
+
9
+ include HTTParty
10
+ include ServiceBase
11
+
12
+ def list_users(query)
13
+ resp = self.class.get("/api/v1/users", query: query, headers: self.get_headers).parsed_response
14
+ if resp["success"] == true
15
+ return resp["objects"].map {|u| User.new(u) }
16
+ else
17
+ return nil
18
+ end
19
+ end
20
+
21
+ def signup_with_email_password(user)
22
+ resp = self.class.post("/api/v1/users", body: {user: user}.to_json, headers: self.get_headers).parsed_response
23
+ end
24
+
25
+ def get_users(query)
26
+ resp = self.class.get("/api/v1/users", query: query, headers: self.get_headers).parsed_response
27
+
28
+ if resp["success"] == true
29
+ return resp["objects"].map {|u| User.new(u) }
30
+ else
31
+ return nil
32
+ end
33
+ end
34
+
35
+ def get_user(id)
36
+ resp = self.class.get("/api/v1/users/#{id}", headers: self.get_headers).parsed_response
37
+ if resp["success"] == true
38
+ return User.new(resp["object"])
39
+ else
40
+ return nil
41
+ end
42
+ end
43
+ end
44
+
45
+ class AuthJWT
46
+ class << self
47
+ def encode(payload, exp = 6.months.from_now)
48
+ payload[:exp] = exp.to_i
49
+ JWT.encode(payload, ENV["ZEUS_AUTH_SECRET_KEY"])
50
+ end
51
+
52
+ def decode(token)
53
+ body = JWT.decode(token, ENV["ZEUS_AUTH_SECRET_KEY"])[0]
54
+ HashWithIndifferentAccess.new body
55
+ rescue
56
+ nil
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,12 @@
1
+ require "httparty"
2
+
3
+ module Zeus::V1::Client
4
+ class Content
5
+ SUBDOMAIN = "content"
6
+ LOCAL_PORT = 3005
7
+
8
+ include HTTParty
9
+ include ServiceBase
10
+ end
11
+ end
12
+
@@ -0,0 +1,30 @@
1
+ require "httparty"
2
+
3
+ module Zeus::V1::Client
4
+ class Core
5
+ include HTTParty
6
+
7
+ def self.get_env
8
+ @env ||= ENV['RACK_ENV'] || ENV['RAILS_ENV']
9
+ end
10
+
11
+ def self.get_base_uri
12
+ base_uri = "https://api.zeusdev.io" if self.get_env == "production"
13
+ base_uri = "http://localhost:3000" if self.get_env != "production"
14
+
15
+ base_uri
16
+ end
17
+
18
+ base_uri get_base_uri
19
+ format :json
20
+ follow_redirects true
21
+
22
+ def initialize(auth_token)
23
+ self.class.headers "Authorization" => "Bearer #{auth_token}"
24
+ end
25
+
26
+ def check_domain(domain)
27
+ self.class.get("/domains/exists", query: {domain: domain})
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,34 @@
1
+ module Zeus::V1::Client
2
+ class User
3
+ attr_accessor :id, :name, :email, :email_verified, :first_name, :last_name, :created_at, :updated_at
4
+
5
+ def initialize(user)
6
+ return if user.blank?
7
+ self.id = user["id"] if user.has_key?("id")
8
+ self.name = user["name"] if user.has_key?("name")
9
+ self.first_name = user["first_name"] if user.has_key?("first_name")
10
+ self.last_name = user["last_name"] if user.has_key?("last_name")
11
+ self.email = user["email"] if user.has_key?("email")
12
+ self.email_verified = user["email_verified"] if user.has_key?("email_verified")
13
+ self.created_at = user["created_at"] if user.has_key?("created_at")
14
+ self.updated_at = user["updated_at"] if user.has_key?("updated_at")
15
+ end
16
+
17
+ def as_json(options={})
18
+ {
19
+ id: self.id,
20
+ name: self.name,
21
+ first_name: self.first_name,
22
+ last_name: self.last_name,
23
+ email: self.email,
24
+ email_verified: self.email_verified,
25
+ created_at: self.created_at,
26
+ updated_at: self.updated_at
27
+ }
28
+ end
29
+
30
+ def to_json(options={})
31
+ self.as_json(options).to_json
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ module Zeus::V1::Client
2
+ class Document
3
+ attr_accessor :id, :name, :created_at, :updated_at
4
+
5
+ def initialize(doc)
6
+ self.id = doc["id"]
7
+ self.name = doc["name"]
8
+ self.created_at = doc["created_at"]
9
+ self.updated_at = doc["updated_at"]
10
+ end
11
+
12
+ def as_json(options={})
13
+ return {
14
+ id: self.id,
15
+ name: self.name,
16
+ created_at: self.created_at,
17
+ updated_at: self.updated_at
18
+ }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ module Zeus::V1::Client
2
+ class Node
3
+ attr_accessor :id, :document_id, :name, :type, :properties, :created_at, :updated_at
4
+
5
+ def initialize(node)
6
+ self.id = node["id"]
7
+ self.name = node["name"]
8
+ self.type = node["type"]
9
+ self.properties = node["properties"]
10
+ self.created_at = node["created_at"]
11
+ self.updated_at = node["updated_at"]
12
+ end
13
+
14
+ def as_json(options={})
15
+ return {
16
+ id: self.id,
17
+ name: self.name,
18
+ type: self.type,
19
+ properties: self.properties,
20
+ created_at: self.created_at,
21
+ updated_at: self.updated_at
22
+ }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,128 @@
1
+ require "httparty"
2
+
3
+ module Zeus::V1::Client
4
+ class Multiplayer
5
+ SUBDOMAIN = "multiplayer"
6
+ LOCAL_PORT = 3006
7
+
8
+ include HTTParty
9
+ include ServiceBase
10
+
11
+ def list_documents(query)
12
+ resp = self.class.get("/api/v1/documents", query: query, headers: self.get_headers).parsed_response
13
+ if resp["success"] == true
14
+ return resp["objects"].map {|d| Document.new(d) }
15
+ else
16
+ return nil
17
+ end
18
+ end
19
+
20
+ def create_document(document)
21
+ resp = self.class.post("/api/v1/documents", body: {document: document}.to_json, headers: self.get_headers).parsed_response
22
+ if resp["success"] == true
23
+ return Document.new(resp["object"])
24
+ else
25
+ return nil
26
+ end
27
+ end
28
+
29
+ def get_document(id)
30
+ resp = self.class.get("/api/v1/documents/#{id}", headers: self.get_headers).parsed_response
31
+ if resp["success"] == true
32
+ return Document.new(resp["object"])
33
+ else
34
+ return nil
35
+ end
36
+ end
37
+
38
+ def update_document(id, document)
39
+ resp = self.class.put("/api/v1/documents/#{id}", body: {document: document}.to_json, headers: self.get_headers).parsed_response
40
+ if resp["success"] == true
41
+ return Document.new(resp["object"])
42
+ else
43
+ return nil
44
+ end
45
+ end
46
+
47
+ def destroy_document(id)
48
+ resp = self.class.delete("/api/v1/documents/#{id}", headers: self.get_headers).parsed_response
49
+ if resp["success"] == true
50
+ return Document.new(resp["object"])
51
+ else
52
+ return nil
53
+ end
54
+ end
55
+
56
+ def list_nodes(query)
57
+ resp = self.class.get("/api/v1/nodes", query: query, headers: self.get_headers).parsed_response
58
+ if resp["success"] == true
59
+ return resp["objects"].map {|d| Node.new(d) }
60
+ else
61
+ return nil
62
+ end
63
+ end
64
+
65
+ def create_node(node)
66
+
67
+ puts("*"*200)
68
+ puts("create_node")
69
+ puts(node.inspect)
70
+ puts("*"*200)
71
+ resp = self.class.post("/api/v1/nodes", body: {node: node}.to_json, headers: self.get_headers).parsed_response
72
+ if resp["success"] == true
73
+ puts("resp")
74
+ puts(resp["object"].inspect)
75
+ return Node.new(resp["object"])
76
+ else
77
+ return nil
78
+ end
79
+ end
80
+
81
+ def get_node(id)
82
+ resp = self.class.get("/api/v1/nodes/#{id}", headers: self.get_headers).parsed_response
83
+ if resp["success"] == true
84
+ return Node.new(resp["object"])
85
+ else
86
+ return nil
87
+ end
88
+ end
89
+
90
+ def update_node(id, node)
91
+ resp = self.class.put("/api/v1/nodes/#{id}", body: {node: node}.to_json, headers: self.get_headers).parsed_response
92
+ if resp["success"] == true
93
+ return Node.new(resp["object"])
94
+ else
95
+ return nil
96
+ end
97
+ end
98
+
99
+ def destroy_node(id)
100
+ resp = self.class.delete("/api/v1/nodes/#{id}", headers: self.get_headers).parsed_response
101
+ if resp["success"] == true
102
+ return Node.new(resp["object"])
103
+ else
104
+ return nil
105
+ end
106
+ end
107
+ end
108
+
109
+ class MultiplayerJWT
110
+ class << self
111
+ def encode(secret_key, payload, exp = 6.months.from_now)
112
+ # payload[:exp] = exp.to_i
113
+ payload = payload.to_json if payload.class != String
114
+ JWT.encode(payload, secret_key)
115
+ end
116
+
117
+ def decode(secret_key, token)
118
+ decoded = JWT.decode(token, secret_key)
119
+ body = decoded[0]
120
+ HashWithIndifferentAccess.new JSON.parse(body)
121
+ rescue Exception => e
122
+ puts("ERROR DECODING TOKEN")
123
+ puts(e.inspect)
124
+ nil
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,27 @@
1
+ require "httparty"
2
+
3
+ module Zeus::V1::Client
4
+ class Secrets
5
+ SUBDOMAIN = "secrets"
6
+ LOCAL_PORT = 3002
7
+
8
+ include HTTParty
9
+ include ServiceBase
10
+
11
+ def list_secrets(query)
12
+ self.class.get("/api/v1/secrets", query: query, headers: self.get_headers)
13
+ end
14
+
15
+ def get_secret(key)
16
+ self.class.get("/api/v1/secrets/#{key}", headers: self.get_headers)
17
+ end
18
+
19
+ def set_secret(key, value)
20
+ self.class.post("/api/v1/secrets", body: {secret: {key: key, value: value}}, headers: self.get_headers)
21
+ end
22
+
23
+ def delete_secret(key)
24
+ self.class.post("/api/v1/secrets/#{key}", headers: self.get_headers)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,60 @@
1
+ require "httparty"
2
+ require "json"
3
+
4
+ module Zeus::V1::Client
5
+ module ServiceBase
6
+ def self.included(klass)
7
+ klass.format :json
8
+ klass.follow_redirects true
9
+ klass.base_uri Zeus::IS_PRODUCTION ? "https://#{klass::SUBDOMAIN}.zeusdev.io" : "http://localhost:#{klass::LOCAL_PORT}"
10
+ end
11
+
12
+ attr_accessor :zeus_auth_key, :public_key, :secret_key, :project_id, :scope, :environment_id
13
+
14
+ def initialize(params)
15
+ if params[:zeus_auth_key] == nil && params[:public_key] == nil && params[:secret_key] == nil
16
+ throw "Must initialize with public_key and secret_key"
17
+ end
18
+
19
+ @zeus_auth_key = params[:zeus_auth_key]
20
+ @public_key = params[:public_key]
21
+ @secret_key = params[:secret_key]
22
+ @project_id = params[:project_id]
23
+ @scope = params[:scope]
24
+ @environment_id = params[:environment_id]
25
+ end
26
+
27
+ def get_headers
28
+ headers = {
29
+ 'Content-Type' => 'application/json'
30
+ }
31
+
32
+ headers["X-ZEUS-AUTH-KEY"] = self.zeus_auth_key if self.zeus_auth_key.present?
33
+
34
+ headers["X-ZEUS-SERVICE-PUBLIC-KEY"] = self.public_key if self.public_key.present?
35
+ headers["X-ZEUS-SERVICE-SECRET-KEY"] = self.secret_key if self.secret_key.present?
36
+
37
+ headers["X-ZEUS-SCOPE"] = self.scope if self.scope.present?
38
+ headers["X-ZEUS-ENVIRONMENT-ID"] = self.environment_id if self.environment_id.present?
39
+
40
+ headers
41
+ end
42
+
43
+ def get_project_environments(ids)
44
+ self.class.get("/api/v1/project_environments", query: {ids: ids}, headers: self.get_headers)
45
+ end
46
+
47
+ def get_project_environment(id)
48
+ self.class.get("/api/v1/project_environments/#{id}", headers: self.get_headers)
49
+ end
50
+
51
+ def create_project_environment(project_environment)
52
+ self.class.post("/api/v1/project_environments", body: {project_environment: project_environment}, headers: self.get_headers)
53
+ end
54
+
55
+ def destroy_project_environment(id)
56
+ self.class.delete("/api/v1/project_environments/#{id}", body: {}, headers: self.get_headers)
57
+ end
58
+ end
59
+ end
60
+
@@ -0,0 +1,3 @@
1
+ module Zeus
2
+ VERSION = "0.4.3"
3
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zeus_ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.3
5
+ platform: ruby
6
+ authors:
7
+ - Eric Campbell
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-03-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.18.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.18.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 6.1.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 6.1.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: jwt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.2.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.2.2
55
+ description: Ruby SDK for Zeus APIs
56
+ email:
57
+ - ericcampbell59@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - Gemfile
63
+ - README.md
64
+ - Rakefile
65
+ - lib/zeus.rb
66
+ - lib/zeus/env.rb
67
+ - lib/zeus/v1/client/assets.rb
68
+ - lib/zeus/v1/client/auth.rb
69
+ - lib/zeus/v1/client/content.rb
70
+ - lib/zeus/v1/client/core.rb
71
+ - lib/zeus/v1/client/models/auth/user.rb
72
+ - lib/zeus/v1/client/models/multiplayer/document.rb
73
+ - lib/zeus/v1/client/models/multiplayer/node.rb
74
+ - lib/zeus/v1/client/multiplayer.rb
75
+ - lib/zeus/v1/client/secrets.rb
76
+ - lib/zeus/v1/client/service_base.rb
77
+ - lib/zeus/version.rb
78
+ homepage: https://www.zeusdev.io
79
+ licenses:
80
+ - MIT
81
+ metadata:
82
+ homepage_uri: https://www.zeusdev.io
83
+ source_code_uri: https://github.com/ZeusHQ/zeus-ruby
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 2.3.0
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubygems_version: 3.2.3
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: Ruby SDK for Zeus APIs
103
+ test_files: []