stream-chat-ruby 3.21.0 → 3.22.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/CHANGELOG.md +2 -0
- data/lib/stream-chat/campaign.rb +111 -0
- data/lib/stream-chat/client.rb +97 -1
- data/lib/stream-chat/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ef599aa75d34eac737ec0477c2c2dfa76583c7cdde1cebf6a5e21b494ea9abaa
|
|
4
|
+
data.tar.gz: 9f5170f70e6c4490f691ee364c8f12efe2c45729bba0c877e064c748b31cb7cd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bae2b355732b9fcd45e66f34ea948cd19bdd68f394961b0c7e56c10ab35f012f296ff8d1b7e06613c90fbce2209778fc1d48bb4a7af124440bced0427aa51d6e
|
|
7
|
+
data.tar.gz: 1240cd43dcba18db93d412fccb3b6b453e2e5c87090d19969063c34bbdd80197b4a92a8980f50ebddc13394d328f3fe9e4abefd5f65377e2b1c933361ad5094a
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [3.22.0](https://github.com/GetStream/stream-chat-ruby/compare/v3.21.0...v3.22.0) (2026-01-15)
|
|
6
|
+
|
|
5
7
|
## [3.21.0](https://github.com/GetStream/stream-chat-ruby/compare/v3.20.0...v3.21.0) (2025-11-12)
|
|
6
8
|
|
|
7
9
|
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# typed: strict
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require 'stream-chat/client'
|
|
5
|
+
require 'stream-chat/errors'
|
|
6
|
+
require 'stream-chat/util'
|
|
7
|
+
require 'stream-chat/types'
|
|
8
|
+
|
|
9
|
+
module StreamChat
|
|
10
|
+
class Campaign
|
|
11
|
+
extend T::Sig
|
|
12
|
+
|
|
13
|
+
sig { returns(T.nilable(String)) }
|
|
14
|
+
attr_reader :campaign_id
|
|
15
|
+
|
|
16
|
+
sig { returns(T.nilable(StringKeyHash)) }
|
|
17
|
+
attr_reader :data
|
|
18
|
+
|
|
19
|
+
sig { params(client: StreamChat::Client, campaign_id: T.nilable(String), data: T.nilable(StringKeyHash)).void }
|
|
20
|
+
def initialize(client, campaign_id = nil, data = nil)
|
|
21
|
+
@client = client
|
|
22
|
+
@campaign_id = campaign_id
|
|
23
|
+
@data = data
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Creates a campaign.
|
|
27
|
+
#
|
|
28
|
+
# @param [String, nil] campaign_id Optional campaign ID. If provided, sets the campaign_id.
|
|
29
|
+
# @param [StringKeyHash, nil] data Optional campaign data to merge with existing data.
|
|
30
|
+
# @return [StreamChat::StreamResponse] API response
|
|
31
|
+
sig { params(campaign_id: T.nilable(String), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
|
32
|
+
def create(campaign_id: nil, data: nil)
|
|
33
|
+
@campaign_id = campaign_id if campaign_id
|
|
34
|
+
@data = merge_campaign_data(@data, data) if data
|
|
35
|
+
|
|
36
|
+
state = @client.create_campaign(campaign_id: @campaign_id, data: @data)
|
|
37
|
+
|
|
38
|
+
@campaign_id = state['campaign']['id'] if @campaign_id.nil? && state.status_code >= 200 && state.status_code < 300 && state['campaign']
|
|
39
|
+
state
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Gets a campaign by ID.
|
|
43
|
+
#
|
|
44
|
+
# @return [StreamChat::StreamResponse] API response
|
|
45
|
+
sig { returns(StreamChat::StreamResponse) }
|
|
46
|
+
def get
|
|
47
|
+
raise StreamChannelException, 'campaign does not have an id' if @campaign_id.nil?
|
|
48
|
+
|
|
49
|
+
@client.get_campaign(@campaign_id)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Updates a campaign.
|
|
53
|
+
#
|
|
54
|
+
# @param [StringKeyHash] data Campaign data to update
|
|
55
|
+
# @return [StreamChat::StreamResponse] API response
|
|
56
|
+
sig { params(data: StringKeyHash).returns(StreamChat::StreamResponse) }
|
|
57
|
+
def update(data)
|
|
58
|
+
raise StreamChannelException, 'campaign does not have an id' if @campaign_id.nil?
|
|
59
|
+
|
|
60
|
+
@client.update_campaign(@campaign_id, data)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Deletes a campaign.
|
|
64
|
+
#
|
|
65
|
+
# @param [Hash] options Optional deletion options
|
|
66
|
+
# @return [StreamChat::StreamResponse] API response
|
|
67
|
+
sig { params(options: T.untyped).returns(StreamChat::StreamResponse) }
|
|
68
|
+
def delete(**options)
|
|
69
|
+
raise StreamChannelException, 'campaign does not have an id' if @campaign_id.nil?
|
|
70
|
+
|
|
71
|
+
@client.delete_campaign(@campaign_id, **options)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Starts a campaign.
|
|
75
|
+
#
|
|
76
|
+
# @param [DateTime, Time, String, nil] scheduled_for Optional scheduled start time
|
|
77
|
+
# @param [DateTime, Time, String, nil] stop_at Optional scheduled stop time
|
|
78
|
+
# @return [StreamChat::StreamResponse] API response
|
|
79
|
+
sig { params(scheduled_for: T.nilable(T.any(DateTime, Time, String)), stop_at: T.nilable(T.any(DateTime, Time, String))).returns(StreamChat::StreamResponse) }
|
|
80
|
+
def start(scheduled_for: nil, stop_at: nil)
|
|
81
|
+
raise StreamChannelException, 'campaign does not have an id' if @campaign_id.nil?
|
|
82
|
+
|
|
83
|
+
@client.start_campaign(@campaign_id, scheduled_for: scheduled_for, stop_at: stop_at)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Stops a campaign.
|
|
87
|
+
#
|
|
88
|
+
# @return [StreamChat::StreamResponse] API response
|
|
89
|
+
sig { returns(StreamChat::StreamResponse) }
|
|
90
|
+
def stop
|
|
91
|
+
raise StreamChannelException, 'campaign does not have an id' if @campaign_id.nil?
|
|
92
|
+
|
|
93
|
+
@client.stop_campaign(@campaign_id)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
private
|
|
97
|
+
|
|
98
|
+
# Merges two campaign data hashes.
|
|
99
|
+
#
|
|
100
|
+
# @param [StringKeyHash, nil] data1 First campaign data hash
|
|
101
|
+
# @param [StringKeyHash, nil] data2 Second campaign data hash
|
|
102
|
+
# @return [StringKeyHash] Merged campaign data
|
|
103
|
+
sig { params(data1: T.nilable(StringKeyHash), data2: T.nilable(StringKeyHash)).returns(StringKeyHash) }
|
|
104
|
+
def merge_campaign_data(data1, data2)
|
|
105
|
+
return T.must(data2) if data1.nil?
|
|
106
|
+
return data1 if data2.nil?
|
|
107
|
+
|
|
108
|
+
data1.merge(data2)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
data/lib/stream-chat/client.rb
CHANGED
|
@@ -10,6 +10,7 @@ require 'time'
|
|
|
10
10
|
require 'date'
|
|
11
11
|
require 'sorbet-runtime'
|
|
12
12
|
require 'stream-chat/channel'
|
|
13
|
+
require 'stream-chat/campaign'
|
|
13
14
|
require 'stream-chat/errors'
|
|
14
15
|
require 'stream-chat/stream_response'
|
|
15
16
|
require 'stream-chat/version'
|
|
@@ -555,6 +556,101 @@ module StreamChat
|
|
|
555
556
|
StreamChat::Channel.new(self, channel_type, channel_id, data)
|
|
556
557
|
end
|
|
557
558
|
|
|
559
|
+
# Creates a campaign instance
|
|
560
|
+
#
|
|
561
|
+
# @param [String, nil] campaign_id the campaign identifier
|
|
562
|
+
# @param [StringKeyHash, nil] data additional campaign data
|
|
563
|
+
#
|
|
564
|
+
# @return [StreamChat::Campaign]
|
|
565
|
+
#
|
|
566
|
+
sig { params(campaign_id: T.nilable(String), data: T.nilable(StringKeyHash)).returns(StreamChat::Campaign) }
|
|
567
|
+
def campaign(campaign_id: nil, data: nil)
|
|
568
|
+
StreamChat::Campaign.new(self, campaign_id, data)
|
|
569
|
+
end
|
|
570
|
+
|
|
571
|
+
# Creates a campaign.
|
|
572
|
+
#
|
|
573
|
+
# @param [String, nil] campaign_id Optional campaign ID
|
|
574
|
+
# @param [StringKeyHash, nil] data Campaign data including message_template, sender_id, segment_ids or user_ids, etc.
|
|
575
|
+
# @return [StreamChat::StreamResponse] API response
|
|
576
|
+
sig { params(campaign_id: T.nilable(String), data: T.nilable(StringKeyHash)).returns(StreamChat::StreamResponse) }
|
|
577
|
+
def create_campaign(campaign_id: nil, data: nil)
|
|
578
|
+
payload = {}
|
|
579
|
+
payload['id'] = campaign_id if campaign_id
|
|
580
|
+
payload.merge!(data) if data
|
|
581
|
+
post('campaigns', data: payload)
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
# Gets a campaign by ID.
|
|
585
|
+
#
|
|
586
|
+
# @param [String] campaign_id The campaign ID
|
|
587
|
+
# @return [StreamChat::StreamResponse] API response
|
|
588
|
+
sig { params(campaign_id: String).returns(StreamChat::StreamResponse) }
|
|
589
|
+
def get_campaign(campaign_id)
|
|
590
|
+
get("campaigns/#{campaign_id}")
|
|
591
|
+
end
|
|
592
|
+
|
|
593
|
+
# Updates a campaign.
|
|
594
|
+
#
|
|
595
|
+
# @param [String] campaign_id The campaign ID
|
|
596
|
+
# @param [StringKeyHash] data Campaign data to update
|
|
597
|
+
# @return [StreamChat::StreamResponse] API response
|
|
598
|
+
sig { params(campaign_id: String, data: StringKeyHash).returns(StreamChat::StreamResponse) }
|
|
599
|
+
def update_campaign(campaign_id, data)
|
|
600
|
+
put("campaigns/#{campaign_id}", data: data)
|
|
601
|
+
end
|
|
602
|
+
|
|
603
|
+
# Deletes a campaign.
|
|
604
|
+
#
|
|
605
|
+
# @param [String] campaign_id The campaign ID
|
|
606
|
+
# @param [Hash] options Optional deletion options (e.g., gdpr: true)
|
|
607
|
+
# @return [StreamChat::StreamResponse] API response
|
|
608
|
+
sig { params(campaign_id: String, options: T.untyped).returns(StreamChat::StreamResponse) }
|
|
609
|
+
def delete_campaign(campaign_id, **options)
|
|
610
|
+
delete("campaigns/#{campaign_id}", params: options)
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
# Starts a campaign.
|
|
614
|
+
#
|
|
615
|
+
# @param [String] campaign_id The campaign ID
|
|
616
|
+
# @param [DateTime, Time, String, nil] scheduled_for Optional scheduled start time
|
|
617
|
+
# @param [DateTime, Time, String, nil] stop_at Optional scheduled stop time
|
|
618
|
+
# @return [StreamChat::StreamResponse] API response
|
|
619
|
+
sig { params(campaign_id: String, scheduled_for: T.nilable(T.any(DateTime, Time, String)), stop_at: T.nilable(T.any(DateTime, Time, String))).returns(StreamChat::StreamResponse) }
|
|
620
|
+
def start_campaign(campaign_id, scheduled_for: nil, stop_at: nil)
|
|
621
|
+
payload = {}
|
|
622
|
+
payload['scheduled_for'] = StreamChat.normalize_timestamp(scheduled_for) if scheduled_for
|
|
623
|
+
payload['stop_at'] = StreamChat.normalize_timestamp(stop_at) if stop_at
|
|
624
|
+
post("campaigns/#{campaign_id}/start", data: payload)
|
|
625
|
+
end
|
|
626
|
+
|
|
627
|
+
# Stops a campaign.
|
|
628
|
+
#
|
|
629
|
+
# @param [String] campaign_id The campaign ID
|
|
630
|
+
# @return [StreamChat::StreamResponse] API response
|
|
631
|
+
sig { params(campaign_id: String).returns(StreamChat::StreamResponse) }
|
|
632
|
+
def stop_campaign(campaign_id)
|
|
633
|
+
post("campaigns/#{campaign_id}/stop")
|
|
634
|
+
end
|
|
635
|
+
|
|
636
|
+
# Queries campaigns.
|
|
637
|
+
#
|
|
638
|
+
# You can query campaigns based on built-in fields as well as any custom field you add to campaigns.
|
|
639
|
+
# Multiple filters can be combined using AND, OR logical operators, each filter can use its
|
|
640
|
+
# comparison (equality, inequality, greater than, greater or equal, etc.).
|
|
641
|
+
# @param [StringKeyHash] filter_conditions Filter conditions for the query
|
|
642
|
+
# @param [Hash, nil] sort Optional sort parameters (e.g., { 'created_at' => -1 })
|
|
643
|
+
# @param [Hash] options Additional query options (limit, offset, etc.)
|
|
644
|
+
# @return [StreamChat::StreamResponse] API response
|
|
645
|
+
sig { params(filter_conditions: StringKeyHash, sort: T.nilable(T::Hash[String, Integer]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
|
646
|
+
def query_campaigns(filter_conditions, sort: nil, **options)
|
|
647
|
+
data = options.merge({
|
|
648
|
+
filter: filter_conditions,
|
|
649
|
+
sort: StreamChat.get_sort_fields(sort)
|
|
650
|
+
})
|
|
651
|
+
post('campaigns/query', data: data)
|
|
652
|
+
end
|
|
653
|
+
|
|
558
654
|
# Adds a device to a user.
|
|
559
655
|
sig { params(device_id: String, push_provider: String, user_id: String, push_provider_name: T.nilable(String)).returns(StreamChat::StreamResponse) }
|
|
560
656
|
def add_device(device_id, push_provider, user_id, push_provider_name = nil)
|
|
@@ -1058,7 +1154,7 @@ module StreamChat
|
|
|
1058
1154
|
sig { params(user_id: String, filter_conditions: T::Hash[T.untyped, T.untyped], sort: T.nilable(T::Array[T::Hash[T.untyped, T.untyped]]), options: T.untyped).returns(StreamChat::StreamResponse) }
|
|
1059
1155
|
def query_reminders(user_id, filter_conditions = {}, sort: nil, **options)
|
|
1060
1156
|
params = options.merge({
|
|
1061
|
-
|
|
1157
|
+
filter: filter_conditions,
|
|
1062
1158
|
sort: sort || [{ field: 'remind_at', direction: 1 }],
|
|
1063
1159
|
user_id: user_id
|
|
1064
1160
|
})
|
data/lib/stream-chat/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: stream-chat-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.22.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- getstream.io
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -113,6 +113,7 @@ files:
|
|
|
113
113
|
- Rakefile
|
|
114
114
|
- SECURITY.md
|
|
115
115
|
- lib/stream-chat.rb
|
|
116
|
+
- lib/stream-chat/campaign.rb
|
|
116
117
|
- lib/stream-chat/channel.rb
|
|
117
118
|
- lib/stream-chat/client.rb
|
|
118
119
|
- lib/stream-chat/errors.rb
|