pocus 0.6.1 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd0d631d3b8cf6ef526d738b4d4072a6bb9828fe9752d08df511cd0643278d7d
4
- data.tar.gz: 31e2a7de81869a442640f053057dad727052004fb2e2d61f24b085ae73161a4c
3
+ metadata.gz: 50a4404a6f892888678d3d4fdd038133696beaece4d7cbb6e7e92dffd8b00b8e
4
+ data.tar.gz: 2418eef7353f39b5b7ff913993277ba1369707c7e64ae03b5baef40a2c8551c7
5
5
  SHA512:
6
- metadata.gz: c22999094d8d036434a0b03ed2505e9a1a9fc2eb8b17aec0d8dd81320658518e3ce978079bd40df187b9da5ddd0aef8d7e68b8a49c3f9cf92cd8a2c7f9525200
7
- data.tar.gz: 7d113e2c3d7e511de3086a7c167a6e8d702d01af4d193a505547c5beae9b34df128c6a1a1b9a0eeada70729846709722ec572473afad9d3a339752ebd4de27dc
6
+ metadata.gz: c993ee6385f43f1fc06d7253bfc4c790c713c9fabba38199ee225ec25db188141cd7ccc61fff4b6ab090a6d17f7d753be154cc65e95ba5505e9cc5dbcc6e34ab
7
+ data.tar.gz: ec1ebf2100cf5390c412eac26ea5586068e24b4cc2c80a968a86b7700e7610ab49cf2531c9f10ba28370552a04735dc93e81d4c2276b56465d82d11f76f2e24e
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Pocus
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/pocus.svg)](http://badge.fury.io/rb/pocus)
4
- [![Code Climate GPA](https://codeclimate.com/github/varyonic/pocus.svg)](https://codeclimate.com/github/varyonic/pocus)
5
- [![Travis CI Status](https://secure.travis-ci.org/varyonic/pocus.svg)](https://travis-ci.org/varyonic/pocus)
4
+ [![Github Actions ][actions_badge]][actions]
6
5
 
7
6
  Unofficial Ruby API client for [iContact API](https://www.icontact.com/developerportal) (f.k.a. Vocus), inspired by Active Resource.
8
7
 
@@ -18,21 +17,33 @@ And then execute:
18
17
 
19
18
  $ bundle
20
19
 
20
+ ## Requirements
21
+
22
+ iContact account, AppID and credentials, see the [iContact API Getting Started Guide](https://www.icontact.com/developerportal/documentation/start-building).
23
+
21
24
  ## Usage
22
25
 
23
- Example:
26
+ Configure a connection and connect to the account:
24
27
 
28
+ ```ruby
29
+ credentials = { host: 'app.icontact.com', app_id: a, username: u, password: p }
30
+ session = Pocus::Session.new(credentials)
31
+ session.logger = Rails.logger
32
+ account = Pocus::Account.new(session: session, account_id: account_id)
25
33
  ```
26
- Pocus::Session.config(credentials)
27
- Pocus::Session.instance.logger = Rails.logger
28
- account = Pocus::Account.new(account_id: account_id)
34
+
35
+ Navigate and update entities:
36
+
37
+ ```ruby
29
38
  folder = acount.clientfolders.find(folder_id)
30
39
  folder.contacts.create(contacts_data)
31
40
  ```
32
41
 
42
+ See the specs for sample code.
43
+
33
44
  ## Tests
34
45
 
35
- To run the tests you will need your own iContact account with a test folder. Set the following environment variables:
46
+ To run the tests you will need your own iContact account with a test folder (name: 'My First List'). Set the following environment variables:
36
47
 
37
48
  ```
38
49
  POCUS_APP_ID=0b34...b478c
@@ -59,4 +70,7 @@ The gem is available as open source under the terms of the [MIT License](https:/
59
70
 
60
71
  Read the [LICENSE](LICENSE.md) for details.
61
72
 
62
- Copyright (c) 2016-2019 [Varyonic](https://www.varyonic.com).
73
+ Copyright (c) 2016-2025 [Varyonic](https://www.varyonic.com).
74
+
75
+ [actions_badge]: https://github.com/varyonic/pocus/workflows/ci/badge.svg
76
+ [actions]: https://github.com/varyonic/pocus/actions
data/lib/pocus/account.rb CHANGED
@@ -3,6 +3,8 @@ module Pocus
3
3
  self.path = :a
4
4
  self.primary_key = :account_id
5
5
 
6
+ attr_accessor :session
6
7
  has_many :clientfolders, path: '/c', class: 'ClientFolder'
8
+ has_many :users, class: 'User'
7
9
  end
8
10
  end
@@ -28,6 +28,10 @@ module Pocus
28
28
  owner.get("#{path}/#{id}", klass)
29
29
  end
30
30
 
31
+ def find_or_create_by(attributes)
32
+ where(attributes).first || create(attributes)
33
+ end
34
+
31
35
  def where(filters)
32
36
  owner.get_multiple(path, klass, filters)
33
37
  end
@@ -9,6 +9,5 @@ module Pocus
9
9
  has_many :customfields, class: 'CustomField'
10
10
  has_many :segments, class: 'Segment'
11
11
  has_many :subscriptions, class: 'Subscription'
12
- has_many :users, class: 'User'
13
12
  end
14
13
  end
@@ -12,7 +12,7 @@ module Pocus
12
12
  end
13
13
 
14
14
  def self.version
15
- '0.6.1'
15
+ '1.1.0'
16
16
  end
17
17
 
18
18
  def self.version_label
@@ -5,7 +5,7 @@ module Pocus
5
5
 
6
6
  def initialize(resources, errors, warnings)
7
7
  @errors = (errors || [])
8
- @warnings = (warnings || [])
8
+ @warnings = (warnings || []).reject { |w| w =~ /Your account is past due/ }
9
9
  super resources
10
10
  end
11
11
  end
@@ -106,7 +106,8 @@ module Pocus
106
106
  def post_multiple(request_path, klass, fields_multiple)
107
107
  data = fields_multiple.map { |fields| camelize_fields(fields) }
108
108
  response = session.send_request('POST', path + request_path, data)
109
- resources = response.fetch(klass.tag_multiple).map { |fields| klass.new(fields.merge(parent: self)) }
109
+ data = response.fetch(klass.tag_multiple) || []
110
+ resources = data.map { |fields| klass.new(fields.merge(parent: self)) }
110
111
  ResponseArray.new(resources, response['errors'], response['warnings'])
111
112
  end
112
113
 
@@ -119,7 +120,7 @@ module Pocus
119
120
  end
120
121
 
121
122
  def session
122
- Session.instance
123
+ parent.session
123
124
  end
124
125
 
125
126
  def marshal_dump
@@ -165,7 +166,7 @@ module Pocus
165
166
  end
166
167
 
167
168
  def assign_errors(response)
168
- assign_attributes(errors: response['errors'] || [], warnings: response['warnings'] || [])
169
+ assign_attributes(errors: response['errors'] || [], warnings: (response['warnings'] || []).reject { |w| w =~ /Your account is past due/ })
169
170
  end
170
171
 
171
172
  def underscore(camel_cased_word)
data/lib/pocus/session.rb CHANGED
@@ -16,11 +16,12 @@ module Pocus
16
16
 
17
17
  # Sends authenticated JSON requests to remote service using HTTPS.
18
18
  class Session
19
- BASE_URL = 'https://api.invoc.us/icp'.freeze
19
+ attr_reader :base_url
20
20
  attr_reader :credentials
21
21
  attr_accessor :logger
22
22
 
23
- def initialize(app_id: '', username: '', password: '', logger: Logger.new('/dev/null'))
23
+ def initialize(host: 'api.invoc.us', app_id:, username:, password:, logger: Logger.new('/dev/null'))
24
+ @base_url = "https://#{host}/icp".freeze
24
25
  @credentials = {
25
26
  'API-AppId' => app_id,
26
27
  'API-Username' => username,
@@ -29,18 +30,15 @@ module Pocus
29
30
  @logger = logger
30
31
  end
31
32
 
32
- def self.config(options = {})
33
- @config = options
34
- end
35
-
36
- def self.instance
37
- @instance ||= new(@config)
33
+ # 'Pro' is legacy as moniker dropped.
34
+ def pro?
35
+ base_url =~ /invoc.us/
38
36
  end
39
37
 
40
38
  # Accepts hash of fields to send.
41
39
  # Returns parsed response body, always a hash.
42
40
  def send_request(method, path, fields = {})
43
- response = send_logged_request(URI(BASE_URL + path), method, request_data(fields))
41
+ response = send_logged_request(URI(base_url + path), method, request_data(fields))
44
42
  fail UnexpectedHttpResponse, response unless response.is_a? Net::HTTPSuccess
45
43
  JSON.parse(response.body)
46
44
  end
@@ -69,13 +67,17 @@ module Pocus
69
67
  end
70
68
 
71
69
  def log_request_response(uri, method, data)
72
- logger.info "request = #{method} #{uri}#{data ? '?' + data : ''}"
70
+ logger.info "[#{self.class.name}] request = #{method} #{uri}#{data ? '?' + data : ''}"
73
71
  response = nil
74
72
  tms = Benchmark.measure do
75
73
  response = yield uri, method, data
76
74
  end
77
- logger.info("API response (#{tms.real}s): #{response.inspect} #{response.body}")
75
+ logger.info "[#{self.class.name}] response (#{ms(tms)}ms): #{response.inspect} #{response.body}"
78
76
  response
79
77
  end
78
+
79
+ def ms(tms)
80
+ (tms.real*1000).round(3)
81
+ end
80
82
  end
81
83
  end
metadata CHANGED
@@ -1,59 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pocus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piers Chambers
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2019-01-21 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '11.0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '11.0'
27
- - !ruby/object:Gem::Dependency
28
- name: pry
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: pry-byebug
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: pry-state
57
14
  requirement: !ruby/object:Gem::Requirement
58
15
  requirements:
59
16
  - - ">="
@@ -86,8 +43,8 @@ email:
86
43
  executables: []
87
44
  extensions: []
88
45
  extra_rdoc_files:
89
- - README.md
90
46
  - LICENSE.md
47
+ - README.md
91
48
  files:
92
49
  - LICENSE.md
93
50
  - README.md
@@ -112,7 +69,6 @@ homepage: https://github.com/varyonic/pocus
112
69
  licenses:
113
70
  - MIT
114
71
  metadata: {}
115
- post_install_message:
116
72
  rdoc_options: []
117
73
  require_paths:
118
74
  - lib
@@ -127,9 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
83
  - !ruby/object:Gem::Version
128
84
  version: '0'
129
85
  requirements: []
130
- rubyforge_project:
131
- rubygems_version: 2.7.7
132
- signing_key:
86
+ rubygems_version: 3.6.7
133
87
  specification_version: 4
134
88
  summary: Unofficial Ruby client for iContact API
135
89
  test_files: []