telesink 1.1.0 → 1.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: 37c631d9215d2254268da1c93897be7abc486dbbc0fdad96e0b8ec3c77654e93
4
- data.tar.gz: 8593950cf5dab5bf717554850770cb8440a980227fb5280c31bbe3be822368ec
3
+ metadata.gz: a79d264813b7ba665cc3deff43aa4fed213cb7b12f213c0646619033d4cd5947
4
+ data.tar.gz: f78cee29a3575b63b8a2cefcef05c1acf48f65a583827b43fb5c66eed885cbc7
5
5
  SHA512:
6
- metadata.gz: 3c7eeaa7ec11a3a66c0a709ba9f43c58d1d2187471356c863ce83a3a8704f2c369e878b5aa46b3a04ffd8e5150646b77d2ed4f0015cfe3a31658902ebb0ad1c0
7
- data.tar.gz: 8ab94fd8156a62d75fd7b7ceb7f138fc69173654cf29de33dd88ed25ab3fad0a3863d94ed190538b32104d4268965df8d64eb406c3fdd2c5fea9906697013b8c
6
+ metadata.gz: 8c4ac33341bbb7e543811df49080fc0a09584287d904e4efe7e29775e19e025e6a2e35d1b27058b3e308c406aa1683761c43f2aac311db34f34daf95dd032c42
7
+ data.tar.gz: 227787e27f4cadf87ddfd8b80799c6f06fc1c3e55f2f00779a334145599abe440e5ffb3777fa84fc4ae0f41d343a4ec6bd38bf2addacc4d54fa77976e17e9ae9
data/CHANGELOG.md CHANGED
@@ -1,7 +1,13 @@
1
- # Teleisnk Changelog
1
+ # Telesink Changelog
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.2.0 - 2026-04-19
6
+
7
+ - Replaced `Telesink.configure` block with `Telesink.init` for simpler setup.
8
+ - Removed `Config` class. Options are now set directly on the module.
9
+ - Added the `TELESINK_DISABLED` environment variable.
10
+
5
11
  ## 1.1.0 - 2026-04-19
6
12
 
7
13
  - Merged `TELESINK_BASE_URL` and `TELESINK_TOKEN` into `TELESINK_ENDPOINT`.
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Telesink SDK for Ruby
2
2
 
3
- Official Ruby client for [telesink.com](https://telesink.com) - real-time event tracking.
3
+ Official Ruby client for [telesink.com](https://telesink.com) - real-time event
4
+ tracking.
4
5
 
5
6
  ## Requirements
6
7
 
@@ -10,7 +11,7 @@ Official Ruby client for [telesink.com](https://telesink.com) - real-time event
10
11
 
11
12
  ### Install
12
13
 
13
- Add this line to your application's `Gemfile`:
14
+ Add to your `Gemfile`:
14
15
 
15
16
  ```ruby
16
17
  gem "telesink"
@@ -24,27 +25,16 @@ bundle install
24
25
 
25
26
  ### Configuration
26
27
 
27
- #### Recommended: Environment Variables (zero-code setup)
28
+ Set the environment variable:
28
29
 
29
30
  ```sh
30
- export TELESINK_TOKEN=your_sink_token_here
31
- # Optional:
32
- # export TELESINK_BASE_URL=https://custom.telesink.com
31
+ export TELESINK_ENDPOINT=https://app.telesink.com/api/v1/sinks/your_sink_token_here/events
33
32
  ```
34
33
 
35
- The SDK automatically reads these.
34
+ To disable tracking (e.g. in test/dev):
36
35
 
37
- #### Explicit configuration
38
-
39
- ```rb
40
- require "telesink"
41
-
42
- Telesink.configure do |config|
43
- config.token = <sink-token> # required
44
- config.base_url = "https://telesink.com" # default
45
- config.enabled = true # default
46
- config.logger = Logger.new(STDERR)
47
- end
36
+ ```sh
37
+ export TELESINK_DISABLED=true
48
38
  ```
49
39
 
50
40
  ### Usage
@@ -53,23 +43,26 @@ end
53
43
  Telesink.track(
54
44
  event: "user.signed.up",
55
45
  text: "New user registered",
56
- emoji: "🎉",
57
- properties: { plan: "pro", source: "landing_page" },
58
- occurred_at: Time.now, # optional, auto-converted to UTC ISO8601
59
- idempotency_key: "my-custom-key" # optional, auto-generated UUID if omitted
46
+ emoji: "👤",
47
+ properties: {
48
+ plan: "pro",
49
+ source: "landing_page",
50
+ },
51
+ occurred_at: Time.now, # optional, defaults to now
52
+ idempotency_key: "my-key", # optional, defaults to random UUID
60
53
  )
61
54
  ```
62
55
 
63
56
  #### Returns
64
57
 
65
- - `true` - request was sent
66
- - `false` - disabled or missing token
58
+ - `true` event sent successfully
59
+ - `false` disabled, missing endpoint, or network error
67
60
 
68
- Failures are never raised. They are logged via your configured logger and fail silently.
61
+ Errors are never raised. They are logged to STDERR and fail silently.
69
62
 
70
63
  ### Testing
71
64
 
72
- ```
65
+ ```sh
73
66
  bundle exec rake test
74
67
  ```
75
68
 
@@ -1,3 +1,3 @@
1
1
  module Telesink
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
data/lib/telesink.rb CHANGED
@@ -9,95 +9,44 @@ require "logger"
9
9
  require_relative "telesink/version"
10
10
 
11
11
  module Telesink
12
- class Config
13
- attr_accessor :endpoint, :enabled, :logger
14
-
15
- def initialize
16
- @endpoint = ENV["TELESINK_ENDPOINT"]
17
- @enabled = true
18
- @logger = ::Logger.new(STDERR)
19
- end
20
- end
12
+ LOG = ::Logger.new(STDERR)
21
13
 
22
14
  class << self
23
- attr_writer :config
24
-
25
- def config
26
- @config ||= Config.new
27
- end
28
-
29
- def configure
30
- yield config
31
- end
32
-
33
- def track(
34
- event:,
35
- text:,
36
- emoji: nil,
37
- properties: {},
38
- occurred_at: nil,
39
- idempotency_key: nil
40
- )
41
- return false unless config.enabled
42
- return false if config.endpoint.to_s.empty?
43
-
44
- occurred_at = (occurred_at || Time.now).utc.iso8601
45
- idempotency_key = (idempotency_key.to_s.empty? ? SecureRandom.uuid : idempotency_key)
15
+ def track(event:, text:, emoji: nil, properties: {}, occurred_at: nil, idempotency_key: nil)
16
+ return false unless enabled? && endpoint
46
17
 
47
18
  payload = {
48
19
  event: event,
49
20
  text: text,
50
21
  emoji: emoji,
51
22
  properties: properties,
52
- occurred_at: occurred_at,
53
- idempotency_key: idempotency_key,
54
- sdk: {
55
- name: "telesink.ruby",
56
- version: VERSION
57
- }
23
+ occurred_at: (occurred_at || Time.now).utc.iso8601,
24
+ idempotency_key: idempotency_key || SecureRandom.uuid,
25
+ sdk: { name: "telesink.ruby", version: VERSION }
58
26
  }.compact
59
27
 
60
- safely_send_event(payload, payload[:idempotency_key])
61
- true
62
- end
28
+ uri = URI(endpoint)
29
+ http = Net::HTTP.new(uri.host, uri.port)
30
+ http.use_ssl = uri.scheme == "https"
31
+ http.open_timeout = http.read_timeout = 3
32
+ http.write_timeout = 3 if http.respond_to?(:write_timeout)
63
33
 
64
- private
34
+ req = Net::HTTP::Post.new(uri)
35
+ req["Content-Type"] = "application/json"
36
+ req["User-Agent"] = "telesink.ruby/#{VERSION}"
37
+ req["Idempotency-Key"] = payload[:idempotency_key]
38
+ req.body = payload.to_json
65
39
 
66
- def safely_send_event(payload, idempotency_key)
67
- send_event(payload, idempotency_key)
68
- rescue Net::OpenTimeout,
69
- Net::ReadTimeout,
70
- Net::WriteTimeout,
71
- SocketError,
72
- SystemCallError,
73
- IOError,
74
- Errno::ECONNREFUSED,
75
- Errno::ECONNRESET => e
76
- config.logger.error("[Telesink] Network error sending '#{payload[:event]}': #{e.class} - #{e.message}")
40
+ http.request(req).is_a?(Net::HTTPSuccess)
77
41
  rescue => e
78
- config.logger.error("[Telesink] Unexpected error sending '#{payload[:event]}': #{e.class} - #{e.message}")
42
+ logger.error("[Telesink] #{e.class}: #{e.message}")
43
+ false
79
44
  end
80
45
 
81
- def send_event(payload, idempotency_key)
82
- uri = URI(config.endpoint)
83
- http = Net::HTTP.new(uri.host, uri.port)
84
- http.use_ssl = true
85
- http.open_timeout = 3
86
- http.read_timeout = 3
87
- http.write_timeout = 3 if http.respond_to?(:write_timeout)
88
-
89
- request = Net::HTTP::Post.new(uri)
90
- request["Content-Type"] = "application/json"
91
- request["User-Agent"] = "telesink.ruby/#{VERSION}"
92
- request["Idempotency-Key"] = idempotency_key
93
-
94
- request.body = payload.to_json
95
- response = http.request(request)
46
+ private
96
47
 
97
- unless response.is_a?(Net::HTTPSuccess)
98
- config.logger.warn("[Telesink] API returned #{response.code} for event '#{payload[:event]}'")
99
- end
100
- response
101
- end
48
+ def endpoint = ENV["TELESINK_ENDPOINT"]
49
+ def enabled? = ENV["TELESINK_DISABLED"].to_s.empty?
50
+ def logger = LOG
102
51
  end
103
52
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: telesink
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyrylo Silin