sixer 0.2.0.pre.alpha
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 +7 -0
- data/README.md +43 -0
- data/lib/sixer/all.rb +19 -0
- data/lib/sixer/environment_variable.rb +19 -0
- data/lib/sixer/environment_variable_collection.rb +7 -0
- data/lib/sixer/resource.rb +44 -0
- data/lib/sixer/resource_collection.rb +56 -0
- data/lib/sixer/stack.rb +4 -0
- data/lib/sixer/stack_collection.rb +4 -0
- data/lib/sixer/version.rb +3 -0
- data/lib/sixer.rb +89 -0
- metadata +136 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d7f8e325560b663810aeb17fa9732881135886cb39ea7b600711a3b0130630b8
|
4
|
+
data.tar.gz: c85435c5ee353b11c1964b7b9e92f26869860c01c5e1300a284f35a2c468bc0b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d2524c2052f519c4473e4daa0eac84a97513a4696009ff3d3cdd90b69c3e842f3c679e60646ebdddd24b075c8b8bd53a70bfa3b9efc0306cd5aa4af5546386d9
|
7
|
+
data.tar.gz: b42d9bf89dd5c9ab6377d9d876cd80147cab2c16aa0a7872a1935944222bb644ea47fa98c0e6e0d23469da45b40b5c3eefb70afcc1e3033b50f3d86bfe076352
|
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# sixer
|
2
|
+
|
3
|
+
Unofficial Ruby gem for [Cloud66 API](https://developers.cloud66.com/#introduction)
|
4
|
+
|
5
|
+
# Installation
|
6
|
+
|
7
|
+
Add sixer to your Gemfile
|
8
|
+
|
9
|
+
```
|
10
|
+
gem 'sixer'
|
11
|
+
```
|
12
|
+
|
13
|
+
And bundle install
|
14
|
+
|
15
|
+
```
|
16
|
+
bundle install
|
17
|
+
```
|
18
|
+
|
19
|
+
# Usage
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
# A Cloud 66 Personal Access Token can be obtained here https://app.cloud66.com/oauth/authorized_applications
|
23
|
+
personal_access_token = ENV['CLOUD66_PERSONAL_ACCESS_TOKEN']
|
24
|
+
|
25
|
+
# Retrieve stacks
|
26
|
+
sixer = Sixer.new(personal_access_token)
|
27
|
+
stacks = sixer.stacks
|
28
|
+
|
29
|
+
# Print a stack's environment variables
|
30
|
+
acme_stack = stacks.all.detect { |stack| stack.name == "Acme" }.environment_variable
|
31
|
+
acme_stack.environment_variables.each_in_all_pages do |env_var|
|
32
|
+
key, value = env_var.properties.values_at("key", "value")
|
33
|
+
puts "#{key}=#{value}
|
34
|
+
end
|
35
|
+
```
|
36
|
+
|
37
|
+
# Todos
|
38
|
+
|
39
|
+
- Port rspecs here
|
40
|
+
- Modify sixer to obtain the personal access token the from the `CLOUD66_PERSONAL_ACCESS_TOKEN` environment variable if the environment variable is set
|
41
|
+
- Add support for more Cloud 66 API resources
|
42
|
+
- Add ability to update a resource's properties
|
43
|
+
- Add ability to create a resource
|
data/lib/sixer/all.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
class Sixer
|
2
|
+
class All
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
attr_reader :first_page
|
6
|
+
|
7
|
+
def initialize(first_page)
|
8
|
+
@first_page = first_page
|
9
|
+
end
|
10
|
+
|
11
|
+
def each
|
12
|
+
page = first_page
|
13
|
+
page.each { |resource| yield resource }
|
14
|
+
return if page.last_page?
|
15
|
+
|
16
|
+
new(page.next_page).each { |resource| yield resource }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class Sixer
|
2
|
+
class Resource
|
3
|
+
class << self
|
4
|
+
def retrieve(parent, id, params = {})
|
5
|
+
properties = { "id" => id }
|
6
|
+
new(parent, properties).retrieve(params)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :parent,
|
11
|
+
:properties,
|
12
|
+
:params,
|
13
|
+
:response
|
14
|
+
|
15
|
+
def initialize(parent, properties = {})
|
16
|
+
@parent, @properties = parent, properties
|
17
|
+
end
|
18
|
+
|
19
|
+
def retrieve(params = {})
|
20
|
+
@response = sixer.get(path, params)
|
21
|
+
@properties = JSON.parse(response.body)
|
22
|
+
@params = params
|
23
|
+
@retrieved = true
|
24
|
+
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def retrieve_unless_retrieved
|
29
|
+
retrieve unless @retrieved
|
30
|
+
end
|
31
|
+
|
32
|
+
def name
|
33
|
+
self.class.to_s.demodulized.underscore
|
34
|
+
end
|
35
|
+
|
36
|
+
def path
|
37
|
+
"#{parent.path}/#{name}/#{id}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def sixer
|
41
|
+
parent.sixer
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
class Sixer
|
2
|
+
class ResourceCollection < Resource
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def retrieve(parent, params = {})
|
7
|
+
resource_collection = new(parent)
|
8
|
+
resource_collection.retrieve(params)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def resource_class
|
13
|
+
self.class.name.sub("Collection", "").singularize.constantize
|
14
|
+
end
|
15
|
+
|
16
|
+
def name
|
17
|
+
self.class.demodulize.sub("Collection", "").pluralize.constantize
|
18
|
+
end
|
19
|
+
|
20
|
+
def path
|
21
|
+
parent.path + "/#{name}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def each(&block)
|
25
|
+
retrieve_unless_retrieved
|
26
|
+
|
27
|
+
Array(properties["response"]).map do |resource_properties|
|
28
|
+
resource = resource_class.new(parent, resource_properties)
|
29
|
+
yield resource
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def all
|
34
|
+
All.new(self)
|
35
|
+
end
|
36
|
+
|
37
|
+
def each_in_all_pages(&block)
|
38
|
+
each(&block)
|
39
|
+
return if last_page?
|
40
|
+
next_page.each_in_all_pages(&block)
|
41
|
+
end
|
42
|
+
|
43
|
+
def page_number
|
44
|
+
response["pagination"]["current"].to_i
|
45
|
+
end
|
46
|
+
|
47
|
+
def last_page?
|
48
|
+
response["pagination"]["next"].nil?
|
49
|
+
end
|
50
|
+
|
51
|
+
def next_page
|
52
|
+
new_params = params.merge({ "page" => (page_number + 1) })
|
53
|
+
self.class.retrieve(parent, new_params)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/sixer/stack.rb
ADDED
data/lib/sixer.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# Move env vars from Cloud 66 "SupportBee" stack's "staging" environment to "SupportBee Maestro" stack's staging environment
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
require "httparty"
|
5
|
+
require "active_support"
|
6
|
+
require "active_support/core_ext/string/inflections"
|
7
|
+
# require "pry"
|
8
|
+
|
9
|
+
require_relative "sixer/resource"
|
10
|
+
require_relative "sixer/resource_collection"
|
11
|
+
require_relative "sixer/all"
|
12
|
+
|
13
|
+
resources = %w(
|
14
|
+
stack
|
15
|
+
environment_variable
|
16
|
+
)
|
17
|
+
resources.each do |resource|
|
18
|
+
require_relative "sixer/#{resource}"
|
19
|
+
require_relative "sixer/#{resource}_collection"
|
20
|
+
end
|
21
|
+
|
22
|
+
class Sixer
|
23
|
+
class Error < StandardError
|
24
|
+
def context
|
25
|
+
@context ||= {}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class UnsuccessfulResponse < Error
|
30
|
+
def response
|
31
|
+
context[:response]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :access_token
|
36
|
+
|
37
|
+
def initialize(access_token)
|
38
|
+
@access_token = access_token
|
39
|
+
end
|
40
|
+
|
41
|
+
def get(path, params = {})
|
42
|
+
response = HTTParty.get("#{base_url}#{path}", headers: get_headers, query: params)
|
43
|
+
unless response.success?
|
44
|
+
e = Sixer::UnsuccessfulResponse.new
|
45
|
+
e.context[:response] = response
|
46
|
+
raise e
|
47
|
+
end
|
48
|
+
|
49
|
+
response
|
50
|
+
end
|
51
|
+
|
52
|
+
def post(path, body_hash = {})
|
53
|
+
HTTParty.post("#{base_url}#{path}", headers: post_headers, body: body_hash.to_json)
|
54
|
+
end
|
55
|
+
|
56
|
+
def base_url
|
57
|
+
"https://app.sixer.com/api/3"
|
58
|
+
end
|
59
|
+
|
60
|
+
def authorization_headers
|
61
|
+
{
|
62
|
+
"Authorization": "Bearer #{access_token}"
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_headers
|
67
|
+
{
|
68
|
+
"Accept" => "application/json"
|
69
|
+
}.merge(authorization_headers)
|
70
|
+
end
|
71
|
+
|
72
|
+
def post_headers
|
73
|
+
{
|
74
|
+
"Content-Type" => "application/json"
|
75
|
+
}.merge(authorization_headers)
|
76
|
+
end
|
77
|
+
|
78
|
+
def stack_env_vars(stack_id)
|
79
|
+
EnvironmentVariables.new(self, stack_id)
|
80
|
+
end
|
81
|
+
|
82
|
+
def sixer
|
83
|
+
self
|
84
|
+
end
|
85
|
+
|
86
|
+
def path
|
87
|
+
""
|
88
|
+
end
|
89
|
+
end
|
metadata
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sixer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0.pre.alpha
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nisanth Chunduru
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-10-02 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'
|
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: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.9'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.9'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: Unofficial gem for Cloud66 API https://developers.cloud66.com/#introduction
|
98
|
+
email:
|
99
|
+
- nisanth074@gmail.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- README.md
|
105
|
+
- lib/sixer.rb
|
106
|
+
- lib/sixer/all.rb
|
107
|
+
- lib/sixer/environment_variable.rb
|
108
|
+
- lib/sixer/environment_variable_collection.rb
|
109
|
+
- lib/sixer/resource.rb
|
110
|
+
- lib/sixer/resource_collection.rb
|
111
|
+
- lib/sixer/stack.rb
|
112
|
+
- lib/sixer/stack_collection.rb
|
113
|
+
- lib/sixer/version.rb
|
114
|
+
homepage: https://github.com/nisanth074/gmail
|
115
|
+
licenses: []
|
116
|
+
metadata: {}
|
117
|
+
post_install_message:
|
118
|
+
rdoc_options: []
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 1.3.1
|
131
|
+
requirements: []
|
132
|
+
rubygems_version: 3.1.6
|
133
|
+
signing_key:
|
134
|
+
specification_version: 4
|
135
|
+
summary: Unofficial gem for Cloud66 API
|
136
|
+
test_files: []
|