ribbon-intercom 0.2.3 → 0.3.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.
- checksums.yaml +4 -4
- data/lib/ribbon/intercom/client/mock_sdk.rb +13 -0
- data/lib/ribbon/intercom/client/sdk/adapters/adapter/response.rb +38 -0
- data/lib/ribbon/intercom/client/sdk/adapters/adapter.rb +51 -0
- data/lib/ribbon/intercom/client/sdk/adapters/http_adapter/connection.rb +34 -0
- data/lib/ribbon/intercom/client/sdk/adapters/http_adapter.rb +26 -0
- data/lib/ribbon/intercom/client/sdk/adapters/local_adapter.rb +54 -0
- data/lib/ribbon/intercom/client/sdk/adapters/mock_adapter.rb +40 -0
- data/lib/ribbon/intercom/client/sdk/adapters.rb +10 -0
- data/lib/ribbon/intercom/client/sdk.rb +71 -26
- data/lib/ribbon/intercom/client.rb +35 -7
- data/lib/ribbon/intercom/errors.rb +34 -6
- data/lib/ribbon/intercom/package.rb +64 -0
- data/lib/ribbon/intercom/packageable/mixin.rb +35 -0
- data/lib/ribbon/intercom/packageable.rb +6 -0
- data/lib/ribbon/intercom/service/channel/stores/mock_store.rb +40 -0
- data/lib/ribbon/intercom/service/channel/stores/redis_store.rb +186 -0
- data/lib/ribbon/intercom/service/{channel_stores/base.rb → channel/stores/store.rb} +13 -5
- data/lib/ribbon/intercom/service/channel/stores.rb +9 -0
- data/lib/ribbon/intercom/service/channel.rb +106 -4
- data/lib/ribbon/intercom/service.rb +156 -95
- data/lib/ribbon/intercom/utils/mixins/mock_safe.rb +26 -0
- data/lib/ribbon/intercom/utils/mixins.rb +5 -0
- data/lib/ribbon/intercom/utils/signer.rb +71 -0
- data/lib/ribbon/intercom/utils.rb +40 -13
- data/lib/ribbon/intercom/version.rb +1 -1
- data/lib/ribbon/intercom.rb +10 -7
- data/lib/tasks/intercom.rake +3 -3
- metadata +20 -20
- data/lib/ribbon/intercom/client/sdk/connection.rb +0 -35
- data/lib/ribbon/intercom/client/sdk/response.rb +0 -59
- data/lib/ribbon/intercom/service/channel_stores/redis_store.rb +0 -60
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'base64'
|
2
|
-
require 'set'
|
3
|
-
|
4
|
-
module Ribbon::Intercom
|
5
|
-
class Client
|
6
|
-
class SDK
|
7
|
-
class Response
|
8
|
-
attr_reader :headers
|
9
|
-
attr_reader :body
|
10
|
-
attr_reader :code
|
11
|
-
|
12
|
-
def initialize(rest_client_response)
|
13
|
-
response = rest_client_response
|
14
|
-
@code = response.code
|
15
|
-
@headers = rest_client_response.headers
|
16
|
-
@body = _process_body(response.body)
|
17
|
-
_deep_freeze(@body)
|
18
|
-
end
|
19
|
-
|
20
|
-
def success?
|
21
|
-
code >= 200 && code < 300
|
22
|
-
end
|
23
|
-
|
24
|
-
def error?
|
25
|
-
!success?
|
26
|
-
end
|
27
|
-
|
28
|
-
def missing_permissions
|
29
|
-
@__missing_permissions ||= headers[:x_intercom_permissions_missing] &&
|
30
|
-
headers[:x_intercom_permissions_missing].split(',').to_set
|
31
|
-
end
|
32
|
-
|
33
|
-
def method_missing(meth, *args, &block)
|
34
|
-
if body.key?(meth.to_s)
|
35
|
-
body[meth.to_s]
|
36
|
-
else
|
37
|
-
super
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def _process_body(body)
|
44
|
-
Marshal.load(Base64.strict_decode64(body)) unless body.empty?
|
45
|
-
end
|
46
|
-
|
47
|
-
def _deep_freeze(obj)
|
48
|
-
if obj.respond_to?(:each)
|
49
|
-
obj.each do |elem|
|
50
|
-
_deep_freeze(elem)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
obj.freeze
|
55
|
-
end
|
56
|
-
end # Response
|
57
|
-
end # SDK
|
58
|
-
end # Client
|
59
|
-
end # Ribbon::Intercom
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'redis'
|
2
|
-
|
3
|
-
module Ribbon::Intercom
|
4
|
-
class Service
|
5
|
-
module ChannelStores
|
6
|
-
class RedisStore < Base
|
7
|
-
def initialize(params={})
|
8
|
-
if params[:url]
|
9
|
-
@_redis = Redis.new(url: params[:url])
|
10
|
-
elsif params[:redis]
|
11
|
-
@_redis = params[:redis]
|
12
|
-
else
|
13
|
-
raise Errors::InvalidStoreParamsError
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def open_channel(params={})
|
18
|
-
Channel.new(self, params)
|
19
|
-
end
|
20
|
-
|
21
|
-
def token_exists?(token)
|
22
|
-
@_redis.exists("channel:#{token}")
|
23
|
-
end
|
24
|
-
|
25
|
-
def lookup_channel(token)
|
26
|
-
if token_exists?(token) && (channel_data = @_redis.hgetall("channel:#{token}"))
|
27
|
-
permissions = @_redis.smembers("channel:#{token}:permissions")
|
28
|
-
|
29
|
-
Channel.new(self,
|
30
|
-
Utils.symbolize_keys(
|
31
|
-
channel_data.merge(may: permissions)
|
32
|
-
)
|
33
|
-
)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def persist(channel)
|
38
|
-
raise Errors::InvalidChannelError, channel.inspect unless channel.is_a?(Channel)
|
39
|
-
|
40
|
-
data_hash = {}
|
41
|
-
[:name, :token, :secret_hash_crt, :secret_hash_prv].each { |key|
|
42
|
-
value = channel.send(key)
|
43
|
-
data_hash[key] = value if value
|
44
|
-
}
|
45
|
-
|
46
|
-
# Save channel data as hash
|
47
|
-
@_redis.mapped_hmset("channel:#{channel.token}", data_hash)
|
48
|
-
|
49
|
-
# Associate permissions set to its channel
|
50
|
-
channel_key = "channel:#{channel.token}:permissions"
|
51
|
-
channel.tap { |c|
|
52
|
-
c.permissions.each { |p|
|
53
|
-
@_redis.sadd(channel_key, p)
|
54
|
-
}
|
55
|
-
}
|
56
|
-
end
|
57
|
-
end # RedisStore
|
58
|
-
end # ChannelStores
|
59
|
-
end # Service
|
60
|
-
end # Ribbon::Intercom
|