capsule_crm 0.0.6 → 0.1.6
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 +4 -4
- data/README.md +25 -1
- data/lib/capsule_crm/case.rb +1 -0
- data/lib/capsule_crm/connection.rb +6 -3
- data/lib/capsule_crm/contacts.rb +4 -4
- data/lib/capsule_crm/organization.rb +1 -0
- data/lib/capsule_crm/party.rb +1 -0
- data/lib/capsule_crm/tag.rb +13 -0
- data/lib/capsule_crm/taggable.rb +23 -0
- data/lib/capsule_crm/user.rb +34 -0
- data/lib/capsule_crm/version.rb +1 -1
- data/lib/capsule_crm.rb +3 -0
- data/spec/lib/capsule_crm/tag_spec.rb +6 -0
- data/spec/lib/capsule_crm/taggable_spec.rb +59 -0
- data/spec/lib/capsule_crm/user_spec.rb +20 -0
- data/spec/support/all_tags.json +12 -0
- data/spec/support/all_users.json +21 -0
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 808ce675363a8bae072d7242b8973f41cf5e0c08
|
4
|
+
data.tar.gz: edb34f7e67119375ed840b6da034b2fa653ea116
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d0464a4804f4551450541ff4e237d9b04eb94581d074a7460b51eb4ab4dc6008109a98774778e597ad8c9534240e3899a291edb6cc7ad63253c92c9656f5628
|
7
|
+
data.tar.gz: 56388862805ba1ad015807817c545d9688930d87da6e4b96971e17d68e8d40a9a0adcfd9e92021d30419d69fe1e07db7b43a552ae92dd1c2cd728121d7a5327b
|
data/README.md
CHANGED
@@ -31,7 +31,17 @@ Or install it yourself as:
|
|
31
31
|
## Usage
|
32
32
|
|
33
33
|
```ruby
|
34
|
-
|
34
|
+
contacts = CapsuleCRM::Contacts.new(
|
35
|
+
addresses: [CapsuleCRM::Address.new(street: 'Oranieburgerstr', city: 'Berlin')],
|
36
|
+
emails: [CapsuleCRM::Email.new(email_address: 'mattbeedle@gmail.com')],
|
37
|
+
phones: [CapsuleCRM::Phone.new(phone_number: '123456789')],
|
38
|
+
webstes: [CapsuleCRM::Website.new(web_service: 'URL', web_address: 'http://github.com']
|
39
|
+
)
|
40
|
+
|
41
|
+
person = CapsuleCRM::Person.new(
|
42
|
+
first_name: 'Matt', last_name: 'Beedle', organisation_name: "Matt's Company",
|
43
|
+
contacts: contacts
|
44
|
+
)
|
35
45
|
person.save
|
36
46
|
|
37
47
|
person.first_name = 'John'
|
@@ -39,6 +49,17 @@ person.save #=> true
|
|
39
49
|
|
40
50
|
person.valid? #=> true
|
41
51
|
|
52
|
+
person.organization #=> CapsuleCRM::Organization
|
53
|
+
|
54
|
+
person.organization.tap do |org|
|
55
|
+
org.update_attributes! contacts: CapsuleCRM::Contacts.new(
|
56
|
+
addresses: CapsuleCRM::Address.new(street: 'Thurneysserstr')
|
57
|
+
)
|
58
|
+
|
59
|
+
org.contacts.phones << CapsuleCRM::Phone.new(phone_number: '234243')
|
60
|
+
org.save
|
61
|
+
end
|
62
|
+
|
42
63
|
person.first_name = nil
|
43
64
|
person.last_name = nil
|
44
65
|
person.valid? #=> false
|
@@ -49,6 +70,9 @@ person.save! #=> CapsuleCRM::Errors::InvalidRecord
|
|
49
70
|
person.destroy #=> true
|
50
71
|
|
51
72
|
person = CapsuleCRM::Person.create(first_name: 'Matt', last_name: 'Beedle')
|
73
|
+
|
74
|
+
kase = CapsuleCRM::Case.create! name: 'My First Case', party: person
|
75
|
+
kase.update_attributes name: 'A New Case Name'
|
52
76
|
```
|
53
77
|
|
54
78
|
## Contributing
|
data/lib/capsule_crm/case.rb
CHANGED
@@ -14,13 +14,16 @@ module CapsuleCRM
|
|
14
14
|
JSON.parse response.body
|
15
15
|
end
|
16
16
|
|
17
|
-
def self.post(path, params)
|
17
|
+
def self.post(path, params = {})
|
18
18
|
response = faraday.post(path, params.to_json) do |request|
|
19
19
|
request.headers.update default_request_headers
|
20
20
|
end
|
21
21
|
if response.success?
|
22
|
-
|
23
|
-
|
22
|
+
if match = response.headers['Location'].match(/\/(?<id>\d+)$/)
|
23
|
+
{ id: match[:id] }
|
24
|
+
else
|
25
|
+
true
|
26
|
+
end
|
24
27
|
else
|
25
28
|
false
|
26
29
|
end
|
data/lib/capsule_crm/contacts.rb
CHANGED
@@ -15,10 +15,10 @@ module CapsuleCRM
|
|
15
15
|
#
|
16
16
|
# Returns a CapsuleCRM::Contact
|
17
17
|
def initialize(attributes = {})
|
18
|
-
self.addresses = attributes[:addresses]
|
19
|
-
self.emails = attributes[:emails]
|
20
|
-
self.phones = attributes[:phones]
|
21
|
-
self.websites = attributes[:websites]
|
18
|
+
self.addresses = Array(attributes[:addresses])
|
19
|
+
self.emails = Array(attributes[:emails])
|
20
|
+
self.phones = Array(attributes[:phones])
|
21
|
+
self.websites = Array(attributes[:websites])
|
22
22
|
end
|
23
23
|
|
24
24
|
# Public: Sets the addresses for this contacts container
|
data/lib/capsule_crm/party.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module CapsuleCRM
|
2
|
+
module Taggable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
def tags
|
6
|
+
CapsuleCRM::Connection.get(
|
7
|
+
"/api/#{api_singular_name}/#{id}/tag"
|
8
|
+
)['tags']['tag'].map { |item| CapsuleCRM::Tag.new(item) }
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_tag(tag_name)
|
12
|
+
if id
|
13
|
+
CapsuleCRM::Connection.post(
|
14
|
+
"/api/#{api_singular_name}/#{id}/#{URI.encode(tag_name)}"
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def api_singular_name
|
20
|
+
self.class.to_s.demodulize.downcase.singularize
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module CapsuleCRM
|
2
|
+
class User
|
3
|
+
include Virtus
|
4
|
+
|
5
|
+
extend ActiveModel::Naming
|
6
|
+
include ActiveModel::Conversion
|
7
|
+
include ActiveModel::Validations
|
8
|
+
|
9
|
+
include CapsuleCRM::Associations::BelongsTo
|
10
|
+
|
11
|
+
attribute :username, String
|
12
|
+
attribute :name, String
|
13
|
+
attribute :currency, String
|
14
|
+
attribute :timezone, String
|
15
|
+
attribute :logged_in, Boolean
|
16
|
+
|
17
|
+
belongs_to :party, class_name: 'CapsuleCRM::Party'
|
18
|
+
|
19
|
+
# Public: Retrieve all users from CapsuleCRM
|
20
|
+
#
|
21
|
+
# Examples:
|
22
|
+
#
|
23
|
+
# CapsuleCRM::User.all
|
24
|
+
#
|
25
|
+
# Returns a CapsuleCRM::ResultsProxy of CapsuleCRM::User objects
|
26
|
+
def self.all
|
27
|
+
CapsuleCRM::ResultsProxy.new(
|
28
|
+
CapsuleCRM::Connection.get('/api/users')['users']['user'].map do |item|
|
29
|
+
new item
|
30
|
+
end
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/capsule_crm/version.rb
CHANGED
data/lib/capsule_crm.rb
CHANGED
@@ -3,6 +3,7 @@ require 'faraday'
|
|
3
3
|
require 'faraday_middleware'
|
4
4
|
require 'virtus'
|
5
5
|
require 'capsule_crm/capsule_jsonable'
|
6
|
+
require 'capsule_crm/taggable'
|
6
7
|
require 'capsule_crm/associations'
|
7
8
|
require 'capsule_crm/address'
|
8
9
|
require 'capsule_crm/case'
|
@@ -10,6 +11,8 @@ require 'capsule_crm/connection'
|
|
10
11
|
require 'capsule_crm/email'
|
11
12
|
require 'capsule_crm/party'
|
12
13
|
require 'capsule_crm/phone'
|
14
|
+
require 'capsule_crm/tag'
|
15
|
+
require 'capsule_crm/user'
|
13
16
|
require 'capsule_crm/website'
|
14
17
|
require 'capsule_crm/hash_helper'
|
15
18
|
require 'capsule_crm/results_proxy'
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class TaggableItem
|
4
|
+
include CapsuleCRM::Taggable
|
5
|
+
include Virtus
|
6
|
+
|
7
|
+
attribute :id
|
8
|
+
end
|
9
|
+
|
10
|
+
describe CapsuleCRM::Taggable do
|
11
|
+
before { configure }
|
12
|
+
|
13
|
+
describe '#tags' do
|
14
|
+
before do
|
15
|
+
stub_request(:get, /\/api\/taggableitem\/1\/tag$/).
|
16
|
+
to_return(body: File.read('spec/support/all_tags.json'))
|
17
|
+
end
|
18
|
+
|
19
|
+
let(:taggable_item) { TaggableItem.new(id: 1) }
|
20
|
+
|
21
|
+
subject { taggable_item.tags }
|
22
|
+
|
23
|
+
it { should be_a(Array) }
|
24
|
+
|
25
|
+
it { subject.length.should eql(2) }
|
26
|
+
|
27
|
+
it do
|
28
|
+
subject.all? { |item| item.is_a?(CapsuleCRM::Tag) }.should be_true
|
29
|
+
end
|
30
|
+
|
31
|
+
it { subject.first.name.should eql('Customer') }
|
32
|
+
|
33
|
+
it { subject.last.name.should eql('VIP') }
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#add_tag' do
|
37
|
+
context 'when the taggable item has an id' do
|
38
|
+
let(:taggable_item) { TaggableItem.new(id: 1) }
|
39
|
+
|
40
|
+
before do
|
41
|
+
loc = 'https://sample.capsulecrm.com/api/party/1000/tag/A%20Test%20Tag'
|
42
|
+
stub_request(:post, /\/api\/taggableitem\/1\/A%20Test%20Tag$/).
|
43
|
+
to_return(headers: { 'Location' => loc })
|
44
|
+
end
|
45
|
+
|
46
|
+
subject { taggable_item.add_tag 'A Test Tag' }
|
47
|
+
|
48
|
+
it { subject.should be_true }
|
49
|
+
end
|
50
|
+
|
51
|
+
context 'when the taggable item has no id' do
|
52
|
+
let(:taggable_item) { TaggableItem.new }
|
53
|
+
|
54
|
+
subject { taggable_item.add_tag 'A Test Tag' }
|
55
|
+
|
56
|
+
it { subject.should be_nil }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CapsuleCRM::User do
|
4
|
+
before { configure }
|
5
|
+
|
6
|
+
describe '.all' do
|
7
|
+
before do
|
8
|
+
stub_request(:get, /\/api\/users$/).
|
9
|
+
to_return(body: File.read('spec/support/all_users.json'))
|
10
|
+
end
|
11
|
+
|
12
|
+
subject { CapsuleCRM::User.all }
|
13
|
+
|
14
|
+
it { should be_a(Array) }
|
15
|
+
|
16
|
+
it { subject.length.should eql(2) }
|
17
|
+
|
18
|
+
it { subject.all? { |item| item.is_a?(CapsuleCRM::User) }.should be_true }
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"users": {
|
3
|
+
"user": [
|
4
|
+
{
|
5
|
+
"username": "a.user",
|
6
|
+
"currency": "GBP",
|
7
|
+
"name": "Alfred User",
|
8
|
+
"loggedIn": "true",
|
9
|
+
"timezone": "Europe/London",
|
10
|
+
"partyId": "100"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"username": "j.joe",
|
14
|
+
"currency": "GBP",
|
15
|
+
"name": "Jane Doe",
|
16
|
+
"timezone": "Europe/London",
|
17
|
+
"partyId": "101"
|
18
|
+
}
|
19
|
+
]
|
20
|
+
}
|
21
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capsule_crm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Beedle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -244,6 +244,9 @@ files:
|
|
244
244
|
- lib/capsule_crm/person.rb
|
245
245
|
- lib/capsule_crm/phone.rb
|
246
246
|
- lib/capsule_crm/results_proxy.rb
|
247
|
+
- lib/capsule_crm/tag.rb
|
248
|
+
- lib/capsule_crm/taggable.rb
|
249
|
+
- lib/capsule_crm/user.rb
|
247
250
|
- lib/capsule_crm/version.rb
|
248
251
|
- lib/capsule_crm/website.rb
|
249
252
|
- spec/fabricators/opportunity_fabricator.rb
|
@@ -257,11 +260,16 @@ files:
|
|
257
260
|
- spec/lib/capsule_crm/opportunity_spec.rb
|
258
261
|
- spec/lib/capsule_crm/organization_spec.rb
|
259
262
|
- spec/lib/capsule_crm/person_spec.rb
|
263
|
+
- spec/lib/capsule_crm/tag_spec.rb
|
264
|
+
- spec/lib/capsule_crm/taggable_spec.rb
|
265
|
+
- spec/lib/capsule_crm/user_spec.rb
|
260
266
|
- spec/spec_helper.rb
|
261
267
|
- spec/support/all_cases.json
|
262
268
|
- spec/support/all_opportunities.json
|
263
269
|
- spec/support/all_parties.json
|
264
270
|
- spec/support/all_people.json
|
271
|
+
- spec/support/all_tags.json
|
272
|
+
- spec/support/all_users.json
|
265
273
|
- spec/support/case.json
|
266
274
|
- spec/support/deleted_opportunities.json
|
267
275
|
- spec/support/helpers.rb
|
@@ -304,11 +312,16 @@ test_files:
|
|
304
312
|
- spec/lib/capsule_crm/opportunity_spec.rb
|
305
313
|
- spec/lib/capsule_crm/organization_spec.rb
|
306
314
|
- spec/lib/capsule_crm/person_spec.rb
|
315
|
+
- spec/lib/capsule_crm/tag_spec.rb
|
316
|
+
- spec/lib/capsule_crm/taggable_spec.rb
|
317
|
+
- spec/lib/capsule_crm/user_spec.rb
|
307
318
|
- spec/spec_helper.rb
|
308
319
|
- spec/support/all_cases.json
|
309
320
|
- spec/support/all_opportunities.json
|
310
321
|
- spec/support/all_parties.json
|
311
322
|
- spec/support/all_people.json
|
323
|
+
- spec/support/all_tags.json
|
324
|
+
- spec/support/all_users.json
|
312
325
|
- spec/support/case.json
|
313
326
|
- spec/support/deleted_opportunities.json
|
314
327
|
- spec/support/helpers.rb
|