activitysmith 1.9.0 → 1.11.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 (30) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +243 -225
  3. data/generated/activitysmith_openapi/api/app_icon_badges_api.rb +4 -4
  4. data/generated/activitysmith_openapi/api/live_activities_api.rb +10 -10
  5. data/generated/activitysmith_openapi/api/push_notifications_api.rb +2 -2
  6. data/generated/activitysmith_openapi/configuration.rb +7 -0
  7. data/generated/activitysmith_openapi/models/app_icon_badge_count_update_error.rb +386 -0
  8. data/generated/activitysmith_openapi/models/app_icon_badge_count_update_request.rb +0 -1
  9. data/generated/activitysmith_openapi/models/app_icon_badge_count_update_response.rb +33 -11
  10. data/generated/activitysmith_openapi/models/live_activity_action.rb +1 -1
  11. data/generated/activitysmith_openapi/models/live_activity_end_request.rb +64 -2
  12. data/generated/activitysmith_openapi/models/live_activity_limit_error.rb +25 -5
  13. data/generated/activitysmith_openapi/models/live_activity_start_request.rb +48 -5
  14. data/generated/activitysmith_openapi/models/live_activity_start_response.rb +13 -1
  15. data/generated/activitysmith_openapi/models/live_activity_stream_delete_request.rb +45 -2
  16. data/generated/activitysmith_openapi/models/live_activity_stream_put_response.rb +13 -1
  17. data/generated/activitysmith_openapi/models/live_activity_stream_request.rb +48 -5
  18. data/generated/activitysmith_openapi/models/live_activity_update_request.rb +64 -2
  19. data/generated/activitysmith_openapi/models/metadata_value.rb +106 -0
  20. data/generated/activitysmith_openapi/models/push_notification_action.rb +1 -1
  21. data/generated/activitysmith_openapi/models/push_notification_request.rb +60 -8
  22. data/generated/activitysmith_openapi/models/push_notification_response.rb +13 -1
  23. data/generated/activitysmith_openapi/models/update_app_icon_badge_count422_response.rb +105 -0
  24. data/generated/activitysmith_openapi/version.rb +1 -1
  25. data/generated/activitysmith_openapi.rb +3 -0
  26. data/generated/openapi-source.json +6 -0
  27. data/lib/activitysmith/live_activities.rb +36 -14
  28. data/lib/activitysmith/notifications.rb +19 -4
  29. data/lib/activitysmith/version.rb +1 -1
  30. metadata +6 -2
@@ -0,0 +1,105 @@
1
+ =begin
2
+ #ActivitySmith API
3
+
4
+ #Send push notifications and Live Activities to your own devices via a single API key.
5
+
6
+ The version of the OpenAPI document: 1.0.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.7.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module OpenapiClient
17
+ module UpdateAppIconBadgeCount422Response
18
+ class << self
19
+ # List of class defined in oneOf (OpenAPI v3)
20
+ def openapi_one_of
21
+ [
22
+ :'AppIconBadgeCountUpdateError',
23
+ :'NoRecipientsError'
24
+ ]
25
+ end
26
+
27
+ # Builds the object
28
+ # @param [Mixed] Data to be matched against the list of oneOf items
29
+ # @return [Object] Returns the model or the data itself
30
+ def build(data)
31
+ # Go through the list of oneOf items and attempt to identify the appropriate one.
32
+ # Note:
33
+ # - We do not attempt to check whether exactly one item matches.
34
+ # - No advanced validation of types in some cases (e.g. "x: { type: string }" will happily match { x: 123 })
35
+ # due to the way the deserialization is made in the base_object template (it just casts without verifying).
36
+ # - TODO: scalar values are de facto behaving as if they were nullable.
37
+ # - TODO: logging when debugging is set.
38
+ openapi_one_of.each do |klass|
39
+ begin
40
+ next if klass == :AnyType # "nullable: true"
41
+ typed_data = find_and_cast_into_type(klass, data)
42
+ return typed_data if typed_data
43
+ rescue # rescue all errors so we keep iterating even if the current item lookup raises
44
+ end
45
+ end
46
+
47
+ openapi_one_of.include?(:AnyType) ? data : nil
48
+ end
49
+
50
+ private
51
+
52
+ SchemaMismatchError = Class.new(StandardError)
53
+
54
+ # Note: 'File' is missing here because in the regular case we get the data _after_ a call to JSON.parse.
55
+ def find_and_cast_into_type(klass, data)
56
+ return if data.nil?
57
+
58
+ case klass.to_s
59
+ when 'Boolean'
60
+ return data if data.instance_of?(TrueClass) || data.instance_of?(FalseClass)
61
+ when 'Float'
62
+ return data if data.instance_of?(Float)
63
+ when 'Integer'
64
+ return data if data.instance_of?(Integer)
65
+ when 'Time'
66
+ return Time.parse(data)
67
+ when 'Date'
68
+ return Date.parse(data)
69
+ when 'String'
70
+ return data if data.instance_of?(String)
71
+ when 'Object' # "type: object"
72
+ return data if data.instance_of?(Hash)
73
+ when /\AArray<(?<sub_type>.+)>\z/ # "type: array"
74
+ if data.instance_of?(Array)
75
+ sub_type = Regexp.last_match[:sub_type]
76
+ return data.map { |item| find_and_cast_into_type(sub_type, item) }
77
+ end
78
+ when /\AHash<String, (?<sub_type>.+)>\z/ # "type: object" with "additionalProperties: { ... }"
79
+ if data.instance_of?(Hash) && data.keys.all? { |k| k.instance_of?(Symbol) || k.instance_of?(String) }
80
+ sub_type = Regexp.last_match[:sub_type]
81
+ return data.each_with_object({}) { |(k, v), hsh| hsh[k] = find_and_cast_into_type(sub_type, v) }
82
+ end
83
+ else # model
84
+ const = OpenapiClient.const_get(klass)
85
+ if const
86
+ if const.respond_to?(:openapi_one_of) # nested oneOf model
87
+ model = const.build(data)
88
+ return model if model
89
+ else
90
+ # raise if data contains keys that are not known to the model
91
+ raise if const.respond_to?(:acceptable_attributes) && !(data.keys - const.acceptable_attributes).empty?
92
+ model = const.build_from_hash(data)
93
+ return model if model
94
+ end
95
+ end
96
+ end
97
+
98
+ raise # if no match by now, raise
99
+ rescue
100
+ raise SchemaMismatchError, "#{data} doesn't match the #{klass} type"
101
+ end
102
+ end
103
+ end
104
+
105
+ end
@@ -11,5 +11,5 @@ Generator version: 7.7.0
11
11
  =end
12
12
 
13
13
  module OpenapiClient
14
- VERSION = '1.8.0'
14
+ VERSION = '1.11.0'
15
15
  end
@@ -20,6 +20,7 @@ require 'activitysmith_openapi/configuration'
20
20
  require 'activitysmith_openapi/models/activity_metric'
21
21
  require 'activitysmith_openapi/models/activity_metric_value'
22
22
  require 'activitysmith_openapi/models/alert_payload'
23
+ require 'activitysmith_openapi/models/app_icon_badge_count_update_error'
23
24
  require 'activitysmith_openapi/models/app_icon_badge_count_update_request'
24
25
  require 'activitysmith_openapi/models/app_icon_badge_count_update_response'
25
26
  require 'activitysmith_openapi/models/bad_request_error'
@@ -45,6 +46,7 @@ require 'activitysmith_openapi/models/live_activity_stream_request'
45
46
  require 'activitysmith_openapi/models/live_activity_update_request'
46
47
  require 'activitysmith_openapi/models/live_activity_update_response'
47
48
  require 'activitysmith_openapi/models/live_activity_webhook_method'
49
+ require 'activitysmith_openapi/models/metadata_value'
48
50
  require 'activitysmith_openapi/models/metric_error'
49
51
  require 'activitysmith_openapi/models/metric_value_update_request'
50
52
  require 'activitysmith_openapi/models/metric_value_update_request_value'
@@ -59,6 +61,7 @@ require 'activitysmith_openapi/models/push_notification_webhook_method'
59
61
  require 'activitysmith_openapi/models/rate_limit_error'
60
62
  require 'activitysmith_openapi/models/send_push_notification429_response'
61
63
  require 'activitysmith_openapi/models/stream_content_state'
64
+ require 'activitysmith_openapi/models/update_app_icon_badge_count422_response'
62
65
 
63
66
  # APIs
64
67
  require 'activitysmith_openapi/api/app_icon_badges_api'
@@ -0,0 +1,6 @@
1
+ {
2
+ "repository": "ActivitySmithHQ/activitysmith-backend",
3
+ "commit": "49ad7b083b50f53bc3d81edb77ca6597845160a2",
4
+ "path": "openapi.json",
5
+ "sha256": "b7e33cd485df8ddc5d7fb7b57b61106fd6f8ff3ffa7cc7bef4ac1ccbbb0cede7"
6
+ }
@@ -38,37 +38,44 @@ module ActivitySmith
38
38
  @api = api
39
39
  end
40
40
 
41
- def start(request, opts = {})
42
- @api.start_live_activity(normalize_live_activity_request(normalize_channels_target(request)), opts)
41
+ def start(request = nil, opts = {}, tags: nil, **request_fields)
42
+ @api.start_live_activity(
43
+ normalize_live_activity_request(
44
+ normalize_channels_target(with_tags(combine_request(request, request_fields), tags))
45
+ ),
46
+ opts
47
+ )
43
48
  end
44
49
 
45
- def update(request, opts = {})
46
- @api.update_live_activity(normalize_live_activity_request(request), opts)
50
+ def update(request = nil, opts = {}, tags: nil, **request_fields)
51
+ @api.update_live_activity(normalize_live_activity_request(with_tags(combine_request(request, request_fields), tags)), opts)
47
52
  end
48
53
 
49
- def end(request, opts = {})
50
- @api.end_live_activity(normalize_live_activity_request(request), opts)
54
+ def end(request = nil, opts = {}, tags: nil, **request_fields)
55
+ @api.end_live_activity(normalize_live_activity_request(with_tags(combine_request(request, request_fields), tags)), opts)
51
56
  end
52
57
 
53
- def stream(stream_key, request, opts = {})
58
+ def stream(stream_key, request = nil, opts = {}, tags: nil, **request_fields)
54
59
  @api.reconcile_live_activity_stream(
55
60
  stream_key,
56
- normalize_live_activity_request(normalize_channels_target(request)),
61
+ normalize_live_activity_request(
62
+ normalize_channels_target(with_tags(combine_request(request, request_fields), tags))
63
+ ),
57
64
  opts
58
65
  )
59
66
  end
60
67
 
61
- def end_stream(stream_key, request = nil, opts = {})
68
+ def end_stream(stream_key, request = nil, opts = {}, tags: nil, **request_fields)
62
69
  @api.end_live_activity_stream(
63
70
  stream_key,
64
- { live_activity_stream_delete_request: normalize_live_activity_request(request) }.merge(opts)
71
+ { live_activity_stream_delete_request: normalize_live_activity_request(with_tags(combine_request(request, request_fields), tags)) }.merge(opts)
65
72
  )
66
73
  end
67
74
 
68
75
  # Backward-compatible aliases.
69
- def start_live_activity(live_activity_start_request, opts = {})
76
+ def start_live_activity(live_activity_start_request, opts = {}, tags: nil)
70
77
  @api.start_live_activity(
71
- normalize_live_activity_request(normalize_channels_target(live_activity_start_request)),
78
+ normalize_live_activity_request(normalize_channels_target(with_tags(live_activity_start_request, tags))),
72
79
  opts
73
80
  )
74
81
  end
@@ -81,10 +88,10 @@ module ActivitySmith
81
88
  @api.end_live_activity(normalize_live_activity_request(live_activity_end_request), opts)
82
89
  end
83
90
 
84
- def reconcile_live_activity_stream(stream_key, live_activity_stream_request, opts = {})
91
+ def reconcile_live_activity_stream(stream_key, live_activity_stream_request, opts = {}, tags: nil)
85
92
  @api.reconcile_live_activity_stream(
86
93
  stream_key,
87
- normalize_live_activity_request(normalize_channels_target(live_activity_stream_request)),
94
+ normalize_live_activity_request(normalize_channels_target(with_tags(live_activity_stream_request, tags))),
88
95
  opts
89
96
  )
90
97
  end
@@ -110,6 +117,21 @@ module ActivitySmith
110
117
 
111
118
  private
112
119
 
120
+ def combine_request(request, request_fields)
121
+ return request if request_fields.empty?
122
+ return request_fields if request.nil?
123
+ raise ArgumentError, "ActivitySmith: keyword request fields can only be combined with a Hash request" unless request.is_a?(Hash)
124
+
125
+ request.merge(request_fields)
126
+ end
127
+
128
+ def with_tags(request, tags)
129
+ return request if tags.nil?
130
+ raise ArgumentError, "ActivitySmith: tags can only be combined with a Hash request" unless request.is_a?(Hash)
131
+
132
+ request.merge(tags: tags)
133
+ end
134
+
113
135
  def normalize_live_activity_request(request)
114
136
  return request unless request.is_a?(Hash)
115
137
 
@@ -6,15 +6,15 @@ module ActivitySmith
6
6
  @api = api
7
7
  end
8
8
 
9
- def send(request, opts = {})
10
- normalized = normalize_channels_target(request)
9
+ def send(request = nil, opts = {}, tags: nil, **request_fields)
10
+ normalized = normalize_channels_target(with_tags(combine_request(request, request_fields), tags))
11
11
  assert_valid_media_actions!(normalized)
12
12
  @api.send_push_notification(normalized, opts)
13
13
  end
14
14
 
15
15
  # Backward-compatible alias.
16
- def send_push_notification(push_notification_request, opts = {})
17
- normalized = normalize_channels_target(push_notification_request)
16
+ def send_push_notification(push_notification_request, opts = {}, tags: nil)
17
+ normalized = normalize_channels_target(with_tags(push_notification_request, tags))
18
18
  assert_valid_media_actions!(normalized)
19
19
  @api.send_push_notification(normalized, opts)
20
20
  end
@@ -31,6 +31,21 @@ module ActivitySmith
31
31
 
32
32
  private
33
33
 
34
+ def combine_request(request, request_fields)
35
+ return request if request_fields.empty?
36
+ return request_fields if request.nil?
37
+ raise ArgumentError, "ActivitySmith: keyword request fields can only be combined with a Hash request" unless request.is_a?(Hash)
38
+
39
+ request.merge(request_fields)
40
+ end
41
+
42
+ def with_tags(request, tags)
43
+ return request if tags.nil?
44
+ raise ArgumentError, "ActivitySmith: tags can only be combined with a Hash request" unless request.is_a?(Hash)
45
+
46
+ request.merge(tags: tags)
47
+ end
48
+
34
49
  def normalize_channels_target(request)
35
50
  return request unless request.is_a?(Hash)
36
51
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActivitySmith
4
- VERSION = "1.9.0"
4
+ VERSION = "1.11.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activitysmith
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ActivitySmith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-07-11 00:00:00.000000000 Z
11
+ date: 2026-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -86,6 +86,7 @@ files:
86
86
  - generated/activitysmith_openapi/models/activity_metric.rb
87
87
  - generated/activitysmith_openapi/models/activity_metric_value.rb
88
88
  - generated/activitysmith_openapi/models/alert_payload.rb
89
+ - generated/activitysmith_openapi/models/app_icon_badge_count_update_error.rb
89
90
  - generated/activitysmith_openapi/models/app_icon_badge_count_update_request.rb
90
91
  - generated/activitysmith_openapi/models/app_icon_badge_count_update_response.rb
91
92
  - generated/activitysmith_openapi/models/bad_request_error.rb
@@ -111,6 +112,7 @@ files:
111
112
  - generated/activitysmith_openapi/models/live_activity_update_request.rb
112
113
  - generated/activitysmith_openapi/models/live_activity_update_response.rb
113
114
  - generated/activitysmith_openapi/models/live_activity_webhook_method.rb
115
+ - generated/activitysmith_openapi/models/metadata_value.rb
114
116
  - generated/activitysmith_openapi/models/metric_error.rb
115
117
  - generated/activitysmith_openapi/models/metric_value_update_request.rb
116
118
  - generated/activitysmith_openapi/models/metric_value_update_request_value.rb
@@ -125,7 +127,9 @@ files:
125
127
  - generated/activitysmith_openapi/models/rate_limit_error.rb
126
128
  - generated/activitysmith_openapi/models/send_push_notification429_response.rb
127
129
  - generated/activitysmith_openapi/models/stream_content_state.rb
130
+ - generated/activitysmith_openapi/models/update_app_icon_badge_count422_response.rb
128
131
  - generated/activitysmith_openapi/version.rb
132
+ - generated/openapi-source.json
129
133
  - lib/activitysmith.rb
130
134
  - lib/activitysmith/client.rb
131
135
  - lib/activitysmith/live_activities.rb