capsule_crm 1.1.0 → 1.2.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.
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