context_io 1.0.0.pre.beta

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.
data/lib/context_io.rb ADDED
@@ -0,0 +1,104 @@
1
+ require 'context_io/account'
2
+ require 'context_io/connection'
3
+ require 'context_io/oauth_provider'
4
+
5
+ require 'context_io/account/contact'
6
+ require 'context_io/account/email_address'
7
+ require 'context_io/account/files'
8
+ require 'context_io/account/sources'
9
+ require 'context_io/account/sync'
10
+ require 'context_io/account/threads'
11
+
12
+ require 'context_io/shared/connect_token'
13
+ require 'context_io/shared/discovery'
14
+ require 'context_io/shared/folder'
15
+ require 'context_io/shared/message'
16
+ require 'context_io/shared/webhook'
17
+
18
+ require 'context_io/utilities/api_call_made'
19
+ require 'context_io/utilities/call_helpers'
20
+ require 'context_io/utilities/collection_helper'
21
+ require 'context_io/utilities/deleted_resource'
22
+ require 'context_io/utilities/request'
23
+ require 'context_io/utilities/valid_parameters/get_params'
24
+ require 'context_io/utilities/valid_parameters/post_params'
25
+
26
+ require "erb"
27
+
28
+ module ContextIO
29
+ class ContextIO
30
+ include CollectionHelper
31
+ include CallHelpers
32
+ attr_reader :connection, :call_url
33
+ def initialize(key:, secret:)
34
+ @connection = Connection.new(key, secret)
35
+ @call_url = "/2.0"
36
+ end
37
+
38
+ def get_accounts(**kwargs)
39
+ collection_return(url: "#{call_url}/accounts",
40
+ klass: Account,
41
+ valid_params: ValidGetParams::ACCOUNTS,
42
+ given_params: kwargs)
43
+ end
44
+
45
+ def post_account(type: "IMAP", **kwargs)
46
+ given_params = kwargs.merge(type: type)
47
+ account = call_api_return_new_object(klass: Account,
48
+ url: "#{call_url}/accounts",
49
+ method: :post,
50
+ valid_params: ValidPostParams::ACCOUNTS,
51
+ given_params: given_params)
52
+ return_post_api_call_made(account)
53
+ end
54
+
55
+ def get_connect_tokens
56
+ collection_return(url: "#{call_url}/connect_tokens",
57
+ klass: ConnectToken)
58
+ end
59
+
60
+ def post_connect_token(callback_url: , **kwargs)
61
+ given_params = kwargs.merge(callback_url: callback_url)
62
+ token = call_api_return_new_object(klass: ConnectToken,
63
+ url: "#{call_url}/connect_tokens",
64
+ method: :post,
65
+ valid_params: ValidPostParams::CONNECT_TOKEN,
66
+ given_params: given_params)
67
+ return_post_api_call_made(token)
68
+ end
69
+
70
+ def discovery(email:)
71
+ Discovery.new(parent: self, email: email).get
72
+ end
73
+
74
+ def get_oauth_providers
75
+ collection_return(url: "#{call_url}/oauth_providers",
76
+ klass: OauthProvider)
77
+ end
78
+
79
+ def post_oauth_provider(type:, provider_consumer_key:, provider_consumer_secret:)
80
+ given_params = [type, provider_consumer_key, provider_consumer_secret]
81
+ provider = call_api_return_new_object(klass: OauthProvider,
82
+ url: "#{call_url}/oauth_provider",
83
+ method: :post,
84
+ valid_params: ValidPostParams::OAUTH_PROVIDER,
85
+ given_params: given_params)
86
+ return_post_api_call_made(provider)
87
+ end
88
+
89
+ def get_webhooks
90
+ collection_return(url: "#{call_url}/webhooks",
91
+ klass: Webhook)
92
+ end
93
+
94
+ def post_webhook(callback_url:, **kwargs)
95
+ given_params = kwargs.merge(callback_url: callback_url)
96
+ token = call_api_return_new_object(klass: Webhook,
97
+ url: "#{call_url}/webhooks",
98
+ method: :post,
99
+ valid_params: ValidPostParams::WEBHOOK,
100
+ given_params: given_params)
101
+ return_post_api_call_made(token)
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,143 @@
1
+ require "context_io/utilities/collection_helper"
2
+ require "context_io/utilities/call_helpers"
3
+ module ContextIO
4
+ class Account
5
+ include ContextIO::CallHelpers
6
+ ACCOUNT_READERS = %I(username created suspended email_addresses first_name last_name
7
+ password_expired sources resource_url)
8
+ private
9
+ attr_reader :parent
10
+
11
+ public
12
+ attr_accessor :api_call_made
13
+ attr_reader :id, :success, :connection, :status, *ACCOUNT_READERS
14
+ def initialize(parent:,
15
+ identifier: nil,
16
+ response: nil,
17
+ status: nil,
18
+ success: nil,
19
+ api_call_made: nil)
20
+ @parent = parent
21
+ @connection = parent.connection
22
+ @id = identifier
23
+ @status = status
24
+ @success = success
25
+ @api_call_made = api_call_made
26
+ if response
27
+ parse_response(response)
28
+ end
29
+ end
30
+
31
+ def call_url
32
+ build_url("accounts", id)
33
+ end
34
+
35
+ def post(**kwargs)
36
+ call_api_return_updated_object(klass: Account,
37
+ method: :post,
38
+ identifier: id,
39
+ url: call_url,
40
+ valid_params: ValidPostParams::ACCOUNT,
41
+ given_params: kwargs)
42
+ end
43
+
44
+ def get_connect_tokens
45
+ collection_return(url: "#{call_url}/connect_tokens",
46
+ klass: ConnectToken)
47
+ end
48
+
49
+ def post_connect_token(callback_url:, **kwargs)
50
+ given_params = kwargs.merge(callback_url: callback_url)
51
+ token = call_api_return_new_object(klass: ConnectToken,
52
+ url: "#{call_url}/connect_tokens",
53
+ method: :post,
54
+ valid_params: ValidPostParams::CONNECT_TOKEN,
55
+ given_params: given_params)
56
+ return_post_api_call_made(token)
57
+ end
58
+
59
+ def get_contacts(**kwargs)
60
+ contact_collection_return(url: "#{call_url}/contacts",
61
+ valid_params: ValidGetParams::CONTACTS,
62
+ given_params: kwargs)
63
+ end
64
+
65
+ def get_email_addresses
66
+ collection_return(url: "#{call_url}/email_addresses",
67
+ klass: EmailAddress)
68
+ end
69
+
70
+ def post_email_address(email_address:)
71
+ given_params = { email_address: email_address }
72
+ email = call_api_return_new_object(klass: EmailAddress,
73
+ url: "#{call_url}/email_addresses",
74
+ method: :post,
75
+ valid_params: [:email_address],
76
+ given_params: given_params)
77
+ return_post_api_call_made(email)
78
+ end
79
+
80
+ def get_files(**kwargs)
81
+ collection_return(url: "#{call_url}/files",
82
+ klass: Files,
83
+ valid_params: ValidGetParams::FILES,
84
+ given_params: kwargs)
85
+ end
86
+
87
+ def get_messages(**kwargs)
88
+ collection_return(url: "#{call_url}/messages",
89
+ klass: Message,
90
+ valid_params: ValidGetParams::MESSAGES,
91
+ given_params: kwargs)
92
+ end
93
+
94
+ def get_sources(**kwargs)
95
+ collection_return(url: "#{call_url}/sources",
96
+ klass: Sources,
97
+ valid_params: ValidGetParams::SOURCES,
98
+ given_params: kwargs)
99
+ end
100
+
101
+ def post_source(email:, server:, username:, use_ssl:, port:, type: "IMAP", **kwargs)
102
+ given_params = kwargs.merge(email: email,
103
+ server: server,
104
+ username: username,
105
+ use_ssl: use_ssl,
106
+ port: port,
107
+ type: type)
108
+ token = call_api_return_new_object(klass: Sources,
109
+ url: "#{call_url}/sources",
110
+ method: :post,
111
+ valid_params: ValidPostParams::SOURCES,
112
+ given_params: given_params)
113
+ return_post_api_call_made(token)
114
+ end
115
+
116
+ def get_sync
117
+ Sync.new(parent: self).get
118
+ end
119
+
120
+ def get_threads(**kwargs)
121
+ call_api_return_new_object(klass: Threads,
122
+ url: "#{call_url}/threads",
123
+ valid_params: ValidGetParams::THREADS,
124
+ given_params: kwargs)
125
+ end
126
+
127
+ def get_webhooks
128
+ collection_return(url: "#{call_url}/webhooks",
129
+ klass: Webhook)
130
+ end
131
+
132
+ def post_webhook(callback_url:, failure_notif_url:, **kwargs)
133
+ given_params = kwargs.merge(callback_url: callback_url,
134
+ failure_notif_url: failure_notif_url)
135
+ token = call_api_return_new_object(klass: Webhook,
136
+ url: "#{call_url}/webhooks",
137
+ method: :post,
138
+ valid_params: ValidPostParams::WEBHOOKS,
139
+ given_params: given_params)
140
+ return_post_api_call_made(token)
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,59 @@
1
+ module ContextIO
2
+ class Contact
3
+ include ContextIO::CallHelpers
4
+ CONTACT_READERS = %I(emails name thumbnail last_received last_sent count sent_count
5
+ received_count sent_from_account_count query email resource_url)
6
+ private
7
+ attr_reader :parent
8
+
9
+ public
10
+ attr_accessor :api_call_made
11
+ attr_reader :response, :status, :parent, :connection, :success, :email,
12
+ *CONTACT_READERS
13
+ def initialize(parent:,
14
+ identifier: nil,
15
+ response: nil,
16
+ status: nil,
17
+ success: nil,
18
+ api_call_made: nil)
19
+ @parent = parent
20
+ @connection = parent.connection
21
+ @email = identifier
22
+ @status = status
23
+ @success = success
24
+ @api_call_made = api_call_made
25
+ if response
26
+ parse_response(response)
27
+ end
28
+ end
29
+
30
+ def encoded_email
31
+ ERB::Util.url_encode(email)
32
+ end
33
+
34
+ def call_url
35
+ build_url("contacts", encoded_email)
36
+ end
37
+
38
+ def get_files(**kwargs)
39
+ collection_return(url: "#{call_url}/files",
40
+ klass: Files,
41
+ valid_params: ValidGetParams::CONTACT_FILES,
42
+ given_params: kwargs)
43
+ end
44
+
45
+ def get_messages(**kwargs)
46
+ collection_return(url: "#{call_url}/messages",
47
+ klass: Message,
48
+ valid_params: ValidGetParams::CONTACT_MESSAGES,
49
+ given_params: kwargs)
50
+ end
51
+
52
+ def get_threads(**kwargs)
53
+ call_api_return_new_object(klass: Threads,
54
+ url: "#{call_url}/threads",
55
+ valid_params: ValidGetParams::THREADS,
56
+ given_params: kwargs)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,33 @@
1
+ module ContextIO
2
+ class EmailAddress
3
+ include ContextIO::CallHelpers
4
+ EMAIL_ATTRS = %I(validated primary resource_url)
5
+
6
+ private
7
+ attr_reader :parent
8
+
9
+ public
10
+ attr_accessor :api_call_made
11
+ attr_reader :response, :status, :connection, :success, :email, *EMAIL_ATTRS
12
+ def initialize(parent:,
13
+ identifier: nil,
14
+ response: nil,
15
+ status: nil,
16
+ success: nil,
17
+ api_call_made: nil)
18
+ @parent = parent
19
+ @connection = parent.connection
20
+ @email = identifier
21
+ @status = status
22
+ @success = success
23
+ @api_call_made = api_call_made
24
+ if response
25
+ parse_response(response)
26
+ end
27
+ end
28
+
29
+ def call_url
30
+ build_url("email_addresses", email)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,58 @@
1
+ module ContextIO
2
+ class Files
3
+ include ContextIO::CallHelpers
4
+ FILE_READERS = %I(size type subject date date_indexed addresses person_info
5
+ file_name file_name_structure body_section supports_preview
6
+ is_embedded content_disposition content_id message_id
7
+ email_message_id gmail_message_id gmail_thread_id email_addresses
8
+ created first_name id last_name resource_url sources is_tnef_part)
9
+
10
+ private
11
+ attr_reader :parent
12
+
13
+ public
14
+ attr_accessor :api_call_made
15
+ attr_reader :connection, :response, :status, :success, :file_id, *FILE_READERS
16
+ def initialize(parent:,
17
+ identifier: nil,
18
+ response: nil,
19
+ status: nil,
20
+ success: nil,
21
+ api_call_made: nil)
22
+ @parent = parent
23
+ @connection = parent.connection
24
+ @file_id = identifier
25
+ @status = status
26
+ @success = success
27
+ @api_call_made = api_call_made
28
+ if response
29
+ parse_response(response)
30
+ end
31
+ end
32
+
33
+ def call_url
34
+ build_url("files", file_id)
35
+ end
36
+
37
+ def contact_url?
38
+ parent.call_url.include?("/contacts/")
39
+ end
40
+
41
+ def contact_url_error
42
+ raise StandardError, "This method can only be called from '2.0/accounts/:account/file/:file_id'" if contact_url?
43
+ end
44
+
45
+ def get_content(**kwargs)
46
+ contact_url_error
47
+ call_api_return_new_object(klass: Files,
48
+ url: "#{call_url}/content",
49
+ valid_params: ValidGetParams::FILE_CONTENT,
50
+ given_params: kwargs)
51
+ end
52
+
53
+ def get_related
54
+ contact_url_error
55
+ get_request(url: "#{call_url}/related")
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,83 @@
1
+ module ContextIO
2
+ class Sources
3
+ include ContextIO::CallHelpers
4
+ include ContextIO::CollectionHelper
5
+ SOURCE_READERS = %I(username status type label use_ssl resource_url server
6
+ port mailserviceAccountId callbackUrl delimiter
7
+ authentication_type sync_flags type browser_redirect_url)
8
+
9
+ private
10
+ attr_reader :parent
11
+
12
+ public
13
+ attr_accessor :api_call_made
14
+ attr_reader :status, :success, :connection, :message_id, :response, *SOURCE_READERS
15
+ def initialize(parent:,
16
+ identifier: nil,
17
+ response: nil,
18
+ status: nil,
19
+ success: nil,
20
+ api_call_made: nil)
21
+ @status = status
22
+ @success = success
23
+ @parent = parent
24
+ @connection = parent.connection
25
+ @label = identifier
26
+ @api_call_made = api_call_made
27
+ if response
28
+ parse_response(response)
29
+ end
30
+ end
31
+
32
+ def call_url
33
+ build_url("sources", label)
34
+ end
35
+
36
+ def post(**kwargs)
37
+ src = call_api_return_updated_object(klass: Sources,
38
+ url: call_url,
39
+ identifier: label,
40
+ method: :post,
41
+ valid_params: ValidPostParams::SOURCE,
42
+ given_params: kwargs)
43
+ return_post_api_call_made(src)
44
+ end
45
+
46
+ def get_folders(**kwargs)
47
+ collection_return(url: "#{call_url}/folders",
48
+ klass: Folder,
49
+ valid_params: ValidGetParams::FOLDERS_SOURCES,
50
+ given_params: kwargs)
51
+ end
52
+
53
+ def get_folder(folder:, **kwargs)
54
+ url = "#{call_url}/folders/#{folder}"
55
+ call_api_return_new_object(klass: Folder,
56
+ url: url,
57
+ valid_params: ValidGetParams::SOURCE_FOLDER,
58
+ given_params: kwargs)
59
+ end
60
+
61
+ def sync
62
+ Sync.new(parent: self).get
63
+ end
64
+
65
+ def get_connect_tokens
66
+ collection_return(url: "#{call_url}/connect_tokens",
67
+ klass: ConnectToken)
68
+ end
69
+
70
+ def get_connect_token(token:)
71
+ call_api_return_new_object(klass: ConnectToken,
72
+ url: "#{call_url}/connect_tokens/#{token}")
73
+ end
74
+
75
+ def post_connect_token(callback_url:)
76
+ call_api_return_new_object(klass: ConnectToken,
77
+ url: "#{call_url}/connect_tokens",
78
+ method: :post,
79
+ valid_params: ValidPostParams::SOURCE_CONNECT_TOKEN,
80
+ given_params: { callback_url: callback_url })
81
+ end
82
+ end
83
+ end