dashx 0.1.3 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa30e73c7a06124275c768cd04768928669d7adfc7dfcb457f1f9590a074238d
4
- data.tar.gz: ce8538548e21febddcd03489ab60b1813e4209ab7aacfcf2e889dac4d030e67e
3
+ metadata.gz: 72a2f7bbabfb1c2a5197ef1de7919a269819a945a29844006734e33cf2a35419
4
+ data.tar.gz: 19ed1f73093d99fa4f5940124891c2555e3557a4a64621f33644b8b23b342529
5
5
  SHA512:
6
- metadata.gz: 39a115218142c4c934624c71ea916d4c26eda4fdce2c8bdcb31718a52bd070f40a6a0f99a5bb1869489584dc06464fa17333b0a73b2cb46cca76686fbbadf06e
7
- data.tar.gz: 923baf0f3102dbd3ec304ee12837d1f8ae64784104409a1a85d7962f81185df204fa709980c371394c7b51663d8b71ea7dd5ad909b89455f56d8d5da40263965
6
+ metadata.gz: ef4af976040d640d984efa4511337b312cc77af5c1a7aa122efc049e5541bb8d36d522e8089224c631c8eb27f1cccc7020961ba4cbd7b96884cacc53dc7c4cd8
7
+ data.tar.gz: f25b91cdacc3a6b8f5444a47e3d38d4b6fb3e131f8bfc188b28132c0b9d90f1a166e328afb43928d30c13b5414b8c4bad67c045d2f35aa2a5f1620bc9a3a6c04
data/lib/dashx/client.rb CHANGED
@@ -45,30 +45,30 @@ module DashX
45
45
  end
46
46
 
47
47
  self.class.headers(headers)
48
- end
49
-
50
- def deliver(urn, parcel)
51
- options = if urn.is_a?(String) && parcel != nil
52
- symbolize_keys! parcel
53
- check_presence!(parcel[:to], 'Recipient (:to)')
54
-
55
- contentTypeIdentifier, contentIdentifier = urn.split(/\//, 2)
56
-
57
- {
58
- contentTypeIdentifier: contentTypeIdentifier,
59
- contentIdentifier: contentIdentifier,
60
- attachments: [],
61
- cc: [],
62
- bcc: [],
63
- }.merge(parcel)
64
- else
65
- symbolize_keys! urn
66
- check_presence!(urn[:from], 'Sender (:from)')
67
-
68
- { attachments: [], cc: [], bcc: [] }.merge(urn)
69
- end
70
-
71
- make_graphql_request(CREATE_DELIVERY_REQUEST, options)
48
+ end
49
+
50
+ def deliver(urn, options)
51
+ contentTypeIdentifier, contentIdentifier = urn.split(/\//, 2)
52
+
53
+ options ||= {}
54
+
55
+ symbolize_keys! options
56
+
57
+ options[:content] ||= {}
58
+
59
+ [:to, :cc, :bcc].each do |kind|
60
+ value = options.delete(kind)
61
+
62
+ options[:content][kind] ||= value if value
63
+ options[:content][kind] = wrap_array(options[:content][kind]) if options[:content][kind]
64
+ end
65
+
66
+ params = {
67
+ contentTypeIdentifier: contentTypeIdentifier,
68
+ contentIdentifier: contentIdentifier
69
+ }.merge(options)
70
+
71
+ make_graphql_request(CREATE_DELIVERY_REQUEST, params)
72
72
  end
73
73
 
74
74
  def identify(uid, options)
@@ -89,14 +89,18 @@ module DashX
89
89
  make_graphql_request(TRACK_EVENT_REQUEST, { event: event, uid: uid, data: data })
90
90
  end
91
91
 
92
- def generate_identity_token(uid)
92
+ def generate_identity_token(uid, options = {})
93
93
  check_presence!(uid, 'uid')
94
+ symbolize_keys! options
95
+
96
+ kind = options[:kind] || 'regular'
97
+ plain_text = "v1;#{kind};#{uid}"
94
98
 
95
99
  cipher = OpenSSL::Cipher::AES.new(256, :GCM).encrypt
96
100
  cipher.key = @config.private_key
97
101
  nonce = cipher.random_iv
98
102
  cipher.iv = nonce
99
- encrypted = cipher.update(uid) + cipher.final
103
+ encrypted = cipher.update(plain_text) + cipher.final
100
104
  encrypted_token = "#{nonce}#{encrypted}#{cipher.auth_tag}"
101
105
  Base64.urlsafe_encode64(encrypted_token)
102
106
  end
@@ -105,7 +109,9 @@ module DashX
105
109
 
106
110
  def make_graphql_request(request, params)
107
111
  body = { query: request, variables: { input: params } }.to_json
108
- request = self.class.post('/graphql', { body: body })
112
+ response = self.class.post('/graphql', { body: body })
113
+ raise "Request Failed: #{response}" if !response.success? || response.parsed_response.nil? || !response.parsed_response['errors'].nil?
114
+ response
109
115
  end
110
116
 
111
117
  def symbolize_keys!(hash)
@@ -116,6 +122,10 @@ module DashX
116
122
  hash.replace(new_hash)
117
123
  end
118
124
 
125
+ def wrap_array(obj)
126
+ obj.is_a?(Array) ? obj : [obj]
127
+ end
128
+
119
129
  def check_presence!(obj, name = obj)
120
130
  raise ArgumentError, "#{name} cannot be blank." if obj.nil? || (obj.is_a?(String) && obj.empty?)
121
131
  end
data/lib/dashx/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DashX
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
data/lib/dashx.rb CHANGED
@@ -10,7 +10,7 @@ module DashX
10
10
 
11
11
  @clients[client_name] = DashX::Client.new(config)
12
12
  end
13
-
13
+
14
14
  def self.deliver(urn, parcel)
15
15
  @clients[:default].deliver(urn, parcel)
16
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dashx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DashX
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-06 00:00:00.000000000 Z
11
+ date: 2022-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -24,8 +24,8 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.16'
27
- description:
28
- email:
27
+ description:
28
+ email:
29
29
  executables: []
30
30
  extensions: []
31
31
  extra_rdoc_files: []
@@ -51,7 +51,7 @@ licenses:
51
51
  metadata:
52
52
  homepage_uri: https://github.com/dashxhq/dashx-ruby#readme
53
53
  source_code_uri: https://github.com/dashxhq/dashx-ruby
54
- post_install_message:
54
+ post_install_message:
55
55
  rdoc_options: []
56
56
  require_paths:
57
57
  - lib
@@ -66,8 +66,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  requirements: []
69
- rubygems_version: 3.2.28
70
- signing_key:
69
+ rubygems_version: 3.0.8
70
+ signing_key:
71
71
  specification_version: 4
72
72
  summary: DashX SDK for Ruby.
73
73
  test_files: []