active_campaign 0.0.12 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,83 @@
1
+ module ActiveCampaign
2
+ module Response
3
+ # Public: Parse response bodies as Oj.
4
+ class ParseJson < Faraday::Response::Middleware
5
+ CONTENT_TYPE = 'Content-Type'.freeze
6
+ MIME_TYPE = 'application/json'.freeze
7
+ BRACKETS = %w- [ { -
8
+ WHITESPACE = [ " ", "\n", "\r", "\t" ]
9
+
10
+ dependency do
11
+ require 'oj' unless defined?(::Oj)
12
+ end
13
+
14
+ def parser
15
+ lambda { |body|
16
+ ::Oj.load body unless body.strip.empty?
17
+ }
18
+ end
19
+
20
+ def initialize(app = nil, options = {})
21
+ super(app)
22
+ @options = options
23
+ @content_types = Array(options[:content_type])
24
+ end
25
+
26
+ def call(environment)
27
+
28
+
29
+ @app.call(environment).on_complete do |env|
30
+ process_response(env)
31
+ end
32
+ end
33
+
34
+ def process_response(env)
35
+ old_type = env[:response_headers][CONTENT_TYPE].to_s
36
+ new_type = MIME_TYPE.dup
37
+ new_type << ';' << old_type.split(';', 2).last if old_type.index(';')
38
+ env[:response_headers][CONTENT_TYPE] = new_type
39
+
40
+ env[:raw_body] = env[:body] if preserve_raw?(env)
41
+ env[:body] = parse(env[:body])
42
+ end
43
+
44
+ def parse(body)
45
+ parser.call(body)
46
+ end
47
+
48
+ def response_type(env)
49
+ type = env[:response_headers][CONTENT_TYPE].to_s
50
+ type = type.split(';', 2).first if type.index(';')
51
+ type
52
+ end
53
+
54
+ def process_response_type?(type)
55
+ @content_types.empty? or @content_types.any? { |pattern|
56
+ pattern.is_a?(Regexp) ? type =~ pattern : type == pattern
57
+ }
58
+ end
59
+
60
+ def parse_response?(env)
61
+ env[:body].respond_to?(:to_str) &&
62
+ BRACKETS.include?(first_char(env[:body]))
63
+ end
64
+
65
+ def preserve_raw?(env)
66
+ env[:request].fetch(:preserve_raw, @options[:preserve_raw])
67
+ end
68
+
69
+ def first_char(body)
70
+ idx = -1
71
+ begin
72
+ char = body[idx += 1]
73
+ char = char.chr if char
74
+ end while char and WHITESPACE.include? char
75
+ char
76
+ end
77
+
78
+ end
79
+ end
80
+ end
81
+ Faraday.register_middleware :response, parse_json: lambda {
82
+ ActiveCampaign::Response::ParseJson
83
+ }
@@ -0,0 +1,24 @@
1
+ require 'faraday'
2
+ require 'active_campaign/error'
3
+
4
+ module ActiveCampaign
5
+ # Faraday response middleware
6
+ module Response
7
+
8
+ # This class raises an ActiveCampaign-flavored exception based
9
+ # HTTP status codes returned by the API
10
+ class RaiseError < Faraday::Response::Middleware
11
+
12
+ private
13
+
14
+ def on_complete(response)
15
+ if error = ActiveCampaign::Error.from_response(response)
16
+ raise error
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ Faraday.register_middleware :response, raise_error: lambda {
23
+ ActiveCampaign::Response::RaiseError
24
+ }
@@ -1,3 +1,3 @@
1
1
  module ActiveCampaign
2
- VERSION = "0.0.12"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -3,18 +3,18 @@ require 'helper'
3
3
  describe ActiveCampaign do
4
4
 
5
5
  after do
6
- ActiveCampaign.reset
6
+ ActiveCampaign.setup
7
7
  end
8
8
 
9
9
  describe ".respond_to?" do
10
10
  it "is true if method exists" do
11
- expect(ActiveCampaign.respond_to?(:new, true)).to eq(true)
11
+ expect(ActiveCampaign.respond_to?(:client, true)).to eq(true)
12
12
  end
13
13
  end
14
14
 
15
15
  describe ".new" do
16
16
  it "is a ActiveCampaign::Client" do
17
- expect(ActiveCampaign.new).to be_a ActiveCampaign::Client
17
+ expect(ActiveCampaign.client).to be_a ActiveCampaign::Client
18
18
  end
19
19
  end
20
20
 
data/spec/helper.rb CHANGED
@@ -106,6 +106,6 @@ def initialize_active_campaign
106
106
  config.api_endpoint = "https://yourdomain.activehosted.com/"
107
107
  config.api_key = "YOURAPIKEY"
108
108
  config.api_output = "json"
109
- config.log_requests = true
109
+ config.debug = true
110
110
  end
111
111
  end
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_campaign
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-21 00:00:00.000000000 Z
11
+ date: 2013-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: httpclient
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '2.3'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '2.3'
27
- - !ruby/object:Gem::Dependency
28
- name: hashie
14
+ name: faraday
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
- - - ~>
17
+ - - '>='
32
18
  - !ruby/object:Gem::Version
33
- version: '2.0'
19
+ version: 0.8.8
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - ~>
24
+ - - '>='
39
25
  - !ruby/object:Gem::Version
40
- version: '2.0'
26
+ version: 0.8.8
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: activesupport
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -53,49 +39,35 @@ dependencies:
53
39
  - !ruby/object:Gem::Version
54
40
  version: 4.0.0
55
41
  - !ruby/object:Gem::Dependency
56
- name: faraday
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '0.8'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ~>
67
- - !ruby/object:Gem::Version
68
- version: '0.8'
69
- - !ruby/object:Gem::Dependency
70
- name: faraday_middleware
42
+ name: uri_template
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
- - - ~>
45
+ - - '>='
74
46
  - !ruby/object:Gem::Version
75
- version: '0.9'
47
+ version: '0'
76
48
  type: :runtime
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
- - - ~>
52
+ - - '>='
81
53
  - !ruby/object:Gem::Version
82
- version: '0.9'
54
+ version: '0'
83
55
  - !ruby/object:Gem::Dependency
84
- name: multi_json
56
+ name: hashie
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
- - - ~>
59
+ - - '>='
88
60
  - !ruby/object:Gem::Version
89
- version: '1.7'
61
+ version: '0'
90
62
  type: :runtime
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
- - - ~>
66
+ - - '>='
95
67
  - !ruby/object:Gem::Version
96
- version: '1.7'
68
+ version: '0'
97
69
  - !ruby/object:Gem::Dependency
98
- name: rake
70
+ name: oj
99
71
  requirement: !ruby/object:Gem::Requirement
100
72
  requirements:
101
73
  - - '>='
@@ -109,47 +81,19 @@ dependencies:
109
81
  - !ruby/object:Gem::Version
110
82
  version: '0'
111
83
  - !ruby/object:Gem::Dependency
112
- name: json
84
+ name: bundler
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
87
  - - ~>
116
88
  - !ruby/object:Gem::Version
117
- version: '1.7'
89
+ version: '1.0'
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
93
  requirements:
122
94
  - - ~>
123
95
  - !ruby/object:Gem::Version
124
- version: '1.7'
125
- - !ruby/object:Gem::Dependency
126
- name: rspec
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - '>='
130
- - !ruby/object:Gem::Version
131
- version: '2.14'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - '>='
137
- - !ruby/object:Gem::Version
138
- version: '2.14'
139
- - !ruby/object:Gem::Dependency
140
- name: webmock
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - '>='
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - '>='
151
- - !ruby/object:Gem::Version
152
- version: '0'
96
+ version: '1.0'
153
97
  description: A simple ruby wrapper for the ActiveCampaign API
154
98
  email:
155
99
  - mikael@zoolutions.se
@@ -159,6 +103,7 @@ extra_rdoc_files: []
159
103
  files:
160
104
  - .gitignore
161
105
  - .rspec
106
+ - .ruby-version
162
107
  - .travis.yml
163
108
  - Gemfile
164
109
  - LICENSE.txt
@@ -167,20 +112,23 @@ files:
167
112
  - active_campaign.gemspec
168
113
  - lib/active_campaign.rb
169
114
  - lib/active_campaign/.DS_Store
115
+ - lib/active_campaign/arguments.rb
116
+ - lib/active_campaign/authentication.rb
170
117
  - lib/active_campaign/client.rb
171
118
  - lib/active_campaign/client/campaigns.rb
172
119
  - lib/active_campaign/client/contacts.rb
173
120
  - lib/active_campaign/client/lists.rb
174
121
  - lib/active_campaign/client/messages.rb
175
- - lib/active_campaign/configuration.rb
176
- - lib/active_campaign/connection.rb
122
+ - lib/active_campaign/configurable.rb
123
+ - lib/active_campaign/default.rb
177
124
  - lib/active_campaign/error.rb
178
- - lib/active_campaign/param_validation.rb
179
- - lib/active_campaign/request.rb
125
+ - lib/active_campaign/response/debugger.rb
126
+ - lib/active_campaign/response/instrumentation.rb
127
+ - lib/active_campaign/response/json_normalizer.rb
128
+ - lib/active_campaign/response/mashify.rb
129
+ - lib/active_campaign/response/parse_json.rb
130
+ - lib/active_campaign/response/raise_error.rb
180
131
  - lib/active_campaign/version.rb
181
- - lib/faraday/response/body_logger.rb
182
- - lib/faraday/response/json_normalizer.rb
183
- - lib/faraday/response/raise_active_campaign_error.rb
184
132
  - spec/active_campaign_spec.rb
185
133
  - spec/client/contacts_spec.rb
186
134
  - spec/client/lists_spec.rb
@@ -1,74 +0,0 @@
1
- require 'faraday'
2
- require 'active_campaign/version'
3
-
4
- module ActiveCampaign
5
- module Configuration
6
- VALID_OPTIONS_KEYS = [
7
- :api_url,
8
- :api_key,
9
- :api_output,
10
- :api_path,
11
- :api_action,
12
- :list_id,
13
- :faraday_config_block,
14
- :api_version,
15
- :api_endpoint,
16
- :proxy,
17
- :user_agent,
18
- :request_host,
19
- :auto_traversal,
20
- :adapter,
21
- :log_requests,
22
- :per_page].freeze
23
-
24
- DEFAULT_ADAPTER = Faraday.default_adapter
25
- DEFAULT_API_VERSION = 3
26
- TEST_URL = "https://yourdomain.activehosted.com"
27
- DEFAULT_API_ENDPOINT = ENV["ACTIVECAMPAIGN_API_ENDPOINT"] || TEST_URL
28
- DEFAULT_API_PATH = ENV["ACTIVECAMPAIGN_API_PATH"] || "admin/api.php"
29
- DEFAULT_API_OUTPUT = ENV["ACTIVECAMPAIGN_API_OUTPUT"] || "json"
30
- DEFAULT_USER_AGENT = "ActiveCampaign Ruby Gem #{VERSION}".freeze
31
- DEFAULT_AUTO_TRAVERSAL = false
32
-
33
- attr_accessor(*VALID_OPTIONS_KEYS)
34
-
35
- def self.extended(base)
36
- base.reset
37
- end
38
-
39
- def configure
40
- yield self
41
- end
42
-
43
- def options
44
- VALID_OPTIONS_KEYS.inject({}){|o,k| o.merge!(k => send(k)) }
45
- end
46
-
47
- def api_endpoint=(value)
48
- @api_endpoint = File.join(value, "")
49
- end
50
-
51
- def api_key=(value)
52
- @api_key = value.chomp
53
- end
54
-
55
- def faraday_config(&block)
56
- @faraday_config_block = block
57
- end
58
-
59
- def reset
60
- self.adapter = DEFAULT_ADAPTER
61
- self.api_version = DEFAULT_API_VERSION
62
- self.api_endpoint = DEFAULT_API_ENDPOINT
63
- self.api_path = DEFAULT_API_PATH
64
- self.api_output = DEFAULT_API_OUTPUT
65
- self.list_id = nil
66
- self.proxy = nil
67
- # self.url_params = {}
68
- self.request_host = nil
69
- self.user_agent = DEFAULT_USER_AGENT
70
- self.auto_traversal = DEFAULT_AUTO_TRAVERSAL
71
- self.log_requests = false
72
- end
73
- end
74
- end
@@ -1,52 +0,0 @@
1
- require 'faraday_middleware'
2
- require 'faraday/response/raise_active_campaign_error'
3
- require 'faraday/response/body_logger'
4
- require 'faraday/response/json_normalizer'
5
-
6
- module ActiveCampaign
7
-
8
- # @private
9
- module Connection
10
- private
11
-
12
- def connection(options={})
13
- options = {
14
- force_urlencoded: true,
15
- raw: false
16
- }.merge(options)
17
-
18
- if !proxy.nil?
19
- options.merge!(proxy: proxy)
20
- end
21
-
22
- # TODO: Don't build on every request
23
- connection = Faraday.new(options) do |conn|
24
-
25
- if options[:force_urlencoded]
26
- conn.request :url_encoded
27
- else
28
- conn.request :json
29
- end
30
-
31
-
32
- conn.use Faraday::Response::RaiseActiveCampaignError
33
- conn.use FaradayMiddleware::FollowRedirects
34
- if api_output == 'json'
35
- conn.response :mashify, content_type: /\bjson$/
36
- conn.response :json_normalizer
37
- conn.response :json, content_type: /\bjson$/
38
- end
39
- faraday_config_block.call(conn) if faraday_config_block
40
- if log_requests
41
- conn.response :body_logger
42
- conn.use :instrumentation
43
- end
44
-
45
- conn.adapter *adapter
46
- end
47
-
48
- connection.headers[:user_agent] = user_agent
49
- connection
50
- end
51
- end
52
- end