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 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
@@ -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
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
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