Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ This project adheres to [Semantic Versioning](http://semver.org/).

This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/).

## [2.1.0] - 2025-08-06

### Added
- New `use_fields_version` method in Fields module to override API version specifically for fields operations
- Fields-specific version override functionality that allows resources to use different API versions for fields vs general operations
- `fields_api_version` method to query the fields-specific API version

### Changed
- Activity resource now uses `use_fields_version :v1` instead of `use_version :v1` to override version only for fields operations
- Activity general operations now use v2 API while fields operations continue to use v1 API as required by Pipedrive

Comment thread
j4rs marked this conversation as resolved.
## [2.0.1] - 2025-04-17

- Fix bugs introduced with version 2 where the base URL for v1 was broken.
Expand Down
34 changes: 33 additions & 1 deletion lib/pipedrive/fields.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,24 @@ class << base
end

module ClassMethods
# Set version specifically for fields operations
def use_fields_version(version)
@fields_version = version
end

# override the default version with the one provided
def api_version
return @version if @version

# Fall back to original Request module logic if no version override
super
end

# Fields-specific API version
def fields_api_version
@fields_version || api_version
end

def fields
url = fields_url || "#{class_name.downcase}Fields"

Expand All @@ -18,7 +36,7 @@ def fields
request_more_fields = true

while request_more_fields
response = request(:get, url, start: start)
response = fields_request(:get, url, start: start)
data.concat(response.dig(:data))
# Check wether there are more fields to bring
metadata = response.dig(:additional_data, :pagination)
Expand All @@ -40,6 +58,20 @@ def fields
end
[dicc, data]
end

# Fields-specific request method that uses fields_api_version
private def fields_request(method, url, params = {})
# Temporarily override the api_version for this request
original_version = @version
@version = @fields_version if @fields_version

begin
request(method, url, params)
ensure
# Restore original version
@version = original_version
end
end
end

def fields
Expand Down
5 changes: 5 additions & 0 deletions lib/pipedrive/resources/activity.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
module Pipedrive
class Activity < Resource
include Fields

# fields are only available in v1
# https://developers.pipedrive.com/docs/api/v1/ActivityFields#getActivityFields
use_fields_version :v1

self.resources_url = "activities"

def self.supports_v2_api?
Expand Down
2 changes: 1 addition & 1 deletion lib/pipedrive/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# frozen_string_literal: true

module Pipedrive
VERSION = "2.0.1"
VERSION = "2.1.0"
end
47 changes: 45 additions & 2 deletions spec/lib/pipedrive/activity_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,52 @@
end
end

describe "default v2 api version" do
it "returns v2 api version" do
describe "api version behavior" do
context "when global Pipedrive is set to v2" do
before { Pipedrive.use_v2_api! }
after { Pipedrive.use_v2_api! }

it "uses v2 for general operations" do
expect(described_class.api_version).to eq(:v2)
end

it "uses v1 specifically for fields operations" do
expect(described_class.fields_api_version).to eq(:v1)
end
end

context "when global Pipedrive is set to v1" do
before { Pipedrive.use_v1_api! }
after { Pipedrive.use_v2_api! }

it "uses v1 for general operations" do
expect(described_class.api_version).to eq(:v1)
end

it "still uses v1 for fields operations" do
expect(described_class.fields_api_version).to eq(:v1)
end
end
end

describe "fields version override" do
it "overrides fields version independently of general API version" do
Pipedrive.use_v2_api!

# General API operations use v2
expect(Pipedrive.api_version).to eq(:v2)
expect(described_class.api_version).to eq(:v2)

# But fields operations use v1
expect(described_class.fields_api_version).to eq(:v1)
end

it "responds to fields_api_version method" do
expect(described_class).to respond_to(:fields_api_version)
end

it "responds to use_fields_version method" do
expect(described_class).to respond_to(:use_fields_version)
end
end
end