capsule_crm 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +19 -0
  4. data/README.md +1 -1
  5. data/lib/capsule_crm/associations/belongs_to.rb +12 -10
  6. data/lib/capsule_crm/associations/belongs_to_association.rb +80 -0
  7. data/lib/capsule_crm/associations/has_many.rb +8 -18
  8. data/lib/capsule_crm/associations/has_many_association.rb +80 -0
  9. data/lib/capsule_crm/associations.rb +26 -0
  10. data/lib/capsule_crm/capsule_jsonable.rb +5 -1
  11. data/lib/capsule_crm/case.rb +7 -9
  12. data/lib/capsule_crm/contacts.rb +1 -1
  13. data/lib/capsule_crm/custom_field.rb +5 -8
  14. data/lib/capsule_crm/history.rb +11 -11
  15. data/lib/capsule_crm/opportunity.rb +5 -7
  16. data/lib/capsule_crm/organization.rb +6 -7
  17. data/lib/capsule_crm/participant.rb +0 -4
  18. data/lib/capsule_crm/party.rb +1 -1
  19. data/lib/capsule_crm/person.rb +6 -7
  20. data/lib/capsule_crm/serializer.rb +56 -0
  21. data/lib/capsule_crm/task.rb +7 -5
  22. data/lib/capsule_crm/track.rb +1 -1
  23. data/lib/capsule_crm/user.rb +5 -1
  24. data/lib/capsule_crm/version.rb +1 -1
  25. data/lib/capsule_crm.rb +1 -0
  26. data/spec/fabricators/custom_field_fabricator.rb +7 -0
  27. data/spec/lib/capsule_crm/associations/belongs_to_association_spec.rb +78 -0
  28. data/spec/lib/capsule_crm/associations/has_many_association_spec.rb +84 -0
  29. data/spec/lib/capsule_crm/associations/has_many_proxy_spec.rb +2 -2
  30. data/spec/lib/capsule_crm/associations_spec.rb +46 -0
  31. data/spec/lib/capsule_crm/custom_field_spec.rb +20 -597
  32. data/spec/lib/capsule_crm/history_spec.rb +8 -9
  33. data/spec/lib/capsule_crm/person_spec.rb +0 -16
  34. data/spec/lib/capsule_crm/serializer_spec.rb +103 -0
  35. data/spec/lib/capsule_crm/task_spec.rb +6 -14
  36. metadata +15 -2
@@ -6,7 +6,7 @@ module CapsuleCRM
6
6
  include ActiveModel::Conversion
7
7
  include ActiveModel::Validations
8
8
 
9
- include CapsuleCRM::Associations::HasMany
9
+ include CapsuleCRM::Associations
10
10
  include CapsuleCRM::Attributes
11
11
  include CapsuleCRM::Collection
12
12
 
@@ -6,7 +6,7 @@ module CapsuleCRM
6
6
  include ActiveModel::Conversion
7
7
  include ActiveModel::Validations
8
8
 
9
- include CapsuleCRM::Associations::BelongsTo
9
+ include CapsuleCRM::Associations
10
10
 
11
11
  attribute :username, String
12
12
  attribute :name, String
@@ -31,6 +31,10 @@ module CapsuleCRM
31
31
  )
32
32
  end
33
33
 
34
+ def id
35
+ username
36
+ end
37
+
34
38
  def self.find_by_username(username)
35
39
  all.select { |user| user.username == username }.first
36
40
  end
@@ -1,3 +1,3 @@
1
1
  module CapsuleCrm
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
data/lib/capsule_crm.rb CHANGED
@@ -10,6 +10,7 @@ require 'capsule_crm/associations'
10
10
  require 'capsule_crm/address'
11
11
  require 'capsule_crm/case'
12
12
  require 'capsule_crm/connection'
13
+ require 'capsule_crm/serializer'
13
14
 
14
15
  require 'capsule_crm/attachment'
15
16
  require 'capsule_crm/country'
@@ -0,0 +1,7 @@
1
+ Fabricator(:custom_field, class_name: 'CapsuleCRM::CustomField') do
2
+ label { Faker::Lorem.word }
3
+ tag { Faker::Lorem.word }
4
+ text { Faker::Lorem.word }
5
+ boolean true
6
+ date { Date.today }
7
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ class CapsuleCRM::BelongsToAssociationTest
4
+ include Virtus
5
+
6
+ attribute :name
7
+
8
+ def self.find(id)
9
+ new(name: 'test')
10
+ end
11
+ end
12
+
13
+ describe CapsuleCRM::Associations::BelongsToAssociation do
14
+ let(:association_name) { Faker::Lorem.word.to_sym }
15
+ let(:defined_on) { double }
16
+ let(:options) do
17
+ { class_name: 'CapsuleCRM::BelongsToAssociationTest' }
18
+ end
19
+ let(:association) do
20
+ CapsuleCRM::Associations::BelongsToAssociation.
21
+ new(association_name, defined_on, options)
22
+ end
23
+
24
+ describe '#macro' do
25
+ subject { association.macro }
26
+
27
+ it 'should return :belongs_to' do
28
+ expect(subject).to eql(:belongs_to)
29
+ end
30
+ end
31
+
32
+ describe '#foreign_key' do
33
+ context 'when a foreign_key is not supplied' do
34
+ subject { association.foreign_key }
35
+
36
+ it 'should build the foreign key' do
37
+ expect(subject).to eql("#{association_name}_id")
38
+ end
39
+ end
40
+
41
+ context 'when a foreign key is supplied' do
42
+ before { options.merge!(foreign_key: 'bleurgh') }
43
+ subject { association.foreign_key }
44
+
45
+ it 'should return the supplied foreign key' do
46
+ expect(subject).to eql(options[:foreign_key])
47
+ end
48
+ end
49
+ end
50
+
51
+ describe '#serializable_key' do
52
+ subject { association.serializable_key }
53
+ context 'when a serializable_key is supplied' do
54
+ let(:serializable_key) { Faker::Lorem.word }
55
+ before { options.merge!(serializable_key: serializable_key) }
56
+
57
+ it 'should return the serializable_key' do
58
+ expect(subject).to eql(serializable_key)
59
+ end
60
+ end
61
+
62
+ context 'when a serializable_key is not supplied' do
63
+ it 'should return the foreign key' do
64
+ expect(subject).to eql(association.foreign_key)
65
+ end
66
+ end
67
+ end
68
+
69
+ describe '#object' do
70
+ before { options.merge!(foreign_key: :some_id) }
71
+ let(:object) { double(some_id: Random.rand(1..10)) }
72
+ subject { association.parent(object) }
73
+
74
+ it 'should return the parent' do
75
+ expect(subject).to be_a(CapsuleCRM::BelongsToAssociationTest)
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+
3
+ class CapsuleCRM::SomeClass
4
+ include Virtus
5
+
6
+ attribute :name
7
+
8
+ def self._for_mock(mock_id)
9
+ ['test']
10
+ end
11
+ end
12
+
13
+ describe CapsuleCRM::Associations::HasManyAssociation do
14
+ let(:association_name) { Faker::Lorem.word.to_sym }
15
+ let(:defined_on) { double }
16
+ let(:options) do
17
+ { class_name: 'CapsuleCRM::SomeClass' }
18
+ end
19
+
20
+ describe '#macro' do
21
+ subject { described_class.new(association_name, defined_on, options).macro }
22
+
23
+ it 'should eql :has_many' do
24
+ expect(subject).to eql(:has_many)
25
+ end
26
+ end
27
+
28
+ describe '#defined_on' do
29
+ subject do
30
+ described_class.new(association_name, defined_on, options).defined_on
31
+ end
32
+
33
+ it 'should return the defined_on argument' do
34
+ expect(subject).to eql(defined_on)
35
+ end
36
+ end
37
+
38
+ describe '#proxy' do
39
+ let(:association) do
40
+ described_class.new(association_name, defined_on, options)
41
+ end
42
+ let(:parent) { double(id: Random.rand(1..10)) }
43
+
44
+ context 'when a collection is not supplied' do
45
+ subject { association.proxy(parent) }
46
+
47
+ it 'should return a HasManyProxy' do
48
+ expect(subject).to eql(['test'])
49
+ end
50
+ end
51
+
52
+ context 'when a collection is not supplied' do
53
+ let(:name) { Faker::Lorem.word }
54
+
55
+ context 'when the collection is a hash' do
56
+ let(:collection) do
57
+ { some_class: { name: name } }
58
+ end
59
+ subject { association.proxy(parent, collection) }
60
+
61
+ it 'should return an array' do
62
+ expect(subject).to be_a(Array)
63
+ end
64
+
65
+ it 'should contain a new instance of the "SomeClass"' do
66
+ expect(subject.first).to be_a(CapsuleCRM::SomeClass)
67
+ end
68
+
69
+ it 'should set the "SomeClass" instance attributes' do
70
+ expect(subject.first.name).to eql(name)
71
+ end
72
+ end
73
+
74
+ context 'when the collection is an array' do
75
+ let(:collection) { [CapsuleCRM::SomeClass.new(name: name)] }
76
+ subject { association.proxy(parent, collection) }
77
+
78
+ it 'should return the supplied array' do
79
+ expect(subject).to eql(collection)
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  class Parent
4
4
  include Virtus
5
- include CapsuleCRM::Associations::HasMany
5
+ include CapsuleCRM::Associations
6
6
 
7
7
  attribute :id, Integer
8
8
 
@@ -15,7 +15,7 @@ end
15
15
 
16
16
  class Child
17
17
  include Virtus
18
- include CapsuleCRM::Associations::BelongsTo
18
+ include CapsuleCRM::Associations
19
19
 
20
20
  attribute :name
21
21
 
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ class CapsuleCRM::AssociationsTest
4
+ include Virtus
5
+ include CapsuleCRM::Associations
6
+
7
+ has_many :whatevers, class_name: 'CapsuleCRM::Party'
8
+
9
+ belongs_to :something, class_name: 'CapsuleCRM::Task'
10
+ end
11
+
12
+ describe CapsuleCRM::Associations do
13
+ describe '.has_many_associations' do
14
+ subject { CapsuleCRM::AssociationsTest.has_many_associations }
15
+
16
+ it 'should return a hash' do
17
+ expect(subject).to be_a(Hash)
18
+ end
19
+
20
+ it 'should contain 1 item' do
21
+ expect(subject.length).to eql(1)
22
+ end
23
+
24
+ it 'should contain a has many association' do
25
+ expect(subject[:whatevers]).
26
+ to be_a(CapsuleCRM::Associations::HasManyAssociation)
27
+ end
28
+ end
29
+
30
+ describe '.belongs_to_associations' do
31
+ subject { CapsuleCRM::AssociationsTest.belongs_to_associations }
32
+
33
+ it 'should return a hash' do
34
+ expect(subject).to be_a(Hash)
35
+ end
36
+
37
+ it 'should contain 1 item' do
38
+ expect(subject.length).to eql(1)
39
+ end
40
+
41
+ it 'should contain a belongs to association' do
42
+ expect(subject[:something]).
43
+ to be_a(CapsuleCRM::Associations::BelongsToAssociation)
44
+ end
45
+ end
46
+ end