action_network_rest 1.0.1 → 2.0.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/.github/workflows/ci.yml +7 -6
- data/.rubocop.yml +4 -4
- data/.ruby-version +1 -1
- data/CHANGELOG.md +15 -0
- data/Gemfile +11 -0
- data/README.md +5 -0
- data/action_network_rest.gemspec +6 -12
- data/bin/rake +0 -1
- data/bin/rspec +0 -1
- data/lib/action_network_rest/advocacy_campaigns.rb +0 -4
- data/lib/action_network_rest/campaigns.rb +0 -4
- data/lib/action_network_rest/client.rb +2 -2
- data/lib/action_network_rest/forms.rb +0 -4
- data/lib/action_network_rest/response/raise_error.rb +31 -18
- data/lib/action_network_rest/version.rb +1 -1
- data/lib/action_network_rest.rb +1 -0
- metadata +23 -105
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6c17dbaa0d2bb98ff782e6935fd6f2be4487615ed22723cf852c2e38a423e390
|
|
4
|
+
data.tar.gz: 075b4fd3bc99898d124a0d8126257eabb5034c149795b06f52e45c18b555d597
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ffff94abab45bedc8a263ab2aff6614390c065ceea0d098ba3f517d738733dd831e6030d460e9162e1fbb3cd52230d4c2bda159923439d9165b2ca49f7626b23
|
|
7
|
+
data.tar.gz: c69a7c00e2a31a22171df146af077f34a18ba710c7cfc6cae61beea2c06778e9d4328635a00825d84536ccf7c0df1e064fdfb7dc5b6d0c902cb5208a4b43c1e5
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -4,21 +4,22 @@ on: [push]
|
|
|
4
4
|
jobs:
|
|
5
5
|
test:
|
|
6
6
|
runs-on: ubuntu-latest
|
|
7
|
+
strategy:
|
|
8
|
+
matrix:
|
|
9
|
+
ruby-version: ['3.3', '3.4', '4.0']
|
|
7
10
|
steps:
|
|
8
|
-
- uses: actions/checkout@
|
|
11
|
+
- uses: actions/checkout@v4
|
|
9
12
|
- uses: ruby/setup-ruby@v1
|
|
10
13
|
with:
|
|
11
|
-
ruby-version:
|
|
14
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
12
15
|
bundler-cache: true
|
|
13
|
-
- run: bundle install
|
|
14
16
|
- run: bundle exec rspec
|
|
15
17
|
rubocop:
|
|
16
18
|
runs-on: ubuntu-latest
|
|
17
19
|
steps:
|
|
18
|
-
- uses: actions/checkout@
|
|
20
|
+
- uses: actions/checkout@v4
|
|
19
21
|
- uses: ruby/setup-ruby@v1
|
|
20
22
|
with:
|
|
21
|
-
ruby-version:
|
|
23
|
+
ruby-version: '4.0'
|
|
22
24
|
bundler-cache: true
|
|
23
|
-
- run: bundle install
|
|
24
25
|
- run: bundle exec rubocop
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
4.0.1
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [2.0.0] - 2026-06-30
|
|
4
|
+
|
|
5
|
+
### Breaking Changes
|
|
6
|
+
- When a response has a 403 status, now raises AuthorizationError. (Previously, ResponseError was raised in this case.)
|
|
7
|
+
|
|
8
|
+
### Other Changes
|
|
9
|
+
- Added a new error class ServerError, as a subclass of ResponseError. 5xx response statuses now raise this more specific type of error.
|
|
10
|
+
|
|
11
|
+
## [1.1.0] - 2026-02-11
|
|
12
|
+
|
|
13
|
+
### Breaking Changes
|
|
14
|
+
- Now requires Faraday 2.x (previously supported Faraday 1.x)
|
|
15
|
+
- Dropped support for Ruby versions older than 3.3. Officially supported versions are Ruby 3.3, 3.4, and 4.0.
|
data/Gemfile
CHANGED
|
@@ -6,3 +6,14 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
|
|
6
6
|
|
|
7
7
|
# Specify your gem's dependencies in action_network_rest.gemspec
|
|
8
8
|
gemspec
|
|
9
|
+
|
|
10
|
+
group :development do
|
|
11
|
+
gem 'bundler', '>= 2.0', '< 5.0'
|
|
12
|
+
gem 'debug', '~> 1.0'
|
|
13
|
+
gem 'dotenv', '~> 2.7'
|
|
14
|
+
gem 'rake', '~> 13.0'
|
|
15
|
+
gem 'rspec', '~> 3.0'
|
|
16
|
+
gem 'rubocop', '~> 1.0'
|
|
17
|
+
gem 'rubocop-performance', '~> 1.0'
|
|
18
|
+
gem 'webmock', '~> 3.0'
|
|
19
|
+
end
|
data/README.md
CHANGED
|
@@ -4,6 +4,11 @@ Ruby client for interacting with the [ActionNetwork REST API](https://actionnetw
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/controlshift/action-network-rest/actions/workflows/ci.yml)
|
|
6
6
|
|
|
7
|
+
## Requirements
|
|
8
|
+
|
|
9
|
+
- Ruby 3.3, 3.4, or 4.0
|
|
10
|
+
- Faraday ~> 2.0
|
|
11
|
+
|
|
7
12
|
## Installation
|
|
8
13
|
|
|
9
14
|
Add this line to your application's Gemfile:
|
data/action_network_rest.gemspec
CHANGED
|
@@ -7,8 +7,8 @@ require 'action_network_rest/version'
|
|
|
7
7
|
Gem::Specification.new do |spec|
|
|
8
8
|
spec.name = 'action_network_rest'
|
|
9
9
|
spec.version = ActionNetworkRest::VERSION
|
|
10
|
-
spec.authors = ['Grey Moore']
|
|
11
|
-
spec.email = ['
|
|
10
|
+
spec.authors = ['Grey Moore', 'Owens Ehimen', 'Diego Marcet']
|
|
11
|
+
spec.email = ['talk@controlshiftlabs.com']
|
|
12
12
|
|
|
13
13
|
spec.summary = 'Ruby client for interacting with the ActionNetwork REST API'
|
|
14
14
|
spec.homepage = 'https://github.com/controlshift/action-network-rest'
|
|
@@ -21,17 +21,11 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
end
|
|
22
22
|
spec.require_paths = ['lib']
|
|
23
23
|
|
|
24
|
-
spec.required_ruby_version = '>=
|
|
24
|
+
spec.required_ruby_version = ['>= 3.3', '< 5.0']
|
|
25
25
|
|
|
26
|
-
spec.
|
|
26
|
+
spec.add_dependency 'faraday', '~> 2.0'
|
|
27
|
+
spec.add_dependency 'faraday-mashify', '~> 1.0'
|
|
28
|
+
spec.add_dependency 'vertebrae', '~> 1.0'
|
|
27
29
|
|
|
28
|
-
spec.add_development_dependency 'bundler', '~> 2.1'
|
|
29
|
-
spec.add_development_dependency 'debug', '> 0'
|
|
30
|
-
spec.add_development_dependency 'dotenv', '~> 2.7'
|
|
31
|
-
spec.add_development_dependency 'rake', '~> 13.0'
|
|
32
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
33
|
-
spec.add_development_dependency 'rubocop', '> 0'
|
|
34
|
-
spec.add_development_dependency 'rubocop-performance', '> 0'
|
|
35
|
-
spec.add_development_dependency 'webmock', '~> 3.8.3'
|
|
36
30
|
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
37
31
|
end
|
data/bin/rake
CHANGED
data/bin/rspec
CHANGED
|
@@ -3,34 +3,42 @@
|
|
|
3
3
|
module ActionNetworkRest
|
|
4
4
|
module Response
|
|
5
5
|
class RaiseError < Faraday::Middleware
|
|
6
|
-
# rubocop:disable Style/GuardClause
|
|
7
6
|
def on_complete(response)
|
|
8
7
|
status_code = response[:status].to_i
|
|
8
|
+
return unless (400...600).cover?(status_code)
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
if status_code == 400 && response[:body].include?('error')
|
|
12
|
-
error_hsh = JSON.parse(response[:body])
|
|
13
|
-
error_message = error_hsh['error']
|
|
14
|
-
|
|
15
|
-
if error_message == 'You must specify a valid person id'
|
|
16
|
-
raise MustSpecifyValidPersonId, error_message(response)
|
|
17
|
-
end
|
|
18
|
-
elsif status_code == 404
|
|
19
|
-
raise NotFoundError, error_message(response)
|
|
20
|
-
elsif status_code == 429
|
|
21
|
-
raise TooManyRequests, error_message(response)
|
|
22
|
-
else
|
|
23
|
-
raise ResponseError, error_message(response)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
10
|
+
raise error_class_for(status_code, response), error_message(response)
|
|
26
11
|
end
|
|
27
|
-
# rubocop:enable Style/GuardClause
|
|
28
12
|
|
|
29
13
|
def error_message(response)
|
|
30
14
|
"#{response[:method].to_s.upcase} #{response[:url]}: #{response[:status]} \n\n #{response[:body]}"
|
|
31
15
|
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def error_class_for(status_code, response)
|
|
20
|
+
case status_code
|
|
21
|
+
when 400 then bad_request_error_class(response)
|
|
22
|
+
when 403 then AuthorizationError
|
|
23
|
+
when 404 then NotFoundError
|
|
24
|
+
when 429 then TooManyRequests
|
|
25
|
+
when 500..599 then ServerError
|
|
26
|
+
else ResponseError
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def bad_request_error_class(response)
|
|
31
|
+
return ResponseError unless response[:body].include?('error')
|
|
32
|
+
|
|
33
|
+
# A few specific 400 messages map to a dedicated exception; any other
|
|
34
|
+
# 400 still raises the generic ResponseError.
|
|
35
|
+
body_error = JSON.parse(response[:body])['error']
|
|
36
|
+
body_error == 'You must specify a valid person id' ? MustSpecifyValidPersonId : ResponseError
|
|
37
|
+
end
|
|
32
38
|
end
|
|
33
39
|
|
|
40
|
+
class AuthorizationError < StandardError; end
|
|
41
|
+
|
|
34
42
|
class MissingActionNetworkId < StandardError; end
|
|
35
43
|
|
|
36
44
|
class MustSpecifyValidPersonId < StandardError; end
|
|
@@ -39,6 +47,11 @@ module ActionNetworkRest
|
|
|
39
47
|
|
|
40
48
|
class ResponseError < StandardError; end
|
|
41
49
|
|
|
50
|
+
# Raised for 5xx responses. Subclasses ResponseError so existing rescues
|
|
51
|
+
# continue to catch server errors while allowing callers to distinguish
|
|
52
|
+
# transient server-side failures (worth retrying) from client errors.
|
|
53
|
+
class ServerError < ResponseError; end
|
|
54
|
+
|
|
42
55
|
class TooManyRequests < StandardError; end
|
|
43
56
|
|
|
44
57
|
class UsedAllRequestTries < StandardError; end
|
data/lib/action_network_rest.rb
CHANGED
metadata
CHANGED
|
@@ -1,144 +1,60 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: action_network_rest
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Grey Moore
|
|
8
|
-
|
|
8
|
+
- Owens Ehimen
|
|
9
|
+
- Diego Marcet
|
|
9
10
|
bindir: bin
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date:
|
|
12
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - ">="
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: 1.0.0
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - ">="
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: 1.0.0
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: bundler
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '2.1'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - "~>"
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '2.1'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: debug
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">"
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
48
|
-
type: :development
|
|
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: dotenv
|
|
15
|
+
name: faraday
|
|
57
16
|
requirement: !ruby/object:Gem::Requirement
|
|
58
17
|
requirements:
|
|
59
18
|
- - "~>"
|
|
60
19
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '2.
|
|
62
|
-
type: :
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '2.7'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rake
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '13.0'
|
|
76
|
-
type: :development
|
|
20
|
+
version: '2.0'
|
|
21
|
+
type: :runtime
|
|
77
22
|
prerelease: false
|
|
78
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
24
|
requirements:
|
|
80
25
|
- - "~>"
|
|
81
26
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
27
|
+
version: '2.0'
|
|
83
28
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
29
|
+
name: faraday-mashify
|
|
85
30
|
requirement: !ruby/object:Gem::Requirement
|
|
86
31
|
requirements:
|
|
87
32
|
- - "~>"
|
|
88
33
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
90
|
-
type: :
|
|
34
|
+
version: '1.0'
|
|
35
|
+
type: :runtime
|
|
91
36
|
prerelease: false
|
|
92
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
38
|
requirements:
|
|
94
39
|
- - "~>"
|
|
95
40
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '
|
|
41
|
+
version: '1.0'
|
|
97
42
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - ">"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '0'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - ">"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '0'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: rubocop-performance
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - ">"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '0'
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - ">"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '0'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: webmock
|
|
43
|
+
name: vertebrae
|
|
127
44
|
requirement: !ruby/object:Gem::Requirement
|
|
128
45
|
requirements:
|
|
129
46
|
- - "~>"
|
|
130
47
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
132
|
-
type: :
|
|
48
|
+
version: '1.0'
|
|
49
|
+
type: :runtime
|
|
133
50
|
prerelease: false
|
|
134
51
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
52
|
requirements:
|
|
136
53
|
- - "~>"
|
|
137
54
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
139
|
-
description:
|
|
55
|
+
version: '1.0'
|
|
140
56
|
email:
|
|
141
|
-
-
|
|
57
|
+
- talk@controlshiftlabs.com
|
|
142
58
|
executables: []
|
|
143
59
|
extensions: []
|
|
144
60
|
extra_rdoc_files: []
|
|
@@ -149,6 +65,7 @@ files:
|
|
|
149
65
|
- ".rubocop.yml"
|
|
150
66
|
- ".ruby-gemset"
|
|
151
67
|
- ".ruby-version"
|
|
68
|
+
- CHANGELOG.md
|
|
152
69
|
- CODE_OF_CONDUCT.md
|
|
153
70
|
- Gemfile
|
|
154
71
|
- LICENSE
|
|
@@ -182,7 +99,6 @@ licenses:
|
|
|
182
99
|
- MIT
|
|
183
100
|
metadata:
|
|
184
101
|
rubygems_mfa_required: 'true'
|
|
185
|
-
post_install_message:
|
|
186
102
|
rdoc_options: []
|
|
187
103
|
require_paths:
|
|
188
104
|
- lib
|
|
@@ -190,15 +106,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
190
106
|
requirements:
|
|
191
107
|
- - ">="
|
|
192
108
|
- !ruby/object:Gem::Version
|
|
193
|
-
version: '
|
|
109
|
+
version: '3.3'
|
|
110
|
+
- - "<"
|
|
111
|
+
- !ruby/object:Gem::Version
|
|
112
|
+
version: '5.0'
|
|
194
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
114
|
requirements:
|
|
196
115
|
- - ">="
|
|
197
116
|
- !ruby/object:Gem::Version
|
|
198
117
|
version: '0'
|
|
199
118
|
requirements: []
|
|
200
|
-
rubygems_version:
|
|
201
|
-
signing_key:
|
|
119
|
+
rubygems_version: 4.0.3
|
|
202
120
|
specification_version: 4
|
|
203
121
|
summary: Ruby client for interacting with the ActionNetwork REST API
|
|
204
122
|
test_files: []
|