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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +0 -20
- data/README.md +913 -143
- data/lib/bundleup/client.rb +10 -39
- data/lib/bundleup/proxy.rb +42 -84
- data/lib/bundleup/resources/base.rb +78 -0
- data/lib/bundleup/resources/connection.rb +16 -0
- data/lib/bundleup/resources/integration.rb +16 -0
- data/lib/bundleup/resources/webhook.rb +16 -0
- data/lib/bundleup/unify/base.rb +13 -51
- data/lib/bundleup/unify/chat.rb +9 -10
- data/lib/bundleup/unify/git.rb +39 -43
- data/lib/bundleup/unify/pm.rb +9 -10
- data/lib/bundleup/unify.rb +16 -0
- data/lib/bundleup/version.rb +1 -1
- data/lib/bundleup.rb +10 -19
- metadata +40 -20
- data/lib/bundleup/base.rb +0 -110
- data/lib/bundleup/connection.rb +0 -12
- data/lib/bundleup/errors.rb +0 -15
- data/lib/bundleup/integration.rb +0 -12
- data/lib/bundleup/webhook.rb +0 -12
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
|
|
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.
|
|
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-
|
|
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:
|
|
28
|
+
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
34
|
-
type: :
|
|
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: '
|
|
40
|
+
version: '13.0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
42
|
+
name: rspec
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
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: '
|
|
54
|
+
version: '3.12'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
56
|
+
name: rubocop
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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
|
data/lib/bundleup/connection.rb
DELETED
data/lib/bundleup/errors.rb
DELETED
|
@@ -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
|
data/lib/bundleup/integration.rb
DELETED