ff-ruby-server-sdk 0.0.2 → 1.0.2.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.run/sdk_test.rb.run.xml +3 -3
- data/CHANGELOG.md +12 -2
- data/Gemfile +17 -3
- data/README.md +155 -7
- data/api.yaml +736 -0
- data/example/example.rb +100 -3
- data/lib/ff/ruby/server/generated/lib/openapi_client/api/client_api.rb +545 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/api/metrics_api.rb +89 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/api_client.rb +390 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/api_error.rb +57 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/configuration.rb +282 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/authentication_request.rb +232 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/authentication_request_target.rb +250 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/authentication_response.rb +223 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/clause.rb +281 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/distribution.rb +239 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/error.rb +237 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/evaluation.rb +260 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/feature_config.rb +418 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/feature_state.rb +37 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/key_value.rb +237 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/metrics.rb +231 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/metrics_data.rb +303 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/pagination.rb +274 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/prerequisite.rb +239 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/segment.rb +320 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/serve.rb +227 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/serving_rule.rb +267 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/tag.rb +233 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/target.rb +331 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/target_data.rb +253 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/target_map.rb +232 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/variation.rb +255 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/variation_map.rb +245 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/weighted_variation.rb +237 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/version.rb +15 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client.rb +65 -0
- data/lib/ff/ruby/server/sdk/api/auth_service.rb +91 -0
- data/lib/ff/ruby/server/sdk/api/cf_client.rb +93 -0
- data/lib/ff/ruby/server/sdk/api/client_callback.rb +45 -0
- data/lib/ff/ruby/server/sdk/api/config.rb +140 -0
- data/lib/ff/ruby/server/sdk/api/config_builder.rb +116 -0
- data/lib/ff/ruby/server/sdk/api/default_cache.rb +112 -0
- data/lib/ff/ruby/server/sdk/api/evaluation.rb +29 -0
- data/lib/ff/ruby/server/sdk/api/evaluator.rb +526 -0
- data/lib/ff/ruby/server/sdk/api/file_map_store.rb +60 -0
- data/lib/ff/ruby/server/sdk/api/flag_evaluate_callback.rb +13 -0
- data/lib/ff/ruby/server/sdk/api/inner_client.rb +311 -0
- data/lib/ff/ruby/server/sdk/api/inner_client_flag_evaluate_callback.rb +30 -0
- data/lib/ff/ruby/server/sdk/api/inner_client_metrics_callback.rb +33 -0
- data/lib/ff/ruby/server/sdk/api/inner_client_repository_callback.rb +44 -0
- data/lib/ff/ruby/server/sdk/api/inner_client_updater.rb +63 -0
- data/lib/ff/ruby/server/sdk/api/metrics_callback.rb +19 -0
- data/lib/ff/ruby/server/sdk/api/metrics_event.rb +16 -0
- data/lib/ff/ruby/server/sdk/api/metrics_processor.rb +297 -0
- data/lib/ff/ruby/server/sdk/api/operators.rb +20 -0
- data/lib/ff/ruby/server/sdk/api/polling_processor.rb +164 -0
- data/lib/ff/ruby/server/sdk/api/repository_callback.rb +28 -0
- data/lib/ff/ruby/server/sdk/api/storage_repository.rb +263 -0
- data/lib/ff/ruby/server/sdk/api/summary_metrics.rb +16 -0
- data/lib/ff/ruby/server/sdk/api/update_processor.rb +149 -0
- data/lib/ff/ruby/server/sdk/common/cache.rb +27 -0
- data/lib/ff/ruby/server/sdk/common/closeable.rb +7 -0
- data/lib/ff/ruby/server/sdk/common/destroyable.rb +12 -0
- data/lib/ff/ruby/server/sdk/common/repository.rb +45 -0
- data/lib/ff/ruby/server/sdk/common/storage.rb +29 -0
- data/lib/ff/ruby/server/sdk/connector/connector.rb +44 -0
- data/lib/ff/ruby/server/sdk/connector/events.rb +118 -0
- data/lib/ff/ruby/server/sdk/connector/harness_connector.rb +236 -0
- data/lib/ff/ruby/server/sdk/connector/service.rb +19 -0
- data/lib/ff/ruby/server/sdk/connector/updater.rb +32 -0
- data/lib/ff/ruby/server/sdk/dto/message.rb +13 -0
- data/lib/ff/ruby/server/sdk/dto/target.rb +24 -0
- data/lib/ff/ruby/server/sdk/version.rb +2 -1
- data/lib/ff/ruby/server/sdk.rb +39 -3
- data/openapitools.json +7 -0
- data/scripts/install.sh +8 -2
- data/scripts/openapi.sh +76 -0
- data/scripts/publish.sh +1 -1
- data/scripts/sdk_specs.sh +1 -1
- metadata +263 -11
- data/lib/ff/ruby/server/sdk/cf_client.rb +0 -6
@@ -0,0 +1,93 @@
|
|
1
|
+
require "openapi_client"
|
2
|
+
|
3
|
+
require_relative "../common/closeable"
|
4
|
+
require_relative "inner_client"
|
5
|
+
|
6
|
+
class CfClient < Closeable
|
7
|
+
|
8
|
+
# Static:
|
9
|
+
class << self
|
10
|
+
|
11
|
+
@@instance = CfClient.new
|
12
|
+
|
13
|
+
def instance
|
14
|
+
|
15
|
+
@@instance
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Static - End
|
20
|
+
|
21
|
+
def initialize(api_key = nil, config = nil, connector = nil)
|
22
|
+
|
23
|
+
if config == nil
|
24
|
+
|
25
|
+
@config = ConfigBuilder.new.build
|
26
|
+
else
|
27
|
+
|
28
|
+
@config = config
|
29
|
+
end
|
30
|
+
|
31
|
+
@client = InnerClient.new(api_key, config, connector)
|
32
|
+
|
33
|
+
@config.logger.debug "Client (1): " + @client.to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
def init(api_key = nil, config = nil, connector = nil)
|
37
|
+
|
38
|
+
if @client == nil
|
39
|
+
|
40
|
+
@config = config
|
41
|
+
|
42
|
+
@client = InnerClient.new(
|
43
|
+
|
44
|
+
api_key = api_key,
|
45
|
+
config = config,
|
46
|
+
connector = connector
|
47
|
+
)
|
48
|
+
|
49
|
+
@config.logger.debug "Client (2): " + @client.to_s
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def wait_for_initialization
|
54
|
+
|
55
|
+
if @client != nil
|
56
|
+
|
57
|
+
@client.wait_for_initialization
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def bool_variation(identifier, target, default_value)
|
62
|
+
|
63
|
+
@client.bool_variation(identifier, target, default_value)
|
64
|
+
end
|
65
|
+
|
66
|
+
def string_variation(identifier, target, default_value)
|
67
|
+
|
68
|
+
@client.string_variation(identifier, target, default_value)
|
69
|
+
end
|
70
|
+
|
71
|
+
def number_variation(identifier, target, default_value)
|
72
|
+
|
73
|
+
@client.number_variation(identifier, target, default_value)
|
74
|
+
end
|
75
|
+
|
76
|
+
def json_variation(identifier, target, default_value)
|
77
|
+
|
78
|
+
@client.json_variation(identifier, target, default_value)
|
79
|
+
end
|
80
|
+
|
81
|
+
def destroy
|
82
|
+
|
83
|
+
close
|
84
|
+
end
|
85
|
+
|
86
|
+
def close
|
87
|
+
|
88
|
+
if @client != nil
|
89
|
+
|
90
|
+
@client.close
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative "../common/closeable"
|
2
|
+
|
3
|
+
class ClientCallback < Closeable
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
|
8
|
+
@tbi = "To be implemented"
|
9
|
+
end
|
10
|
+
|
11
|
+
def on_auth_success
|
12
|
+
|
13
|
+
raise @tbi
|
14
|
+
end
|
15
|
+
|
16
|
+
def on_authorized
|
17
|
+
|
18
|
+
raise @tbi
|
19
|
+
end
|
20
|
+
|
21
|
+
def is_closing
|
22
|
+
|
23
|
+
raise @tbi
|
24
|
+
end
|
25
|
+
|
26
|
+
def on_processor_ready(processor)
|
27
|
+
|
28
|
+
raise @tbi
|
29
|
+
end
|
30
|
+
|
31
|
+
def on_update_processor_ready
|
32
|
+
|
33
|
+
raise @tbi
|
34
|
+
end
|
35
|
+
|
36
|
+
def on_metrics_processor_ready
|
37
|
+
|
38
|
+
raise @tbi
|
39
|
+
end
|
40
|
+
|
41
|
+
def update(message, manual)
|
42
|
+
|
43
|
+
raise @tbi
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
require "logger"
|
2
|
+
|
3
|
+
require_relative "default_cache"
|
4
|
+
|
5
|
+
class Config
|
6
|
+
|
7
|
+
attr_accessor :config_url, :event_url, :stream_enabled, :poll_interval_in_seconds, :analytics_enabled,
|
8
|
+
:frequency, :buffer_size, :all_attributes_private, :private_attributes, :connection_timeout,
|
9
|
+
:read_timeout, :write_timeout, :debugging, :metrics_service_acceptable_duration, :cache, :store,
|
10
|
+
:logger
|
11
|
+
|
12
|
+
# Static:
|
13
|
+
class << self
|
14
|
+
|
15
|
+
@@min_frequency = 60
|
16
|
+
|
17
|
+
def min_frequency
|
18
|
+
|
19
|
+
@@min_frequency
|
20
|
+
end
|
21
|
+
end
|
22
|
+
# Static - End
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
super
|
26
|
+
|
27
|
+
@config_url = "https://config.ff.harness.io/api/1.0"
|
28
|
+
@event_url = "https://events.ff.harness.io/api/1.0"
|
29
|
+
|
30
|
+
@stream_enabled = true
|
31
|
+
|
32
|
+
@poll_interval_in_seconds = @@min_frequency
|
33
|
+
|
34
|
+
@analytics_enabled = true
|
35
|
+
|
36
|
+
@frequency = @@min_frequency
|
37
|
+
|
38
|
+
@buffer_size = 1024
|
39
|
+
|
40
|
+
@all_attributes_private = false
|
41
|
+
|
42
|
+
@private_attributes = Set[]
|
43
|
+
|
44
|
+
@connection_timeout = 10 * 1000
|
45
|
+
|
46
|
+
@read_timeout = 30 * 1000
|
47
|
+
|
48
|
+
@write_timeout = 10 * 1000
|
49
|
+
|
50
|
+
@debugging = false
|
51
|
+
|
52
|
+
@logger = Logger.new(STDOUT)
|
53
|
+
|
54
|
+
@metrics_service_acceptable_duration = 10 * 1000
|
55
|
+
|
56
|
+
@cache = DefaultCache.new(@logger)
|
57
|
+
|
58
|
+
# TODO: Storage goes here
|
59
|
+
|
60
|
+
@store = nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_frequency
|
64
|
+
|
65
|
+
[@frequency, @@min_frequency].max
|
66
|
+
end
|
67
|
+
|
68
|
+
def verify_ssl_host
|
69
|
+
|
70
|
+
true
|
71
|
+
end
|
72
|
+
|
73
|
+
def params_encoding
|
74
|
+
|
75
|
+
nil
|
76
|
+
end
|
77
|
+
|
78
|
+
def timeout
|
79
|
+
|
80
|
+
@connection_timeout
|
81
|
+
end
|
82
|
+
|
83
|
+
def verify_ssl
|
84
|
+
|
85
|
+
nil
|
86
|
+
end
|
87
|
+
|
88
|
+
def cert_file
|
89
|
+
|
90
|
+
nil
|
91
|
+
end
|
92
|
+
|
93
|
+
def key_file
|
94
|
+
|
95
|
+
nil
|
96
|
+
end
|
97
|
+
|
98
|
+
def ssl_ca_cert
|
99
|
+
|
100
|
+
nil
|
101
|
+
end
|
102
|
+
|
103
|
+
def client_side_validation
|
104
|
+
|
105
|
+
nil
|
106
|
+
end
|
107
|
+
|
108
|
+
def auth_settings
|
109
|
+
|
110
|
+
{}
|
111
|
+
end
|
112
|
+
|
113
|
+
def base_url(args)
|
114
|
+
|
115
|
+
@config_url
|
116
|
+
end
|
117
|
+
|
118
|
+
def describe
|
119
|
+
|
120
|
+
to_s + "\n" +
|
121
|
+
"\tmin_frequency = " + @@min_frequency.to_s + "\n" +
|
122
|
+
"\tconfig_url = " + @config_url + "\n" +
|
123
|
+
"\tevent_url = " + @event_url + "\n" +
|
124
|
+
"\tstream_enabled = " + @stream_enabled.to_s + "\n" +
|
125
|
+
"\tpoll_interval_in_seconds = " + @poll_interval_in_seconds.to_s + "\n" +
|
126
|
+
"\tanalytics_enabled = " + @analytics_enabled.to_s + "\n" +
|
127
|
+
"\tfrequency = " + @frequency.to_s + "\n" +
|
128
|
+
"\tget_frequency = " + get_frequency.to_s + "\n" +
|
129
|
+
"\tbuffer_size = " + @buffer_size.to_s + "\n" +
|
130
|
+
"\tall_attributes_private = " + @all_attributes_private.to_s + "\n" +
|
131
|
+
"\tprivate_attributes = " + @private_attributes.to_s + "\n" +
|
132
|
+
"\tconnection_timeout = " + @connection_timeout.to_s + "\n" +
|
133
|
+
"\tread_timeout = " + @read_timeout.to_s + "\n" +
|
134
|
+
"\twrite_timeout = " + @write_timeout.to_s + "\n" +
|
135
|
+
"\tdebug = " + @debugging.to_s + "\n" +
|
136
|
+
"\tmetrics_service_acceptable_duration = " + @metrics_service_acceptable_duration.to_s + "\n" +
|
137
|
+
"\tcache = " + @cache.to_s + "\n" +
|
138
|
+
"\tstore = " + @store.to_s
|
139
|
+
end
|
140
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
class ConfigBuilder
|
2
|
+
|
3
|
+
def build
|
4
|
+
|
5
|
+
@config
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
|
10
|
+
@config = Config.new
|
11
|
+
@config.cache = DefaultCache.new(@config.logger)
|
12
|
+
end
|
13
|
+
|
14
|
+
def config_url(config_url)
|
15
|
+
|
16
|
+
@config.config_url = config_url
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def event_url(event_url)
|
21
|
+
|
22
|
+
@config.event_url = event_url
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
def stream_enabled(stream_enabled)
|
27
|
+
|
28
|
+
@config.stream_enabled = stream_enabled
|
29
|
+
self
|
30
|
+
end
|
31
|
+
|
32
|
+
def poll_interval_in_seconds(poll_interval_in_seconds)
|
33
|
+
|
34
|
+
@config.poll_interval_in_seconds = poll_interval_in_seconds
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
def analytics_enabled(analytics_enabled)
|
39
|
+
|
40
|
+
@config.analytics_enabled = analytics_enabled
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
def frequency(frequency)
|
45
|
+
|
46
|
+
@config.frequency = frequency
|
47
|
+
self
|
48
|
+
end
|
49
|
+
|
50
|
+
def buffer_size(buffer_size)
|
51
|
+
|
52
|
+
@config.buffer_size = buffer_size
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
def all_attributes_private(all_attributes_private)
|
57
|
+
|
58
|
+
@config.all_attributes_private = all_attributes_private
|
59
|
+
self
|
60
|
+
end
|
61
|
+
|
62
|
+
def private_attributes(private_attributes)
|
63
|
+
|
64
|
+
@config.private_attributes = private_attributes
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
def connection_timeout(connection_timeout)
|
69
|
+
|
70
|
+
@config.connection_timeout = connection_timeout
|
71
|
+
self
|
72
|
+
end
|
73
|
+
|
74
|
+
def read_timeout(read_timeout)
|
75
|
+
|
76
|
+
@config.read_timeout = read_timeout
|
77
|
+
self
|
78
|
+
end
|
79
|
+
|
80
|
+
def write_timeout(write_timeout)
|
81
|
+
|
82
|
+
@config.write_timeout = write_timeout
|
83
|
+
self
|
84
|
+
end
|
85
|
+
|
86
|
+
def logger(logger)
|
87
|
+
|
88
|
+
@config.logger = logger
|
89
|
+
@config.cache.logger = logger
|
90
|
+
self
|
91
|
+
end
|
92
|
+
|
93
|
+
def debugging(debug)
|
94
|
+
|
95
|
+
@config.debugging = debug
|
96
|
+
self
|
97
|
+
end
|
98
|
+
|
99
|
+
def metrics_service_acceptable_duration(metrics_service_acceptable_duration)
|
100
|
+
|
101
|
+
@config.metrics_service_acceptable_duration = metrics_service_acceptable_duration
|
102
|
+
self
|
103
|
+
end
|
104
|
+
|
105
|
+
def cache(cache)
|
106
|
+
|
107
|
+
@config.cache = cache
|
108
|
+
self
|
109
|
+
end
|
110
|
+
|
111
|
+
def store(store)
|
112
|
+
|
113
|
+
@config.store = store
|
114
|
+
self
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require "set"
|
2
|
+
require "fileutils"
|
3
|
+
require "libcache"
|
4
|
+
|
5
|
+
class DefaultCache < Cache
|
6
|
+
|
7
|
+
attr_accessor :logger
|
8
|
+
|
9
|
+
def initialize(logger = nil)
|
10
|
+
|
11
|
+
if logger != nil
|
12
|
+
|
13
|
+
@logger = logger
|
14
|
+
else
|
15
|
+
|
16
|
+
@logger = Logger.new(STDOUT)
|
17
|
+
end
|
18
|
+
|
19
|
+
@keys = Set[]
|
20
|
+
@capacity = 10 * 1000
|
21
|
+
|
22
|
+
lambda = lambda { |*key| @logger.debug "Retrieved #{key}" }
|
23
|
+
|
24
|
+
cache_dir = "./cache"
|
25
|
+
unless directory_exists?(cache_dir)
|
26
|
+
|
27
|
+
FileUtils.mkdir_p cache_dir
|
28
|
+
unless directory_exists?(cache_dir)
|
29
|
+
|
30
|
+
raise "Failed to initialize filesystem cache at: " + cache_dir
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
@filesystem = CacheBuilder.with(FileCache)
|
35
|
+
.set_store(cache_dir)
|
36
|
+
.set_max(@capacity)
|
37
|
+
.set_post_get(lambda)
|
38
|
+
.build
|
39
|
+
|
40
|
+
@in_memory = CacheBuilder.with(Cache)
|
41
|
+
.set_max(@capacity)
|
42
|
+
.set_post_get(lambda)
|
43
|
+
.build
|
44
|
+
end
|
45
|
+
|
46
|
+
def verify
|
47
|
+
|
48
|
+
@in_memory != nil && @filesystem != nil && @capacity > 0
|
49
|
+
end
|
50
|
+
|
51
|
+
def set(key, value)
|
52
|
+
|
53
|
+
begin
|
54
|
+
@in_memory.put(key, value)
|
55
|
+
@filesystem.put(key, value)
|
56
|
+
keys.add(key)
|
57
|
+
|
58
|
+
rescue ArgumentError => e
|
59
|
+
|
60
|
+
@logger.error "ERROR: " + e.to_s
|
61
|
+
|
62
|
+
raise "Invalid arguments passed to the 'set' method: key='" + key.to_s + "', value='" + value.to_s + "'"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def get(key)
|
67
|
+
|
68
|
+
value = @in_memory.get(key)
|
69
|
+
|
70
|
+
if value == nil
|
71
|
+
|
72
|
+
value = @filesystem.get(key)
|
73
|
+
if value != nil
|
74
|
+
|
75
|
+
@in_memory.put(key, value)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
value
|
79
|
+
end
|
80
|
+
|
81
|
+
def delete(key)
|
82
|
+
|
83
|
+
if key == nil
|
84
|
+
|
85
|
+
raise "Key is nil"
|
86
|
+
end
|
87
|
+
|
88
|
+
if @in_memory.exists?(key)
|
89
|
+
|
90
|
+
@in_memory.invalidate(key)
|
91
|
+
end
|
92
|
+
|
93
|
+
if @filesystem.exists?(key)
|
94
|
+
|
95
|
+
@filesystem.invalidate(key)
|
96
|
+
end
|
97
|
+
|
98
|
+
@keys.delete(key)
|
99
|
+
end
|
100
|
+
|
101
|
+
def keys
|
102
|
+
|
103
|
+
@keys
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
def directory_exists?(directory)
|
109
|
+
|
110
|
+
File.directory?(directory)
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
class Evaluation
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
super
|
6
|
+
|
7
|
+
@tbi = "To be implemented"
|
8
|
+
end
|
9
|
+
|
10
|
+
def bool_variation(identifier, target, default_value, callback)
|
11
|
+
|
12
|
+
raise @tbi
|
13
|
+
end
|
14
|
+
|
15
|
+
def string_variation(identifier, target, default_value, callback)
|
16
|
+
|
17
|
+
raise @tbi
|
18
|
+
end
|
19
|
+
|
20
|
+
def number_variation(identifier, target, default_value, callback)
|
21
|
+
|
22
|
+
raise @tbi
|
23
|
+
end
|
24
|
+
|
25
|
+
def json_variation(identifier, target, default_value, callback)
|
26
|
+
|
27
|
+
raise @tbi
|
28
|
+
end
|
29
|
+
end
|