ruby_api_pack_cloudways 0.1.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 032f4359de51e5272ede2f343e9da2b2381ff7690ede8e34c6b5c3be75161e16
4
- data.tar.gz: bfe23a4dfd1f23abeb3dc12a71fc1190ab2db8354dfd4f3fd23ed6173ce7faa8
3
+ metadata.gz: 55bab48c0d619f7918865a2a4e3f73a8384253844892e29231fe00843e4168b2
4
+ data.tar.gz: 44054862918fd30db13413b2b8d344e59a44e7f522add84b13d31c93afa5d9e5
5
5
  SHA512:
6
- metadata.gz: adcd283753e724c24dccc49bc16d5cf8fa0fa222b3c0647c08fb940686355cb7f887e3c042cf78132a05ea6324970ae72e1a2593d770206719370f8bcad8997c
7
- data.tar.gz: '09a39d106708fd11d900c6143a210478a1ff330e39ea7b599a284c30ae21d515f00993a99204cdb72d772e68f3317aa7d7706c990f1de870ec73a132974c0c7e'
6
+ metadata.gz: 97fbbb96b0ebc20a12ce6af6912e08f1a9962d95c319fe40a6f48c3a4de41c1d45b66ad2fa3b1b2a17402051e700df54f4eb2500664cee3182871b80705f40c9
7
+ data.tar.gz: 0b85aeeb9211ffab7c946fdf219a4015f8ab3c937274700f356f0e39d5e769e77588a0c172d608e7e05628b5ee6abbed4d98b2f2f82385c19b2713fea555732a
data/README.md CHANGED
@@ -58,6 +58,11 @@ Or install it yourself as:
58
58
  ```bash
59
59
  $ gem install ruby_api_pack_cloudways
60
60
  ```
61
+ # Documentation Wiki
62
+
63
+ - [Home](https://github.com/phcdevworks/ruby_api_pack_cloudways/wiki)
64
+ - [List Endpoints](https://github.com/phcdevworks/ruby_api_pack_cloudways/wiki/Cloudways-Ruby-List-Endpoints)
65
+ - [Server Endpoints](https://github.com/phcdevworks/ruby_api_pack_cloudways/wiki/Cloudways-Ruby-Server-Endpoints)
61
66
 
62
67
  ## Contributing
63
68
 
@@ -3,27 +3,76 @@
3
3
  module RubyApiPackCloudways
4
4
  module Api
5
5
  class CwLists
6
- def self.fetch_resource(endpoint)
7
- Connection::CwConnect.new(
8
- RubyApiPackCloudways.configuration.api_url,
9
- endpoint
10
- ).cloudways_api_connection
6
+ # List endpoints
7
+ ENDPOINTS = {
8
+ apps: '/apps',
9
+ backup_frequencies: '/backup-frequencies',
10
+ countries: '/countries',
11
+ monitor_durations: '/monitoring/durations',
12
+ monitor_targets: '/monitoring/targets',
13
+ packages: '/packages',
14
+ providers: '/providers',
15
+ regions: '/regions',
16
+ server_sizes: '/server_sizes',
17
+ settings: '/settings'
18
+ }.freeze
19
+
20
+ # Fetch list of applications available
21
+ def self.app_list
22
+ fetch_resource(ENDPOINTS[:apps])['apps']
11
23
  end
12
24
 
25
+ # Fetch list of available backup frequencies
26
+ def self.backup_frequency_list
27
+ fetch_resource(ENDPOINTS[:backup_frequencies])['frequencies']
28
+ end
29
+
30
+ # Fetch list of supported countries
31
+ def self.country_list
32
+ fetch_resource(ENDPOINTS[:countries])['countries']
33
+ end
34
+
35
+ # Fetch list of monitoring durations
36
+ def self.monitor_duration_list
37
+ fetch_resource(ENDPOINTS[:monitor_durations])['durations']
38
+ end
39
+
40
+ # Fetch list of monitoring targets
41
+ def self.monitor_target_list
42
+ fetch_resource(ENDPOINTS[:monitor_targets])['targets']
43
+ end
44
+
45
+ # Fetch list of available packages
46
+ def self.package_list
47
+ fetch_resource(ENDPOINTS[:packages])['packages']
48
+ end
49
+
50
+ # Fetch list of providers
13
51
  def self.provider_list
14
- fetch_resource('/providers')['providers']
52
+ fetch_resource(ENDPOINTS[:providers])['providers']
53
+ end
54
+
55
+ # Fetch list of regions
56
+ def self.region_list
57
+ fetch_resource(ENDPOINTS[:regions])['regions']
15
58
  end
16
59
 
60
+ # Fetch list of server sizes
17
61
  def self.server_size_list
18
- fetch_resource('/server_sizes')['sizes']
62
+ fetch_resource(ENDPOINTS[:server_sizes])['sizes']
19
63
  end
20
64
 
21
- def self.app_list
22
- fetch_resource('/apps')['apps']
65
+ # Fetch list of available settings
66
+ def self.setting_list
67
+ fetch_resource(ENDPOINTS[:settings])['settings']
23
68
  end
24
69
 
25
- def self.package_list
26
- fetch_resource('/packages')['packages']
70
+ # Private method to fetch resources from a specified endpoint
71
+ private_class_method def self.fetch_resource(endpoint)
72
+ Connection::CwConnect.new(
73
+ RubyApiPackCloudways.configuration.api_url,
74
+ endpoint
75
+ ).cloudways_api_connection
27
76
  end
28
77
  end
29
78
  end
@@ -3,13 +3,116 @@
3
3
  module RubyApiPackCloudways
4
4
  module Api
5
5
  class CwServer
6
+ # Server endpoints
7
+ ENDPOINTS = {
8
+ list: '/server',
9
+ attach_block_storage: '/server/attach_block_storage',
10
+ clone: '/server/clone',
11
+ create: '/server/create',
12
+ delete: '/server/delete',
13
+ details: '/server/details',
14
+ disk_usage: '/server/disk_usage',
15
+ restart: '/server/restart',
16
+ scale_block_storage: '/server/scale_block_storage',
17
+ scale_volume_size: '/server/scale_volume_size',
18
+ start: '/server/start',
19
+ stop: '/server/stop',
20
+ update_label: '/server/update_label',
21
+ upgrade: '/server/upgrade'
22
+ }.freeze
23
+
24
+ # List all servers
6
25
  def self.server_list
7
- fetch_list('/server')['servers']
26
+ fetch_list(ENDPOINTS[:list])['servers']
27
+ end
28
+
29
+ # Attach block storage to a server
30
+ def self.attach_block_storage(server_id, params)
31
+ post_with_id(ENDPOINTS[:attach_block_storage], server_id, params)
32
+ end
33
+
34
+ # Clone a server
35
+ def self.clone_server(server_id, params)
36
+ post_with_id(ENDPOINTS[:clone], server_id, params)
37
+ end
38
+
39
+ # Create a new server
40
+ def self.create_server(params)
41
+ post_without_id(ENDPOINTS[:create], params)
42
+ end
43
+
44
+ # Delete a server
45
+ def self.delete_server(server_id)
46
+ fetch_with_id(ENDPOINTS[:delete], server_id)
47
+ end
48
+
49
+ # Get disk usage information
50
+ def self.disk_usage(server_id)
51
+ fetch_with_id(ENDPOINTS[:disk_usage], server_id)
52
+ end
53
+
54
+ # Restart a server
55
+ def self.restart_server(server_id)
56
+ fetch_with_id(ENDPOINTS[:restart], server_id)
57
+ end
58
+
59
+ # Get server details
60
+ def self.server_details(server_id)
61
+ fetch_with_id(ENDPOINTS[:details], server_id)
62
+ end
63
+
64
+ # Scale block storage of a server
65
+ def self.scale_block_storage(server_id, params)
66
+ post_with_id(ENDPOINTS[:scale_block_storage], server_id, params)
8
67
  end
9
68
 
10
- def self.fetch_list(endpoint)
69
+ # Scale volume size of a server
70
+ def self.scale_volume_size(server_id, params)
71
+ post_with_id(ENDPOINTS[:scale_volume_size], server_id, params)
72
+ end
73
+
74
+ # Start a server
75
+ def self.start_server(server_id)
76
+ fetch_with_id(ENDPOINTS[:start], server_id)
77
+ end
78
+
79
+ # Stop a server
80
+ def self.stop_server(server_id)
81
+ fetch_with_id(ENDPOINTS[:stop], server_id)
82
+ end
83
+
84
+ # Update server label
85
+ def self.update_server_label(server_id, params)
86
+ post_with_id(ENDPOINTS[:update_label], server_id, params)
87
+ end
88
+
89
+ # Upgrade a server
90
+ def self.upgrade_server(server_id, params)
91
+ post_with_id(ENDPOINTS[:upgrade], server_id, params)
92
+ end
93
+
94
+ # Private methods to fetch data
95
+ private_class_method def self.fetch_list(endpoint)
11
96
  Connection::CwConnect.new(RubyApiPackCloudways.configuration.api_url, endpoint).cloudways_api_connection
12
97
  end
98
+
99
+ # Private methods to fetch data with server id
100
+ private_class_method def self.fetch_with_id(endpoint, server_id)
101
+ Connection::CwConnect.new(RubyApiPackCloudways.configuration.api_url, "#{endpoint}/#{server_id}")
102
+ .cloudways_api_connection
103
+ end
104
+
105
+ # Private methods to post data with server id
106
+ private_class_method def self.post_with_id(endpoint, server_id, params)
107
+ connection = Connection::CwConnect.new(RubyApiPackCloudways.configuration.api_url, "#{endpoint}/#{server_id}")
108
+ connection.cloudways_api_post_connection(params)
109
+ end
110
+
111
+ # Private methods to post data without server id
112
+ private_class_method def self.post_without_id(endpoint, params)
113
+ connection = Connection::CwConnect.new(RubyApiPackCloudways.configuration.api_url, endpoint)
114
+ connection.cloudways_api_post_connection(params)
115
+ end
13
116
  end
14
117
  end
15
118
  end
@@ -3,13 +3,16 @@
3
3
  module RubyApiPackCloudways
4
4
  module Connection
5
5
  class CwConnect
6
+ # Initialize Cloudways API URL and path
6
7
  attr_reader :cw_api_url_base, :cw_api_path
7
8
 
9
+ # Initialize Cloudways API URL and path
8
10
  def initialize(cw_api_url_base, cw_api_path)
9
11
  @cw_api_url_base = cw_api_url_base
10
12
  @cw_api_path = cw_api_path
11
13
  end
12
14
 
15
+ # GET request to Cloudways API
13
16
  def cloudways_api_connection
14
17
  token = CwToken.new.cw_api_token
15
18
  response = HTTParty.get(
@@ -19,8 +22,20 @@ module RubyApiPackCloudways
19
22
  handle_response(response)
20
23
  end
21
24
 
25
+ # POST request to Cloudways API
26
+ def cloudways_api_post_connection(params)
27
+ token = CwToken.new.cw_api_token
28
+ response = HTTParty.post(
29
+ "#{@cw_api_url_base}#{@cw_api_path}",
30
+ headers: { 'Authorization' => "Bearer #{token}", 'Content-Type' => 'application/json' },
31
+ body: params.to_json
32
+ )
33
+ handle_response(response)
34
+ end
35
+
22
36
  private
23
37
 
38
+ # Handle response from Cloudways API
24
39
  def handle_response(response)
25
40
  case response.code
26
41
  when 200
@@ -30,8 +45,9 @@ module RubyApiPackCloudways
30
45
  end
31
46
  end
32
47
 
48
+ # Parse response from Cloudways API
33
49
  def parse_response(response)
34
- Oj.load(response.body)
50
+ Oj.load(response.body, mode: :strict)
35
51
  rescue Oj::ParseError => e
36
52
  raise "Error parsing response: #{e.message}"
37
53
  end
@@ -24,7 +24,7 @@ module RubyApiPackCloudways
24
24
  private
25
25
 
26
26
  def parse_response(response)
27
- Oj.load(response.body)
27
+ Oj.load(response.body, mode: :strict)
28
28
  rescue Oj::ParseError => e
29
29
  raise "Error parsing response: #{e.message}"
30
30
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyApiPackCloudways
4
- VERSION = '0.1.0'
4
+ VERSION = '0.3.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_api_pack_cloudways
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - PHCDevworks
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-10-27 00:00:00.000000000 Z
12
+ date: 2024-11-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
@@ -39,7 +39,9 @@ dependencies:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '3.16'
42
- description: Ruby API wrapper to use with Cloudways API.
42
+ description: |-
43
+ RubyApiPackCloudways is a Ruby gem for interacting with the Cloudways API. It provides easy access to
44
+ providers, server sizes, apps, and packages, with built-in OAuth authentication for secure API requests.
43
45
  email:
44
46
  - info@phcdevworks.com
45
47
  - brad.potts@phcdevworks.com
@@ -57,12 +59,12 @@ files:
57
59
  - lib/ruby_api_pack_cloudways/connection/cw_connect.rb
58
60
  - lib/ruby_api_pack_cloudways/connection/cw_token.rb
59
61
  - lib/ruby_api_pack_cloudways/version.rb
60
- homepage: https://phcdevworks.com/
62
+ homepage: https://github.com/phcdevworks/ruby_api_pack_cloudways/wiki
61
63
  licenses:
62
64
  - MIT
63
65
  metadata:
64
66
  allowed_push_host: https://rubygems.org/
65
- homepage_uri: https://phcdevworks.com/
67
+ homepage_uri: https://github.com/phcdevworks/ruby_api_pack_cloudways/wiki
66
68
  source_code_uri: https://github.com/phcdevworks/ruby_api_pack_cloudways/
67
69
  changelog_uri: https://github.com/phcdevworks/ruby_api_pack_cloudways/releases
68
70
  post_install_message: