rox-rollout 4.7.2 → 5.0.3

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 (115) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +34 -13
  3. data/.editorconfig +12 -0
  4. data/.github/workflows/ruby.yml +21 -0
  5. data/.rubocop.yml +17 -0
  6. data/Gemfile +2 -2
  7. data/README.md +32 -0
  8. data/Rakefile +12 -9
  9. data/bin/console +3 -4
  10. data/e2e/container.rb +11 -14
  11. data/e2e/custom_props.rb +9 -9
  12. data/e2e/rox_e2e_test.rb +17 -19
  13. data/e2e/test_vars.rb +3 -6
  14. data/e2e-server/run_server.sh +12 -0
  15. data/e2e-server/server.rb +158 -0
  16. data/example/local.rb +40 -0
  17. data/lib/rox/core/client/buid.rb +8 -8
  18. data/lib/rox/core/client/device_properties.rb +7 -1
  19. data/lib/rox/core/client/dynamic_api.rb +53 -15
  20. data/lib/rox/core/client/internal_flags.rb +14 -2
  21. data/lib/rox/core/client/sdk_settings.rb +1 -1
  22. data/lib/rox/core/configuration/configuration.rb +1 -1
  23. data/lib/rox/core/configuration/configuration_fetched_args.rb +2 -2
  24. data/lib/rox/core/configuration/configuration_fetched_invoker.rb +17 -3
  25. data/lib/rox/core/configuration/configuration_parser.rb +38 -37
  26. data/lib/rox/core/configuration/fetcher_error.rb +1 -1
  27. data/lib/rox/core/configuration/fetcher_status.rb +1 -1
  28. data/lib/rox/core/configuration/models/experiment_model.rb +1 -1
  29. data/lib/rox/core/configuration/models/target_group_model.rb +1 -1
  30. data/lib/rox/core/consts/build.rb +2 -2
  31. data/lib/rox/core/consts/environment.rb +10 -8
  32. data/lib/rox/core/consts/property_type.rb +16 -17
  33. data/lib/rox/core/context/merged_context.rb +2 -1
  34. data/lib/rox/core/core.rb +91 -46
  35. data/lib/rox/core/entities/default_flag_values.rb +10 -0
  36. data/lib/rox/core/entities/flag.rb +22 -7
  37. data/lib/rox/core/entities/flag_setter.rb +6 -6
  38. data/lib/rox/core/entities/rox_double.rb +11 -0
  39. data/lib/rox/core/entities/rox_int.rb +11 -0
  40. data/lib/rox/core/entities/{variant.rb → rox_string.rb} +20 -13
  41. data/lib/rox/core/error_handling/exception_trigger.rb +10 -0
  42. data/lib/rox/core/error_handling/userspace_handler_exception.rb +13 -0
  43. data/lib/rox/core/error_handling/userspace_unhandled_error_invoker.rb +41 -0
  44. data/lib/rox/core/impression/impression_args.rb +2 -2
  45. data/lib/rox/core/impression/impression_invoker.rb +46 -6
  46. data/lib/rox/core/impression/models/experiment.rb +1 -1
  47. data/lib/rox/core/impression/models/reporting_value.rb +10 -2
  48. data/lib/rox/core/logging/logging.rb +3 -3
  49. data/lib/rox/core/logging/no_op_logger.rb +1 -1
  50. data/lib/rox/core/network/configuration_fetcher.rb +2 -2
  51. data/lib/rox/core/network/configuration_fetcher_roxy.rb +2 -2
  52. data/lib/rox/core/network/configuration_fetcher_self_managed.rb +30 -0
  53. data/lib/rox/core/network/configuration_source.rb +1 -1
  54. data/lib/rox/core/network/request.rb +1 -1
  55. data/lib/rox/core/network/request_configuration_builder.rb +5 -5
  56. data/lib/rox/core/network/request_data.rb +1 -1
  57. data/lib/rox/core/network/response.rb +6 -8
  58. data/lib/rox/core/network/state_sender.rb +63 -19
  59. data/lib/rox/core/notifications/notification_listener.rb +4 -4
  60. data/lib/rox/core/properties/custom_property.rb +2 -2
  61. data/lib/rox/core/properties/custom_property_type.rb +1 -1
  62. data/lib/rox/core/properties/device_property.rb +2 -2
  63. data/lib/rox/core/properties/property_factory.rb +132 -0
  64. data/lib/rox/core/register/registerer.rb +13 -12
  65. data/lib/rox/core/reporting/error_reporter.rb +14 -13
  66. data/lib/rox/core/repositories/experiment_repository.rb +2 -4
  67. data/lib/rox/core/repositories/flag_repository.rb +7 -7
  68. data/lib/rox/core/repositories/roxx/experiments_extensions.rb +8 -8
  69. data/lib/rox/core/repositories/roxx/properties_extensions.rb +32 -7
  70. data/lib/rox/core/repositories/target_group_repository.rb +2 -4
  71. data/lib/rox/core/roxx/evaluation_result.rb +2 -0
  72. data/lib/rox/core/roxx/node.rb +1 -1
  73. data/lib/rox/core/roxx/parser.rb +35 -21
  74. data/lib/rox/core/roxx/regular_expression_extensions.rb +6 -3
  75. data/lib/rox/core/roxx/string_tokenizer.rb +3 -1
  76. data/lib/rox/core/roxx/symbols.rb +1 -1
  77. data/lib/rox/core/roxx/token_type.rb +1 -1
  78. data/lib/rox/core/roxx/tokenized_expression.rb +16 -12
  79. data/lib/rox/core/roxx/value_compare_extensions.rb +49 -29
  80. data/lib/rox/core/security/signature_verifier.rb +3 -3
  81. data/lib/rox/core/security/signature_verifier_mock.rb +12 -0
  82. data/lib/rox/core/utils/type_utils.rb +1 -1
  83. data/lib/rox/server/client/server_properties.rb +1 -1
  84. data/lib/rox/server/flags/normalize_flag_type.rb +25 -0
  85. data/lib/rox/server/flags/rox_double.rb +8 -0
  86. data/lib/rox/server/flags/rox_flag.rb +1 -1
  87. data/lib/rox/server/flags/rox_int.rb +8 -0
  88. data/lib/rox/server/flags/rox_string.rb +8 -0
  89. data/lib/rox/server/flags/server_entities_provider.rb +14 -4
  90. data/lib/rox/server/logging/server_logger.rb +2 -2
  91. data/lib/rox/server/rox_options.rb +39 -8
  92. data/lib/rox/server/rox_server.rb +84 -59
  93. data/lib/rox/version.rb +1 -1
  94. data/rox.gemspec +9 -9
  95. metadata +47 -33
  96. data/CODEOWNERS +0 -1
  97. data/README_DEVELOP.md +0 -25
  98. data/_archive/.document +0 -5
  99. data/_archive/.rspec +0 -1
  100. data/_archive/Gemfile +0 -15
  101. data/_archive/Gemfile.lock +0 -87
  102. data/_archive/README.md +0 -32
  103. data/_archive/README.rdoc +0 -19
  104. data/_archive/Rakefile +0 -50
  105. data/_archive/lib/expr_function_definition.rb +0 -52
  106. data/_archive/lib/function_definition.rb +0 -48
  107. data/_archive/lib/function_token.rb +0 -12
  108. data/_archive/lib/object_extends.rb +0 -12
  109. data/_archive/lib/ruby_interpreter.rb +0 -292
  110. data/_archive/lib/stack.rb +0 -48
  111. data/_archive/lib/string_extends.rb +0 -14
  112. data/_archive/spec/ruby_interpreter_spec.rb +0 -203
  113. data/_archive/spec/spec_helper.rb +0 -30
  114. data/_archive/spec/stack_spec.rb +0 -77
  115. data/lib/rox/server/flags/rox_variant.rb +0 -8
@@ -1,5 +1,7 @@
1
1
  require 'rox/server/flags/rox_flag'
2
- require 'rox/server/flags/rox_variant'
2
+ require 'rox/server/flags/rox_string'
3
+ require 'rox/server/flags/rox_int'
4
+ require 'rox/server/flags/rox_double'
3
5
 
4
6
  module Rox
5
7
  module Server
@@ -8,9 +10,17 @@ module Rox
8
10
  Rox::Server::RoxFlag.new(default_value)
9
11
  end
10
12
 
11
- def create_variant(default_value, options)
12
- Rox::Server::RoxVariant.new(default_value, options)
13
+ def create_string(default_value, options)
14
+ Rox::Server::RoxString.new(default_value, options)
15
+ end
16
+
17
+ def create_int(default_value, options)
18
+ Rox::Server::RoxInt.new(default_value, options)
19
+ end
20
+
21
+ def create_double(default_value, options)
22
+ Rox::Server::RoxDouble.new(default_value, options)
13
23
  end
14
24
  end
15
25
  end
16
- end
26
+ end
@@ -4,7 +4,7 @@ module Rox
4
4
  module Server
5
5
  class ServerLogger
6
6
  def initialize
7
- @logger = Logger.new(STDOUT)
7
+ @logger = Logger.new($stdout)
8
8
  end
9
9
 
10
10
  def debug(message, ex = nil)
@@ -32,4 +32,4 @@ module Rox
32
32
  end
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -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,85 +4,110 @@ 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 register_with_namespace(namespace, rox_container)
49
+ @core.register_with_namespace(namespace, rox_container)
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 use_userspace_unhandled_error_handler(&handler)
53
+ @core.userspace_unhandled_error_handler = handler
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 context=(context)
57
+ @core.context = context
58
+ end
79
59
 
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
60
+ def fetch
61
+ Thread.new do
62
+ Thread.current.report_on_exception = false if Thread.current.respond_to?(:report_on_exception)
63
+ begin
64
+ @core.fetch.join
65
+ rescue StandardError => e
66
+ Rox::Core::Logging.logger.error('Failed in Rox.fetch', e)
67
+ end
68
+ end
69
+ end
70
+
71
+ def set_custom_string_property(name, value = nil, &block)
72
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::STRING, value,
73
+ &block))
74
+ end
75
+
76
+ def set_custom_boolean_property(name, value = nil, &block)
77
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::BOOL, value,
78
+ &block))
79
+ end
80
+
81
+ def set_custom_int_property(name, value = nil, &block)
82
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::INT, value,
83
+ &block))
84
+ end
85
+
86
+ def set_custom_float_property(name, value = nil, &block)
87
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::FLOAT, value,
88
+ &block))
89
+ end
83
90
 
84
- def self.dynamic_api
85
- @core.dynamic_api(Rox::Server::ServerEntitiesProvider.new)
91
+ def set_custom_semver_property(name, value = nil, &block)
92
+ @core.add_custom_property(Rox::Core::CustomProperty.new(name, Rox::Core::CustomPropertyType::SEMVER, value,
93
+ &block))
94
+ end
95
+
96
+ def dynamic_api
97
+ @core.dynamic_api(Rox::Server::ServerEntitiesProvider.new)
98
+ end
99
+
100
+ def dump_state
101
+ @core.dump_state
102
+ end
103
+
104
+ private
105
+
106
+ def validate_api_key(api_key)
107
+ raise ArgumentError, 'api_key is not valid' if (api_key =~ /^[a-f\d]{24}$/).nil?
108
+
109
+ true
110
+ end
86
111
  end
87
112
  end
88
113
  end
data/lib/rox/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rox
2
- VERSION = "4.7.2"
2
+ VERSION = '5.0.3'.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,11 +22,12 @@ 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'
27
26
 
28
- spec.add_development_dependency 'bundler', '~> 1.16'
27
+ spec.add_development_dependency 'bundler', '~> 2.3.3'
29
28
  spec.add_development_dependency 'minitest', '~> 5.11'
30
- spec.add_development_dependency 'rake', '~> 12.3'
31
29
  spec.add_development_dependency 'pry-byebug', '~> 3.7.0'
30
+ spec.add_development_dependency 'rake', '~> 12.3'
31
+ spec.add_development_dependency 'rubocop', '~> 1.10'
32
32
  spec.add_development_dependency 'webmock', '~> 3.7.5'
33
33
  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.7.2
4
+ version: 5.0.3
5
5
  platform: ruby
6
6
  authors:
7
- - Rollout.io
7
+ - CloudBees
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-26 00:00:00.000000000 Z
11
+ date: 2022-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-eventsource
@@ -16,28 +16,28 @@ 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
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: 2.3.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.16'
40
+ version: 2.3.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.11'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.7.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.7.0
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -67,19 +81,19 @@ dependencies:
67
81
  - !ruby/object:Gem::Version
68
82
  version: '12.3'
69
83
  - !ruby/object:Gem::Dependency
70
- name: pry-byebug
84
+ name: rubocop
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: 3.7.0
89
+ version: '1.10'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: 3.7.0
96
+ version: '1.10'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: webmock
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -102,35 +116,23 @@ extensions: []
102
116
  extra_rdoc_files: []
103
117
  files:
104
118
  - ".circleci/config.yml"
119
+ - ".editorconfig"
120
+ - ".github/workflows/ruby.yml"
105
121
  - ".gitignore"
106
- - CODEOWNERS
122
+ - ".rubocop.yml"
107
123
  - Gemfile
108
124
  - LICENSE
109
- - README_DEVELOP.md
125
+ - README.md
110
126
  - Rakefile
111
- - _archive/.document
112
- - _archive/.rspec
113
- - _archive/Gemfile
114
- - _archive/Gemfile.lock
115
- - _archive/README.md
116
- - _archive/README.rdoc
117
- - _archive/Rakefile
118
- - _archive/lib/expr_function_definition.rb
119
- - _archive/lib/function_definition.rb
120
- - _archive/lib/function_token.rb
121
- - _archive/lib/object_extends.rb
122
- - _archive/lib/ruby_interpreter.rb
123
- - _archive/lib/stack.rb
124
- - _archive/lib/string_extends.rb
125
- - _archive/spec/ruby_interpreter_spec.rb
126
- - _archive/spec/spec_helper.rb
127
- - _archive/spec/stack_spec.rb
128
127
  - bin/console
129
128
  - bin/setup
129
+ - e2e-server/run_server.sh
130
+ - e2e-server/server.rb
130
131
  - e2e/container.rb
131
132
  - e2e/custom_props.rb
132
133
  - e2e/rox_e2e_test.rb
133
134
  - e2e/test_vars.rb
135
+ - example/local.rb
134
136
  - lib/rox.rb
135
137
  - lib/rox/core/client/buid.rb
136
138
  - lib/rox/core/client/device_properties.rb
@@ -150,9 +152,15 @@ files:
150
152
  - lib/rox/core/consts/property_type.rb
151
153
  - lib/rox/core/context/merged_context.rb
152
154
  - lib/rox/core/core.rb
155
+ - lib/rox/core/entities/default_flag_values.rb
153
156
  - lib/rox/core/entities/flag.rb
154
157
  - lib/rox/core/entities/flag_setter.rb
155
- - lib/rox/core/entities/variant.rb
158
+ - lib/rox/core/entities/rox_double.rb
159
+ - lib/rox/core/entities/rox_int.rb
160
+ - lib/rox/core/entities/rox_string.rb
161
+ - lib/rox/core/error_handling/exception_trigger.rb
162
+ - lib/rox/core/error_handling/userspace_handler_exception.rb
163
+ - lib/rox/core/error_handling/userspace_unhandled_error_invoker.rb
156
164
  - lib/rox/core/impression/impression_args.rb
157
165
  - lib/rox/core/impression/impression_invoker.rb
158
166
  - lib/rox/core/impression/models/experiment.rb
@@ -163,6 +171,7 @@ files:
163
171
  - lib/rox/core/network/configuration_fetcher.rb
164
172
  - lib/rox/core/network/configuration_fetcher_base.rb
165
173
  - lib/rox/core/network/configuration_fetcher_roxy.rb
174
+ - lib/rox/core/network/configuration_fetcher_self_managed.rb
166
175
  - lib/rox/core/network/configuration_source.rb
167
176
  - lib/rox/core/network/request.rb
168
177
  - lib/rox/core/network/request_configuration_builder.rb
@@ -173,6 +182,7 @@ files:
173
182
  - lib/rox/core/properties/custom_property.rb
174
183
  - lib/rox/core/properties/custom_property_type.rb
175
184
  - lib/rox/core/properties/device_property.rb
185
+ - lib/rox/core/properties/property_factory.rb
176
186
  - lib/rox/core/register/registerer.rb
177
187
  - lib/rox/core/reporting/error_reporter.rb
178
188
  - lib/rox/core/repositories/custom_property_repository.rb
@@ -192,13 +202,17 @@ files:
192
202
  - lib/rox/core/roxx/tokenized_expression.rb
193
203
  - lib/rox/core/roxx/value_compare_extensions.rb
194
204
  - lib/rox/core/security/signature_verifier.rb
205
+ - lib/rox/core/security/signature_verifier_mock.rb
195
206
  - lib/rox/core/utils/debouncer.rb
196
207
  - lib/rox/core/utils/periodic_task.rb
197
208
  - lib/rox/core/utils/type_utils.rb
198
209
  - lib/rox/server/client/sdk_settings.rb
199
210
  - lib/rox/server/client/server_properties.rb
211
+ - lib/rox/server/flags/normalize_flag_type.rb
212
+ - lib/rox/server/flags/rox_double.rb
200
213
  - lib/rox/server/flags/rox_flag.rb
201
- - lib/rox/server/flags/rox_variant.rb
214
+ - lib/rox/server/flags/rox_int.rb
215
+ - lib/rox/server/flags/rox_string.rb
202
216
  - lib/rox/server/flags/server_entities_provider.rb
203
217
  - lib/rox/server/logging/server_logger.rb
204
218
  - lib/rox/server/rox_options.rb
@@ -224,8 +238,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
238
  - !ruby/object:Gem::Version
225
239
  version: '0'
226
240
  requirements: []
227
- rubygems_version: 3.0.3
241
+ rubygems_version: 3.0.8
228
242
  signing_key:
229
243
  specification_version: 4
230
- summary: Rollout.io ROX Ruby SDK
244
+ summary: Feature Management ROX Ruby SDK
231
245
  test_files: []
data/CODEOWNERS DELETED
@@ -1 +0,0 @@
1
- * @joshpuetz
data/README_DEVELOP.md DELETED
@@ -1,25 +0,0 @@
1
- # Developer Guide
2
-
3
- Ruby versions supported: 2.3.x, 2.4.x, 2.5.x, 2.6.x
4
-
5
- ## Run tests on current Ruby version
6
-
7
- ```
8
- // Run unit tests (folder 'tests')
9
- rake test
10
-
11
- // Run E2E tests (folder 'e2e')
12
- rake e2e
13
- ```
14
-
15
- ## Publish new version
16
-
17
- ### Steps
18
-
19
- 1. Increment version in ```lib/rox/version.rb```, open a PR and wait for CI to clear
20
- 2. Merge to master, wait for CI to clear
21
- 2. Generate the gem package: ```gem build rox.gemspec```
22
- 3. Install gem locally, and test with a sample project
23
- 4. Upload to RubyGems: ```gem push rox-rollout-VERSION.gem```
24
- 5. Update documentation at https://support.rollout.io/docs/ruby-changelog
25
- 6. Celebrate! 🎉
data/_archive/.document DELETED
@@ -1,5 +0,0 @@
1
- lib/**/*.rb
2
- bin/*
3
- -
4
- features/**/*.feature
5
- LICENSE.txt
data/_archive/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
data/_archive/Gemfile DELETED
@@ -1,15 +0,0 @@
1
- source "https://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
-
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
- group :development do
9
- gem 'pry'
10
- gem "rspec", "~> 3.5.0"
11
- gem "rdoc", "~> 3.12"
12
- gem "bundler", "~> 1.0"
13
- gem "jeweler", "~> 2.0.1"
14
- gem "simplecov", ">= 0"
15
- end
@@ -1,87 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- addressable (2.5.2)
5
- public_suffix (>= 2.0.2, < 4.0)
6
- builder (3.2.3)
7
- coderay (1.1.2)
8
- descendants_tracker (0.0.4)
9
- thread_safe (~> 0.3, >= 0.3.1)
10
- diff-lcs (1.3)
11
- docile (1.3.1)
12
- faraday (0.12.2)
13
- multipart-post (>= 1.2, < 3)
14
- git (1.5.0)
15
- github_api (0.18.2)
16
- addressable (~> 2.4)
17
- descendants_tracker (~> 0.0.4)
18
- faraday (~> 0.8)
19
- hashie (~> 3.5, >= 3.5.2)
20
- oauth2 (~> 1.0)
21
- hashie (3.6.0)
22
- highline (2.0.0)
23
- jeweler (2.0.1)
24
- builder
25
- bundler (>= 1.0)
26
- git (>= 1.2.5)
27
- github_api
28
- highline (>= 1.6.15)
29
- nokogiri (>= 1.5.10)
30
- rake
31
- rdoc
32
- json (1.8.6)
33
- jwt (1.5.6)
34
- method_source (0.9.0)
35
- mini_portile2 (2.3.0)
36
- multi_json (1.13.1)
37
- multi_xml (0.6.0)
38
- multipart-post (2.0.0)
39
- nokogiri (1.8.4)
40
- mini_portile2 (~> 2.3.0)
41
- oauth2 (1.4.0)
42
- faraday (>= 0.8, < 0.13)
43
- jwt (~> 1.0)
44
- multi_json (~> 1.3)
45
- multi_xml (~> 0.5)
46
- rack (>= 1.2, < 3)
47
- pry (0.11.3)
48
- coderay (~> 1.1.0)
49
- method_source (~> 0.9.0)
50
- public_suffix (3.0.3)
51
- rack (2.0.5)
52
- rake (12.3.1)
53
- rdoc (3.12.2)
54
- json (~> 1.4)
55
- rspec (3.5.0)
56
- rspec-core (~> 3.5.0)
57
- rspec-expectations (~> 3.5.0)
58
- rspec-mocks (~> 3.5.0)
59
- rspec-core (3.5.4)
60
- rspec-support (~> 3.5.0)
61
- rspec-expectations (3.5.0)
62
- diff-lcs (>= 1.2.0, < 2.0)
63
- rspec-support (~> 3.5.0)
64
- rspec-mocks (3.5.0)
65
- diff-lcs (>= 1.2.0, < 2.0)
66
- rspec-support (~> 3.5.0)
67
- rspec-support (3.5.0)
68
- simplecov (0.16.1)
69
- docile (~> 1.1)
70
- json (>= 1.8, < 3)
71
- simplecov-html (~> 0.10.0)
72
- simplecov-html (0.10.2)
73
- thread_safe (0.3.6)
74
-
75
- PLATFORMS
76
- ruby
77
-
78
- DEPENDENCIES
79
- bundler (~> 1.0)
80
- jeweler (~> 2.0.1)
81
- pry
82
- rdoc (~> 3.12)
83
- rspec (~> 3.5.0)
84
- simplecov
85
-
86
- BUNDLED WITH
87
- 1.16.1