Skip to content

Commit daa807f

Browse files
committed
add data attributes accessors
1 parent 3e2c24f commit daa807f

File tree

10 files changed

+94
-0
lines changed

10 files changed

+94
-0
lines changed

lib/intercom.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
require 'intercom/service/tag'
1515
require 'intercom/service/user'
1616
require 'intercom/service/visitor'
17+
require 'intercom/service/data_attribute'
1718
require 'intercom/options'
1819
require 'intercom/client'
1920
require "intercom/contact"
@@ -33,6 +34,7 @@
3334
require "intercom/subscription"
3435
require "intercom/errors"
3536
require "intercom/visitor"
37+
require "intercom/data_attribute"
3638
require "json"
3739

3840
##

lib/intercom/client.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ def jobs
107107
Intercom::Service::Job.new(self)
108108
end
109109

110+
def data_attributes
111+
Intercom::Service::DataAttribute.new(self)
112+
end
113+
110114
def get(path, params)
111115
execute_request Intercom::Request.get(path, params)
112116
end

lib/intercom/company.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
require 'intercom/traits/incrementable_attributes'
22
require 'intercom/traits/api_resource'
3+
require 'intercom/traits/data_attribute_accessors'
34

45
module Intercom
56
class Company
67
include Traits::IncrementableAttributes
78
include Traits::ApiResource
9+
include Traits::DataAttributeAccessors
810

911
def identity_vars ; [:id, :company_id] ; end
1012
def flat_store_attributes ; [:custom_attributes] ; end

lib/intercom/contact.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
require 'intercom/traits/api_resource'
2+
require 'intercom/traits/data_attribute_accessors'
23

34
module Intercom
45
class Contact
56
include Traits::ApiResource
7+
include Traits::DataAttributeAccessors
68

79
def identity_vars ; [:email, :user_id] ; end
810
def flat_store_attributes ; [:custom_attributes] ; end

lib/intercom/data_attribute.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require 'intercom/traits/api_resource'
2+
3+
module Intercom
4+
class DataAttribute
5+
include Traits::ApiResource
6+
end
7+
end
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
require 'intercom/client_collection_proxy'
2+
require 'intercom/utils'
3+
4+
module Intercom
5+
module ExtendedApiOperations
6+
module DataAttributes
7+
def customer
8+
list_data_attributes("customer")
9+
end
10+
11+
def company
12+
list_data_attributes("company")
13+
end
14+
15+
private
16+
17+
def list_data_attributes(model)
18+
collection_name = "data_attributes"
19+
ClientCollectionProxy.new(collection_name, finder_details: {url: "/#{collection_name}/#{model}"}, client: @client)
20+
end
21+
end
22+
end
23+
end
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require 'intercom/service/base_service'
2+
require 'intercom/extended_api_operations/data_attributes'
3+
4+
module Intercom
5+
module Service
6+
class DataAttribute < BaseService
7+
include ExtendedApiOperations::DataAttributes
8+
9+
def collection_class
10+
Intercom::DataAttribute
11+
end
12+
end
13+
end
14+
end
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module Intercom
2+
module Traits
3+
module DataAttributeAccessors
4+
5+
def attribute_value(data_attribute)
6+
if data_attribute.custom
7+
custom_attributes[data_attribute.name]
8+
elsif location_data_attribute?(data_attribute)
9+
location_data.send(data_attribute.name.to_sym)
10+
elsif avatar_attribute?(data_attribute)
11+
avatar.send(data_attribute.name.to_sym)
12+
elsif plan_attribute?(data_attribute)
13+
plan.send(data_attribute.name.to_sym)
14+
else
15+
send(data_attribute.name.to_sym)
16+
end
17+
rescue
18+
nil
19+
end
20+
21+
private
22+
23+
def location_data_attribute?(data_attribute)
24+
data_attribute.full_name.start_with?('location_data.')
25+
end
26+
27+
def avatar_attribute?(data_attribute)
28+
data_attribute.full_name.start_with?('avatar.')
29+
end
30+
31+
def plan_attribute?(data_attribute)
32+
data_attribute.full_name.start_with?('plan.')
33+
end
34+
end
35+
end
36+
end

lib/intercom/user.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
require 'intercom/traits/incrementable_attributes'
22
require 'intercom/traits/api_resource'
3+
require 'intercom/traits/data_attribute_accessors'
34

45
module Intercom
56
class User
67
include Traits::IncrementableAttributes
78
include Traits::ApiResource
9+
include Traits::DataAttributeAccessors
810

911
def identity_vars ; [:id, :email, :user_id] ; end
1012
def flat_store_attributes ; [:custom_attributes] ; end

lib/intercom/visitor.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
require 'intercom/traits/incrementable_attributes'
22
require 'intercom/traits/api_resource'
3+
require 'intercom/traits/data_attribute_accessors'
34

45
module Intercom
56
class Visitor
67
include Traits::IncrementableAttributes
78
include Traits::ApiResource
9+
include Traits::DataAttributeAccessors
810

911
def identity_vars ; [:id, :email, :user_id] ; end
1012
def flat_store_attributes ; [:custom_attributes] ; end

0 commit comments

Comments
 (0)