active_campaign 0.1.14 → 0.1.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.codeclimate.yml +25 -3
- data/.rubocop.yml +21 -9
- data/.simplecov +9 -0
- data/.travis.yml +32 -12
- data/Changelog.md +14 -3
- data/Gemfile +2 -19
- data/README.md +13 -3
- data/Rakefile +4 -2
- data/active_campaign.gemspec +16 -3
- data/lib/active_campaign.rb +13 -15
- data/lib/active_campaign/client.rb +32 -29
- data/lib/active_campaign/client/campaigns.rb +86 -15
- data/lib/active_campaign/client/contacts.rb +90 -18
- data/lib/active_campaign/client/deals.rb +80 -14
- data/lib/active_campaign/client/forms.rb +7 -7
- data/lib/active_campaign/client/groups.rb +22 -10
- data/lib/active_campaign/client/lists.rb +52 -13
- data/lib/active_campaign/client/messages.rb +62 -14
- data/lib/active_campaign/client/tracks.rb +48 -11
- data/lib/active_campaign/client/users.rb +44 -9
- data/lib/active_campaign/configuration.rb +38 -13
- data/lib/active_campaign/core_ext.rb +8 -3
- data/lib/active_campaign/version.rb +3 -1
- data/spec/lib/active_campaign/client/contacts_spec.rb +2 -1
- data/spec/lib/active_campaign/client/lists_spec.rb +2 -1
- data/spec/lib/active_campaign/client_spec.rb +8 -0
- data/spec/lib/active_campaign_spec.rb +15 -20
- data/spec/spec_helper.rb +6 -5
- data/spec/support/vcr.rb +2 -0
- data/spec/support/webmock.rb +2 -0
- metadata +175 -13
- data/.coveralls.yml +0 -1
- data/lib/active_campaign/method_creator.rb +0 -32
- data/spec/support/coverage.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 86da02320b2b67aa96ddda701ae0612c6817070e0cfc57678b39c548f3643d19
|
4
|
+
data.tar.gz: 117c5fe9baa8bd9b5b34e117800ea73776671c6e9e341cf3d184f98dffac408d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36f4861c214ac22085eab111f9bb8336fe5a863b67e699d8b5ec4aa45d475d36b82dcd0709d803898be90de30be40f057557158d260a9a8008a69d3e69b31630
|
7
|
+
data.tar.gz: 41916f0a0fa99b4b734b5a71fd458d395827c6b8ea67af7bf3af039a3a317c9791cb0beccd05a6701b2fe7f65ac514e216140941e6a87b3ca4397e7ff753dda0
|
data/.codeclimate.yml
CHANGED
@@ -1,4 +1,26 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
---
|
2
|
+
engines:
|
3
|
+
bundler-audit:
|
4
|
+
enabled: false
|
5
|
+
duplication:
|
6
|
+
enabled: true
|
7
|
+
config:
|
8
|
+
languages:
|
9
|
+
- ruby
|
10
|
+
fixme:
|
11
|
+
enabled: true
|
12
|
+
rubocop:
|
13
|
+
enabled: true
|
14
|
+
ratings:
|
15
|
+
paths:
|
16
|
+
- Gemfile.lock
|
17
|
+
- "**.css"
|
18
|
+
- "**.inc"
|
19
|
+
- "**.js"
|
20
|
+
- "**.jsx"
|
21
|
+
- "**.module"
|
22
|
+
- "**.php"
|
23
|
+
- "**.py"
|
24
|
+
- "**.rb"
|
3
25
|
exclude_paths:
|
4
|
-
-
|
26
|
+
- spec/
|
data/.rubocop.yml
CHANGED
@@ -1,25 +1,37 @@
|
|
1
1
|
AllCops:
|
2
2
|
Include:
|
3
|
-
- '
|
4
|
-
- '
|
5
|
-
- '
|
6
|
-
- '
|
3
|
+
- 'Rakefile'
|
4
|
+
- 'lib/**/*'
|
5
|
+
- 'bin/**/*'
|
6
|
+
- 'spec/**/*'
|
7
7
|
Exclude:
|
8
8
|
- 'Gemfile.lock'
|
9
|
+
- 'Gemfile'
|
9
10
|
- 'gemfiles/**/*'
|
11
|
+
- '**/*.json'
|
12
|
+
- '**/*.yml'
|
13
|
+
TargetRubyVersion: 2.4
|
10
14
|
|
11
15
|
Documentation:
|
12
16
|
Enabled: false
|
13
17
|
|
14
|
-
|
18
|
+
Metrics/BlockLength:
|
19
|
+
Enabled: true
|
20
|
+
Exclude:
|
21
|
+
- 'spec/**/*_spec.rb'
|
22
|
+
|
23
|
+
Metrics/MethodLength:
|
24
|
+
CountComments: false # count full line comments?
|
25
|
+
Max: 12
|
26
|
+
|
27
|
+
Metrics/ParameterLists:
|
15
28
|
Enabled: true
|
16
29
|
Max: 5
|
17
30
|
CountKeywordArgs: false
|
18
31
|
|
19
|
-
LineLength:
|
32
|
+
Metrics/LineLength:
|
20
33
|
Enabled: true
|
21
|
-
Max:
|
34
|
+
Max: 120
|
22
35
|
|
23
|
-
IfUnlessModifier:
|
36
|
+
Style/IfUnlessModifier:
|
24
37
|
Enabled: false
|
25
|
-
MaxLineLength: 79
|
data/.simplecov
ADDED
data/.travis.yml
CHANGED
@@ -1,20 +1,40 @@
|
|
1
|
-
|
1
|
+
env:
|
2
|
+
matrix:
|
3
|
+
- COV=false
|
4
|
+
global:
|
5
|
+
- CC_TEST_REPORTER_ID=8ba417e8bf62f355529f4f11b42114f99e073459a7424e79845d64ab95e52b76
|
6
|
+
- GIT_COMMITTED_AT=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then git log -1 --pretty=format:%ct; else git log -1 --skip 1 --pretty=format:%ct; fi)
|
7
|
+
dist: trusty
|
8
|
+
sudo: required
|
2
9
|
language: ruby
|
3
10
|
cache: bundler
|
11
|
+
|
4
12
|
before_install:
|
5
13
|
- rvm get head
|
6
14
|
- gem update --system
|
7
15
|
- gem install bundler
|
8
|
-
|
9
|
-
|
10
|
-
|
16
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
17
|
+
- chmod +x ./cc-test-reporter
|
18
|
+
install:
|
19
|
+
- bundle install -j8 -r3
|
20
|
+
before_script:
|
21
|
+
- ./cc-test-reporter before-build
|
22
|
+
script:
|
23
|
+
- if [[ "${COV}" = "true" ]]; then bundle exec rubocop; fi;
|
24
|
+
- bundle exec rspec spec
|
25
|
+
after_script:
|
26
|
+
- if [[ "${COV}" = "true" ]]; then ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT; fi;
|
11
27
|
rvm:
|
12
|
-
- jruby-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
28
|
+
- jruby-9.1.8.0
|
29
|
+
env: COV=false
|
30
|
+
|
31
|
+
matrix:
|
32
|
+
fast_finish: true
|
33
|
+
include:
|
34
|
+
- rvm: 2.5.1
|
35
|
+
env: COV=true
|
17
36
|
|
18
|
-
|
19
|
-
|
20
|
-
|
37
|
+
notifications:
|
38
|
+
email:
|
39
|
+
recipients:
|
40
|
+
- mikael@zoolutions.se
|
data/Changelog.md
CHANGED
@@ -1,7 +1,17 @@
|
|
1
|
-
|
1
|
+
## 0.1.14
|
2
|
+
|
3
|
+
- #10 bugs fixes
|
4
|
+
- the http method of list_field_add and list_field_edit should be POST
|
5
|
+
- Fix method_missing for ActiveCampaign module (#27)
|
6
|
+
- Add Tags client prototype (#17)
|
7
|
+
- Add automation_contact_remove post method (#25)
|
8
|
+
|
9
|
+
## 0.1.13
|
10
|
+
|
2
11
|
- Allow ActiveCampaign::Client.new to accept a Hash
|
3
12
|
|
4
|
-
|
13
|
+
## 0.1.11
|
14
|
+
|
5
15
|
- Adds Deals
|
6
16
|
- Adds Forms
|
7
17
|
- Adds Groups
|
@@ -9,7 +19,8 @@
|
|
9
19
|
- Adds Tracks
|
10
20
|
- Adds Campaigns
|
11
21
|
|
12
|
-
|
22
|
+
## 0.1.10
|
23
|
+
|
13
24
|
- Added tagging of lists and contacts
|
14
25
|
- Internally: Upgraded gems and RSpec syntax
|
15
26
|
- Internally: Added rubocop
|
data/Gemfile
CHANGED
@@ -1,21 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
gem 'rake'
|
4
|
-
gem 'rubysl', '~> 2', platform: :rbx
|
5
|
-
|
6
|
-
group :test do
|
7
|
-
gem 'pry'
|
8
|
-
gem 'simplecov'
|
9
|
-
gem 'simplecov-json'
|
10
|
-
gem 'rubinius-coverage', platform: :rbx
|
11
|
-
gem 'codeclimate-test-reporter', require: false
|
12
|
-
gem 'coveralls', require: false
|
13
|
-
gem 'rb-fsevent'
|
14
|
-
gem 'rspec', '>= 3.2'
|
15
|
-
gem 'vcr'
|
16
|
-
gem 'webmock'
|
17
|
-
gem 'rubocop'
|
18
|
-
gem 'fuubar'
|
19
|
-
end
|
1
|
+
# frozen_string_literal: true
|
20
2
|
|
3
|
+
source 'https://rubygems.org'
|
21
4
|
gemspec
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[![
|
1
|
+
[![Build Status](https://travis-ci.org/mhenrixon/active_campaign.svg?branch=master)](https://travis-ci.org/mhenrixon/active_campaign)[![Code Climate](https://codeclimate.com/github/mhenrixon/active_campaign/badges/gpa.svg)](https://codeclimate.com/github/mhenrixon/active_campaign)[![Test Coverage](https://codeclimate.com/github/mhenrixon/active_campaign/badges/coverage.svg)](https://codeclimate.com/github/mhenrixon/active_campaign/coverage)
|
2
2
|
# Active::Campaign::Ruby
|
3
3
|
|
4
4
|
A simple wrapper for the ActiveCampaign API. Since their API seems to be
|
@@ -27,12 +27,12 @@ Read their [API documentation](http://www.activecampaign.com/api/overview.php)fo
|
|
27
27
|
```ruby
|
28
28
|
# To setup the client
|
29
29
|
client = ::ActiveCampaign::Client.new(
|
30
|
-
api_endpoint: 'YOUR-ENDPOINT', # e.g. 'https://yourendpoint.api-us1.com'
|
30
|
+
api_endpoint: 'YOUR-ENDPOINT', # e.g. 'https://yourendpoint.api-us1.com/admin/api.php'
|
31
31
|
api_key: 'YOUR-API-KEY') # e.g. 'a4e60a1ba200595d5cc37ede5732545184165e'
|
32
32
|
|
33
33
|
# or configure globally for all clients
|
34
34
|
::ActiveCampaign.configure do |config|
|
35
|
-
config.api_endpoint = 'YOUR-ENDPOINT', # e.g. 'https://yourendpoint.api-us1.com'
|
35
|
+
config.api_endpoint = 'YOUR-ENDPOINT', # e.g. 'https://yourendpoint.api-us1.com/admin/api.php'
|
36
36
|
config.api_key = 'YOUR-API-KEY' # e.g. 'a4e60a1ba200595d5cc37ede5732545184165e'
|
37
37
|
end
|
38
38
|
|
@@ -111,6 +111,16 @@ All responses are wrapped under `results` so
|
|
111
111
|
}
|
112
112
|
```
|
113
113
|
|
114
|
+
For using tags_list action do the following
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
ActiveCampaign.get('tags_list')
|
118
|
+
```
|
119
|
+
The response of method is an array of tags
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
[{"id":1,"name":"test_tag","count":1}]
|
123
|
+
```
|
114
124
|
|
115
125
|
## Contributing
|
116
126
|
|
data/Rakefile
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'bundler/gem_tasks'
|
2
4
|
require 'rspec/core/rake_task'
|
3
5
|
require 'rubocop/rake_task'
|
@@ -5,10 +7,10 @@ require 'rubocop/rake_task'
|
|
5
7
|
desc 'Run RuboCop on the lib directory'
|
6
8
|
RuboCop::RakeTask.new(:style) do |task|
|
7
9
|
task.formatters = ['fuubar']
|
8
|
-
task.options = %w
|
10
|
+
task.options = %w[--display-cop-names]
|
9
11
|
task.fail_on_error = true
|
10
12
|
end
|
11
13
|
|
12
14
|
RSpec::Core::RakeTask.new(:spec)
|
13
15
|
|
14
|
-
task default: [
|
16
|
+
task default: %i[style spec]
|
data/active_campaign.gemspec
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
lib = File.expand_path('../lib', __FILE__)
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
6
|
require 'active_campaign/version'
|
@@ -10,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
10
12
|
spec.email = ['mikael@zoolutions.se']
|
11
13
|
spec.description = 'A simple ruby wrapper for the ActiveCampaign API'
|
12
14
|
spec.summary = 'See http://www.activecampaign.com/api/overview.php for more information'
|
13
|
-
spec.homepage = ''
|
15
|
+
spec.homepage = 'https://github.com/mhenrixon/active_campaign'
|
14
16
|
spec.license = 'MIT'
|
15
17
|
|
16
18
|
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
@@ -18,6 +20,17 @@ Gem::Specification.new do |spec|
|
|
18
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
21
|
spec.require_paths = ['lib']
|
20
22
|
|
21
|
-
spec.add_dependency 'httpi'
|
22
|
-
spec.add_dependency 'multi_json'
|
23
|
+
spec.add_dependency 'httpi', '>= 1.0', '< 3.0'
|
24
|
+
spec.add_dependency 'multi_json', '>= 1.0', '< 2'
|
25
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
|
26
|
+
spec.add_development_dependency 'fuubar', '~> 2.0'
|
27
|
+
spec.add_development_dependency 'gem-release', '~> 1.0'
|
28
|
+
spec.add_development_dependency 'pry', '~> 0.10'
|
29
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
30
|
+
spec.add_development_dependency 'rspec', '~> 3.5'
|
31
|
+
spec.add_development_dependency 'rubocop', '~> 0.48'
|
32
|
+
spec.add_development_dependency 'webmock', '~> 3.0'
|
33
|
+
spec.add_development_dependency 'simplecov', '~> 0.13'
|
34
|
+
spec.add_development_dependency 'simplecov-json', '~> 0.2'
|
35
|
+
spec.add_development_dependency 'vcr', '~> 3.0'
|
23
36
|
end
|
data/lib/active_campaign.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_campaign/version'
|
2
4
|
require 'active_campaign/client'
|
3
5
|
require 'active_campaign/configuration'
|
@@ -10,11 +12,7 @@ module ActiveCampaign
|
|
10
12
|
#
|
11
13
|
# @return [ActiveCampaign::Client] API wrapper
|
12
14
|
def client
|
13
|
-
|
14
|
-
@client = ActiveCampaign::Client.new(config)
|
15
|
-
end
|
16
|
-
|
17
|
-
@client
|
15
|
+
ActiveCampaign::Client.new
|
18
16
|
end
|
19
17
|
|
20
18
|
# @private
|
@@ -22,11 +20,6 @@ module ActiveCampaign
|
|
22
20
|
client.respond_to?(method_name, include_private)
|
23
21
|
end
|
24
22
|
|
25
|
-
# @private
|
26
|
-
def respond_to?(method_name, include_private = false)
|
27
|
-
client.respond_to?(method_name, include_private) || super
|
28
|
-
end if RUBY_VERSION < '1.9'
|
29
|
-
|
30
23
|
def config
|
31
24
|
@config ||= Configuration.new
|
32
25
|
end
|
@@ -39,10 +32,15 @@ module ActiveCampaign
|
|
39
32
|
@config = Configuration.new
|
40
33
|
end
|
41
34
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
35
|
+
class << self
|
36
|
+
# rubocop:disable Style/MissingRespondToMissing
|
37
|
+
def method_missing(method_name, *args, &block)
|
38
|
+
if client.respond_to?(method_name)
|
39
|
+
client.send(method_name, *args, &block)
|
40
|
+
else
|
41
|
+
super
|
42
|
+
end
|
43
|
+
end
|
44
|
+
# rubocop:enable Style/MissingRespondToMissing
|
47
45
|
end
|
48
46
|
end
|
@@ -1,5 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'httpi'
|
2
|
-
require 'active_campaign/method_creator'
|
3
4
|
|
4
5
|
require 'active_campaign/client/campaigns'
|
5
6
|
require 'active_campaign/client/contacts'
|
@@ -13,8 +14,6 @@ require 'active_campaign/client/users'
|
|
13
14
|
|
14
15
|
module ActiveCampaign
|
15
16
|
class Client
|
16
|
-
include Comparable
|
17
|
-
extend ActiveCampaign::MethodCreator
|
18
17
|
extend Forwardable
|
19
18
|
|
20
19
|
include ActiveCampaign::Client::Campaigns
|
@@ -27,19 +26,12 @@ module ActiveCampaign
|
|
27
26
|
include ActiveCampaign::Client::Tracks
|
28
27
|
include ActiveCampaign::Client::Users
|
29
28
|
|
30
|
-
|
31
|
-
|
29
|
+
attr_reader :config
|
30
|
+
def_delegators :config, :api_key, :api_output, :api_endpoint,
|
31
|
+
:user_agent, :log, :log_level, :logger, :debug
|
32
32
|
|
33
33
|
def initialize(options = {})
|
34
|
-
@config
|
35
|
-
end
|
36
|
-
|
37
|
-
# Compares client options to a Hash of requested options
|
38
|
-
#
|
39
|
-
# @param opts [Hash] Options to compare with current client options
|
40
|
-
# @return [Boolean]
|
41
|
-
def same_options?(other_config)
|
42
|
-
@config.to_h.sort == other_config.to_h.sort
|
34
|
+
@config = ActiveCampaign.config.dup.merge(options)
|
43
35
|
end
|
44
36
|
|
45
37
|
# Make a HTTP GET request
|
@@ -51,15 +43,6 @@ module ActiveCampaign
|
|
51
43
|
request :get, api_method, options
|
52
44
|
end
|
53
45
|
|
54
|
-
def hash
|
55
|
-
[@config, Client].hash
|
56
|
-
end
|
57
|
-
|
58
|
-
def <=>(other)
|
59
|
-
other.is_a?(ActiveCampaign::Client) &&
|
60
|
-
@config.to_h.sort <=> other.config.to_h.sort
|
61
|
-
end
|
62
|
-
|
63
46
|
# Make a HTTP POST request
|
64
47
|
#
|
65
48
|
# @param url [String] The path, relative to {#api_endpoint}
|
@@ -69,6 +52,17 @@ module ActiveCampaign
|
|
69
52
|
request :post, api_method, options
|
70
53
|
end
|
71
54
|
|
55
|
+
def hash
|
56
|
+
[config.hash, Client].hash
|
57
|
+
end
|
58
|
+
|
59
|
+
def ==(other)
|
60
|
+
other.is_a?(ActiveCampaign::Client) &&
|
61
|
+
hash == other.hash
|
62
|
+
end
|
63
|
+
|
64
|
+
alias eql? ==
|
65
|
+
|
72
66
|
private
|
73
67
|
|
74
68
|
def request(method, api_method, data)
|
@@ -79,10 +73,17 @@ module ActiveCampaign
|
|
79
73
|
normalize(response)
|
80
74
|
end
|
81
75
|
|
76
|
+
def request_headers
|
77
|
+
{
|
78
|
+
'User-Agent' => user_agent,
|
79
|
+
'Content-Type' => 'application/x-www-form-urlencoded'
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
82
83
|
def create_request(method, api_method, options = {})
|
83
84
|
req = HTTPI::Request.new(
|
84
85
|
url: File.join(api_endpoint),
|
85
|
-
headers:
|
86
|
+
headers: request_headers,
|
86
87
|
query: query(method, api_method, options),
|
87
88
|
body: body(method, api_method, options)
|
88
89
|
)
|
@@ -92,20 +93,20 @@ module ActiveCampaign
|
|
92
93
|
end
|
93
94
|
|
94
95
|
def query(method, api_method, options = {})
|
95
|
-
q = options.delete(:query) {
|
96
|
+
q = options.delete(:query) { {} }
|
96
97
|
q.merge!(api_key: api_key,
|
97
98
|
api_action: api_method.to_s,
|
98
99
|
api_output: api_output)
|
99
100
|
|
100
|
-
q
|
101
|
+
return q unless method == :get
|
101
102
|
|
102
|
-
q
|
103
|
+
q.merge(options)
|
103
104
|
end
|
104
105
|
|
105
106
|
def body(method, _api_method, options = {})
|
106
107
|
return nil unless method == :post
|
107
108
|
|
108
|
-
fields = options.delete(:fields) {
|
109
|
+
fields = options.delete(:fields) { {} }
|
109
110
|
options[:field] = fields.inject({}) do |hash, (k, v)|
|
110
111
|
hash.merge("%#{k}%,0" => v)
|
111
112
|
end
|
@@ -114,6 +115,8 @@ module ActiveCampaign
|
|
114
115
|
end
|
115
116
|
|
116
117
|
def normalize(response)
|
118
|
+
return response if response.is_a? Array
|
119
|
+
|
117
120
|
keys, values = keys_values(response)
|
118
121
|
if keys.all? { |key| numeric?(key) }
|
119
122
|
response['results'] = values
|
@@ -133,7 +136,7 @@ module ActiveCampaign
|
|
133
136
|
end
|
134
137
|
|
135
138
|
def results(response)
|
136
|
-
response.reject { |k, _v| %w
|
139
|
+
response.reject { |k, _v| %w[result_code result_message result_output].include?(k) }
|
137
140
|
end
|
138
141
|
end
|
139
142
|
end
|