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 +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/toggly/segment_membership.rb +68 -0
- data/lib/toggly/version.rb +1 -1
- data/lib/toggly.rb +1 -0
- 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: 8e7e0a87a56b437ad26a416ec236125cdffab5f1ed3ac0a65260da717c58c04d
|
|
4
|
+
data.tar.gz: 4e3a36875f88ee85dbe81ae51cb72226b97cd3951d8034ddf600d2f8a5ce8da6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
data/lib/toggly/version.rb
CHANGED
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.
|
|
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-
|
|
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
|