ribbon-intercom 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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