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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ribbon/intercom/client/mock_sdk.rb +13 -0
  3. data/lib/ribbon/intercom/client/sdk/adapters/adapter/response.rb +38 -0
  4. data/lib/ribbon/intercom/client/sdk/adapters/adapter.rb +51 -0
  5. data/lib/ribbon/intercom/client/sdk/adapters/http_adapter/connection.rb +34 -0
  6. data/lib/ribbon/intercom/client/sdk/adapters/http_adapter.rb +26 -0
  7. data/lib/ribbon/intercom/client/sdk/adapters/local_adapter.rb +54 -0
  8. data/lib/ribbon/intercom/client/sdk/adapters/mock_adapter.rb +40 -0
  9. data/lib/ribbon/intercom/client/sdk/adapters.rb +10 -0
  10. data/lib/ribbon/intercom/client/sdk.rb +71 -26
  11. data/lib/ribbon/intercom/client.rb +35 -7
  12. data/lib/ribbon/intercom/errors.rb +34 -6
  13. data/lib/ribbon/intercom/package.rb +64 -0
  14. data/lib/ribbon/intercom/packageable/mixin.rb +35 -0
  15. data/lib/ribbon/intercom/packageable.rb +6 -0
  16. data/lib/ribbon/intercom/service/channel/stores/mock_store.rb +40 -0
  17. data/lib/ribbon/intercom/service/channel/stores/redis_store.rb +186 -0
  18. data/lib/ribbon/intercom/service/{channel_stores/base.rb → channel/stores/store.rb} +13 -5
  19. data/lib/ribbon/intercom/service/channel/stores.rb +9 -0
  20. data/lib/ribbon/intercom/service/channel.rb +106 -4
  21. data/lib/ribbon/intercom/service.rb +156 -95
  22. data/lib/ribbon/intercom/utils/mixins/mock_safe.rb +26 -0
  23. data/lib/ribbon/intercom/utils/mixins.rb +5 -0
  24. data/lib/ribbon/intercom/utils/signer.rb +71 -0
  25. data/lib/ribbon/intercom/utils.rb +40 -13
  26. data/lib/ribbon/intercom/version.rb +1 -1
  27. data/lib/ribbon/intercom.rb +10 -7
  28. data/lib/tasks/intercom.rake +3 -3
  29. metadata +20 -20
  30. data/lib/ribbon/intercom/client/sdk/connection.rb +0 -35
  31. data/lib/ribbon/intercom/client/sdk/response.rb +0 -59
  32. 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