bundleup-sdk 0.1.0 → 0.2.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.
data/lib/bundleup.rb CHANGED
@@ -1,33 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'faraday'
4
- require 'faraday/retry'
5
- require 'json'
6
4
 
7
5
  require_relative 'bundleup/version'
8
- require_relative 'bundleup/errors'
9
- require_relative 'bundleup/base'
10
6
  require_relative 'bundleup/client'
11
- require_relative 'bundleup/connection'
12
- require_relative 'bundleup/integration'
13
- require_relative 'bundleup/webhook'
14
7
  require_relative 'bundleup/proxy'
8
+ require_relative 'bundleup/unify'
9
+
10
+ # Resources
11
+ require_relative 'bundleup/resources/base'
12
+ require_relative 'bundleup/resources/connection'
13
+ require_relative 'bundleup/resources/integration'
14
+ require_relative 'bundleup/resources/webhook'
15
+
16
+ # Unify endpoints
15
17
  require_relative 'bundleup/unify/base'
16
18
  require_relative 'bundleup/unify/chat'
17
19
  require_relative 'bundleup/unify/git'
18
20
  require_relative 'bundleup/unify/pm'
19
21
 
20
- # BundleUp Ruby SDK
21
- #
22
- # Official Ruby client library for the BundleUp API
22
+ # Main module for the BundleUp SDK.
23
23
  module Bundleup
24
- class << self
25
- # Create a new BundleUp client
26
- #
27
- # @param api_key [String] Your BundleUp API key
28
- # @return [Bundleup::Client] A new client instance
29
- def new(api_key)
30
- Client.new(api_key)
31
- end
32
- end
33
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundleup-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - BundleUp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-01-23 00:00:00.000000000 Z
11
+ date: 2026-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -25,61 +25,81 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: faraday-retry
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.0'
34
- type: :runtime
33
+ version: '13.0'
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '13.0'
47
+ version: '3.12'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '13.0'
54
+ version: '3.12'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rspec
56
+ name: rubocop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.12'
61
+ version: '1.50'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.12'
68
+ version: '1.50'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rubocop
70
+ name: rubocop-rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.50'
75
+ version: '0.6'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.50'
82
+ version: '0.6'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.20'
90
+ - - "<"
91
+ - !ruby/object:Gem::Version
92
+ version: '2.26'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '2.20'
100
+ - - "<"
101
+ - !ruby/object:Gem::Version
102
+ version: '2.26'
83
103
  - !ruby/object:Gem::Dependency
84
104
  name: vcr
85
105
  requirement: !ruby/object:Gem::Requirement
@@ -119,18 +139,18 @@ files:
119
139
  - LICENSE
120
140
  - README.md
121
141
  - lib/bundleup.rb
122
- - lib/bundleup/base.rb
123
142
  - lib/bundleup/client.rb
124
- - lib/bundleup/connection.rb
125
- - lib/bundleup/errors.rb
126
- - lib/bundleup/integration.rb
127
143
  - lib/bundleup/proxy.rb
144
+ - lib/bundleup/resources/base.rb
145
+ - lib/bundleup/resources/connection.rb
146
+ - lib/bundleup/resources/integration.rb
147
+ - lib/bundleup/resources/webhook.rb
148
+ - lib/bundleup/unify.rb
128
149
  - lib/bundleup/unify/base.rb
129
150
  - lib/bundleup/unify/chat.rb
130
151
  - lib/bundleup/unify/git.rb
131
152
  - lib/bundleup/unify/pm.rb
132
153
  - lib/bundleup/version.rb
133
- - lib/bundleup/webhook.rb
134
154
  homepage: https://github.com/bundleup/bundleup-sdk-ruby
135
155
  licenses:
136
156
  - MIT
data/lib/bundleup/base.rb DELETED
@@ -1,110 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundleup
4
- # Base class for all BundleUp resources
5
- class Base
6
- BASE_URL = 'https://api.bundleup.io'
7
- API_VERSION = 'v1'
8
-
9
- attr_reader :api_key
10
-
11
- def initialize(api_key)
12
- @api_key = api_key
13
- end
14
-
15
- # List all resources
16
- #
17
- # @param params [Hash] Query parameters
18
- # @return [Hash] Response with data and pagination info
19
- def list(params = {})
20
- request(:get, resource_path, params)
21
- end
22
-
23
- # Create a new resource
24
- #
25
- # @param data [Hash] Resource data
26
- # @return [Hash] Created resource
27
- def create(data)
28
- request(:post, resource_path, data)
29
- end
30
-
31
- # Retrieve a specific resource
32
- #
33
- # @param id [String] Resource ID
34
- # @return [Hash] Resource data
35
- def retrieve(id)
36
- request(:get, "#{resource_path}/#{id}")
37
- end
38
-
39
- # Update a resource
40
- #
41
- # @param id [String] Resource ID
42
- # @param data [Hash] Updated resource data
43
- # @return [Hash] Updated resource
44
- def update(id, data)
45
- request(:patch, "#{resource_path}/#{id}", data)
46
- end
47
-
48
- # Delete a resource
49
- #
50
- # @param id [String] Resource ID
51
- # @return [Hash] Deletion response
52
- def delete(id)
53
- request(:delete, "#{resource_path}/#{id}")
54
- end
55
-
56
- private
57
-
58
- def resource_path
59
- "/#{API_VERSION}/#{resource_name}"
60
- end
61
-
62
- def resource_name
63
- raise NotImplementedError, 'Subclasses must implement resource_name'
64
- end
65
-
66
- def request(method, path, body = nil)
67
- response = connection.public_send(method) do |req|
68
- req.url path
69
- req.headers['Content-Type'] = 'application/json'
70
- req.headers['Authorization'] = "Bearer #{api_key}"
71
- req.body = body.to_json if body && %i[post patch put].include?(method)
72
- req.params.update(body) if body && method == :get
73
- end
74
-
75
- handle_response(response)
76
- rescue Faraday::Error => e
77
- raise APIError, "Request failed: #{e.message}"
78
- end
79
-
80
- def connection
81
- @connection ||= Faraday.new(url: BASE_URL) do |conn|
82
- conn.request :retry, max: 3, interval: 0.5, backoff_factor: 2
83
- conn.adapter Faraday.default_adapter
84
- end
85
- end
86
-
87
- def handle_response(response)
88
- case response.status
89
- when 200..299
90
- response.body.empty? ? {} : JSON.parse(response.body)
91
- when 401
92
- raise AuthenticationError, 'Invalid API key'
93
- when 400..499
94
- error_message = extract_error_message(response)
95
- raise InvalidRequestError, error_message
96
- when 500..599
97
- raise APIError, 'Server error occurred'
98
- else
99
- raise APIError, "Unexpected response status: #{response.status}"
100
- end
101
- end
102
-
103
- def extract_error_message(response)
104
- body = JSON.parse(response.body)
105
- body['error'] || body['message'] || "Request failed with status #{response.status}"
106
- rescue JSON::ParserError
107
- "Request failed with status #{response.status}"
108
- end
109
- end
110
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundleup
4
- # Connection resource for managing connections
5
- class Connection < Base
6
- private
7
-
8
- def resource_name
9
- 'connections'
10
- end
11
- end
12
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundleup
4
- # Base error class for all BundleUp errors
5
- class Error < StandardError; end
6
-
7
- # Raised when an API error occurs
8
- class APIError < Error; end
9
-
10
- # Raised when authentication fails
11
- class AuthenticationError < Error; end
12
-
13
- # Raised when a request is invalid
14
- class InvalidRequestError < Error; end
15
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundleup
4
- # Integration resource for managing integrations
5
- class Integration < Base
6
- private
7
-
8
- def resource_name
9
- 'integrations'
10
- end
11
- end
12
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Bundleup
4
- # Webhook resource for managing webhooks
5
- class Webhook < Base
6
- private
7
-
8
- def resource_name
9
- 'webhooks'
10
- end
11
- end
12
- end