capsule_crm 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b03a8a029e80b9ea38a3769a8cd9ac51a36a2c8
4
- data.tar.gz: e43d7db346766c213fc62c30ee08b30aa61a0888
3
+ metadata.gz: 3713b0ec80a9c807b2843e00a454a59e62f3985f
4
+ data.tar.gz: eba5f910134b574dea3d23d762c6b3d06f6effa3
5
5
  SHA512:
6
- metadata.gz: 737d7f366484bdea5916fc1cab2680577ca48c6c2a2f2aa2a056c9e0b1da65fcef07abe30636fddfd38bafca4146e38a4126e8e579686d52856e87d39c906fd4
7
- data.tar.gz: 6229c13b72a40d24d83c53598688be4663cd3dc5c366e6036baf7e0fa24dda029c50e71800714cc64134f2fe45486ca7061abd4b14b42f2070620e33244fdc03
6
+ metadata.gz: 0b59c35c19bfaa14d82bcb254bcad3bc11ddeb62beb17b399873e2517a8896321c44df4e58e4c0cb9ba6b3802019acfcea9ded653772bc73d5ee35765de5a5ce
7
+ data.tar.gz: 5d8dcbae2705a720e4177e4bc2ec124eb239e817eb5fd8e795574b25d29ef8a2649a2eed3f285aa66ef2555ced39945febb45788116c2670d83a23182a12e4ec
@@ -37,7 +37,7 @@ module CapsuleCRM
37
37
 
38
38
  (class << self; self; end).instance_eval do
39
39
  define_method "_for_#{association_name}" do |id|
40
- raise NotImplementedError
40
+ raise NotImplementedError.new("_for_#{association_name} needs to be implemented")
41
41
  end
42
42
  end
43
43
 
@@ -6,6 +6,7 @@ module CapsuleCRM
6
6
  include ActiveModel::Conversion
7
7
  include ActiveModel::Validations
8
8
 
9
+ include CapsuleCRM::Associations::HasMany
9
10
  include CapsuleCRM::Associations::BelongsTo
10
11
  include CapsuleCRM::Taggable
11
12
 
@@ -21,6 +22,8 @@ module CapsuleCRM
21
22
 
22
23
  belongs_to :party, class_name: 'CapsuleCRM::Party'
23
24
 
25
+ has_many :tasks, class_name: 'CapsuleCRM::Task', source: :case
26
+
24
27
  # Public: Search and retrieve all cases in CapsuleCRM
25
28
  #
26
29
  # options - the Hash of query options (default: {}):
@@ -6,6 +6,7 @@ module CapsuleCRM
6
6
  include ActiveModel::Conversion
7
7
  include ActiveModel::Validations
8
8
 
9
+ include CapsuleCRM::Associations::HasMany
9
10
  include CapsuleCRM::Associations::BelongsTo
10
11
 
11
12
  attribute :id, Integer
@@ -26,6 +27,8 @@ module CapsuleCRM
26
27
  validates :party_id, presence: true
27
28
  validates :milestone, presence: true
28
29
 
30
+ has_many :tasks, class_name: 'CapsuleCRM::Task', source: :opportunity
31
+
29
32
  belongs_to :party, class_name: 'CapsuleCRM::Party'
30
33
  belongs_to :milestone, class_name: 'CapsuleCRM::Milestone'
31
34
 
@@ -4,6 +4,7 @@ class CapsuleCRM::Party
4
4
  include CapsuleCRM::Associations::HasMany
5
5
 
6
6
  has_many :histories, class_name: 'CapsuleCRM::History', source: :party
7
+ has_many :tasks, class_name: 'CapsuleCRM::Task', source: :party
7
8
 
8
9
  def self.all(options = {})
9
10
  attributes = CapsuleCRM::Connection.get('/api/party', options)
@@ -24,6 +24,30 @@ module CapsuleCRM
24
24
  validates :due_date, presence: { unless: :due_date_time }
25
25
  validates :due_date_time, presence: { unless: :due_date }
26
26
 
27
+ def self._for_party(party_id)
28
+ CapsuleCRM::ResultsProxy.new(
29
+ CapsuleCRM::Task.all.select { |task| task.party_id == party_id }
30
+ )
31
+ end
32
+ class << self
33
+ alias :_for_person :_for_party
34
+ alias :_for_organization :_for_party
35
+ end
36
+
37
+ def self._for_opportunity(opportunity_id)
38
+ CapsuleCRM::ResultsProxy.new(
39
+ CapsuleCRM::Task.all.select do |task|
40
+ task.opportunity_id == opportunity_id
41
+ end
42
+ )
43
+ end
44
+
45
+ def self._for_case(case_id)
46
+ CapsuleCRM::ResultsProxy.new(
47
+ CapsuleCRM::Task.all.select { |task| task.case_id == case_id }
48
+ )
49
+ end
50
+
27
51
  def attributes=(attributes)
28
52
  CapsuleCRM::HashHelper.underscore_keys!(attributes)
29
53
  super(attributes)
@@ -129,11 +153,23 @@ module CapsuleCRM
129
153
 
130
154
  def create_record
131
155
  self.attributes = CapsuleCRM::Connection.post(
132
- '/api/task', to_capsule_json
156
+ create_url, to_capsule_json
133
157
  )
134
158
  self
135
159
  end
136
160
 
161
+ def create_url
162
+ if party_id
163
+ "/api/party/#{party_id}/task"
164
+ elsif opportunity_id
165
+ "/api/opportunity/#{opportunity_id}/task"
166
+ elsif case_id
167
+ "/api/kase/#{case_id}/task"
168
+ else
169
+ '/api/task'
170
+ end
171
+ end
172
+
137
173
  def update_record
138
174
  CapsuleCRM::Connection.put("/api/task/#{id}", to_capsule_json)
139
175
  self
@@ -1,3 +1,3 @@
1
1
  module CapsuleCrm
2
- VERSION = '0.6.0'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -3,10 +3,32 @@ require 'spec_helper'
3
3
  describe CapsuleCRM::Case do
4
4
  before { configure }
5
5
 
6
+ before do
7
+ stub_request(:get, /\/api\/users$/).
8
+ to_return(body: File.read('spec/support/all_users.json'))
9
+ end
10
+
6
11
  it { should validate_presence_of(:name) }
7
12
 
8
13
  it { should validate_presence_of(:party) }
9
14
 
15
+ describe '#tasks' do
16
+ let(:kase) { Fabricate.build(:case, id: 3) }
17
+
18
+ before do
19
+ stub_request(:get, /\/api\/tasks$/).
20
+ to_return(body: File.read('spec/support/all_tasks.json'))
21
+ end
22
+
23
+ subject { kase.tasks }
24
+
25
+ it { should be_an(Array) }
26
+
27
+ it { subject.length.should eql(1) }
28
+
29
+ it { subject.first.detail.should eql('Go and get drunk') }
30
+ end
31
+
10
32
  describe '.all' do
11
33
  before do
12
34
  stub_request(:get, 'https://1234:@company.capsulecrm.com/api/kase').
@@ -8,6 +8,11 @@ describe CapsuleCRM::Opportunity do
8
8
  to_return(body: File.read('spec/support/milestones.json'))
9
9
  end
10
10
 
11
+ before do
12
+ stub_request(:get, /\/api\/users$/).
13
+ to_return(body: File.read('spec/support/all_users.json'))
14
+ end
15
+
11
16
  it { should validate_presence_of(:name) }
12
17
 
13
18
  it { should validate_presence_of(:milestone) }
@@ -30,6 +35,21 @@ describe CapsuleCRM::Opportunity do
30
35
  it { should_not validate_presence_of(:milestone_id) }
31
36
  end
32
37
 
38
+ describe '#tasks' do
39
+ let(:opportunity) { Fabricate.build(:opportunity, id: 5) }
40
+
41
+ before do
42
+ stub_request(:get, /\/api\/tasks$/).
43
+ to_return(body: File.read('spec/support/all_tasks.json'))
44
+ end
45
+
46
+ subject { opportunity.tasks }
47
+
48
+ it { should be_a(Array) }
49
+
50
+ it { subject.length.should eql(1) }
51
+ end
52
+
33
53
  describe '#milestone=' do
34
54
  context 'when it receives a milestone name' do
35
55
  subject { CapsuleCRM::Opportunity.new(milestone: 'Bid') }
@@ -3,6 +3,11 @@ require 'spec_helper'
3
3
  describe CapsuleCRM::Organization do
4
4
  before { configure }
5
5
 
6
+ before do
7
+ stub_request(:get, /\/api\/users$/).
8
+ to_return(body: File.read('spec/support/all_users.json'))
9
+ end
10
+
6
11
  describe '#people' do
7
12
  let(:organization) { Fabricate.build(:organization, id: 1) }
8
13
 
@@ -21,4 +26,17 @@ describe CapsuleCRM::Organization do
21
26
  subject.all? { |item| item.is_a?(CapsuleCRM::Person) }.should be_true
22
27
  end
23
28
  end
29
+
30
+ describe '#tasks' do
31
+ let(:organization) { Fabricate.build(:organization, id: 1) }
32
+
33
+ before do
34
+ stub_request(:get, /\/api\/tasks$/).
35
+ to_return(body: File.read('spec/support/all_tasks.json'))
36
+ end
37
+
38
+ subject { organization.tasks }
39
+
40
+ it { should be_a(Array) }
41
+ end
24
42
  end
@@ -3,9 +3,26 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe CapsuleCRM::Person do
6
+ before do
7
+ stub_request(:get, /\/api\/users$/).
8
+ to_return(body: File.read('spec/support/all_users.json'))
9
+ end
6
10
 
7
11
  before { configure }
8
12
 
13
+ describe '#tasks' do
14
+ let(:person) { Fabricate.build(:person, id: 1) }
15
+
16
+ before do
17
+ stub_request(:get, /\/api\/tasks$/).
18
+ to_return(body: File.read('spec/support/all_tasks.json'))
19
+ end
20
+
21
+ subject { person.tasks }
22
+
23
+ it { should be_a(Array) }
24
+ end
25
+
9
26
  describe '._for_organization' do
10
27
  context 'when there are many people for the organization' do
11
28
  pending
@@ -52,15 +52,16 @@ describe CapsuleCRM::Task do
52
52
  subject.all? { |item| item.is_a?(CapsuleCRM::Task) }.should be_true
53
53
  end
54
54
 
55
- it { subject.length.should eql(1) }
55
+ it { subject.length.should eql(4) }
56
56
 
57
57
  it { subject.first.description.should eql('Meet with customer') }
58
58
  end
59
59
 
60
60
  describe '.create' do
61
+ let(:location) { 'https://sample.capsulecrm.com/api/task/59' }
62
+
61
63
  context 'when it is valid' do
62
64
  before do
63
- location = 'https://sample.capsulecrm.com/api/task/59'
64
65
  stub_request(:post, /\/api\/task$/).
65
66
  to_return(headers: { 'Location' => location })
66
67
  end
@@ -72,6 +73,63 @@ describe CapsuleCRM::Task do
72
73
  it { should be_persisted }
73
74
  end
74
75
 
76
+ context 'when it belongs to a party' do
77
+ before do
78
+ stub_request(:post, /\/api\/party\/#{party.id}\/task$/).
79
+ to_return(headers: { 'Location' => location })
80
+ end
81
+
82
+ let(:party) { Fabricate.build(:person, id: 1) }
83
+
84
+ subject do
85
+ CapsuleCRM::Task.create(
86
+ Fabricate.attributes_for(:task, party: party)
87
+ )
88
+ end
89
+
90
+ it { should be_a(CapsuleCRM::Task) }
91
+
92
+ it { should be_persisted }
93
+ end
94
+
95
+ context 'when it belongs to a opportunity' do
96
+ before do
97
+ stub_request(:post, /\/api\/opportunity\/#{opportunity.id}\/task$/).
98
+ to_return(headers: { 'Location' => location })
99
+ end
100
+
101
+ let(:opportunity) { Fabricate.build(:opportunity, id: 2) }
102
+
103
+ subject do
104
+ CapsuleCRM::Task.create(
105
+ Fabricate.attributes_for(:task, opportunity: opportunity)
106
+ )
107
+ end
108
+
109
+ it { should be_a(CapsuleCRM::Task) }
110
+
111
+ it { should be_persisted }
112
+ end
113
+
114
+ context 'when it belongs to a case' do
115
+ before do
116
+ stub_request(:post, /\/api\/kase\/#{kase.id}\/task$/).
117
+ to_return(headers: { 'Location' => location })
118
+ end
119
+
120
+ let(:kase) { Fabricate.build(:case, id: 5) }
121
+
122
+ subject do
123
+ CapsuleCRM::Task.create(
124
+ Fabricate.attributes_for(:task, case: kase)
125
+ )
126
+ end
127
+
128
+ it { should be_a(CapsuleCRM::Task) }
129
+
130
+ it { should be_persisted }
131
+ end
132
+
75
133
  context 'when it is not valid' do
76
134
  subject { CapsuleCRM::Task.create }
77
135
 
@@ -10,6 +10,34 @@
10
10
  "owner": "a.user",
11
11
  "detail": "Meeting at Coffee shop",
12
12
  "partyId": "1"
13
+ },
14
+ {
15
+ "id": "101",
16
+ "dueDate": "2012-02-24T00:00:00Z",
17
+ "category": "Meeting",
18
+ "description": "Waste some time",
19
+ "owner": "a.user",
20
+ "detail": "Writing an open source gem instead of working",
21
+ "opportunityId": "5",
22
+ "opportunityName": "meeting"
23
+ },
24
+ {
25
+ "id": "102",
26
+ "dueDate": "2012-02-24T00:00:00Z",
27
+ "category": "Meeting",
28
+ "description": "Innovation time",
29
+ "owner": "a.user",
30
+ "detail": "Go and get drunk",
31
+ "caseId": "3",
32
+ "caseName": "I can't think of a good name"
33
+ },
34
+ {
35
+ "id": "103",
36
+ "dueDate": "2012-02-24T00:00:00Z",
37
+ "category": "Meeting",
38
+ "description": "An orphan task",
39
+ "owner": "a.user",
40
+ "detail": "Do something interesting"
13
41
  }
14
42
  ]
15
43
  }
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.6.0
4
+ version: 0.7.0
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-29 00:00:00.000000000 Z
11
+ date: 2013-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel