toggly 1.2.1 → 1.3.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: a484fa27dd7cc53210f2af73984c93d9109205f797172203aea42c44c4722569
4
- data.tar.gz: 79a64ed42c9497e8ce8ca0f59d4dc3c21e52e68ba5e24b3b76680767d2a4787b
3
+ metadata.gz: 8e7e0a87a56b437ad26a416ec236125cdffab5f1ed3ac0a65260da717c58c04d
4
+ data.tar.gz: 4e3a36875f88ee85dbe81ae51cb72226b97cd3951d8034ddf600d2f8a5ce8da6
5
5
  SHA512:
6
- metadata.gz: 07f924fb8addc26c7af35f31f0a023680201f097cfa6b26826c333a2dc3a2086c07ae094ca23413daf176546a886dbd39598914a79c0ae6cd35c8c0aeb5df564
7
- data.tar.gz: 353559ba9d83853a589d843f01b52cbdb9287074b7be77505784515df99b2505317d54225456b7818c210d050b5cd170abe1a8bc315545dad5f534f9a7537244
6
+ metadata.gz: 0e8ddc1874675e6536462478a8245f964470951cede5dae334c13383cd34af96627a6be8a1f8778eb0b2941dc74433714113b85167f88a472ff88d7e1b763094
7
+ data.tar.gz: d743ba544845147aff474191418ab201a3945c3e8edad5ccb78d34364d175a8a8aa1b0cf38ac5c3122f95517670b75416261821b5dd75d214fe0d3483b789a72
data/CHANGELOG.md CHANGED
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.3.0] - 2026-10-04
9
+
10
+ ### Added
11
+ - `Toggly::SegmentMembership` for Backend-key targeting-list membership updates.
12
+
8
13
  ## [1.2.1] - 2026-09-28
9
14
 
10
15
  ### Fixed
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "net/http"
5
+ require "uri"
6
+
7
+ module Toggly
8
+ # Backend-key client for targeting-list membership on app.toggly.io.
9
+ class SegmentMembership
10
+ def initialize(app_key:, app_base_url: "https://app.toggly.io")
11
+ raise ArgumentError, "app_key is required" if app_key.nil? || app_key.empty?
12
+
13
+ @app_key = app_key
14
+ @base = app_base_url.sub(%r{/+\z}, "")
15
+ end
16
+
17
+ def list_segments
18
+ request(Net::HTTP::Get, "/api/v2/segments")
19
+ end
20
+
21
+ def add_segment_members(segment, identifiers)
22
+ request(Net::HTTP::Post, items_path(segment), { identifiers: identifiers })
23
+ end
24
+
25
+ def remove_segment_members(segment, identifiers)
26
+ request(Net::HTTP::Delete, items_path(segment), { identifiers: identifiers })
27
+ end
28
+
29
+ def replace_segment_members(segment, identifiers)
30
+ request(Net::HTTP::Put, items_path(segment), { identifiers: identifiers })
31
+ end
32
+
33
+ private
34
+
35
+ def items_path(segment)
36
+ "/api/v2/segments/#{URI.encode_www_form_component(segment).gsub("+", "%20")}/items"
37
+ end
38
+
39
+ def request(klass, path, body = nil)
40
+ uri = URI.parse("#{@base}#{path}")
41
+ http = Net::HTTP.new(uri.host, uri.port)
42
+ http.use_ssl = uri.scheme == "https"
43
+ http.open_timeout = 30
44
+ http.read_timeout = 30
45
+ req = klass.new(uri)
46
+ req["Authorization"] = @app_key
47
+ req["Accept"] = "application/json"
48
+ if body
49
+ req["Content-Type"] = "application/json"
50
+ req.body = JSON.generate(body)
51
+ end
52
+ response = http.request(req)
53
+ unless response.is_a?(Net::HTTPSuccess)
54
+ raise Toggly::NetworkError.new(
55
+ "Segment membership failed",
56
+ status_code: response.code.to_i,
57
+ response_body: response.body
58
+ )
59
+ end
60
+
61
+ # Mutations may return 204/empty bodies; do not JSON-parse blank payloads.
62
+ body = response.body.to_s
63
+ return nil if body.strip.empty?
64
+
65
+ JSON.parse(body)
66
+ end
67
+ end
68
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Toggly
4
- VERSION = "1.2.1"
4
+ VERSION = "1.3.0"
5
5
  end
data/lib/toggly.rb CHANGED
@@ -37,6 +37,7 @@ require_relative "toggly/snapshot_providers/file"
37
37
  require_relative "toggly/definition_cache"
38
38
  require_relative "toggly/definitions_provider"
39
39
  require_relative "toggly/client"
40
+ require_relative "toggly/segment_membership"
40
41
 
41
42
  # Toggly - Feature Flag Management SDK for Ruby
42
43
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toggly
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ops.ai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-10-04 00:00:00.000000000 Z
11
+ date: 2026-10-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: High-performance Ruby SDK for Toggly feature flag management. Works with
14
14
  or without Toggly.io.
@@ -52,6 +52,7 @@ files:
52
52
  - lib/toggly/http_request_mapper.rb
53
53
  - lib/toggly/registry.rb
54
54
  - lib/toggly/request_context.rb
55
+ - lib/toggly/segment_membership.rb
55
56
  - lib/toggly/snapshot_providers/base.rb
56
57
  - lib/toggly/snapshot_providers/file.rb
57
58
  - lib/toggly/snapshot_providers/memory.rb