mida-sdk 1.0.1
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 +7 -0
- data/lib/mida-sdk.rb +117 -0
- metadata +58 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '06739f295b8b5a37b55385c9bcd402bb36d816ff2cd459dd083f5ce5913b96d4'
|
4
|
+
data.tar.gz: a96a7123919b2cb8d7e802f1968bd729941bdeada014ab078194e2a8908f3fcd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 85c33dee2cab584e22b9533a1f34acbeb235f400f8e95438b2e163a179b223cc419b8315a9934e82504b4c1790c7eb8fa57efbec2d475a21cea714665bfc5874
|
7
|
+
data.tar.gz: cb1304b07b1ba7e6bb4e34cb9dce6e978202cd1ba7ea3e844d0865144de8ce72f15c53273931ba022a305926845a5e8ac6a701b84e40573595923d7b05120fee
|
data/lib/mida-sdk.rb
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
class Mida
|
6
|
+
VERSION = '1.0.0'
|
7
|
+
|
8
|
+
attr_reader :public_key, :host, :user_id, :enabled_features, :max_cache_size, :feature_flag_cache
|
9
|
+
|
10
|
+
def initialize(public_key, options = {})
|
11
|
+
raise ArgumentError, "You must pass your Mida project key" unless public_key
|
12
|
+
|
13
|
+
@public_key = public_key
|
14
|
+
@host = 'https://api.mida.so'
|
15
|
+
@user_id = nil
|
16
|
+
@enabled_features = []
|
17
|
+
@max_cache_size = options[:max_cache_size] || 50000
|
18
|
+
@feature_flag_cache = {}
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_experiment(experiment_key, distinct_id = nil)
|
22
|
+
raise ArgumentError, "You must pass your Mida experiment key" unless experiment_key
|
23
|
+
raise ArgumentError, "You must pass your user distinct ID" unless distinct_id || @user_id
|
24
|
+
|
25
|
+
data = {
|
26
|
+
key: @public_key,
|
27
|
+
experiment_key: experiment_key,
|
28
|
+
distinct_id: distinct_id || @user_id
|
29
|
+
}
|
30
|
+
|
31
|
+
response = post_request("#{@host}/experiment/query", data)
|
32
|
+
json = JSON.parse(response.body)
|
33
|
+
json['version']
|
34
|
+
rescue StandardError => e
|
35
|
+
raise e
|
36
|
+
end
|
37
|
+
|
38
|
+
def set_event(event_name, distinct_id = nil, properties = {})
|
39
|
+
raise ArgumentError, "You need to set an event name" unless event_name
|
40
|
+
raise ArgumentError, "You must pass your user distinct ID" unless distinct_id || @user_id
|
41
|
+
|
42
|
+
data = {
|
43
|
+
key: @public_key,
|
44
|
+
name: event_name,
|
45
|
+
distinct_id: distinct_id || @user_id,
|
46
|
+
properties: properties.to_json
|
47
|
+
}
|
48
|
+
|
49
|
+
post_request("#{@host}/experiment/event", data)
|
50
|
+
rescue StandardError => e
|
51
|
+
raise e
|
52
|
+
end
|
53
|
+
|
54
|
+
def set_attribute(distinct_id = nil, properties = {})
|
55
|
+
raise ArgumentError, "You must pass your user distinct ID" unless distinct_id || @user_id
|
56
|
+
raise ArgumentError, "You must pass your user properties" if properties.empty?
|
57
|
+
|
58
|
+
data = properties.merge(id: distinct_id || @user_id)
|
59
|
+
post_request("#{@host}/track/#{@public_key}", data)
|
60
|
+
rescue StandardError => e
|
61
|
+
raise e
|
62
|
+
end
|
63
|
+
|
64
|
+
def cached_feature_flag
|
65
|
+
cache_key = "#{@public_key}:#{@user_id}"
|
66
|
+
@feature_flag_cache[cache_key] || []
|
67
|
+
end
|
68
|
+
|
69
|
+
def feature_enabled?(key)
|
70
|
+
@enabled_features = cached_feature_flag
|
71
|
+
@enabled_features.include?(key)
|
72
|
+
end
|
73
|
+
|
74
|
+
def on_feature_flags(distinct_id = nil)
|
75
|
+
cached_items = cached_feature_flag.length
|
76
|
+
reload_feature_flags(distinct_id)
|
77
|
+
true
|
78
|
+
rescue StandardError => e
|
79
|
+
raise e
|
80
|
+
end
|
81
|
+
|
82
|
+
def reload_feature_flags(distinct_id = nil)
|
83
|
+
data = {
|
84
|
+
key: @public_key,
|
85
|
+
user_id: distinct_id
|
86
|
+
}
|
87
|
+
|
88
|
+
response = post_request("#{@host}/feature-flag", data)
|
89
|
+
@enabled_features = JSON.parse(response.body)
|
90
|
+
cache_key = "#{@public_key}:#{@user_id}"
|
91
|
+
@feature_flag_cache[cache_key] = @enabled_features
|
92
|
+
|
93
|
+
if @feature_flag_cache.size > @max_cache_size
|
94
|
+
@feature_flag_cache.shift
|
95
|
+
end
|
96
|
+
|
97
|
+
true
|
98
|
+
rescue StandardError => e
|
99
|
+
raise e
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def post_request(url, data)
|
105
|
+
uri = URI(url)
|
106
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
107
|
+
http.use_ssl = true
|
108
|
+
request = Net::HTTP::Post.new(uri.path, 'Content-Type' => 'application/json')
|
109
|
+
request['User-Agent'] = "mida-ruby/#{Mida::VERSION}"
|
110
|
+
request.body = data.to_json
|
111
|
+
|
112
|
+
response = http.request(request)
|
113
|
+
raise StandardError, response.message unless response.is_a?(Net::HTTPSuccess)
|
114
|
+
|
115
|
+
response
|
116
|
+
end
|
117
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mida-sdk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Donald Ng
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-07-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Mida.so server-side A/B Testing and Feature Flagging for Python. Start
|
28
|
+
for free up to 50,000 MTU.
|
29
|
+
email: donald@mida.so
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/mida-sdk.rb
|
35
|
+
homepage: https://www.mida.so
|
36
|
+
licenses:
|
37
|
+
- MIT
|
38
|
+
metadata: {}
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
requirements: []
|
54
|
+
rubygems_version: 3.1.6
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: Mida.so A/B Testing and Feature Flags
|
58
|
+
test_files: []
|