From 4d6311718551f16647f0ae556238f2cb7d14dda7 Mon Sep 17 00:00:00 2001 From: Petar Date: Tue, 19 Sep 2023 10:27:20 -0400 Subject: [PATCH 1/4] Prepare the namespace for the v4 API --- Gemfile | 2 +- README.md | 26 +++++----- bin/console | 4 +- ...ruby.gemspec => convertkit_v4-ruby.gemspec | 14 +++--- lib/convertkit/client.rb | 31 ------------ lib/{convertkit.rb => convertkit_v4.rb} | 8 +-- lib/convertkit_v4/client.rb | 31 ++++++++++++ .../client/account.rb | 2 +- .../client/custom_fields.rb | 2 +- .../client/forms.rb | 2 +- .../client/sequences.rb | 2 +- .../client/subscribers.rb | 2 +- .../client/tags.rb | 2 +- .../client/webhooks.rb | 2 +- .../configuration.rb | 2 +- .../connection.rb | 10 ++-- lib/{convertkit => convertkit_v4}/errors.rb | 2 +- lib/{convertkit => convertkit_v4}/version.rb | 2 +- spec/convertkit/convertkit_spec.rb | 49 ------------------- .../client/account_spec.rb | 4 +- .../client/custom_fields_spec.rb | 4 +- .../client/forms_spec.rb | 4 +- .../client/sequences_spec.rb | 6 +-- .../client/subscribers_spec.rb | 6 +-- .../client/tags_spec.rb | 6 +-- .../client/webhook_spec.rb | 6 +-- .../client_spec.rb | 4 +- .../connection_spec.rb | 2 +- spec/convertkit_v4/convertkit_spec.rb | 49 +++++++++++++++++++ spec/spec_helper.rb | 6 +-- 30 files changed, 145 insertions(+), 147 deletions(-) rename convertkit-ruby.gemspec => convertkit_v4-ruby.gemspec (77%) delete mode 100644 lib/convertkit/client.rb rename lib/{convertkit.rb => convertkit_v4.rb} (60%) create mode 100644 lib/convertkit_v4/client.rb rename lib/{convertkit => convertkit_v4}/client/account.rb (85%) rename lib/{convertkit => convertkit_v4}/client/custom_fields.rb (96%) rename lib/{convertkit => convertkit_v4}/client/forms.rb (95%) rename lib/{convertkit => convertkit_v4}/client/sequences.rb (95%) rename lib/{convertkit => convertkit_v4}/client/subscribers.rb (98%) rename lib/{convertkit => convertkit_v4}/client/tags.rb (98%) rename lib/{convertkit => convertkit_v4}/client/webhooks.rb (95%) rename lib/{convertkit => convertkit_v4}/configuration.rb (90%) rename lib/{convertkit => convertkit_v4}/connection.rb (90%) rename lib/{convertkit => convertkit_v4}/errors.rb (93%) rename lib/{convertkit => convertkit_v4}/version.rb (53%) delete mode 100644 spec/convertkit/convertkit_spec.rb rename spec/{convertkit => convertkit_v4}/client/account_spec.rb (85%) rename spec/{convertkit => convertkit_v4}/client/custom_fields_spec.rb (95%) rename spec/{convertkit => convertkit_v4}/client/forms_spec.rb (91%) rename spec/{convertkit => convertkit_v4}/client/sequences_spec.rb (90%) rename spec/{convertkit => convertkit_v4}/client/subscribers_spec.rb (96%) rename spec/{convertkit => convertkit_v4}/client/tags_spec.rb (96%) rename spec/{convertkit => convertkit_v4}/client/webhook_spec.rb (91%) rename spec/{convertkit => convertkit_v4}/client_spec.rb (85%) rename spec/{convertkit => convertkit_v4}/connection_spec.rb (98%) create mode 100644 spec/convertkit_v4/convertkit_spec.rb diff --git a/Gemfile b/Gemfile index eacacf1..a99f74c 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -# Specify your gem's dependencies in convertkit-ruby.gemspec +# Specify your gem's dependencies in convertkit_v4-ruby.gemspec gemspec gem 'dotenv', '~> 2.1', '>= 2.1.1' diff --git a/README.md b/README.md index 9258df4..13e9133 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# Convertkit Ruby Client +# Convertkit V4 Ruby Client -A Ruby toolkit for [Convertkit](https://convertkit.com/) API. +A Ruby toolkit for [ConvertkitV4](https://convertkit.com/) API. ## Installation Add this line to your application's Gemfile: ```ruby -gem 'convertkit-ruby', require: 'convertkit' +gem 'convertkit_v4-ruby', require: 'convertkit_v4' ``` And then execute: @@ -16,29 +16,29 @@ And then execute: Or install it yourself as: - $ gem install convertkit-ruby + $ gem install convertkit_v4-ruby ## Authentication -For private integrations, use your personal ``API_KEY`` and ``API_SECRET`` found in [your account settings.](https://app.convertkit.com/account/edit) +For private integrations, use your personal ``API_KEY`` and ``API_SECRET`` found in [your account settings.](https://app.ConvertkitV4.com/account/edit) ```ruby require "dotenv" Dotenv.load(".env.local") -Convertkit.configure do |config| +ConvertkitV4.configure do |config| config.api_secret = ENV["API_SECRET"] config.api_key = ENV["API_KEY"] end -client = Convertkit::Client.new +client = ConvertkitV4::Client.new ``` ## Usage -Calls for Convertkit API v3 are relative to the url [http://api.convertkit.com/v3](http://api.convertkit.com/v3). +Calls for ConvertkitV4 API v3 are relative to the url [developers.convertkit.com](developers.convertkit.com). -API actions are available as methods on the client object. Currently, the Convertkit client has the following methods: +API actions are available as methods on the client object. Currently, the ConvertkitV4 client has the following methods: | Action | Method | @@ -61,9 +61,9 @@ API actions are available as methods on the client object. Currently, the Conver ## Use Cases -Here are some common use cases for the Convertkit v3 API client. +Here are some common use cases for the ConvertkitV4 v4 API client. -First configure the ``convertkit-ruby`` gem with your ``API_KEY`` and ``API_SECRET``, and initialize a new client. After that, you can fetch data from your account. +First configure the ``convertkit_v4-ruby`` gem with your ``API_KEY`` and ``API_SECRET``, and initialize a new client. After that, you can fetch data from your account. ### List subscribers @@ -99,9 +99,9 @@ To install this gem onto your local machine, run `bundle exec rake install`. To ## Contributing -Bug reports and pull requests are welcome on GitHub at https://github.com/Atomoworks/convertkit-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. +Bug reports and pull requests are welcome on GitHub at https://github.com/SparkLoop/convertkit-ruby-v4. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. -1. Fork it ( https://github.com/Atomoworks/convertkit-ruby/fork ) +1. Fork it ( https://github.com/SparkLoop/convertkit-ruby-v4/fork ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) diff --git a/bin/console b/bin/console index a2c3428..90b8e5a 100755 --- a/bin/console +++ b/bin/console @@ -1,12 +1,12 @@ #!/usr/bin/env ruby require "bundler/setup" -require "convertkit" +require "convertkit_v4" require "dotenv" Dotenv.load(".env.local") -Convertkit.configure do |config| +ConvertkitV4.configure do |config| config.api_secret = ENV["API_SECRET"] config.api_key = ENV["API_KEY"] end diff --git a/convertkit-ruby.gemspec b/convertkit_v4-ruby.gemspec similarity index 77% rename from convertkit-ruby.gemspec rename to convertkit_v4-ruby.gemspec index 820c518..452e5b5 100644 --- a/convertkit-ruby.gemspec +++ b/convertkit_v4-ruby.gemspec @@ -1,16 +1,16 @@ # coding: utf-8 lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'convertkit/version' +require 'convertkit_v4/version' Gem::Specification.new do |spec| - spec.name = "convertkit-ruby" - spec.version = Convertkit::VERSION - spec.authors = ["Manuel Frigerio"] - spec.email = ["manuel.frigerio@gmail.com"] + spec.name = "convertkit_v4-ruby" + spec.version = ConvertkitV4::VERSION + spec.authors = ["Manuel Frigerio", "Petar Risteski"] + spec.email = ["manuel.frigerio@gmail.com", "risteskipetar3@gmail.com"] - spec.summary = %q{A Ruby gem for interacting with the ConvertKit API v3} - spec.description = %q{A simple wrapper for the ConvertKit API} + spec.summary = %q{A Ruby gem for interacting with the Convertkit API v4} + spec.description = %q{A simple wrapper for the Convertkit V4 API} spec.homepage = "https://manuel.friger.io" spec.license = "MIT" diff --git a/lib/convertkit/client.rb b/lib/convertkit/client.rb deleted file mode 100644 index 8132d2b..0000000 --- a/lib/convertkit/client.rb +++ /dev/null @@ -1,31 +0,0 @@ -require "convertkit/client/account" -require "convertkit/client/custom_fields" -require "convertkit/client/forms" -require "convertkit/client/sequences" -require "convertkit/client/subscribers" -require "convertkit/client/webhooks" -require "convertkit/client/tags" -require "convertkit/connection" - -module Convertkit - class Client - include Account - include CustomFields - include Forms - include Sequences - include Subscribers - include Webhooks - include Tags - - attr_accessor :api_secret, :api_key - - def initialize( api_key=nil, api_secret=nil ) - @api_secret = api_secret || Convertkit.configuration.api_secret - @api_key = api_key || Convertkit.configuration.api_key - end - - def connection - @connection ||= Connection.new(api_key: api_key, api_secret: api_secret) - end - end -end diff --git a/lib/convertkit.rb b/lib/convertkit_v4.rb similarity index 60% rename from lib/convertkit.rb rename to lib/convertkit_v4.rb index e553f19..c21c0ae 100644 --- a/lib/convertkit.rb +++ b/lib/convertkit_v4.rb @@ -1,8 +1,8 @@ -require "convertkit/version" -require "convertkit/configuration" -require "convertkit/client" +require "convertkit_v4/version" +require "convertkit_v4/configuration" +require "convertkit_v4/client" -module Convertkit +module ConvertkitV4 class << self attr_accessor :configuration end diff --git a/lib/convertkit_v4/client.rb b/lib/convertkit_v4/client.rb new file mode 100644 index 0000000..1008e49 --- /dev/null +++ b/lib/convertkit_v4/client.rb @@ -0,0 +1,31 @@ +require "convertkit_v4/client/account" +require "convertkit_v4/client/custom_fields" +require "convertkit_v4/client/forms" +require "convertkit_v4/client/sequences" +require "convertkit_v4/client/subscribers" +require "convertkit_v4/client/webhooks" +require "convertkit_v4/client/tags" +require "convertkit_v4/connection" + +module ConvertkitV4 + class Client + include Account + include CustomFields + include Forms + include Sequences + include Subscribers + include Webhooks + include Tags + + attr_accessor :api_secret, :api_key + + def initialize( api_key=nil, api_secret=nil ) + @api_secret = api_secret || ConvertkitV4.configuration.api_secret + @api_key = api_key || ConvertkitV4.configuration.api_key + end + + def connection + @connection ||= Connection.new(api_key: api_key, api_secret: api_secret) + end + end +end diff --git a/lib/convertkit/client/account.rb b/lib/convertkit_v4/client/account.rb similarity index 85% rename from lib/convertkit/client/account.rb rename to lib/convertkit_v4/client/account.rb index ee25d3f..4c9401f 100644 --- a/lib/convertkit/client/account.rb +++ b/lib/convertkit_v4/client/account.rb @@ -1,4 +1,4 @@ -module Convertkit +module ConvertkitV4 class Client module Account def account diff --git a/lib/convertkit/client/custom_fields.rb b/lib/convertkit_v4/client/custom_fields.rb similarity index 96% rename from lib/convertkit/client/custom_fields.rb rename to lib/convertkit_v4/client/custom_fields.rb index 6c2fff7..f7a5498 100644 --- a/lib/convertkit/client/custom_fields.rb +++ b/lib/convertkit_v4/client/custom_fields.rb @@ -1,4 +1,4 @@ -module Convertkit +module ConvertkitV4 class Client module CustomFields diff --git a/lib/convertkit/client/forms.rb b/lib/convertkit_v4/client/forms.rb similarity index 95% rename from lib/convertkit/client/forms.rb rename to lib/convertkit_v4/client/forms.rb index fe84c62..7958868 100644 --- a/lib/convertkit/client/forms.rb +++ b/lib/convertkit_v4/client/forms.rb @@ -1,4 +1,4 @@ -module Convertkit +module ConvertkitV4 class Client module Forms def forms diff --git a/lib/convertkit/client/sequences.rb b/lib/convertkit_v4/client/sequences.rb similarity index 95% rename from lib/convertkit/client/sequences.rb rename to lib/convertkit_v4/client/sequences.rb index 2b1bedd..0770b33 100644 --- a/lib/convertkit/client/sequences.rb +++ b/lib/convertkit_v4/client/sequences.rb @@ -1,4 +1,4 @@ -module Convertkit +module ConvertkitV4 class Client module Sequences def sequences diff --git a/lib/convertkit/client/subscribers.rb b/lib/convertkit_v4/client/subscribers.rb similarity index 98% rename from lib/convertkit/client/subscribers.rb rename to lib/convertkit_v4/client/subscribers.rb index 92ecd86..64f66db 100644 --- a/lib/convertkit/client/subscribers.rb +++ b/lib/convertkit_v4/client/subscribers.rb @@ -1,4 +1,4 @@ -module Convertkit +module ConvertkitV4 class Client module Subscribers def subscribers(options = {}) diff --git a/lib/convertkit/client/tags.rb b/lib/convertkit_v4/client/tags.rb similarity index 98% rename from lib/convertkit/client/tags.rb rename to lib/convertkit_v4/client/tags.rb index 282e13c..4bb322b 100644 --- a/lib/convertkit/client/tags.rb +++ b/lib/convertkit_v4/client/tags.rb @@ -1,4 +1,4 @@ -module Convertkit +module ConvertkitV4 class Client module Tags def tags diff --git a/lib/convertkit/client/webhooks.rb b/lib/convertkit_v4/client/webhooks.rb similarity index 95% rename from lib/convertkit/client/webhooks.rb rename to lib/convertkit_v4/client/webhooks.rb index e2d6b5a..09a718d 100644 --- a/lib/convertkit/client/webhooks.rb +++ b/lib/convertkit_v4/client/webhooks.rb @@ -1,4 +1,4 @@ -module Convertkit +module ConvertkitV4 class Client module Webhooks def webhooks diff --git a/lib/convertkit/configuration.rb b/lib/convertkit_v4/configuration.rb similarity index 90% rename from lib/convertkit/configuration.rb rename to lib/convertkit_v4/configuration.rb index 07fe421..57e1784 100644 --- a/lib/convertkit/configuration.rb +++ b/lib/convertkit_v4/configuration.rb @@ -1,4 +1,4 @@ -module Convertkit +module ConvertkitV4 class Configuration attr_accessor :api_secret, :api_key attr_accessor :timeout, :open_timeout diff --git a/lib/convertkit/connection.rb b/lib/convertkit_v4/connection.rb similarity index 90% rename from lib/convertkit/connection.rb rename to lib/convertkit_v4/connection.rb index a3fa832..d38884d 100644 --- a/lib/convertkit/connection.rb +++ b/lib/convertkit_v4/connection.rb @@ -1,9 +1,9 @@ -require "convertkit/errors" +require "convertkit_v4/errors" require "faraday" require "faraday_middleware" require "json" -module Convertkit +module ConvertkitV4 class Connection attr_reader :http_connection @@ -38,10 +38,10 @@ def faraday_connection(api_key, api_secret) f.url_prefix = "https://api.convertkit.com/v3/" f.adapter :net_http - f.options.timeout = Convertkit.configuration.timeout - f.options.open_timeout = Convertkit.configuration.open_timeout + f.options.timeout = ConvertkitV4.configuration.timeout + f.options.open_timeout = ConvertkitV4.configuration.open_timeout - f.headers['User-Agent'] = "Convertkit-Ruby v#{Convertkit::VERSION}" + f.headers['User-Agent'] = "Convertkit-Ruby v#{ConvertkitV4::VERSION}" f.headers['Content-Type'] = content_type f.headers['Accept'] = "*/*" diff --git a/lib/convertkit/errors.rb b/lib/convertkit_v4/errors.rb similarity index 93% rename from lib/convertkit/errors.rb rename to lib/convertkit_v4/errors.rb index d168e78..0b05077 100644 --- a/lib/convertkit/errors.rb +++ b/lib/convertkit_v4/errors.rb @@ -1,4 +1,4 @@ -module Convertkit +module ConvertkitV4 class Error < StandardError; end class AuthorizationError < Error; end diff --git a/lib/convertkit/version.rb b/lib/convertkit_v4/version.rb similarity index 53% rename from lib/convertkit/version.rb rename to lib/convertkit_v4/version.rb index 48d0019..ce4adf1 100644 --- a/lib/convertkit/version.rb +++ b/lib/convertkit_v4/version.rb @@ -1,3 +1,3 @@ -module Convertkit +module ConvertkitV4 VERSION = "1.0.0" end \ No newline at end of file diff --git a/spec/convertkit/convertkit_spec.rb b/spec/convertkit/convertkit_spec.rb deleted file mode 100644 index 875c767..0000000 --- a/spec/convertkit/convertkit_spec.rb +++ /dev/null @@ -1,49 +0,0 @@ -require "spec_helper" - -describe Convertkit do - it 'has a version number' do - expect(Convertkit::VERSION).not_to be nil - end - - describe "#configure" do - before do - @old_configuration = Convertkit.configuration.dup - end - - after do - Convertkit.configuration = @old_configuration - end - - it "sets the api_secret value" do - Convertkit.configure do |config| - config.api_secret = "new_secret" - end - - expect(Convertkit.configuration.api_secret).to eql("new_secret") - end - - it "sets the api_key value" do - Convertkit.configure do |config| - config.api_key = "new_key" - end - - expect(Convertkit.configuration.api_key).to eql("new_key") - end - - it "sets the timeout value" do - Convertkit.configure do |config| - config.timeout = 10 - end - - expect(Convertkit.configuration.timeout).to eql(10) - end - - it "sets the open_timeout value" do - Convertkit.configure do |config| - config.open_timeout = 10 - end - - expect(Convertkit.configuration.open_timeout).to eql(10) - end - end -end diff --git a/spec/convertkit/client/account_spec.rb b/spec/convertkit_v4/client/account_spec.rb similarity index 85% rename from spec/convertkit/client/account_spec.rb rename to spec/convertkit_v4/client/account_spec.rb index d455d8b..2ab6d5c 100644 --- a/spec/convertkit/client/account_spec.rb +++ b/spec/convertkit_v4/client/account_spec.rb @@ -1,10 +1,10 @@ require "spec_helper" -module Convertkit +module ConvertkitV4 class Client describe Account do before do - @client = Convertkit::Client.new + @client = ConvertkitV4::Client.new end describe "#account" do diff --git a/spec/convertkit/client/custom_fields_spec.rb b/spec/convertkit_v4/client/custom_fields_spec.rb similarity index 95% rename from spec/convertkit/client/custom_fields_spec.rb rename to spec/convertkit_v4/client/custom_fields_spec.rb index 6737e1e..3305e01 100644 --- a/spec/convertkit/client/custom_fields_spec.rb +++ b/spec/convertkit_v4/client/custom_fields_spec.rb @@ -1,10 +1,10 @@ require "spec_helper" -module Convertkit +module ConvertkitV4 class Client describe CustomFields do before do - @client = Convertkit::Client.new + @client = ConvertkitV4::Client.new end describe "#custom_fields" do diff --git a/spec/convertkit/client/forms_spec.rb b/spec/convertkit_v4/client/forms_spec.rb similarity index 91% rename from spec/convertkit/client/forms_spec.rb rename to spec/convertkit_v4/client/forms_spec.rb index 7ec1a56..9d3fa1e 100644 --- a/spec/convertkit/client/forms_spec.rb +++ b/spec/convertkit_v4/client/forms_spec.rb @@ -1,10 +1,10 @@ require "spec_helper" -module Convertkit +module ConvertkitV4 class Client describe Forms do before do - @client = Convertkit::Client.new + @client = ConvertkitV4::Client.new end describe "#forms" do diff --git a/spec/convertkit/client/sequences_spec.rb b/spec/convertkit_v4/client/sequences_spec.rb similarity index 90% rename from spec/convertkit/client/sequences_spec.rb rename to spec/convertkit_v4/client/sequences_spec.rb index 5f01b97..5c515c0 100644 --- a/spec/convertkit/client/sequences_spec.rb +++ b/spec/convertkit_v4/client/sequences_spec.rb @@ -1,15 +1,15 @@ require "spec_helper" -module Convertkit +module ConvertkitV4 class Client describe Sequences do before do - Convertkit.configure do |config| + ConvertkitV4.configure do |config| config.api_secret = ENV["API_SECRET"] config.api_key = ENV["API_KEY"] end - @client = Convertkit::Client.new + @client = ConvertkitV4::Client.new end describe "#sequences" do diff --git a/spec/convertkit/client/subscribers_spec.rb b/spec/convertkit_v4/client/subscribers_spec.rb similarity index 96% rename from spec/convertkit/client/subscribers_spec.rb rename to spec/convertkit_v4/client/subscribers_spec.rb index 5657cea..cb12048 100644 --- a/spec/convertkit/client/subscribers_spec.rb +++ b/spec/convertkit_v4/client/subscribers_spec.rb @@ -1,16 +1,16 @@ require "spec_helper" require "securerandom" -module Convertkit +module ConvertkitV4 class Client describe Subscribers do before do - Convertkit.configure do |config| + ConvertkitV4.configure do |config| config.api_secret = ENV["API_SECRET"] config.api_key = ENV["API_KEY"] end - @client = Convertkit::Client.new + @client = ConvertkitV4::Client.new end describe "#subscribers" do diff --git a/spec/convertkit/client/tags_spec.rb b/spec/convertkit_v4/client/tags_spec.rb similarity index 96% rename from spec/convertkit/client/tags_spec.rb rename to spec/convertkit_v4/client/tags_spec.rb index 5e6d0c1..5ca9d6d 100644 --- a/spec/convertkit/client/tags_spec.rb +++ b/spec/convertkit_v4/client/tags_spec.rb @@ -1,16 +1,16 @@ require "spec_helper" require "securerandom" -module Convertkit +module ConvertkitV4 class Client describe Tags do before do - Convertkit.configure do |config| + ConvertkitV4.configure do |config| config.api_secret = ENV["API_SECRET"] config.api_key = ENV["API_KEY"] end - @client = Convertkit::Client.new + @client = ConvertkitV4::Client.new end describe "#tags" do diff --git a/spec/convertkit/client/webhook_spec.rb b/spec/convertkit_v4/client/webhook_spec.rb similarity index 91% rename from spec/convertkit/client/webhook_spec.rb rename to spec/convertkit_v4/client/webhook_spec.rb index 8715b08..45be9a7 100644 --- a/spec/convertkit/client/webhook_spec.rb +++ b/spec/convertkit_v4/client/webhook_spec.rb @@ -1,16 +1,16 @@ require "spec_helper" require "securerandom" -module Convertkit +module ConvertkitV4 class Client describe Webhooks do before do - Convertkit.configure do |config| + ConvertkitV4.configure do |config| config.api_secret = ENV["API_SECRET"] config.api_key = ENV["API_KEY"] end - @client = Convertkit::Client.new + @client = ConvertkitV4::Client.new @url = "https://webhook.site/2bc3b03e-0f34-4a00-b2a9-028eff304f50" @events = {"name": "subscriber.subscriber_activate"} @rule_id = 1175937 diff --git a/spec/convertkit/client_spec.rb b/spec/convertkit_v4/client_spec.rb similarity index 85% rename from spec/convertkit/client_spec.rb rename to spec/convertkit_v4/client_spec.rb index 47e9b4b..d57ce33 100644 --- a/spec/convertkit/client_spec.rb +++ b/spec/convertkit_v4/client_spec.rb @@ -1,10 +1,10 @@ require "spec_helper" require "base64" -module Convertkit +module ConvertkitV4 describe Client do before :each do - @client = Convertkit::Client.new + @client = ConvertkitV4::Client.new end describe "#initialize" do diff --git a/spec/convertkit/connection_spec.rb b/spec/convertkit_v4/connection_spec.rb similarity index 98% rename from spec/convertkit/connection_spec.rb rename to spec/convertkit_v4/connection_spec.rb index 52b41fb..3b74260 100644 --- a/spec/convertkit/connection_spec.rb +++ b/spec/convertkit_v4/connection_spec.rb @@ -1,6 +1,6 @@ require "spec_helper" -module Convertkit +module ConvertkitV4 describe Connection do describe "#initialize" do it "uses api key" do diff --git a/spec/convertkit_v4/convertkit_spec.rb b/spec/convertkit_v4/convertkit_spec.rb new file mode 100644 index 0000000..71b6f07 --- /dev/null +++ b/spec/convertkit_v4/convertkit_spec.rb @@ -0,0 +1,49 @@ +require "spec_helper" + +describe ConvertkitV4 do + it 'has a version number' do + expect(ConvertkitV4::VERSION).not_to be nil + end + + describe "#configure" do + before do + @old_configuration = ConvertkitV4.configuration.dup + end + + after do + ConvertkitV4.configuration = @old_configuration + end + + it "sets the api_secret value" do + ConvertkitV4.configure do |config| + config.api_secret = "new_secret" + end + + expect(ConvertkitV4.configuration.api_secret).to eql("new_secret") + end + + it "sets the api_key value" do + ConvertkitV4.configure do |config| + config.api_key = "new_key" + end + + expect(ConvertkitV4.configuration.api_key).to eql("new_key") + end + + it "sets the timeout value" do + ConvertkitV4.configure do |config| + config.timeout = 10 + end + + expect(ConvertkitV4.configuration.timeout).to eql(10) + end + + it "sets the open_timeout value" do + ConvertkitV4.configure do |config| + config.open_timeout = 10 + end + + expect(ConvertkitV4.configuration.open_timeout).to eql(10) + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 1340fdd..30b39b1 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,12 +1,12 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__) -require 'convertkit' +require 'convertkit_v4' require "dotenv" Dotenv.load(".env.local") require 'webmock/rspec' require 'vcr' -Convertkit.configure do |config| +ConvertkitV4.configure do |config| config.api_secret = ENV["API_SECRET"] config.api_key = ENV["API_KEY"] end @@ -20,5 +20,3 @@ end WebMock.allow_net_connect! - - From 339baaccfb45740be7422bf0cb6562c615942e73 Mon Sep 17 00:00:00 2001 From: Petar Date: Wed, 20 Sep 2023 10:20:20 -0400 Subject: [PATCH 2/4] Changes for api v4 --- bin/console | 5 ++-- fixtures/vcr_cassettes/account.yml | 4 ++-- .../vcr_cassettes/add_subscriber_to_form.yml | 4 ++-- .../vcr_cassettes/delete_custom_field.yml | 4 ++-- fixtures/vcr_cassettes/forms.yml | 4 ++-- fixtures/vcr_cassettes/get_custom_fields.yml | 4 ++-- fixtures/vcr_cassettes/new_custom_field.yml | 4 ++-- .../vcr_cassettes/update_custom_field.yml | 4 ++-- lib/convertkit_v4/client.rb | 23 +++++++++++++++---- lib/convertkit_v4/configuration.rb | 2 +- lib/convertkit_v4/connection.rb | 17 +++++++------- spec/convertkit_v4/client_spec.rb | 12 ++++++---- spec/convertkit_v4/connection_spec.rb | 17 ++++---------- ...nvertkit_spec.rb => convertkit_v4_spec.rb} | 14 +++-------- spec/spec_helper.rb | 6 ++--- 15 files changed, 63 insertions(+), 61 deletions(-) rename spec/convertkit_v4/{convertkit_spec.rb => convertkit_v4_spec.rb} (68%) diff --git a/bin/console b/bin/console index 90b8e5a..94a2fc5 100755 --- a/bin/console +++ b/bin/console @@ -7,8 +7,9 @@ require "dotenv" Dotenv.load(".env.local") ConvertkitV4.configure do |config| - config.api_secret = ENV["API_SECRET"] - config.api_key = ENV["API_KEY"] + config.client_id = ENV["CONVERTKIT_CLIENT_ID"] + config.client_secret = ENV["CONVERTKIT_CLIENT_SECRET"] + config.redirect_uri = ENV["CONVERTKIT_REDIRECT_URI"] end # You can add fixtures and/or initialization code here to make experimenting diff --git a/fixtures/vcr_cassettes/account.yml b/fixtures/vcr_cassettes/account.yml index b0b9f3b..0e29e0e 100644 --- a/fixtures/vcr_cassettes/account.yml +++ b/fixtures/vcr_cassettes/account.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://api.convertkit.com/v3/account?api_key=&api_secret= + uri: https://api.convertkit.com/v3/account?access_token= body: encoding: US-ASCII string: '' @@ -10,7 +10,7 @@ http_interactions: User-Agent: - Convertkit-Ruby v0.0.2 Content-Type: - - application/vnd.api+json + - application/json Accept: - "*/*" Accept-Encoding: diff --git a/fixtures/vcr_cassettes/add_subscriber_to_form.yml b/fixtures/vcr_cassettes/add_subscriber_to_form.yml index 0455c45..7cf87f3 100644 --- a/fixtures/vcr_cassettes/add_subscriber_to_form.yml +++ b/fixtures/vcr_cassettes/add_subscriber_to_form.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://api.convertkit.com/v3/forms/175221/subscribe?api_key=&api_secret=&email=test@example.com&fields&first_name&tags + uri: https://api.convertkit.com/v3/forms/175221/subscribe?access_token=&email=test@example.com&fields&first_name&tags body: encoding: UTF-8 string: '' @@ -10,7 +10,7 @@ http_interactions: User-Agent: - Convertkit-Ruby v0.0.2 Content-Type: - - application/vnd.api+json + - application/json Accept: - "*/*" Content-Length: diff --git a/fixtures/vcr_cassettes/delete_custom_field.yml b/fixtures/vcr_cassettes/delete_custom_field.yml index c65def7..6555f65 100644 --- a/fixtures/vcr_cassettes/delete_custom_field.yml +++ b/fixtures/vcr_cassettes/delete_custom_field.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: delete - uri: https://api.convertkit.com/v3/custom_fields/11176?api_key=&api_secret= + uri: https://api.convertkit.com/v3/custom_fields/11176?access_token= body: encoding: US-ASCII string: '' @@ -10,7 +10,7 @@ http_interactions: User-Agent: - Convertkit-Ruby v0.0.2 Content-Type: - - application/vnd.api+json + - application/json Accept: - "*/*" Accept-Encoding: diff --git a/fixtures/vcr_cassettes/forms.yml b/fixtures/vcr_cassettes/forms.yml index 2783691..276a9eb 100644 --- a/fixtures/vcr_cassettes/forms.yml +++ b/fixtures/vcr_cassettes/forms.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://api.convertkit.com/v3/forms?api_key=&api_secret= + uri: https://api.convertkit.com/v3/forms?access_token= body: encoding: US-ASCII string: '' @@ -10,7 +10,7 @@ http_interactions: User-Agent: - Convertkit-Ruby v0.0.2 Content-Type: - - application/vnd.api+json + - application/json Accept: - "*/*" Accept-Encoding: diff --git a/fixtures/vcr_cassettes/get_custom_fields.yml b/fixtures/vcr_cassettes/get_custom_fields.yml index f5b911d..e4a809c 100644 --- a/fixtures/vcr_cassettes/get_custom_fields.yml +++ b/fixtures/vcr_cassettes/get_custom_fields.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: get - uri: https://api.convertkit.com/v3/custom_fields?api_key=&api_secret= + uri: https://api.convertkit.com/v3/custom_fields?access_token= body: encoding: US-ASCII string: '' @@ -10,7 +10,7 @@ http_interactions: User-Agent: - Convertkit-Ruby v0.0.2 Content-Type: - - application/vnd.api+json + - application/json Accept: - "*/*" Accept-Encoding: diff --git a/fixtures/vcr_cassettes/new_custom_field.yml b/fixtures/vcr_cassettes/new_custom_field.yml index 8d9d555..03a76cd 100644 --- a/fixtures/vcr_cassettes/new_custom_field.yml +++ b/fixtures/vcr_cassettes/new_custom_field.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: post - uri: https://api.convertkit.com/v3/custom_fields?api_key=&api_secret=&label=Occupation + uri: https://api.convertkit.com/v3/custom_fields?access_token=&label=Occupation body: encoding: UTF-8 string: '' @@ -10,7 +10,7 @@ http_interactions: User-Agent: - Convertkit-Ruby v0.0.2 Content-Type: - - application/vnd.api+json + - application/json Accept: - "*/*" Content-Length: diff --git a/fixtures/vcr_cassettes/update_custom_field.yml b/fixtures/vcr_cassettes/update_custom_field.yml index d49e84b..e0489a2 100644 --- a/fixtures/vcr_cassettes/update_custom_field.yml +++ b/fixtures/vcr_cassettes/update_custom_field.yml @@ -2,7 +2,7 @@ http_interactions: - request: method: put - uri: https://api.convertkit.com/v3/custom_fields/11184?api_key=&api_secret=&label=Discount%20Code + uri: https://api.convertkit.com/v3/custom_fields/11184?access_token=&label=Discount%20Code body: encoding: UTF-8 string: '' @@ -10,7 +10,7 @@ http_interactions: User-Agent: - Convertkit-Ruby v0.0.2 Content-Type: - - application/vnd.api+json + - application/json Accept: - "*/*" Content-Length: diff --git a/lib/convertkit_v4/client.rb b/lib/convertkit_v4/client.rb index 1008e49..3b9d104 100644 --- a/lib/convertkit_v4/client.rb +++ b/lib/convertkit_v4/client.rb @@ -17,15 +17,28 @@ class Client include Webhooks include Tags - attr_accessor :api_secret, :api_key + attr_accessor :access_token, :refresh_token, :client_id, :client_secret, :redirect_uri - def initialize( api_key=nil, api_secret=nil ) - @api_secret = api_secret || ConvertkitV4.configuration.api_secret - @api_key = api_key || ConvertkitV4.configuration.api_key + AUTH_URL = "https://app.convertkit.com/oauth/authorize" + + def initialize(access_token: nil, refresh_token: nil, client_id: nil, client_secret: nil, redirect_uri: nil) + @access_token = access_token + @refresh_token = refresh_token + + @client_id = client_id || ConvertkitV4.configuration.client_id + @client_secret = client_secret || ConvertkitV4.configuration.client_secret + @redirect_uri = redirect_uri || ConvertkitV4.configuration.redirect_uri end def connection - @connection ||= Connection.new(api_key: api_key, api_secret: api_secret) + @connection ||= Connection.new(access_token: @access_token) + end + + def authorize + Faraday.new(url: AUTH_URL).get do |req| + req.headers["Content-Type"] = "application/json" + req.params = { client_id: @client_id, redirect_uri: @redirect_uri } + end end end end diff --git a/lib/convertkit_v4/configuration.rb b/lib/convertkit_v4/configuration.rb index 57e1784..74cdfee 100644 --- a/lib/convertkit_v4/configuration.rb +++ b/lib/convertkit_v4/configuration.rb @@ -1,6 +1,6 @@ module ConvertkitV4 class Configuration - attr_accessor :api_secret, :api_key + attr_accessor :client_id, :client_secret, :redirect_uri, :access_token, :refresh_token attr_accessor :timeout, :open_timeout def initialize diff --git a/lib/convertkit_v4/connection.rb b/lib/convertkit_v4/connection.rb index d38884d..502293a 100644 --- a/lib/convertkit_v4/connection.rb +++ b/lib/convertkit_v4/connection.rb @@ -7,12 +7,15 @@ module ConvertkitV4 class Connection attr_reader :http_connection - def initialize(api_key: nil, api_secret: nil) - @http_connection = faraday_connection(api_key, api_secret) + API_URL = "https://api.convertkit.com/" + API_VERSION_PATH = "alpha/" + + def initialize(access_token: nil) + @http_connection = faraday_connection(access_token) end def content_type - "application/vnd.api+json" + "application/json" end def get(*args, &blk) @@ -33,20 +36,18 @@ def delete(*args, &blk) private - def faraday_connection(api_key, api_secret) + def faraday_connection(access_token) Faraday.new do |f| - f.url_prefix = "https://api.convertkit.com/v3/" + f.url_prefix = "#{API_URL}#{API_VERSION_PATH}" f.adapter :net_http f.options.timeout = ConvertkitV4.configuration.timeout f.options.open_timeout = ConvertkitV4.configuration.open_timeout - f.headers['User-Agent'] = "Convertkit-Ruby v#{ConvertkitV4::VERSION}" f.headers['Content-Type'] = content_type f.headers['Accept'] = "*/*" - f.params['api_secret'] = api_secret if api_secret - f.params['api_key'] = api_key if api_key + f.params['access_token'] = access_token if access_token f.response :json, content_type: /\bjson$/ end diff --git a/spec/convertkit_v4/client_spec.rb b/spec/convertkit_v4/client_spec.rb index d57ce33..05eaabc 100644 --- a/spec/convertkit_v4/client_spec.rb +++ b/spec/convertkit_v4/client_spec.rb @@ -8,12 +8,16 @@ module ConvertkitV4 end describe "#initialize" do - it "has a default api_secret value" do - expect(@client.api_secret).to eq(ENV["API_SECRET"]) + it "has a default client_id value" do + expect(@client.client_id).to eq(ENV["CONVERTKIT_CLIENT_ID"]) end - it "has a default api_key value" do - expect(@client.api_key).to eq(ENV["API_KEY"]) + it "has a default client_secret value" do + expect(@client.client_secret).to eq(ENV["CONVERTKIT_CLIENT_SECRET"]) + end + + it "has a default redirect_uri value" do + expect(@client.redirect_uri).to eq(ENV["CONVERTKIT_REDIRECT_URI"]) end end end diff --git a/spec/convertkit_v4/connection_spec.rb b/spec/convertkit_v4/connection_spec.rb index 3b74260..0c2a899 100644 --- a/spec/convertkit_v4/connection_spec.rb +++ b/spec/convertkit_v4/connection_spec.rb @@ -3,24 +3,17 @@ module ConvertkitV4 describe Connection do describe "#initialize" do - it "uses api key" do - api_key = "api_key" - connection = Connection.new(api_key: api_key) + it "uses access_token" do + access_token = "access_token" + connection = Connection.new(access_token: access_token) - expect(connection.http_connection.params["api_key"]).to eq(api_key) - end - - it "uses api secret" do - api_secret = "api_secret" - connection = Connection.new(api_secret: api_secret) - - expect(connection.http_connection.params["api_secret"]).to eq(api_secret) + expect(connection.http_connection.params["access_token"]).to eq(access_token) end end describe "error handling" do before do - @connection = Connection.new(api_key: "api_key") + @connection = Connection.new(access_token: "access_token") end it "handles 401 errors" do diff --git a/spec/convertkit_v4/convertkit_spec.rb b/spec/convertkit_v4/convertkit_v4_spec.rb similarity index 68% rename from spec/convertkit_v4/convertkit_spec.rb rename to spec/convertkit_v4/convertkit_v4_spec.rb index 71b6f07..b04c5a6 100644 --- a/spec/convertkit_v4/convertkit_spec.rb +++ b/spec/convertkit_v4/convertkit_v4_spec.rb @@ -14,20 +14,12 @@ ConvertkitV4.configuration = @old_configuration end - it "sets the api_secret value" do + it "sets the client_id value" do ConvertkitV4.configure do |config| - config.api_secret = "new_secret" + config.client_id = "new_client_id" end - expect(ConvertkitV4.configuration.api_secret).to eql("new_secret") - end - - it "sets the api_key value" do - ConvertkitV4.configure do |config| - config.api_key = "new_key" - end - - expect(ConvertkitV4.configuration.api_key).to eql("new_key") + expect(ConvertkitV4.configuration.client_id).to eql("new_client_id") end it "sets the timeout value" do diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 30b39b1..da97bce 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -7,15 +7,13 @@ require 'vcr' ConvertkitV4.configure do |config| - config.api_secret = ENV["API_SECRET"] - config.api_key = ENV["API_KEY"] + config.access_token = ENV["CONVERTKIT_ACCESS_TOKEN"] end VCR.configure do |config| config.cassette_library_dir = "fixtures/vcr_cassettes" config.hook_into :webmock - config.filter_sensitive_data("") { ENV["API_SECRET"] } - config.filter_sensitive_data("") { ENV["API_KEY"] } + config.filter_sensitive_data("") { ENV["CONVERTKIT_ACCESS_TOKEN"] } config.allow_http_connections_when_no_cassette = true end From 4249e1ed49a2b5e7428e90303464093877b8383c Mon Sep 17 00:00:00 2001 From: Petar Date: Wed, 20 Sep 2023 10:35:52 -0400 Subject: [PATCH 3/4] Access token and refresh token --- lib/convertkit_v4/client.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/convertkit_v4/client.rb b/lib/convertkit_v4/client.rb index 3b9d104..8495b5d 100644 --- a/lib/convertkit_v4/client.rb +++ b/lib/convertkit_v4/client.rb @@ -20,6 +20,7 @@ class Client attr_accessor :access_token, :refresh_token, :client_id, :client_secret, :redirect_uri AUTH_URL = "https://app.convertkit.com/oauth/authorize" + ACCESS_TOKEN_URL = "https://app.convertkit.com/oauth/token" def initialize(access_token: nil, refresh_token: nil, client_id: nil, client_secret: nil, redirect_uri: nil) @access_token = access_token @@ -40,5 +41,30 @@ def authorize req.params = { client_id: @client_id, redirect_uri: @redirect_uri } end end + + def get_access_token(code) + Faraday.new(url: ACCESS_TOKEN_URL).post do |req| + req.headers["Content-Type"] = "application/json" + req.params = { + client_id: @client_id, + client_secret: @client_secret, + code: code, + grant_type: "authorization_code", + redirect_uri: @redirect_uri + } + end + end + + def refresh_token + Faraday.new(url: ACCESS_TOKEN_URL).post do |req| + req.headers["Content-Type"] = "application/json" + req.params = { + client_id: @client_id, + client_secret: @client_secret, + refresh_token: @refresh_token, + grant_type: "refresh_token" + } + end + end end end From 71621ba228d19f6856301b4a93c4254cb3390ab3 Mon Sep 17 00:00:00 2001 From: Petar Date: Wed, 20 Sep 2023 10:38:34 -0400 Subject: [PATCH 4/4] Revoke access --- lib/convertkit_v4/client.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/convertkit_v4/client.rb b/lib/convertkit_v4/client.rb index 8495b5d..4a69183 100644 --- a/lib/convertkit_v4/client.rb +++ b/lib/convertkit_v4/client.rb @@ -21,6 +21,7 @@ class Client AUTH_URL = "https://app.convertkit.com/oauth/authorize" ACCESS_TOKEN_URL = "https://app.convertkit.com/oauth/token" + REVOKE_ACCESS_URL = "https://app.convertkit.com/oauth/revoke" def initialize(access_token: nil, refresh_token: nil, client_id: nil, client_secret: nil, redirect_uri: nil) @access_token = access_token @@ -66,5 +67,16 @@ def refresh_token } end end + + def revoke_access + Faraday.new(url: REVOKE_ACCESS_URL).post do |req| + req.headers["Content-Type"] = "application/json" + req.params = { + client_id: @client_id, + client_secret: @client_secret, + token: @access_token + } + end + end end end