ruby_api_pack_active_campaign 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 +7 -0
- data/.all-contributorsrc +23 -0
- data/.circleci/config.yml +44 -0
- data/.claude/settings.json +36 -0
- data/.claude/settings.local.json +36 -0
- data/.coderabbit.yaml +75 -0
- data/.codex/README.md +32 -0
- data/.codex/change-watch.md +17 -0
- data/.codex/release-readiness.md +30 -0
- data/.editorconfig +22 -0
- data/.rspec +3 -0
- data/.rubocop.yml +71 -0
- data/AGENTS.md +107 -0
- data/CHANGELOG.md +140 -0
- data/CLAUDE.md +91 -0
- data/CODEX.md +63 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/CONTRIBUTING.md +118 -0
- data/COPILOT.md +29 -0
- data/FUNDING.yml +1 -0
- data/JULES.md +33 -0
- data/MIT-LICENSE +21 -0
- data/README.md +270 -0
- data/ROADMAP.md +40 -0
- data/Rakefile +12 -0
- data/SECURITY.md +43 -0
- data/TODO.md +31 -0
- data/lib/ruby_api_pack_active_campaign/api/ac_contacts.rb +145 -0
- data/lib/ruby_api_pack_active_campaign/configuration.rb +12 -0
- data/lib/ruby_api_pack_active_campaign/connection/ac_connect.rb +15 -0
- data/lib/ruby_api_pack_active_campaign/version.rb +5 -0
- data/lib/ruby_api_pack_active_campaign.rb +15 -0
- data/ruby_api_pack_active_campaign.code-workspace +8 -0
- data/sig/ruby_api_pack_active_campaign.rbs +4 -0
- metadata +99 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 4678bec1931c7aa021a4c1a49854164d05151d449574821e12bddd2c76bc8d6d
|
|
4
|
+
data.tar.gz: d3844fb12d48b7c20777787d15b65339c2e37101f2c4df8ec94f7c4833d989d9
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 0d235a0c92e3552eb9755365a3aeeba7eb7263845dcc7b2ac3bdf785f1d1f5fbd6161579efa3c11304a68dcdcfd4ab2bf90f5473cac6447ac3512cebaa9b3607
|
|
7
|
+
data.tar.gz: 7c9fad4b1393b45ccf79f6421c848a133b1602848e259e7e4567fe5f714bc9e650f0f0b9cd730b2fa53c060d056057eef48f51403337092b60e912fc358f7a31
|
data/.all-contributorsrc
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"projectName": "ruby_api_pack_active_campaign",
|
|
3
|
+
"projectOwner": "phcdevworks",
|
|
4
|
+
"repoType": "github",
|
|
5
|
+
"repoHost": "https://github.com",
|
|
6
|
+
"files": [
|
|
7
|
+
"README.md"
|
|
8
|
+
],
|
|
9
|
+
"imageSize": 100,
|
|
10
|
+
"commit": true,
|
|
11
|
+
"contributors": [
|
|
12
|
+
{
|
|
13
|
+
"login": "BradPotts",
|
|
14
|
+
"name": "Brad Potts",
|
|
15
|
+
"avatar_url": "https://avatars.githubusercontent.com/BradPotts",
|
|
16
|
+
"profile": "https://github.com/BradPotts",
|
|
17
|
+
"contributions": [
|
|
18
|
+
"code"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"commitConvention": null
|
|
23
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
version: 2.1
|
|
2
|
+
|
|
3
|
+
orbs:
|
|
4
|
+
codecov: codecov/codecov@6.0.0
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
test:
|
|
8
|
+
parameters:
|
|
9
|
+
ruby-version:
|
|
10
|
+
type: string
|
|
11
|
+
docker:
|
|
12
|
+
- image: cimg/ruby:<< parameters.ruby-version >>
|
|
13
|
+
steps:
|
|
14
|
+
- checkout
|
|
15
|
+
- restore_cache:
|
|
16
|
+
keys:
|
|
17
|
+
- bundle-<< parameters.ruby-version >>-{{ checksum "Gemfile.lock" }}
|
|
18
|
+
- run: bundle config set --local path 'vendor/bundle'
|
|
19
|
+
- run: bundle install
|
|
20
|
+
- save_cache:
|
|
21
|
+
key: bundle-<< parameters.ruby-version >>-{{ checksum "Gemfile.lock" }}
|
|
22
|
+
paths:
|
|
23
|
+
- vendor/bundle
|
|
24
|
+
- run:
|
|
25
|
+
name: bundle exec rspec
|
|
26
|
+
command: |
|
|
27
|
+
mkdir -p tmp/test-results
|
|
28
|
+
bundle exec rspec --format progress --format RspecJunitFormatter --out tmp/test-results/rspec.xml
|
|
29
|
+
- store_test_results:
|
|
30
|
+
path: tmp/test-results
|
|
31
|
+
- run: bundle exec rubocop
|
|
32
|
+
- codecov/upload:
|
|
33
|
+
files: coverage/.resultset.json
|
|
34
|
+
- codecov/upload:
|
|
35
|
+
files: tmp/test-results/rspec.xml
|
|
36
|
+
report_type: test_results
|
|
37
|
+
|
|
38
|
+
workflows:
|
|
39
|
+
test:
|
|
40
|
+
jobs:
|
|
41
|
+
- test:
|
|
42
|
+
matrix:
|
|
43
|
+
parameters:
|
|
44
|
+
ruby-version: ['3.3.4', '3.4']
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(bundle install*)",
|
|
5
|
+
"Bash(bundle exec rspec*)",
|
|
6
|
+
"Bash(bundle exec rubocop*)",
|
|
7
|
+
"Bash(gem build*)",
|
|
8
|
+
"Bash(git status)",
|
|
9
|
+
"Bash(git diff*)",
|
|
10
|
+
"Bash(git log*)"
|
|
11
|
+
],
|
|
12
|
+
"deny": [
|
|
13
|
+
"Bash(rm -rf*)",
|
|
14
|
+
"Bash(rm -fr*)",
|
|
15
|
+
"Bash(git commit*)",
|
|
16
|
+
"Bash(gh repo delete*)",
|
|
17
|
+
"Bash(gh repo archive*)",
|
|
18
|
+
"Bash(git push --force*)",
|
|
19
|
+
"Bash(git push -f*)",
|
|
20
|
+
"Bash(git reset --hard*)",
|
|
21
|
+
"Bash(git clean -f*)",
|
|
22
|
+
"Bash(git clean -d*)",
|
|
23
|
+
"Bash(git clean -x*)",
|
|
24
|
+
"Bash(git branch -D*)",
|
|
25
|
+
"Bash(git branch -d*)",
|
|
26
|
+
"Bash(git tag -d*)",
|
|
27
|
+
"Bash(git filter-branch*)",
|
|
28
|
+
"Bash(git filter-repo*)",
|
|
29
|
+
"Bash(git gc --prune*)",
|
|
30
|
+
"Bash(git rebase*)",
|
|
31
|
+
"Bash(gem yank*)",
|
|
32
|
+
"Bash(dd *)",
|
|
33
|
+
"Bash(mkfs*)"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(bundle install*)",
|
|
5
|
+
"Bash(bundle exec rspec*)",
|
|
6
|
+
"Bash(bundle exec rubocop*)",
|
|
7
|
+
"Bash(gem build*)",
|
|
8
|
+
"Bash(git status)",
|
|
9
|
+
"Bash(git diff*)",
|
|
10
|
+
"Bash(git log*)"
|
|
11
|
+
],
|
|
12
|
+
"deny": [
|
|
13
|
+
"Bash(rm -rf*)",
|
|
14
|
+
"Bash(rm -fr*)",
|
|
15
|
+
"Bash(git commit*)",
|
|
16
|
+
"Bash(gh repo delete*)",
|
|
17
|
+
"Bash(gh repo archive*)",
|
|
18
|
+
"Bash(git push --force*)",
|
|
19
|
+
"Bash(git push -f*)",
|
|
20
|
+
"Bash(git reset --hard*)",
|
|
21
|
+
"Bash(git clean -f*)",
|
|
22
|
+
"Bash(git clean -d*)",
|
|
23
|
+
"Bash(git clean -x*)",
|
|
24
|
+
"Bash(git branch -D*)",
|
|
25
|
+
"Bash(git branch -d*)",
|
|
26
|
+
"Bash(git tag -d*)",
|
|
27
|
+
"Bash(git filter-branch*)",
|
|
28
|
+
"Bash(git filter-repo*)",
|
|
29
|
+
"Bash(git gc --prune*)",
|
|
30
|
+
"Bash(git rebase*)",
|
|
31
|
+
"Bash(gem yank*)",
|
|
32
|
+
"Bash(dd *)",
|
|
33
|
+
"Bash(mkfs*)"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}
|
data/.coderabbit.yaml
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
|
|
2
|
+
language: "en-US"
|
|
3
|
+
early_access: false
|
|
4
|
+
reviews:
|
|
5
|
+
profile: "assertive"
|
|
6
|
+
request_changes_workflow: false
|
|
7
|
+
high_level_summary: true
|
|
8
|
+
high_level_summary_placeholder: "@coderabbitai summary"
|
|
9
|
+
auto_title_placeholder: "@coderabbitai"
|
|
10
|
+
review_status: true
|
|
11
|
+
commit_status: true
|
|
12
|
+
collapse_walkthrough: false
|
|
13
|
+
changed_files_summary: true
|
|
14
|
+
sequence_diagrams: true
|
|
15
|
+
assess_linked_issues: true
|
|
16
|
+
related_issues: true
|
|
17
|
+
related_prs: true
|
|
18
|
+
suggested_labels: true
|
|
19
|
+
auto_apply_labels: false
|
|
20
|
+
suggested_reviewers: false
|
|
21
|
+
poem: false
|
|
22
|
+
abort_on_close: true
|
|
23
|
+
auto_review:
|
|
24
|
+
enabled: true
|
|
25
|
+
auto_incremental_review: true
|
|
26
|
+
drafts: false
|
|
27
|
+
finishing_touches:
|
|
28
|
+
docstrings:
|
|
29
|
+
enabled: true
|
|
30
|
+
tools:
|
|
31
|
+
rubocop:
|
|
32
|
+
enabled: true
|
|
33
|
+
markdownlint:
|
|
34
|
+
enabled: true
|
|
35
|
+
gitleaks:
|
|
36
|
+
enabled: true
|
|
37
|
+
github-checks:
|
|
38
|
+
enabled: true
|
|
39
|
+
timeout_ms: 90000
|
|
40
|
+
yamllint:
|
|
41
|
+
enabled: true
|
|
42
|
+
languagetool:
|
|
43
|
+
enabled: true
|
|
44
|
+
level: default
|
|
45
|
+
actionlint:
|
|
46
|
+
enabled: true
|
|
47
|
+
semgrep:
|
|
48
|
+
enabled: true
|
|
49
|
+
path_instructions:
|
|
50
|
+
- path: "**/*.rb"
|
|
51
|
+
instructions: "Apply Ruby best practices. Flag: missing frozen_string_literal: true magic comment; unhandled HTTParty response error paths; Law of Demeter violations. Verify class methods follow single-responsibility and don't leak HTTP concerns outside the connection wrapper."
|
|
52
|
+
- path: "lib/ruby_api_pack_active_campaign/connection/**"
|
|
53
|
+
instructions: "Centralized HTTP behavior. Verify all HTTParty calls set the Api-Token header from configuration (never hardcoded), JSON parsing failures are handled distinctly from non-2xx responses, and no request or response body is logged directly."
|
|
54
|
+
- path: "lib/ruby_api_pack_active_campaign/api/**"
|
|
55
|
+
instructions: "Public ActiveCampaign helper surface. Flag any new or changed endpoint path, HTTP verb, or payload shape that isn't reflected in the README.md Public API Helpers table and covered by a delegation spec in spec/."
|
|
56
|
+
- path: "lib/ruby_api_pack_active_campaign/configuration.rb"
|
|
57
|
+
instructions: "Verify API URL and token remain configurable through RubyApiPackActiveCampaign.configure and are never defaulted to a real ActiveCampaign account or token value."
|
|
58
|
+
- path: "spec/**"
|
|
59
|
+
instructions: "Enforce RSpec best practices: descriptive describe/context/it blocks, let over instance variables, and expectations that verify behavior rather than internal state. Flag missing coverage for non-2xx and JSON-parse-failure response paths, and any fixture containing realistic-looking API tokens or contact data."
|
|
60
|
+
- path: "Gemfile"
|
|
61
|
+
instructions: "Flag overly permissive version constraints (>= x with no upper bound). Ensure test and development gems are in the correct group. Verify no gems with known CVEs are being introduced."
|
|
62
|
+
- path: "*.gemspec"
|
|
63
|
+
instructions: "Verify required_ruby_version is set, runtime dependencies are actually used in lib/ (no orphaned dependencies), summary and description are informative, and version follows semver."
|
|
64
|
+
- path: "CHANGELOG.md"
|
|
65
|
+
instructions: "Verify entries follow Keep a Changelog format with correct categorization (Added/Changed/Fixed/Removed) and link to a version tag."
|
|
66
|
+
chat:
|
|
67
|
+
auto_reply: true
|
|
68
|
+
knowledge_base:
|
|
69
|
+
opt_out: false
|
|
70
|
+
learnings:
|
|
71
|
+
scope: auto
|
|
72
|
+
issues:
|
|
73
|
+
scope: auto
|
|
74
|
+
pull_requests:
|
|
75
|
+
scope: auto
|
data/.codex/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Codex Workspace Notes
|
|
2
|
+
|
|
3
|
+
This folder keeps Codex-facing operational notes for
|
|
4
|
+
`ruby_api_pack_active_campaign`.
|
|
5
|
+
|
|
6
|
+
## Default Checks
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
bundle exec rspec
|
|
10
|
+
bundle exec rubocop
|
|
11
|
+
gem build ruby_api_pack_active_campaign.gemspec
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Documentation Standard
|
|
15
|
+
|
|
16
|
+
Keep these files synchronized:
|
|
17
|
+
|
|
18
|
+
- `README.md`
|
|
19
|
+
- `CONTRIBUTING.md`
|
|
20
|
+
- `SECURITY.md`
|
|
21
|
+
- `CHANGELOG.md`
|
|
22
|
+
- `ROADMAP.md`
|
|
23
|
+
- `TODO.md`
|
|
24
|
+
- `AGENTS.md`
|
|
25
|
+
- `CLAUDE.md`, `CODEX.md`, `COPILOT.md`, `JULES.md`
|
|
26
|
+
- `.github/codex-instructions.md`, `.github/copilot-instructions.md`
|
|
27
|
+
|
|
28
|
+
## Security Reminder
|
|
29
|
+
|
|
30
|
+
Do not include real ActiveCampaign API tokens, production account URLs, contact
|
|
31
|
+
data, request payloads, or sensitive response bodies in docs, specs, logs, or
|
|
32
|
+
examples.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Change Watch
|
|
2
|
+
|
|
3
|
+
Use this file as a lightweight review log when preparing a documentation,
|
|
4
|
+
release, or stabilization handoff.
|
|
5
|
+
|
|
6
|
+
## Current Watch Points
|
|
7
|
+
|
|
8
|
+
- Public API helper changes should update specs and README usage.
|
|
9
|
+
- Connection and configuration changes should be checked for credential or
|
|
10
|
+
token leakage in logs and fixtures.
|
|
11
|
+
- Release changes should keep `VERSION`, `CHANGELOG.md`, gem build output, and
|
|
12
|
+
RubyGems publishing state aligned.
|
|
13
|
+
|
|
14
|
+
## Validation Notes
|
|
15
|
+
|
|
16
|
+
Record command results here only when useful for a release or PR handoff. Do
|
|
17
|
+
not paste secrets or live ActiveCampaign response payloads.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Release Readiness
|
|
2
|
+
|
|
3
|
+
Use this checklist before a maintainer publishes `ruby_api_pack_active_campaign`.
|
|
4
|
+
|
|
5
|
+
## Validation
|
|
6
|
+
|
|
7
|
+
- [ ] `bundle exec rspec` passes.
|
|
8
|
+
- [ ] `bundle exec rubocop` passes.
|
|
9
|
+
- [ ] `gem build ruby_api_pack_active_campaign.gemspec` succeeds.
|
|
10
|
+
|
|
11
|
+
## Release Records
|
|
12
|
+
|
|
13
|
+
- [ ] `lib/ruby_api_pack_active_campaign/version.rb` has the intended version.
|
|
14
|
+
- [ ] `CHANGELOG.md` has a dated entry for the intended version.
|
|
15
|
+
- [ ] README usage reflects the current public API.
|
|
16
|
+
- [ ] Security guidance is current.
|
|
17
|
+
|
|
18
|
+
## Safety
|
|
19
|
+
|
|
20
|
+
- [ ] No ActiveCampaign API tokens or production account URLs are present in
|
|
21
|
+
source, docs, logs, examples, or fixtures.
|
|
22
|
+
- [ ] No contact data, request payloads, or raw live response bodies are
|
|
23
|
+
committed.
|
|
24
|
+
- [ ] Any VCR cassettes are sanitized.
|
|
25
|
+
|
|
26
|
+
## Handoff
|
|
27
|
+
|
|
28
|
+
- [ ] Summarize change classification.
|
|
29
|
+
- [ ] Include validation results.
|
|
30
|
+
- [ ] Note any known release risks or skipped checks.
|
data/.editorconfig
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
root = true
|
|
2
|
+
|
|
3
|
+
[*]
|
|
4
|
+
charset = utf-8
|
|
5
|
+
end_of_line = lf
|
|
6
|
+
indent_style = space
|
|
7
|
+
indent_size = 2
|
|
8
|
+
insert_final_newline = true
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
|
|
11
|
+
[*.md]
|
|
12
|
+
max_line_length = 88
|
|
13
|
+
trim_trailing_whitespace = true
|
|
14
|
+
|
|
15
|
+
[*.rb]
|
|
16
|
+
indent_size = 2
|
|
17
|
+
|
|
18
|
+
[*.gemspec]
|
|
19
|
+
indent_size = 2
|
|
20
|
+
|
|
21
|
+
[Makefile]
|
|
22
|
+
indent_style = tab
|
data/.rspec
ADDED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
require:
|
|
2
|
+
- rubocop-performance
|
|
3
|
+
- rubocop-rake
|
|
4
|
+
- rubocop-rspec
|
|
5
|
+
|
|
6
|
+
AllCops:
|
|
7
|
+
NewCops: enable
|
|
8
|
+
TargetRubyVersion: 3.3
|
|
9
|
+
Exclude:
|
|
10
|
+
- "db/schema.rb"
|
|
11
|
+
- "db/migrate/**/*"
|
|
12
|
+
- "bin/**/*"
|
|
13
|
+
- "node_modules/**/*"
|
|
14
|
+
- "tmp/**/*"
|
|
15
|
+
- "vendor/**/*"
|
|
16
|
+
SuggestExtensions: false
|
|
17
|
+
|
|
18
|
+
Lint/RedundantCopDisableDirective:
|
|
19
|
+
Enabled: true
|
|
20
|
+
|
|
21
|
+
Metrics/BlockLength:
|
|
22
|
+
Exclude:
|
|
23
|
+
- "spec/**/*"
|
|
24
|
+
|
|
25
|
+
Style/Documentation:
|
|
26
|
+
Enabled: false
|
|
27
|
+
|
|
28
|
+
Naming/FileName:
|
|
29
|
+
Exclude:
|
|
30
|
+
- "db/schema.rb"
|
|
31
|
+
- "db/migrate/**/*"
|
|
32
|
+
- "Gemfile"
|
|
33
|
+
- "Guardfile"
|
|
34
|
+
- "Rakefile"
|
|
35
|
+
- "config.ru"
|
|
36
|
+
- "package.json"
|
|
37
|
+
- "*.yml"
|
|
38
|
+
- "*.md"
|
|
39
|
+
|
|
40
|
+
Layout/EndOfLine:
|
|
41
|
+
EnforcedStyle: lf
|
|
42
|
+
AutoCorrect: true
|
|
43
|
+
|
|
44
|
+
Layout/LineLength:
|
|
45
|
+
Max: 130
|
|
46
|
+
AllowHeredoc: true
|
|
47
|
+
AllowURI: true
|
|
48
|
+
|
|
49
|
+
Layout/TrailingEmptyLines:
|
|
50
|
+
Enabled: true
|
|
51
|
+
|
|
52
|
+
Metrics/MethodLength:
|
|
53
|
+
Max: 20
|
|
54
|
+
|
|
55
|
+
Metrics/AbcSize:
|
|
56
|
+
Max: 20
|
|
57
|
+
|
|
58
|
+
Metrics/ClassLength:
|
|
59
|
+
Max: 150
|
|
60
|
+
|
|
61
|
+
Naming/VariableNumber:
|
|
62
|
+
Enabled: false
|
|
63
|
+
|
|
64
|
+
RSpec/MultipleExpectations:
|
|
65
|
+
Max: 10
|
|
66
|
+
|
|
67
|
+
RSpec/MultipleMemoizedHelpers:
|
|
68
|
+
Max: 15
|
|
69
|
+
|
|
70
|
+
RSpec/ExampleLength:
|
|
71
|
+
Max: 15
|
data/AGENTS.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Ruby API Pack ActiveCampaign Agent Guide
|
|
2
|
+
|
|
3
|
+
## Repository Snapshot
|
|
4
|
+
|
|
5
|
+
| Field | Value |
|
|
6
|
+
|-------|-------|
|
|
7
|
+
| Project team | `project-ruby` |
|
|
8
|
+
| Repository role | ActiveCampaign API client |
|
|
9
|
+
| Package/artifact | `ruby_api_pack_active_campaign` |
|
|
10
|
+
| Validation gate | `bundle exec rspec` + `bundle exec rubocop` + `gem build ruby_api_pack_active_campaign.gemspec` |
|
|
11
|
+
|
|
12
|
+
## Standard Authority Model
|
|
13
|
+
|
|
14
|
+
| Agent | Role | Authority |
|
|
15
|
+
|-------|------|-----------|
|
|
16
|
+
| Claude Code | Lead implementation and validation | [CLAUDE.md](CLAUDE.md) |
|
|
17
|
+
| OpenAI Codex | Documentation, release readiness, stabilization, and repo hygiene | [CODEX.md](CODEX.md) |
|
|
18
|
+
| ChatGPT | Strategy, coordination, prompt design, and external review | Support only |
|
|
19
|
+
| GitHub Copilot | Development assistance | [COPILOT.md](COPILOT.md) |
|
|
20
|
+
| Google Jules | Bounded automated maintenance | [JULES.md](JULES.md) |
|
|
21
|
+
|
|
22
|
+
Bradley Potts holds final authority for commits, merges, tags, publishing, and
|
|
23
|
+
releases.
|
|
24
|
+
|
|
25
|
+
## Standard Handoff
|
|
26
|
+
|
|
27
|
+
Every AI-prepared change should report files changed, validation performed,
|
|
28
|
+
public behavior or contract impact, and unresolved risks. Do not edit generated
|
|
29
|
+
outputs directly. Do not update [CHANGELOG.md](CHANGELOG.md) unless the change
|
|
30
|
+
is release-relevant.
|
|
31
|
+
|
|
32
|
+
This repository is maintained by PHCDevworks and contains the
|
|
33
|
+
`ruby_api_pack_active_campaign` Ruby gem for ActiveCampaign API helpers.
|
|
34
|
+
|
|
35
|
+
## Upstream Requests and Roadmap Self-Expansion
|
|
36
|
+
|
|
37
|
+
Full directive: project-team [AGENTS.md](../AGENTS.md) "Upstream Requests and
|
|
38
|
+
Roadmap Self-Expansion." Applied to this repo:
|
|
39
|
+
|
|
40
|
+
- This gem has no upstream or downstream dependency on any other repo within
|
|
41
|
+
this workspace — it is an independent gem; do not invent a relationship.
|
|
42
|
+
Any consuming Rails application lives outside this workspace.
|
|
43
|
+
- No repo in this workspace is known to depend on this gem. If one ever does,
|
|
44
|
+
it should append requests to this repo's own `TODO.md` under `##
|
|
45
|
+
Requested by Downstream`, kept visible and separate from self-planned work.
|
|
46
|
+
- This repo's own `ROADMAP.md` may be proactively expanded with new or
|
|
47
|
+
reordered phases by the agent's own analysis — but never mark a phase
|
|
48
|
+
delivered without `bundle exec rspec`, `bundle exec rubocop`, and
|
|
49
|
+
`gem build ruby_api_pack_active_campaign.gemspec` all passing, and never
|
|
50
|
+
introduce a dependency on another `project-ruby` gem without an explicit
|
|
51
|
+
architectural decision (see `project-ruby/CLAUDE.md` "How the Repos
|
|
52
|
+
Relate").
|
|
53
|
+
- Surface any new TODO request or roadmap expansion in the handoff for Bradley
|
|
54
|
+
Potts in the same change it was made, and reflect cross-repo-relevant
|
|
55
|
+
changes in the project-team's own ROADMAP.md/TODO.md.
|
|
56
|
+
|
|
57
|
+
## Shared Source Rules
|
|
58
|
+
|
|
59
|
+
| Path | Status | Notes |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| `lib/ruby_api_pack_active_campaign.rb` | May edit carefully | Public gem entry point |
|
|
62
|
+
| `lib/ruby_api_pack_active_campaign/configuration.rb` | May edit carefully | Public configuration hooks |
|
|
63
|
+
| `lib/ruby_api_pack_active_campaign/connection/` | May edit | Centralized HTTP behavior |
|
|
64
|
+
| `lib/ruby_api_pack_active_campaign/api/` | May edit | Public ActiveCampaign helper surface |
|
|
65
|
+
| `lib/ruby_api_pack_active_campaign/version.rb` | May edit for releases | Gem version authority |
|
|
66
|
+
| `spec/` | May edit | Required for behavior changes |
|
|
67
|
+
| `README.md`, `CHANGELOG.md`, docs | May edit | Keep public guidance synchronized |
|
|
68
|
+
| Credentials, secrets, tokens, production contact data | Never commit | Do not expose ActiveCampaign credentials or customer data |
|
|
69
|
+
|
|
70
|
+
Full validation command:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
bundle exec rspec
|
|
74
|
+
bundle exec rubocop
|
|
75
|
+
gem build ruby_api_pack_active_campaign.gemspec
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Core Rules
|
|
79
|
+
|
|
80
|
+
1. Treat configuration, connection behavior, API helpers, and specs as the
|
|
81
|
+
public behavior contract.
|
|
82
|
+
2. Keep ActiveCampaign credentials behind configuration hooks.
|
|
83
|
+
3. Do not log or document live API tokens, production account URLs, contact
|
|
84
|
+
data, request payloads, or response bodies containing sensitive data.
|
|
85
|
+
4. Keep HTTParty access centralized through the connection wrapper.
|
|
86
|
+
5. Update README and changelog when public usage changes.
|
|
87
|
+
6. Add focused tests for changed API helper behavior.
|
|
88
|
+
7. Preserve unrelated local changes.
|
|
89
|
+
|
|
90
|
+
## Agent-Specific Guides
|
|
91
|
+
|
|
92
|
+
- `CLAUDE.md` - primary implementation workflow.
|
|
93
|
+
- `CODEX.md` - documentation, release readiness, and stabilization workflow.
|
|
94
|
+
- `COPILOT.md` and `.github/copilot-instructions.md` - IDE support workflow.
|
|
95
|
+
- `JULES.md` - bounded automated maintenance workflow.
|
|
96
|
+
|
|
97
|
+
## Pull Request Creation
|
|
98
|
+
|
|
99
|
+
Every agent that opens a PR must populate every section of the repository PR
|
|
100
|
+
template:
|
|
101
|
+
|
|
102
|
+
- Linked issue - issue number (`#N`) or `N/A`
|
|
103
|
+
- Summary of changes - one or two bullets
|
|
104
|
+
- Change type - additive, behavior change, breaking, or docs/config only
|
|
105
|
+
- Checklist - completed items checked; blocked items left unchecked with a note
|
|
106
|
+
|
|
107
|
+
Never submit a PR with an empty body or only template headings.
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the versioning
|
|
5
|
+
reflects gem releases published to RubyGems.
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.2.0] - 2026-07-12
|
|
10
|
+
|
|
11
|
+
**Release Title:** ruby_api_pack_core Alignment and CI Modernization
|
|
12
|
+
|
|
13
|
+
Contract change type: breaking (internal only)
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- Added a runtime dependency on `ruby_api_pack_core` (`~> 0.1`), the new
|
|
18
|
+
shared HTTP client foundation gem for all `ruby_api_pack_*` packs. All
|
|
19
|
+
`RubyApiPackActiveCampaign::Api::AcContacts` methods now validate their
|
|
20
|
+
response shape (`expected_type: :hash`) via
|
|
21
|
+
`RubyApiPackCore::Handlers::ResponseValidator`, aligning this gem's
|
|
22
|
+
response-shape validation with `ruby_api_pack_wordpress` and
|
|
23
|
+
`ruby_api_pack_cloudways`.
|
|
24
|
+
- Added standardized PHCDevworks AI operating guides for shared agent behavior,
|
|
25
|
+
Codex, Claude Code, Copilot, and Jules.
|
|
26
|
+
- Added roadmap and TODO planning documents for ActiveCampaign gem
|
|
27
|
+
stabilization.
|
|
28
|
+
- Added Codex workspace notes and GitHub assistant instructions.
|
|
29
|
+
- Added a docs request issue template and standardized pull request template.
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- Moved CI from GitHub Actions to CircleCI, running RSpec/RuboCop across Ruby
|
|
34
|
+
3.3.4 and 3.4, storing JUnit test results, and uploading coverage/test
|
|
35
|
+
reports to Codecov. Removed the now-redundant `.github/workflows/test.yml`
|
|
36
|
+
and `.github/workflows/codecov.yml`, switched off the local path dependency
|
|
37
|
+
for `ruby_api_pack_core`, added `rspec_junit_formatter` for CI reporting,
|
|
38
|
+
updated the README CI badge, and raised the gem's required Ruby version to
|
|
39
|
+
`>= 3.3.0`.
|
|
40
|
+
- Updated the RuboCop configuration's target Ruby version to 3.3 to match the
|
|
41
|
+
raised baseline.
|
|
42
|
+
- Bumped `actions/checkout` from 4 to 7 in the RubyGems publish workflow
|
|
43
|
+
(dependabot, [#2](https://github.com/phcdevworks/ruby_api_pack_active_campaign/pull/2)),
|
|
44
|
+
then updated that workflow's Ruby version to 3.3.4 (from 3.1) so release
|
|
45
|
+
jobs run on the project's current Ruby version.
|
|
46
|
+
- Bumped development dependencies: `rubocop` to `~> 1.88`, `rubocop-performance`
|
|
47
|
+
to `~> 1.26`, `rubocop-rake` to `~> 0.7.1`, `rubocop-rspec` to `~> 3.10`, and
|
|
48
|
+
`rake` to `~> 13.4`. Removed `capybara`, `dotenv`, `factory_bot`, `faker`,
|
|
49
|
+
`sqlite3`, `vcr`, and `webmock` as unused development dependencies,
|
|
50
|
+
superseding several open Dependabot PRs (#5-#16) that were closed as a
|
|
51
|
+
result.
|
|
52
|
+
- Disabled the `RSpec/DescribeClass` cop for the string-based README version
|
|
53
|
+
sync spec and switched its README row matcher to `%r{}` for cleaner
|
|
54
|
+
escaping.
|
|
55
|
+
- Refreshed GitHub workflows with newer action versions and tighter
|
|
56
|
+
permissions/concurrency, simplified `.github/dependabot.yml`, and
|
|
57
|
+
normalized `FUNDING.yml` format. Raised the gem's minimum Ruby version to
|
|
58
|
+
`>= 3.1.0` to match the CI/runtime baseline (later superseded by the
|
|
59
|
+
`>= 3.3.0` bump above). Added `.claude/settings.json` and expanded Codex
|
|
60
|
+
and Copilot agent guidance.
|
|
61
|
+
- **Breaking (internal only):** Rewrote
|
|
62
|
+
`RubyApiPackActiveCampaign::Connection::AcConnect` to subclass
|
|
63
|
+
`RubyApiPackCore::Connection::Base`, inheriting shared URL building,
|
|
64
|
+
`200..299` status handling, `Oj`-based JSON parsing with a content-type
|
|
65
|
+
guard, and `api_get`/`api_post`/`api_put`/`api_delete` method names
|
|
66
|
+
(renamed from `ac_get_api_connection`/`ac_post_api_connection`/
|
|
67
|
+
`ac_put_api_connection`/`ac_delete_api_connection`). `AcConnect` now only
|
|
68
|
+
implements `#auth_headers`. Public `RubyApiPackActiveCampaign::Api::AcContacts`
|
|
69
|
+
method names are unchanged. This supersedes an earlier unreleased pass that
|
|
70
|
+
added a gem-local `handlers/response_validator.rb` and `ac_api_*`-named
|
|
71
|
+
connection methods — both are now delegated to `ruby_api_pack_core` instead.
|
|
72
|
+
- Removed the gem-local `RubyApiPackActiveCampaign::Handlers::ResponseValidator`
|
|
73
|
+
module and the direct `httparty`/`oj` gemspec dependencies — both now come
|
|
74
|
+
from `ruby_api_pack_core`.
|
|
75
|
+
- `RubyApiPackActiveCampaign.configure`/`.configuration` now come from
|
|
76
|
+
`RubyApiPackCore::Configurable` instead of a gem-local implementation;
|
|
77
|
+
behavior is unchanged.
|
|
78
|
+
- Reworked README, contributing, security, and issue guidance around this gem's
|
|
79
|
+
ActiveCampaign client responsibilities.
|
|
80
|
+
- Corrected the README project identity from a Cloudways label to
|
|
81
|
+
`ruby_api_pack_active_campaign`.
|
|
82
|
+
- Enabled explicit RuboCop new-cop handling and removed duplicate RSpec cop
|
|
83
|
+
configuration.
|
|
84
|
+
- Added RubyGems MFA metadata and removed ActiveCampaign environment-variable
|
|
85
|
+
output from the spec helper.
|
|
86
|
+
- Added `bundler` and `github-actions` ecosystem entries to
|
|
87
|
+
`.github/dependabot.yml` (daily, 10 open-PR limit) to match the dependency
|
|
88
|
+
hygiene used in `phcdevworks_accounts_stytch` and `spectre-tokens` — only
|
|
89
|
+
`devcontainers` was previously configured, so Ruby gem and Actions
|
|
90
|
+
dependencies never received automated update PRs.
|
|
91
|
+
- Added `.coderabbit.yaml` for automated PR review (RuboCop, gitleaks,
|
|
92
|
+
markdownlint, actionlint, semgrep) with path instructions tailored to this
|
|
93
|
+
gem's connection/API helper layers, matching the CodeRabbit setup used in
|
|
94
|
+
`phcdevworks_accounts_stytch` and `spectre-tokens`.
|
|
95
|
+
- Added a `deny` block to `.claude/settings.json` blocking destructive
|
|
96
|
+
commands (`rm -rf`, force-push, `git reset --hard`, `git commit`,
|
|
97
|
+
`gem yank`, etc.), matching the guardrail committed in
|
|
98
|
+
`phcdevworks_accounts_stytch` and `spectre-tokens` — this repo previously
|
|
99
|
+
only had an allow list with no deny-list safety net.
|
|
100
|
+
|
|
101
|
+
### Fixed
|
|
102
|
+
|
|
103
|
+
- Removed a stale `Oj` mention from `SECURITY.md`'s dependency guidance now
|
|
104
|
+
that the `oj` gem dependency is gone.
|
|
105
|
+
|
|
106
|
+
### Removed
|
|
107
|
+
|
|
108
|
+
- Removed the unused `oj` runtime dependency and its `require` from the gem
|
|
109
|
+
entry point; response parsing has always used `JSON.parse` in the
|
|
110
|
+
connection wrapper.
|
|
111
|
+
- Removed a stray `.github/workflows/main.yml` CI workflow left over from
|
|
112
|
+
bundler-gem scaffolding — it targeted a nonexistent `master` branch and
|
|
113
|
+
duplicated `test.yml`.
|
|
114
|
+
|
|
115
|
+
## [0.1.0] - 2024-10-28
|
|
116
|
+
|
|
117
|
+
**Release Title:** Initial ActiveCampaign Contacts API Client
|
|
118
|
+
|
|
119
|
+
Contract change type: initial release
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
|
|
123
|
+
- Initial release of `ruby_api_pack_active_campaign`, a Ruby client gem for
|
|
124
|
+
the ActiveCampaign API.
|
|
125
|
+
- `RubyApiPackActiveCampaign.configure`/`.configuration` for setting the
|
|
126
|
+
ActiveCampaign API URL and token.
|
|
127
|
+
- `RubyApiPackActiveCampaign::Connection::AcConnect`, an HTTParty-based
|
|
128
|
+
connection wrapper handling authenticated GET/POST/PUT/DELETE requests and
|
|
129
|
+
JSON response parsing.
|
|
130
|
+
- `RubyApiPackActiveCampaign::Api::AcContacts`, covering the full set of
|
|
131
|
+
ActiveCampaign contacts endpoints (create, read, update, delete, and list
|
|
132
|
+
operations).
|
|
133
|
+
- Full RSpec test suite with 100% code coverage via Codecov, plus RuboCop
|
|
134
|
+
linting.
|
|
135
|
+
- README, issue templates, and CI/config setup for the initial public
|
|
136
|
+
release.
|
|
137
|
+
|
|
138
|
+
[Unreleased]: https://github.com/phcdevworks/ruby_api_pack_active_campaign/compare/v0.2.0...HEAD
|
|
139
|
+
[0.2.0]: https://github.com/phcdevworks/ruby_api_pack_active_campaign/compare/v0.1.0...v0.2.0
|
|
140
|
+
[0.1.0]: https://github.com/phcdevworks/ruby_api_pack_active_campaign/releases/tag/v0.1.0
|