Skip to content

Commit de12dfc

Browse files
authored
Merge pull request #510 from intercom/mmurray/ruby_v4
Release version 4.0
2 parents d827e13 + 8409f89 commit de12dfc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+2710
-1747
lines changed

README.md

Lines changed: 235 additions & 222 deletions
Large diffs are not rendered by default.

Rakefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ Rake::TestTask.new("spec:integration") do |spec|
1818
end
1919

2020
task :spec => "spec:unit"
21-
task :default => :spec
21+
task :default => :spec

lib/intercom.rb

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
require "intercom/version"
1+
# frozen_string_literal: true
2+
3+
require 'intercom/version'
24
require 'intercom/service/admin'
35
require 'intercom/service/company'
46
require 'intercom/service/contact'
57
require 'intercom/service/conversation'
68
require 'intercom/service/count'
7-
require 'intercom/service/customer'
89
require 'intercom/service/event'
910
require 'intercom/service/message'
1011
require 'intercom/service/note'
@@ -13,29 +14,33 @@
1314
require 'intercom/service/segment'
1415
require 'intercom/service/tag'
1516
require 'intercom/service/team'
16-
require 'intercom/service/user'
1717
require 'intercom/service/visitor'
18+
require 'intercom/service/user'
19+
require 'intercom/service/lead'
20+
require 'intercom/deprecated_resources.rb'
1821
require 'intercom/options'
1922
require 'intercom/client'
20-
require "intercom/contact"
21-
require "intercom/count"
22-
require "intercom/customer"
23-
require "intercom/user"
24-
require "intercom/company"
25-
require "intercom/note"
26-
require "intercom/job"
27-
require "intercom/tag"
28-
require "intercom/segment"
29-
require "intercom/event"
30-
require "intercom/conversation"
31-
require "intercom/message"
32-
require "intercom/admin"
33-
require "intercom/request"
34-
require "intercom/subscription"
35-
require "intercom/team"
36-
require "intercom/errors"
37-
require "intercom/visitor"
38-
require "json"
23+
require 'intercom/contact'
24+
require 'intercom/user'
25+
require 'intercom/lead'
26+
require 'intercom/count'
27+
require 'intercom/company'
28+
require 'intercom/service/data_attribute'
29+
require 'intercom/note'
30+
require 'intercom/job'
31+
require 'intercom/tag'
32+
require 'intercom/segment'
33+
require 'intercom/event'
34+
require 'intercom/conversation'
35+
require 'intercom/message'
36+
require 'intercom/admin'
37+
require 'intercom/request'
38+
require 'intercom/subscription'
39+
require 'intercom/team'
40+
require 'intercom/errors'
41+
require 'intercom/visitor'
42+
require 'intercom/data_attribute'
43+
require 'json'
3944

4045
##
4146
# Intercom is a customer relationship management and messaging tool for web app owners

lib/intercom/api_operations/archive.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
# frozen_string_literal: true
2+
13
require 'intercom/utils'
24

35
module Intercom
46
module ApiOperations
57
module Archive
68
def archive(object)
7-
collection_name = Utils.resource_class_to_collection_name(collection_class)
89
@client.delete("/#{collection_name}/#{object.id}", {})
910
object
1011
end
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
require 'intercom/utils'
4+
5+
module Intercom
6+
module ApiOperations
7+
module Delete
8+
def delete(object)
9+
@client.delete("/#{collection_name}/#{object.id}", {})
10+
object
11+
end
12+
13+
alias_method 'archive', 'delete'
14+
end
15+
end
16+
end

lib/intercom/api_operations/find.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1+
# frozen_string_literal: true
2+
13
require 'intercom/utils'
24

35
module Intercom
46
module ApiOperations
57
module Find
68
def find(params)
79
raise BadRequestError, "#{self}#find takes a hash as its parameter but you supplied #{params.inspect}" unless params.is_a? Hash
8-
collection_name = Utils.resource_class_to_collection_name(collection_class)
10+
911
if params[:id]
1012
id = params.delete(:id)
1113
response = @client.get("/#{collection_name}/#{id}", params)
1214
else
1315
response = @client.get("/#{collection_name}", params)
1416
end
15-
raise Intercom::HttpError.new('Http Error - No response entity returned') unless response
17+
raise Intercom::HttpError, 'Http Error - No response entity returned' unless response
18+
1619
from_api(response)
1720
end
1821
end

lib/intercom/api_operations/find_all.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1+
# frozen_string_literal: true
2+
13
require 'intercom/client_collection_proxy'
24
require 'intercom/utils'
35

46
module Intercom
57
module ApiOperations
68
module FindAll
7-
89
def find_all(params)
910
raise BadRequestError, "#find takes a hash as its parameter but you supplied #{params.inspect}" unless params.is_a? Hash
10-
collection_name = Utils.resource_class_to_collection_name(collection_class)
11+
1112
finder_details = {}
1213
if params[:id] && !type_switched_finder?(params)
1314
finder_details[:url] = "/#{collection_name}/#{params[:id]}"
@@ -16,7 +17,7 @@ def find_all(params)
1617
finder_details[:url] = "/#{collection_name}"
1718
finder_details[:params] = params
1819
end
19-
collection_proxy_class.new(collection_name, finder_details: finder_details, client: @client)
20+
collection_proxy_class.new(collection_name, collection_class, details: finder_details, client: @client)
2021
end
2122

2223
private

lib/intercom/api_operations/list.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1+
# frozen_string_literal: true
2+
13
require 'intercom/client_collection_proxy'
4+
require 'intercom/base_collection_proxy'
25
require 'intercom/utils'
36

47
module Intercom
58
module ApiOperations
69
module List
710
def all
8-
ClientCollectionProxy.new(Utils.resource_class_to_collection_name(collection_class), client: @client)
11+
collection_proxy_class.new(collection_name, collection_class, client: @client)
912
end
1013
end
1114
end

lib/intercom/api_operations/load.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1+
# frozen_string_literal: true
2+
13
require 'intercom/utils'
24

35
module Intercom
46
module ApiOperations
57
module Load
68
def load(object)
7-
collection_name = Utils.resource_class_to_collection_name(collection_class)
89
if object.id
910
response = @client.get("/#{collection_name}/#{object.id}", {})
1011
else
1112
raise "Cannot load #{collection_class} as it does not have a valid id."
1213
end
13-
raise Intercom::HttpError.new('Http Error - No response entity returned') unless response
14+
raise Intercom::HttpError, 'Http Error - No response entity returned' unless response
15+
1416
object.from_response(response)
1517
end
1618
end
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# frozen_string_literal: true
2+
3+
module Intercom
4+
module ApiOperations
5+
module NestedResource
6+
module ClassMethods
7+
def nested_resource_methods(resource,
8+
path: nil,
9+
operations: nil,
10+
resource_plural: nil)
11+
resource_plural ||= Utils.pluralize(resource.to_s)
12+
path ||= resource_plural
13+
raise ArgumentError, 'operations array required' if operations.nil?
14+
15+
resource_url_method = :"#{resource_plural}_url"
16+
17+
resource_name = Utils.resource_class_to_collection_name(self)
18+
19+
define_method(resource_url_method.to_sym) do |id, nested_id = nil|
20+
url = "/#{resource_name}/#{id}/#{path}"
21+
url += "/#{nested_id}" unless nested_id.nil?
22+
url
23+
end
24+
25+
operations.each do |operation|
26+
case operation
27+
when :create
28+
define_method(:"create_#{resource}") do |params|
29+
url = send(resource_url_method, self.id)
30+
response = client.post(url, params)
31+
raise_no_response_error unless response
32+
self.class.from_api(response)
33+
end
34+
when :add
35+
define_method(:"add_#{resource}") do |params|
36+
url = send(resource_url_method, self.id)
37+
response = client.post(url, params)
38+
raise_no_response_error unless response
39+
self.class.from_api(response)
40+
end
41+
when :delete
42+
define_method(:"remove_#{resource}") do |params|
43+
url = send(resource_url_method, self.id, params[:id])
44+
response = client.delete(url, params)
45+
raise_no_response_error unless response
46+
self.class.from_api(response)
47+
end
48+
when :list
49+
define_method(resource_plural.to_sym) do
50+
url = send(resource_url_method, self.id)
51+
resource_class = Utils.constantize_resource_name(resource.to_s)
52+
resource_class.collection_proxy_class.new(resource_plural, resource_class, details: { url: url }, client: client)
53+
end
54+
else
55+
raise ArgumentError, "Unknown operation: #{operation.inspect}"
56+
end
57+
end
58+
end
59+
end
60+
61+
def self.included(base)
62+
base.extend(ClassMethods)
63+
end
64+
65+
private def raise_no_response_error
66+
raise Intercom::HttpError, 'Http Error - No response entity returned'
67+
end
68+
end
69+
end
70+
end

0 commit comments

Comments
 (0)