flagger 2.0.9 → 3.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 +4 -4
- data/lib/flagger.rb +63 -77
- data/lib/flagger/entity.rb +49 -0
- data/lib/flagger/flagger-386.dll +0 -0
- data/lib/flagger/flagger-amd64.dll +0 -0
- data/lib/flagger/libflagger-386.so +0 -0
- data/lib/flagger/libflagger-amd64.so +0 -0
- data/lib/flagger/libflagger.dylib +0 -0
- data/lib/flagger/native.rb +31 -0
- data/lib/flagger/response.rb +7 -0
- data/lib/flagger/version.rb +3 -4
- metadata +70 -39
- data/lib/flagger/cloud.rb +0 -495
- data/lib/flagger/microservice.rb +0 -63
- data/lib/flagger/models.rb +0 -656
- data/lib/flagger/stat.rb +0 -56
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abec4e3ed555319d9e974c87174352957d54097395fb9435a9fc6ce4c2511ebb
|
4
|
+
data.tar.gz: fb42dad6b7af63308d2a65021c35f7aeb9c94d408b1dab60b8e4d8aca51cb6fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b32614e2a9eeaa51e2bbf3fd4a789ce6f3c7f3edb89a78856594a56623552bcf3508d2859798de7274abaf445284158e7e93ad13852fba98f6ff9f0c3b99b19
|
7
|
+
data.tar.gz: 86bdaa5297356ebb695c859feef6370a41aeab8acd66b5fb5ca671640d96d5b0453ef896b118d5b4995afe9baa3ccf986dd0e23dc8d5aa728da862815434ac59
|
data/lib/flagger.rb
CHANGED
@@ -1,96 +1,82 @@
|
|
1
|
-
require '
|
2
|
-
require 'flagger/
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
def enabled?(entity)
|
27
|
-
@delegate&.enabled?(self, entity) || false
|
28
|
-
end
|
1
|
+
require 'ffi'
|
2
|
+
require 'flagger/entity'
|
3
|
+
require 'flagger/response'
|
4
|
+
require 'flagger/native'
|
5
|
+
require 'flagger/version'
|
6
|
+
|
7
|
+
module Flagger
|
8
|
+
include FlaggerNative, ResponseParser
|
9
|
+
|
10
|
+
# init method gets FlaggerConfiguration, establishes and maintains SSE connections and initializes Ingester
|
11
|
+
# init must be called only once, at the start of your application.
|
12
|
+
# Your program must wait for init to finish before using any other Flagger methods
|
13
|
+
def Flagger.init(api_key, **args)
|
14
|
+
request = {
|
15
|
+
apiKey: api_key,
|
16
|
+
sdkName: "ruby",
|
17
|
+
sdkVersion: Flagger::VERSION,
|
18
|
+
sourceURL: args[:source_url],
|
19
|
+
backupSourceURL: args[:backup_source_url],
|
20
|
+
sseURL: args[:sse_url],
|
21
|
+
ingestionURL: args[:ingestion_url],
|
22
|
+
logLevel: args[:log_level],
|
23
|
+
}.compact.to_json
|
24
|
+
ResponseParser::parse_error(FlaggerNative::Init(request))
|
29
25
|
end
|
30
26
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
attr_accessor :request_timeout
|
36
|
-
attr_accessor :delegate
|
37
|
-
|
38
|
-
def self.configure(options)
|
39
|
-
@@instance.configure(options)
|
40
|
-
@@instance
|
27
|
+
# Explicitly notify Airship about an Entity
|
28
|
+
def Flagger.publish(entity)
|
29
|
+
request = "{\"entity\": #{entity.to_json} }"
|
30
|
+
ResponseParser::parse_error(FlaggerNative::Publish(request))
|
41
31
|
end
|
42
32
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
applied_options = {
|
49
|
-
env_key: @env_key,
|
50
|
-
edge_url: @edge_url,
|
51
|
-
request_timeout: @request_timeout
|
52
|
-
}
|
53
|
-
if not @prev_options == applied_options
|
54
|
-
@prev_options = applied_options
|
55
|
-
|
56
|
-
@delegate&.cleanup
|
57
|
-
if @edge_url.nil? then
|
58
|
-
@delegate = FlaggerEnvironments::CloudDelegate.new(@env_key, @request_timeout)
|
59
|
-
else
|
60
|
-
@delegate = FlaggerEnvironments::MicroserviceDelegate.new(@env_key, @edge_url, @request_timeout)
|
61
|
-
end
|
62
|
-
end
|
33
|
+
# Simple event tracking API. Entity is an optional parameter if it was set before.
|
34
|
+
def Flagger.track(name, event_properties, *entity)
|
35
|
+
request = entity.empty? ? "{\"event\":{\"name\":\"#{name}\", \"eventProperties\": #{event_properties.to_json}}"
|
36
|
+
: "{\"event\":{\"name\":\"#{name}\", \"eventProperties\": #{event_properties.to_json}, \"entity\":#{entity[0].to_json}}}"
|
37
|
+
ResponseParser::parse_error(FlaggerNative::Track(request))
|
63
38
|
end
|
64
39
|
|
65
|
-
|
66
|
-
|
40
|
+
# set_entity stores an entity in Flagger, which allows omission of entity in other API methods.
|
41
|
+
#
|
42
|
+
# If you don't provide any entity to Flagger:
|
43
|
+
# - flag functions always resolve with the default variation
|
44
|
+
# - track method doesn't record an event
|
45
|
+
def Flagger.set_entity(entity)
|
46
|
+
ResponseParser::parse_error(FlaggerNative::SetEntity("{\"entity\":#{entity.to_json}}"))
|
67
47
|
end
|
68
48
|
|
69
|
-
|
70
|
-
|
49
|
+
# Determines if flag is enabled for entity.
|
50
|
+
def Flagger.is_enabled(codename, *entity)
|
51
|
+
request = entity.empty? ? "{\"codename\": \"#{codename}\"}" : "{\"codename\": \"#{codename}\", \"entity\":#{entity[0].to_json}}"
|
52
|
+
ResponseParser::parse_error FlaggerNative::FlagIsEnabled(request)
|
71
53
|
end
|
72
|
-
end
|
73
54
|
|
74
|
-
|
75
|
-
def
|
76
|
-
|
77
|
-
|
78
|
-
@env_key = options[:env_key]
|
55
|
+
# Determines if entity is within the targeted subpopulations
|
56
|
+
def Flagger.is_sampled(codename, *entity)
|
57
|
+
request = entity.empty? ? "{\"codename\": \"#{codename}\"}" : "{\"codename\": \"#{codename}\", \"entity\":#{entity[0].to_json}}"
|
58
|
+
ResponseParser::parse_error FlaggerNative::FlagIsSampled(request)
|
79
59
|
end
|
80
60
|
|
81
|
-
|
82
|
-
|
61
|
+
# Returns the variation assigned to the entity in a multivariate flag
|
62
|
+
def Flagger.get_variation(codename, *entity)
|
63
|
+
request = entity.empty? ? "{\"codename\": \"#{codename}\"}" : "{\"codename\": \"#{codename}\", \"entity\":#{entity[0].to_json}}"
|
64
|
+
ResponseParser::parse_error FlaggerNative::FlagGetVariation(request)
|
83
65
|
end
|
84
66
|
|
85
|
-
|
86
|
-
|
67
|
+
# Returns the payload associated with the treatment assigned to the entity
|
68
|
+
def Flagger.get_payload(codename, *entity)
|
69
|
+
request = entity.empty? ? "{\"codename\": \"#{codename}\"}" : "{\"codename\": \"#{codename}\", \"entity\":#{entity[0].to_json}}"
|
70
|
+
ResponseParser::parse_error FlaggerNative::FlagGetPayload(request)
|
87
71
|
end
|
88
72
|
|
89
|
-
|
90
|
-
|
73
|
+
# shutdown ingests data(if any), stop ingester and closes SSE connection. shutdown waits to finish current ingestion
|
74
|
+
# request, but no longer than a timeoutMillis.
|
75
|
+
# returns true if closed by timeout
|
76
|
+
def Flagger.shutdown(timeout)
|
77
|
+
request = "{\"timeout\": #{timeout}}"
|
78
|
+
ResponseParser::parse_error FlaggerNative::Shutdown(request)
|
91
79
|
end
|
92
80
|
|
93
|
-
def enabled?(flag, entity)
|
94
|
-
Flagger.flag(flag).enabled?(entity)
|
95
|
-
end
|
96
81
|
end
|
82
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module Flagger
|
4
|
+
|
5
|
+
class Group
|
6
|
+
|
7
|
+
def initialize(id, **args)
|
8
|
+
@id = id.to_s
|
9
|
+
unless args.empty?
|
10
|
+
@type = args.has_key?(:type) ? args[:type].to_s : nil
|
11
|
+
@name = args.has_key?(:name) ? args[:name].to_s : nil
|
12
|
+
@attributes = args.has_key?(:attributes) ? args[:attributes].to_s : nil
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_json
|
18
|
+
{
|
19
|
+
id: @id,
|
20
|
+
name: @name,
|
21
|
+
attributes: @attributes
|
22
|
+
}.compact.to_json
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
class Entity
|
28
|
+
|
29
|
+
def initialize(id, **args)
|
30
|
+
@id = id.to_s
|
31
|
+
unless args.empty?
|
32
|
+
@type = args.has_key?(:type) ? args[:type].to_s : nil
|
33
|
+
@name = args.has_key?(:name) ? args[:name].to_s : nil
|
34
|
+
@attributes = args.has_key?(:attributes)? args[:attributes] : nil
|
35
|
+
@group = args.has_key?(:group) ? args[:group] : nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_json
|
40
|
+
{
|
41
|
+
id: @id,
|
42
|
+
name: @name,
|
43
|
+
type: @type,
|
44
|
+
attributes: @attributes,
|
45
|
+
group: @group
|
46
|
+
}.compact.to_json
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'os'
|
2
|
+
|
3
|
+
def __load_lib(name)
|
4
|
+
arch = OS.bits === 32 ? '386' : 'amd64'
|
5
|
+
if OS.windows?
|
6
|
+
name = name + '-' + arch + '.dll'
|
7
|
+
elsif OS.mac?
|
8
|
+
name = 'lib' + name + '.dylib'
|
9
|
+
elsif OS.linux?
|
10
|
+
name = 'lib' + name + '-' + arch + '.so'
|
11
|
+
else
|
12
|
+
raise 'unsupported platform'
|
13
|
+
end
|
14
|
+
File.join File.dirname(__FILE__), name
|
15
|
+
end
|
16
|
+
|
17
|
+
# Module that represents shared lib
|
18
|
+
module FlaggerNative
|
19
|
+
extend FFI::Library
|
20
|
+
ffi_lib __load_lib('flagger')
|
21
|
+
# foreign function definitions
|
22
|
+
attach_function :Init, [:string], :string
|
23
|
+
attach_function :Publish, [:string], :string
|
24
|
+
attach_function :Track, [:string], :string
|
25
|
+
attach_function :SetEntity, [:string], :string
|
26
|
+
attach_function :FlagIsEnabled, [:string], :string
|
27
|
+
attach_function :FlagIsSampled, [:string], :string
|
28
|
+
attach_function :FlagGetVariation, [:string], :string
|
29
|
+
attach_function :FlagGetPayload, [:string], :string
|
30
|
+
attach_function :Shutdown, [:string], :string
|
31
|
+
end
|
data/lib/flagger/version.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
module
|
2
|
-
VERSION = '
|
3
|
-
end
|
4
|
-
|
1
|
+
module Flagger
|
2
|
+
VERSION = '3.0.1'
|
3
|
+
end
|
metadata
CHANGED
@@ -1,117 +1,149 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flagger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
autorequire:
|
7
|
+
- Airdeploy Dev Team
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: os
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.9.6
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 0.9.6
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: ffi
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.13'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 1.13.1
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
41
|
- - "~>"
|
39
42
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
43
|
+
version: '1.13'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.13.1
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
48
|
+
name: json
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
53
|
+
version: '2.3'
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
60
|
+
version: '2.3'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
62
|
+
name: faraday
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
65
|
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0
|
62
|
-
|
67
|
+
version: '1.0'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.0.1
|
71
|
+
type: :development
|
63
72
|
prerelease: false
|
64
73
|
version_requirements: !ruby/object:Gem::Requirement
|
65
74
|
requirements:
|
66
75
|
- - "~>"
|
67
76
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0
|
77
|
+
version: '1.0'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.0.1
|
69
81
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
82
|
+
name: rake
|
71
83
|
requirement: !ruby/object:Gem::Requirement
|
72
84
|
requirements:
|
73
85
|
- - "~>"
|
74
86
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
76
|
-
type: :
|
87
|
+
version: '13.0'
|
88
|
+
type: :development
|
77
89
|
prerelease: false
|
78
90
|
version_requirements: !ruby/object:Gem::Requirement
|
79
91
|
requirements:
|
80
92
|
- - "~>"
|
81
93
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
94
|
+
version: '13.0'
|
83
95
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
96
|
+
name: rspec
|
85
97
|
requirement: !ruby/object:Gem::Requirement
|
86
98
|
requirements:
|
87
99
|
- - "~>"
|
88
100
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0
|
90
|
-
type: :
|
101
|
+
version: '3.0'
|
102
|
+
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
93
105
|
requirements:
|
94
106
|
- - "~>"
|
95
107
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0
|
97
|
-
|
98
|
-
|
108
|
+
version: '3.0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: rspec_junit_formatter
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: 0.4.1
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 0.4.1
|
123
|
+
description: An open source Ruby SDK for feature flagging (feature gating, feature
|
124
|
+
toggles)
|
125
|
+
email: engineering@airdeploy.io
|
99
126
|
executables: []
|
100
127
|
extensions: []
|
101
128
|
extra_rdoc_files: []
|
102
129
|
files:
|
103
130
|
- lib/flagger.rb
|
104
|
-
- lib/flagger/
|
105
|
-
- lib/flagger/
|
106
|
-
- lib/flagger/
|
107
|
-
- lib/flagger/
|
131
|
+
- lib/flagger/entity.rb
|
132
|
+
- lib/flagger/flagger-386.dll
|
133
|
+
- lib/flagger/flagger-amd64.dll
|
134
|
+
- lib/flagger/libflagger-386.so
|
135
|
+
- lib/flagger/libflagger-amd64.so
|
136
|
+
- lib/flagger/libflagger.dylib
|
137
|
+
- lib/flagger/native.rb
|
138
|
+
- lib/flagger/response.rb
|
108
139
|
- lib/flagger/version.rb
|
109
|
-
homepage: https://
|
140
|
+
homepage: https://airdeploy.io
|
110
141
|
licenses:
|
111
142
|
- MIT
|
112
143
|
metadata:
|
113
|
-
|
114
|
-
|
144
|
+
documentation_uri: https://docs.airdeploy.io
|
145
|
+
homepage_uri: https://airdeploy.io
|
146
|
+
post_install_message:
|
115
147
|
rdoc_options: []
|
116
148
|
require_paths:
|
117
149
|
- lib
|
@@ -119,16 +151,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
151
|
requirements:
|
120
152
|
- - ">="
|
121
153
|
- !ruby/object:Gem::Version
|
122
|
-
version:
|
154
|
+
version: 2.4.0
|
123
155
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
156
|
requirements:
|
125
157
|
- - ">="
|
126
158
|
- !ruby/object:Gem::Version
|
127
159
|
version: '0'
|
128
160
|
requirements: []
|
129
|
-
|
130
|
-
|
131
|
-
signing_key:
|
161
|
+
rubygems_version: 3.1.2
|
162
|
+
signing_key:
|
132
163
|
specification_version: 4
|
133
|
-
summary: Flagger Ruby SDK
|
164
|
+
summary: An open source Flagger Ruby SDK
|
134
165
|
test_files: []
|