abmeter 0.2.2 → 0.2.4

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: 9942da1ef58cb41f5dd91e2bf4324394a393b9c5b8846c361389227c60b54c86
4
- data.tar.gz: 8be692e8ecf838466c7a1def6efbdae4b20af23105257b41b44b693fcf846dfe
3
+ metadata.gz: 3de305080a86006a94e25c375c97e3f00130132ff44e4f1c51d7fb8719d0a18f
4
+ data.tar.gz: 2c318d9008614bb7b7ad561c7587cecbf009fa8e68331d6fc35974b8b1cd1ccd
5
5
  SHA512:
6
- metadata.gz: 129b61ca52cee9e0d281d9be91813a2ecc96e7044124c3e1f0f21aeedd3b35a8ee089d03ad0a176cf94bee730d7beeb9c4ee3484c48bf30cfb3a1cedf6e4be19
7
- data.tar.gz: c0601c6055cb0767e812890d1830429667c143d8a8a6d21f3928832c6a8bb3a99c1063db6a20ca6c26d49b6d104922fa1539660cfd17ea7e15aec1a56e089e3e
6
+ metadata.gz: dc3b45f859392cb95ca923aa89f813b876ddb6d086852da649c8a7d7c53ab2f7c0564761d0eefb19525578395882af92d4af101e5de8e1210a2f26decbd12188
7
+ data.tar.gz: b4ac66c59f3d601e3f7b88bcdcbc0b64ac8daf7a48c0d96ed8d76dad0a5804644f53bbef3f848de6676f57ee18caa626bd0efd9035ba9db634bcc506091f727f
data/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  A simple A/B testing client library for Ruby applications.
4
4
 
5
+ ## Supported Ruby versions
6
+
7
+ `abmeter` supports **Ruby 3.2 and newer**.
8
+
5
9
  ## Installation
6
10
 
7
11
  Add this line to your application's Gemfile:
@@ -34,6 +38,20 @@ user = ABMeter.user(id: current_user.id, email: current_user.email)
34
38
  ABMeter.event(`user_purchases_plan`, user, {plan: purchased_plan.name, price: purchased_plan.price})
35
39
  ```
36
40
 
41
+ ## Development
42
+
43
+ The gem uses [mise](https://mise.jdx.dev/) to pin Ruby (`mise.toml`). Pure-Ruby — no Postgres / Redis required.
44
+
45
+ ```bash
46
+ brew install mise # one-time
47
+ mise install # one-time: install pinned Ruby
48
+ bundle install
49
+ bundle exec rspec # tests
50
+ bundle exec rubocop # lint (if .rubocop.yml present)
51
+ ```
52
+
53
+ The gem is tested against Ruby 3.2, 3.3, 3.4, and 4.0.
54
+
37
55
  ## License
38
56
 
39
57
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -8,7 +8,9 @@ module ABMeter
8
8
 
9
9
  attr_reader :id, :range, :audience_variants, :space_id, :salt, :space_salt
10
10
 
11
- def initialize(id:, range:, audience_variants:, space_id:, salt:, space_salt:)
11
+ # The six keyword args are this value object's assignment inputs; a
12
+ # params object would only add indirection for a plain data holder.
13
+ def initialize(id:, range:, audience_variants:, space_id:, salt:, space_salt:) # rubocop:disable Metrics/ParameterLists
12
14
  @id = id
13
15
  @range = range
14
16
  @audience_variants = audience_variants
@@ -16,7 +16,7 @@ module ABMeter
16
16
  end
17
17
 
18
18
  def self.from_json(variant)
19
- parameter_values = variant[:parameter_values].map { |pv| [pv[:slug], pv[:value]] }.to_h
19
+ parameter_values = variant[:parameter_values].to_h { |pv| [pv[:slug], pv[:value]] }
20
20
  Variant.new(id: variant[:id], parameter_values: parameter_values)
21
21
  end
22
22
 
@@ -33,7 +33,7 @@ module ABMeter
33
33
  # Formula: (num * range) >> bits = (num * 100) >> 64
34
34
  # This maps [0, 2^64) uniformly to [0, 100)
35
35
  percentage = (num * 100) >> 64
36
-
36
+
37
37
  # Add 1 to get 1-100 range instead of 0-99
38
38
  percentage + 1
39
39
  end
data/lib/abmeter/core.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ostruct'
4
3
  require_relative 'version'
5
4
 
6
5
  # Utils
@@ -1,3 +1,3 @@
1
1
  module ABMeter
2
- VERSION = '0.2.2'.freeze
2
+ VERSION = '0.2.4'.freeze
3
3
  end
data/lib/abmeter.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'active_support/core_ext/hash/indifferent_access'
2
2
  require 'digest'
3
- require 'ostruct'
4
3
 
5
4
  # Core (zero-dependency assignment logic)
6
5
  require_relative 'abmeter/core'
@@ -17,6 +16,7 @@ require_relative 'abmeter/error_safety'
17
16
  module ABMeter
18
17
  class << self
19
18
  include ErrorSafety
19
+
20
20
  def config
21
21
  raise 'ABMeter not configured. Call ABMeter.configure { |config| ... } first.' unless @config
22
22
 
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abmeter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - ABMeter
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2026-06-13 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: activesupport
@@ -77,6 +78,7 @@ metadata:
77
78
  homepage_uri: https://github.com/abmeter/abmeter-ruby
78
79
  source_code_uri: https://github.com/abmeter/abmeter-ruby
79
80
  rubygems_mfa_required: 'true'
81
+ post_install_message:
80
82
  rdoc_options: []
81
83
  require_paths:
82
84
  - lib
@@ -91,7 +93,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
93
  - !ruby/object:Gem::Version
92
94
  version: '0'
93
95
  requirements: []
94
- rubygems_version: 3.6.9
96
+ rubygems_version: 3.5.22
97
+ signing_key:
95
98
  specification_version: 4
96
99
  summary: ABMeter SDK for feature flags and A/B testing
97
100
  test_files: []