rox-rollout 4.1.0 → 5.0.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.
Files changed (121) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +51 -23
  3. data/.editorconfig +12 -0
  4. data/.github/workflows/ruby.yml +20 -0
  5. data/.gitignore +2 -0
  6. data/.rubocop.yml +17 -0
  7. data/Gemfile +2 -2
  8. data/README.md +32 -0
  9. data/Rakefile +12 -9
  10. data/bin/console +3 -4
  11. data/e2e-server/run_server.sh +12 -0
  12. data/e2e-server/server.rb +158 -0
  13. data/e2e/container.rb +11 -14
  14. data/e2e/custom_props.rb +9 -9
  15. data/e2e/rox_e2e_test.rb +18 -20
  16. data/e2e/test_vars.rb +3 -6
  17. data/example/local.rb +40 -0
  18. data/lib/rox/core/analytics.rb +18 -0
  19. data/lib/rox/core/client/buid.rb +9 -44
  20. data/lib/rox/core/client/device_properties.rb +8 -2
  21. data/lib/rox/core/client/dynamic_api.rb +53 -15
  22. data/lib/rox/core/client/internal_flags.rb +14 -2
  23. data/lib/rox/core/client/sdk_settings.rb +1 -1
  24. data/lib/rox/core/configuration/configuration.rb +1 -1
  25. data/lib/rox/core/configuration/configuration_fetched_args.rb +2 -2
  26. data/lib/rox/core/configuration/configuration_fetched_invoker.rb +8 -3
  27. data/lib/rox/core/configuration/configuration_parser.rb +39 -38
  28. data/lib/rox/core/configuration/fetcher_error.rb +1 -1
  29. data/lib/rox/core/configuration/fetcher_status.rb +1 -1
  30. data/lib/rox/core/configuration/models/experiment_model.rb +1 -1
  31. data/lib/rox/core/configuration/models/target_group_model.rb +1 -1
  32. data/lib/rox/core/consts/build.rb +3 -3
  33. data/lib/rox/core/consts/environment.rb +34 -10
  34. data/lib/rox/core/consts/property_type.rb +18 -17
  35. data/lib/rox/core/context/merged_context.rb +2 -1
  36. data/lib/rox/core/core.rb +101 -33
  37. data/lib/rox/core/entities/default_flag_values.rb +10 -0
  38. data/lib/rox/core/entities/flag.rb +22 -7
  39. data/lib/rox/core/entities/flag_setter.rb +6 -6
  40. data/lib/rox/core/entities/rox_double.rb +11 -0
  41. data/lib/rox/core/entities/rox_int.rb +11 -0
  42. data/lib/rox/core/entities/{variant.rb → rox_string.rb} +20 -13
  43. data/lib/rox/core/error_handling/exception_trigger.rb +10 -0
  44. data/lib/rox/core/error_handling/userspace_handler_exception.rb +12 -0
  45. data/lib/rox/core/error_handling/userspace_unhandled_error_invoker.rb +41 -0
  46. data/lib/rox/core/impression/impression_args.rb +2 -2
  47. data/lib/rox/core/impression/impression_invoker.rb +41 -7
  48. data/lib/rox/core/impression/models/experiment.rb +1 -1
  49. data/lib/rox/core/impression/models/reporting_value.rb +10 -2
  50. data/lib/rox/core/logging/logging.rb +3 -3
  51. data/lib/rox/core/logging/no_op_logger.rb +1 -1
  52. data/lib/rox/core/network/configuration_fetch_result.rb +1 -1
  53. data/lib/rox/core/network/configuration_fetcher.rb +9 -8
  54. data/lib/rox/core/network/configuration_fetcher_base.rb +1 -1
  55. data/lib/rox/core/network/configuration_fetcher_roxy.rb +4 -4
  56. data/lib/rox/core/network/configuration_fetcher_self_managed.rb +30 -0
  57. data/lib/rox/core/network/configuration_source.rb +1 -1
  58. data/lib/rox/core/network/request.rb +3 -3
  59. data/lib/rox/core/network/request_configuration_builder.rb +12 -9
  60. data/lib/rox/core/network/request_data.rb +1 -1
  61. data/lib/rox/core/network/response.rb +20 -4
  62. data/lib/rox/core/network/state_sender.rb +146 -0
  63. data/lib/rox/core/notifications/notification_listener.rb +4 -4
  64. data/lib/rox/core/properties/custom_property.rb +1 -1
  65. data/lib/rox/core/properties/custom_property_type.rb +1 -1
  66. data/lib/rox/core/properties/device_property.rb +2 -2
  67. data/lib/rox/core/properties/property_factory.rb +132 -0
  68. data/lib/rox/core/register/registerer.rb +13 -12
  69. data/lib/rox/core/reporting/error_reporter.rb +14 -13
  70. data/lib/rox/core/repositories/custom_property_repository.rb +1 -1
  71. data/lib/rox/core/repositories/experiment_repository.rb +2 -4
  72. data/lib/rox/core/repositories/flag_repository.rb +8 -8
  73. data/lib/rox/core/repositories/roxx/experiments_extensions.rb +8 -8
  74. data/lib/rox/core/repositories/roxx/properties_extensions.rb +32 -7
  75. data/lib/rox/core/repositories/target_group_repository.rb +2 -4
  76. data/lib/rox/core/roxx/evaluation_result.rb +2 -0
  77. data/lib/rox/core/roxx/node.rb +1 -1
  78. data/lib/rox/core/roxx/parser.rb +46 -20
  79. data/lib/rox/core/roxx/regular_expression_extensions.rb +6 -3
  80. data/lib/rox/core/roxx/string_tokenizer.rb +3 -1
  81. data/lib/rox/core/roxx/symbols.rb +1 -1
  82. data/lib/rox/core/roxx/token_type.rb +1 -1
  83. data/lib/rox/core/roxx/tokenized_expression.rb +16 -12
  84. data/lib/rox/core/roxx/value_compare_extensions.rb +49 -29
  85. data/lib/rox/core/security/signature_verifier.rb +3 -3
  86. data/lib/rox/core/security/signature_verifier_mock.rb +12 -0
  87. data/lib/rox/core/utils/debouncer.rb +18 -0
  88. data/lib/rox/core/utils/type_utils.rb +1 -1
  89. data/lib/rox/server/client/sdk_settings.rb +1 -1
  90. data/lib/rox/server/client/server_properties.rb +1 -1
  91. data/lib/rox/server/flags/normalize_flag_type.rb +25 -0
  92. data/lib/rox/server/flags/rox_double.rb +8 -0
  93. data/lib/rox/server/flags/rox_flag.rb +1 -1
  94. data/lib/rox/server/flags/rox_int.rb +8 -0
  95. data/lib/rox/server/flags/rox_string.rb +8 -0
  96. data/lib/rox/server/flags/server_entities_provider.rb +14 -4
  97. data/lib/rox/server/logging/server_logger.rb +2 -2
  98. data/lib/rox/server/rox_options.rb +39 -8
  99. data/lib/rox/server/rox_server.rb +81 -60
  100. data/lib/rox/version.rb +1 -1
  101. data/rox.gemspec +13 -9
  102. metadata +95 -36
  103. data/README_DEVELOP.md +0 -19
  104. data/_archive/.document +0 -5
  105. data/_archive/.rspec +0 -1
  106. data/_archive/Gemfile +0 -15
  107. data/_archive/Gemfile.lock +0 -87
  108. data/_archive/README.md +0 -32
  109. data/_archive/README.rdoc +0 -19
  110. data/_archive/Rakefile +0 -50
  111. data/_archive/lib/expr_function_definition.rb +0 -52
  112. data/_archive/lib/function_definition.rb +0 -48
  113. data/_archive/lib/function_token.rb +0 -12
  114. data/_archive/lib/object_extends.rb +0 -12
  115. data/_archive/lib/ruby_interpreter.rb +0 -292
  116. data/_archive/lib/stack.rb +0 -48
  117. data/_archive/lib/string_extends.rb +0 -14
  118. data/_archive/spec/ruby_interpreter_spec.rb +0 -203
  119. data/_archive/spec/spec_helper.rb +0 -30
  120. data/_archive/spec/stack_spec.rb +0 -77
  121. data/lib/rox/server/flags/rox_variant.rb +0 -8
@@ -3,25 +3,56 @@ require 'rox/server/logging/server_logger'
3
3
 
4
4
  module Rox
5
5
  module Server
6
+ class SelfManagedOptions
7
+ attr_reader :server_url, :analytics_url
8
+
9
+ def initialize(server_url:, analytics_url:)
10
+ @server_url = server_url
11
+ @analytics_url = analytics_url
12
+ end
13
+ end
14
+
6
15
  class RoxOptions
7
- attr_accessor :dev_mode_key, :version, :fetch_interval, :logger, :impression_handler, :configuration_fetched_handler, :roxy_url
16
+ attr_reader :dev_mode_key, :version, :fetch_interval,
17
+ :logger, :impression_handler,
18
+ :configuration_fetched_handler,
19
+ :roxy_url, :self_managed_options,
20
+ :dynamic_property_rule_handler
8
21
 
9
- def initialize(dev_mode_key: nil, version: nil, fetch_interval: nil, logger: nil, impression_handler: nil, configuration_fetched_handler: nil, roxy_url: nil)
22
+ def initialize(
23
+ dev_mode_key: nil,
24
+ version: nil,
25
+ fetch_interval: nil,
26
+ logger: nil,
27
+ impression_handler: nil,
28
+ configuration_fetched_handler: nil,
29
+ roxy_url: nil,
30
+ self_managed_options: nil,
31
+ dynamic_property_rule_handler: nil
32
+ )
10
33
  @dev_mode_key = dev_mode_key || 'stam'
11
34
  @version = version || '0.0'
12
35
 
13
- if fetch_interval.nil?
14
- @fetch_interval = 60
15
- else
16
- @fetch_interval = fetch_interval < 30 ? 30 : fetch_interval
17
- end
36
+ @fetch_interval = if fetch_interval.nil?
37
+ 60
38
+ else
39
+ [fetch_interval, 30].max
40
+ end
18
41
 
19
42
  Rox::Core::Logging.logger = logger || ServerLogger.new
20
43
 
21
44
  @impression_handler = impression_handler
22
45
  @configuration_fetched_handler = configuration_fetched_handler
23
46
  @roxy_url = roxy_url
47
+ @self_managed_options = self_managed_options
48
+ @dynamic_property_rule_handler = dynamic_property_rule_handler || proc do |prop_name, context|
49
+ context ? context[prop_name] : nil
50
+ end
51
+ end
52
+
53
+ def self_managed?
54
+ !@self_managed_options.nil?
24
55
  end
25
56
  end
26
57
  end
27
- end
58
+ end
@@ -4,86 +4,107 @@ require 'rox/core/logging/logging'
4
4
  require 'rox/server/rox_options'
5
5
  require 'rox/server/client/sdk_settings'
6
6
  require 'rox/server/client/server_properties'
7
- require 'rox/core/properties/device_property'
8
- require 'rox/core/properties/custom_property'
9
- require 'rox/core/properties/custom_property_type'
10
- require 'rox/core/consts/property_type'
11
7
  require 'rox/server/flags/server_entities_provider'
12
-
8
+ require 'rox/core/properties/property_factory'
13
9
 
14
10
  module Rox
15
11
  module Server
16
12
  class RoxServer
17
13
  @core = Rox::Core::Core.new
18
14
 
19
- def self.setup(api_key, rox_options = nil)
20
- rox_options = RoxOptions.new if rox_options.nil?
21
-
22
- sdk_settings = SdkSettings.new(api_key, rox_options.dev_mode_key)
23
- server_properties = ServerProperties.new(sdk_settings, rox_options)
24
-
25
- @core.add_custom_property_if_not_exists(Rox::Core::DeviceProperty.new(Rox::Core::PropertyType::PLATFORM.name, Rox::Core::CustomPropertyType::STRING, server_properties.all_properties[Rox::Core::PropertyType::PLATFORM.name]))
26
- @core.add_custom_property_if_not_exists(Rox::Core::DeviceProperty.new(Rox::Core::PropertyType::APP_RELEASE.name, Rox::Core::CustomPropertyType::SEMVER, server_properties.all_properties[Rox::Core::PropertyType::APP_RELEASE.name]))
27
- @core.add_custom_property_if_not_exists(Rox::Core::DeviceProperty.new(Rox::Core::PropertyType::DISTINCT_ID.name, Rox::Core::CustomPropertyType::STRING) {|_| SecureRandom.uuid})
28
- @core.add_custom_property_if_not_exists(Rox::Core::DeviceProperty.new('internal.realPlatform', Rox::Core::CustomPropertyType::STRING, server_properties.all_properties[Rox::Core::PropertyType::PLATFORM.name]))
29
- @core.add_custom_property_if_not_exists(Rox::Core::DeviceProperty.new('internal.customPlatform', Rox::Core::CustomPropertyType::STRING, server_properties.all_properties[Rox::Core::PropertyType::PLATFORM.name]))
30
- @core.add_custom_property_if_not_exists(Rox::Core::DeviceProperty.new('internal.appKey', Rox::Core::CustomPropertyType::STRING, server_properties.rollout_key))
31
- @core.add_custom_property_if_not_exists(Rox::Core::DeviceProperty.new("internal.#{Rox::Core::PropertyType::DISTINCT_ID.name}", Rox::Core::CustomPropertyType::STRING) {|_| SecureRandom.uuid})
32
-
33
- Thread.new do
34
- Thread.current.report_on_exception = false if Thread.current.respond_to?(:report_on_exception)
35
- begin
36
- @core.setup(sdk_settings, server_properties, rox_options).join
37
- rescue StandardError => ex
38
- Rox::Core::Logging.logger.error('Failed in Rox.setup', ex)
15
+ class << self
16
+ def setup(api_key, rox_options = nil)
17
+ validate_api_key(api_key)
18
+
19
+ rox_options = Rox::Server::RoxOptions.new if rox_options.nil?
20
+ sdk_settings = Rox::Server::SdkSettings.new(api_key, rox_options.dev_mode_key)
21
+ server_properties = Rox::Server::ServerProperties.new(sdk_settings, rox_options)
22
+
23
+ RoxServer.add_custom_properties(Rox::Core::PropertyFactory.new(server_properties))
24
+
25
+ @@thread = Thread.new do
26
+ Thread.current.report_on_exception = false if Thread.current.respond_to?(:report_on_exception)
27
+ @core.setup(sdk_settings, server_properties).join
39
28
  end
40
29
  end
41
- rescue StandardError => ex
42
- Rox::Core::Logging.logger.error('Failed in Rox.setup', ex)
43
- end
44
30
 
45
- def self.register(namespace, rox_container)
46
- @core.register(namespace, rox_container)
47
- end
31
+ def shutdown
32
+ return if !defined?(@@thread) || @@thread.nil?
48
33
 
49
- def self.context=(context)
50
- @core.context = context
51
- end
34
+ Thread.kill(@@thread)
35
+ @core.shutdown
36
+ end
52
37
 
53
- def self.fetch
54
- Thread.new do
55
- Thread.current.report_on_exception = false if Thread.current.respond_to?(:report_on_exception)
56
- begin
57
- @core.fetch.join
58
- rescue StandardError => ex
59
- Rox::Core::Logging.logger.error('Failed in Rox.fetch', ex)
38
+ def add_custom_properties(property_factory)
39
+ property_factory.all_properties.each do |property|
40
+ @core.add_custom_property_if_not_exists(property)
60
41
  end
61
42
  end
62
- end
63
43
 
64
- def self.set_custom_string_property(name, value = nil, &block)
65
- @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::STRING, value, &block))
66
- end
44
+ def register(rox_container)
45
+ @core.register(rox_container)
46
+ end
67
47
 
68
- def self.set_custom_boolean_property(name, value = nil, &block)
69
- @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::BOOL, value, &block))
70
- end
48
+ def use_userspace_unhandled_error_handler(&handler)
49
+ @core.userspace_unhandled_error_handler = handler
50
+ end
71
51
 
72
- def self.set_custom_int_property(name, value = nil, &block)
73
- @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::INT, value, &block))
74
- end
52
+ def context=(context)
53
+ @core.context = context
54
+ end
75
55
 
76
- def self.set_custom_float_property(name, value = nil, &block)
77
- @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::FLOAT, value, &block))
78
- end
56
+ def fetch
57
+ Thread.new do
58
+ Thread.current.report_on_exception = false if Thread.current.respond_to?(:report_on_exception)
59
+ begin
60
+ @core.fetch.join
61
+ rescue StandardError => e
62
+ Rox::Core::Logging.logger.error('Failed in Rox.fetch', e)
63
+ end
64
+ end
65
+ end
79
66
 
80
- def self.set_custom_semver_property(name, value = nil, &block)
81
- @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::SEMVER, value, &block))
82
- end
67
+ def set_custom_string_property(name, value = nil, &block)
68
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::STRING, value,
69
+ &block))
70
+ end
83
71
 
84
- def self.dynamic_api
85
- @core.dynamic_api(Rox::Server::ServerEntitiesProvider.new)
72
+ def set_custom_boolean_property(name, value = nil, &block)
73
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::BOOL, value,
74
+ &block))
75
+ end
76
+
77
+ def set_custom_int_property(name, value = nil, &block)
78
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::INT, value,
79
+ &block))
80
+ end
81
+
82
+ def set_custom_float_property(name, value = nil, &block)
83
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::FLOAT, value,
84
+ &block))
85
+ end
86
+
87
+ def set_custom_semver_property(name, value = nil, &block)
88
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::SEMVER, value,
89
+ &block))
90
+ end
91
+
92
+ def dynamic_api
93
+ @core.dynamic_api(Rox::Server::ServerEntitiesProvider.new)
94
+ end
95
+
96
+ def dump_state
97
+ @core.dump_state
98
+ end
99
+
100
+ private
101
+
102
+ def validate_api_key(api_key)
103
+ raise ArgumentError, 'api_key is not valid' if (api_key =~ /^[a-f\d]{24}$/).nil?
104
+
105
+ true
106
+ end
86
107
  end
87
108
  end
88
109
  end
89
- end
110
+ end
data/lib/rox/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rox
2
- VERSION = "4.1.0"
2
+ VERSION = '5.0.0'.freeze
3
3
  end
data/rox.gemspec CHANGED
@@ -1,20 +1,19 @@
1
-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'rox/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
6
  spec.name = 'rox-rollout'
8
7
  spec.version = Rox::VERSION
9
- spec.authors = ['Rollout.io']
8
+ spec.authors = ['CloudBees']
10
9
  spec.email = ['support@rollout.io']
11
- spec.summary = 'Rollout.io ROX Ruby SDK'
12
- spec.homepage = "https://github.com/rollout/rox-ruby"
10
+ spec.summary = 'Feature Management ROX Ruby SDK'
11
+ spec.homepage = 'https://github.com/rollout/rox-ruby'
13
12
  spec.license = 'Nonstandard'
14
13
 
15
14
  # Specify which files should be added to the gem when it is released.
16
15
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
17
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
16
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
17
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
18
  end
20
19
  spec.bindir = 'exe'
@@ -23,9 +22,14 @@ Gem::Specification.new do |spec|
23
22
 
24
23
  spec.required_ruby_version = '>= 2.3'
25
24
 
26
- spec.add_runtime_dependency 'em-eventsource', '~> 0.3.0'
25
+ spec.add_runtime_dependency 'em-eventsource', '~> 0.3.2'
26
+ spec.add_runtime_dependency 'analytics-ruby', '~> 2.0.0'
27
+
27
28
 
28
- spec.add_development_dependency 'bundler', '~> 1.16'
29
- spec.add_development_dependency 'minitest', '~> 5.0'
29
+ spec.add_development_dependency 'bundler', '~> 2.2.3'
30
+ spec.add_development_dependency 'minitest', '~> 5.11'
31
+ spec.add_development_dependency 'pry-byebug', '~> 3.7.0'
30
32
  spec.add_development_dependency 'rake', '~> 12.3'
33
+ spec.add_development_dependency 'rubocop', '~> 1.10'
34
+ spec.add_development_dependency 'webmock', '~> 3.7.5'
31
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rox-rollout
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Rollout.io
8
- autorequire:
7
+ - CloudBees
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-14 00:00:00.000000000 Z
11
+ date: 2021-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-eventsource
@@ -16,42 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.0
19
+ version: 0.3.2
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: 0.3.0
26
+ version: 0.3.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: analytics-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.0.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: '1.16'
47
+ version: 2.2.3
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: '1.16'
54
+ version: 2.2.3
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: minitest
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '5.0'
61
+ version: '5.11'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.11'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.7.0
48
76
  type: :development
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
80
  - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: '5.0'
82
+ version: 3.7.0
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rake
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +94,35 @@ dependencies:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
96
  version: '12.3'
69
- description:
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.10'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.10'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 3.7.5
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 3.7.5
125
+ description:
70
126
  email:
71
127
  - support@rollout.io
72
128
  executables: []
@@ -74,35 +130,25 @@ extensions: []
74
130
  extra_rdoc_files: []
75
131
  files:
76
132
  - ".circleci/config.yml"
133
+ - ".editorconfig"
134
+ - ".github/workflows/ruby.yml"
77
135
  - ".gitignore"
136
+ - ".rubocop.yml"
78
137
  - Gemfile
79
138
  - LICENSE
80
- - README_DEVELOP.md
139
+ - README.md
81
140
  - Rakefile
82
- - _archive/.document
83
- - _archive/.rspec
84
- - _archive/Gemfile
85
- - _archive/Gemfile.lock
86
- - _archive/README.md
87
- - _archive/README.rdoc
88
- - _archive/Rakefile
89
- - _archive/lib/expr_function_definition.rb
90
- - _archive/lib/function_definition.rb
91
- - _archive/lib/function_token.rb
92
- - _archive/lib/object_extends.rb
93
- - _archive/lib/ruby_interpreter.rb
94
- - _archive/lib/stack.rb
95
- - _archive/lib/string_extends.rb
96
- - _archive/spec/ruby_interpreter_spec.rb
97
- - _archive/spec/spec_helper.rb
98
- - _archive/spec/stack_spec.rb
99
141
  - bin/console
100
142
  - bin/setup
143
+ - e2e-server/run_server.sh
144
+ - e2e-server/server.rb
101
145
  - e2e/container.rb
102
146
  - e2e/custom_props.rb
103
147
  - e2e/rox_e2e_test.rb
104
148
  - e2e/test_vars.rb
149
+ - example/local.rb
105
150
  - lib/rox.rb
151
+ - lib/rox/core/analytics.rb
106
152
  - lib/rox/core/client/buid.rb
107
153
  - lib/rox/core/client/device_properties.rb
108
154
  - lib/rox/core/client/dynamic_api.rb
@@ -121,9 +167,15 @@ files:
121
167
  - lib/rox/core/consts/property_type.rb
122
168
  - lib/rox/core/context/merged_context.rb
123
169
  - lib/rox/core/core.rb
170
+ - lib/rox/core/entities/default_flag_values.rb
124
171
  - lib/rox/core/entities/flag.rb
125
172
  - lib/rox/core/entities/flag_setter.rb
126
- - lib/rox/core/entities/variant.rb
173
+ - lib/rox/core/entities/rox_double.rb
174
+ - lib/rox/core/entities/rox_int.rb
175
+ - lib/rox/core/entities/rox_string.rb
176
+ - lib/rox/core/error_handling/exception_trigger.rb
177
+ - lib/rox/core/error_handling/userspace_handler_exception.rb
178
+ - lib/rox/core/error_handling/userspace_unhandled_error_invoker.rb
127
179
  - lib/rox/core/impression/impression_args.rb
128
180
  - lib/rox/core/impression/impression_invoker.rb
129
181
  - lib/rox/core/impression/models/experiment.rb
@@ -134,15 +186,18 @@ files:
134
186
  - lib/rox/core/network/configuration_fetcher.rb
135
187
  - lib/rox/core/network/configuration_fetcher_base.rb
136
188
  - lib/rox/core/network/configuration_fetcher_roxy.rb
189
+ - lib/rox/core/network/configuration_fetcher_self_managed.rb
137
190
  - lib/rox/core/network/configuration_source.rb
138
191
  - lib/rox/core/network/request.rb
139
192
  - lib/rox/core/network/request_configuration_builder.rb
140
193
  - lib/rox/core/network/request_data.rb
141
194
  - lib/rox/core/network/response.rb
195
+ - lib/rox/core/network/state_sender.rb
142
196
  - lib/rox/core/notifications/notification_listener.rb
143
197
  - lib/rox/core/properties/custom_property.rb
144
198
  - lib/rox/core/properties/custom_property_type.rb
145
199
  - lib/rox/core/properties/device_property.rb
200
+ - lib/rox/core/properties/property_factory.rb
146
201
  - lib/rox/core/register/registerer.rb
147
202
  - lib/rox/core/reporting/error_reporter.rb
148
203
  - lib/rox/core/repositories/custom_property_repository.rb
@@ -162,12 +217,17 @@ files:
162
217
  - lib/rox/core/roxx/tokenized_expression.rb
163
218
  - lib/rox/core/roxx/value_compare_extensions.rb
164
219
  - lib/rox/core/security/signature_verifier.rb
220
+ - lib/rox/core/security/signature_verifier_mock.rb
221
+ - lib/rox/core/utils/debouncer.rb
165
222
  - lib/rox/core/utils/periodic_task.rb
166
223
  - lib/rox/core/utils/type_utils.rb
167
224
  - lib/rox/server/client/sdk_settings.rb
168
225
  - lib/rox/server/client/server_properties.rb
226
+ - lib/rox/server/flags/normalize_flag_type.rb
227
+ - lib/rox/server/flags/rox_double.rb
169
228
  - lib/rox/server/flags/rox_flag.rb
170
- - lib/rox/server/flags/rox_variant.rb
229
+ - lib/rox/server/flags/rox_int.rb
230
+ - lib/rox/server/flags/rox_string.rb
171
231
  - lib/rox/server/flags/server_entities_provider.rb
172
232
  - lib/rox/server/logging/server_logger.rb
173
233
  - lib/rox/server/rox_options.rb
@@ -178,7 +238,7 @@ homepage: https://github.com/rollout/rox-ruby
178
238
  licenses:
179
239
  - Nonstandard
180
240
  metadata: {}
181
- post_install_message:
241
+ post_install_message:
182
242
  rdoc_options: []
183
243
  require_paths:
184
244
  - lib
@@ -193,9 +253,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
253
  - !ruby/object:Gem::Version
194
254
  version: '0'
195
255
  requirements: []
196
- rubyforge_project:
197
- rubygems_version: 2.6.14
198
- signing_key:
256
+ rubygems_version: 3.2.3
257
+ signing_key:
199
258
  specification_version: 4
200
- summary: Rollout.io ROX Ruby SDK
259
+ summary: Feature Management ROX Ruby SDK
201
260
  test_files: []