sixer 0.2.0.pre.alpha

Sign up to get free protection for your applications and to get access to all the features.
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,19 @@
1
+ class Sixer
2
+ class EnvironmentVariable < Resource
3
+ def name
4
+ "environment"
5
+ end
6
+
7
+ def key
8
+ properties["key"]
9
+ end
10
+
11
+ def value
12
+ properties["value"]
13
+ end
14
+
15
+ def readonly?
16
+ !!properties["readonly"]
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ class Sixer
2
+ class EnvironmentVariableCollection < ResourceCollection
3
+ def name
4
+ "environments"
5
+ end
6
+ end
7
+ 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
@@ -0,0 +1,4 @@
1
+ class Sixer
2
+ class Stack < ResourceCollection
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ class Sixer
2
+ class StackCollection < ResourceCollection
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ class Sixer
2
+ VERSION = "0.2.0-alpha"
3
+ end
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: []