rox-rollout 4.7.1 → 5.0.2

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 (116) 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 +20 -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/analytics.rb +18 -0
  18. data/lib/rox/core/client/buid.rb +8 -8
  19. data/lib/rox/core/client/device_properties.rb +7 -1
  20. data/lib/rox/core/client/dynamic_api.rb +53 -15
  21. data/lib/rox/core/client/internal_flags.rb +14 -2
  22. data/lib/rox/core/client/sdk_settings.rb +1 -1
  23. data/lib/rox/core/configuration/configuration.rb +1 -1
  24. data/lib/rox/core/configuration/configuration_fetched_args.rb +2 -2
  25. data/lib/rox/core/configuration/configuration_fetched_invoker.rb +8 -3
  26. data/lib/rox/core/configuration/configuration_parser.rb +38 -37
  27. data/lib/rox/core/configuration/fetcher_error.rb +1 -1
  28. data/lib/rox/core/configuration/fetcher_status.rb +1 -1
  29. data/lib/rox/core/configuration/models/experiment_model.rb +1 -1
  30. data/lib/rox/core/configuration/models/target_group_model.rb +1 -1
  31. data/lib/rox/core/consts/build.rb +2 -2
  32. data/lib/rox/core/consts/environment.rb +10 -8
  33. data/lib/rox/core/consts/property_type.rb +16 -17
  34. data/lib/rox/core/context/merged_context.rb +2 -1
  35. data/lib/rox/core/core.rb +89 -38
  36. data/lib/rox/core/entities/default_flag_values.rb +10 -0
  37. data/lib/rox/core/entities/flag.rb +22 -7
  38. data/lib/rox/core/entities/flag_setter.rb +6 -6
  39. data/lib/rox/core/entities/rox_double.rb +11 -0
  40. data/lib/rox/core/entities/rox_int.rb +11 -0
  41. data/lib/rox/core/entities/{variant.rb → rox_string.rb} +20 -13
  42. data/lib/rox/core/error_handling/exception_trigger.rb +10 -0
  43. data/lib/rox/core/error_handling/userspace_handler_exception.rb +12 -0
  44. data/lib/rox/core/error_handling/userspace_unhandled_error_invoker.rb +41 -0
  45. data/lib/rox/core/impression/impression_args.rb +2 -2
  46. data/lib/rox/core/impression/impression_invoker.rb +41 -7
  47. data/lib/rox/core/impression/models/experiment.rb +1 -1
  48. data/lib/rox/core/impression/models/reporting_value.rb +10 -2
  49. data/lib/rox/core/logging/logging.rb +3 -3
  50. data/lib/rox/core/logging/no_op_logger.rb +1 -1
  51. data/lib/rox/core/network/configuration_fetcher.rb +2 -2
  52. data/lib/rox/core/network/configuration_fetcher_roxy.rb +2 -2
  53. data/lib/rox/core/network/configuration_fetcher_self_managed.rb +30 -0
  54. data/lib/rox/core/network/configuration_source.rb +1 -1
  55. data/lib/rox/core/network/request.rb +1 -1
  56. data/lib/rox/core/network/request_configuration_builder.rb +5 -5
  57. data/lib/rox/core/network/request_data.rb +1 -1
  58. data/lib/rox/core/network/response.rb +6 -8
  59. data/lib/rox/core/network/state_sender.rb +63 -19
  60. data/lib/rox/core/notifications/notification_listener.rb +4 -4
  61. data/lib/rox/core/properties/custom_property.rb +1 -1
  62. data/lib/rox/core/properties/custom_property_type.rb +1 -1
  63. data/lib/rox/core/properties/device_property.rb +2 -2
  64. data/lib/rox/core/properties/property_factory.rb +132 -0
  65. data/lib/rox/core/register/registerer.rb +13 -12
  66. data/lib/rox/core/reporting/error_reporter.rb +14 -13
  67. data/lib/rox/core/repositories/experiment_repository.rb +2 -4
  68. data/lib/rox/core/repositories/flag_repository.rb +7 -7
  69. data/lib/rox/core/repositories/roxx/experiments_extensions.rb +8 -8
  70. data/lib/rox/core/repositories/roxx/properties_extensions.rb +32 -7
  71. data/lib/rox/core/repositories/target_group_repository.rb +2 -4
  72. data/lib/rox/core/roxx/evaluation_result.rb +2 -0
  73. data/lib/rox/core/roxx/node.rb +1 -1
  74. data/lib/rox/core/roxx/parser.rb +35 -21
  75. data/lib/rox/core/roxx/regular_expression_extensions.rb +6 -3
  76. data/lib/rox/core/roxx/string_tokenizer.rb +3 -1
  77. data/lib/rox/core/roxx/symbols.rb +1 -1
  78. data/lib/rox/core/roxx/token_type.rb +1 -1
  79. data/lib/rox/core/roxx/tokenized_expression.rb +16 -12
  80. data/lib/rox/core/roxx/value_compare_extensions.rb +49 -29
  81. data/lib/rox/core/security/signature_verifier.rb +3 -3
  82. data/lib/rox/core/security/signature_verifier_mock.rb +12 -0
  83. data/lib/rox/core/utils/type_utils.rb +1 -1
  84. data/lib/rox/server/client/server_properties.rb +1 -1
  85. data/lib/rox/server/flags/normalize_flag_type.rb +25 -0
  86. data/lib/rox/server/flags/rox_double.rb +8 -0
  87. data/lib/rox/server/flags/rox_flag.rb +1 -1
  88. data/lib/rox/server/flags/rox_int.rb +8 -0
  89. data/lib/rox/server/flags/rox_string.rb +8 -0
  90. data/lib/rox/server/flags/server_entities_provider.rb +14 -4
  91. data/lib/rox/server/logging/server_logger.rb +2 -2
  92. data/lib/rox/server/rox_options.rb +39 -8
  93. data/lib/rox/server/rox_server.rb +84 -59
  94. data/lib/rox/version.rb +1 -1
  95. data/rox.gemspec +11 -9
  96. metadata +62 -33
  97. data/CODEOWNERS +0 -1
  98. data/README_DEVELOP.md +0 -25
  99. data/_archive/.document +0 -5
  100. data/_archive/.rspec +0 -1
  101. data/_archive/Gemfile +0 -15
  102. data/_archive/Gemfile.lock +0 -87
  103. data/_archive/README.md +0 -32
  104. data/_archive/README.rdoc +0 -19
  105. data/_archive/Rakefile +0 -50
  106. data/_archive/lib/expr_function_definition.rb +0 -52
  107. data/_archive/lib/function_definition.rb +0 -48
  108. data/_archive/lib/function_token.rb +0 -12
  109. data/_archive/lib/object_extends.rb +0 -12
  110. data/_archive/lib/ruby_interpreter.rb +0 -292
  111. data/_archive/lib/stack.rb +0 -48
  112. data/_archive/lib/string_extends.rb +0 -14
  113. data/_archive/spec/ruby_interpreter_spec.rb +0 -203
  114. data/_archive/spec/spec_helper.rb +0 -30
  115. data/_archive/spec/stack_spec.rb +0 -77
  116. 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.1"
2
+ VERSION = '5.0.2'.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,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 'bundler', '~> 2.2.3'
29
30
  spec.add_development_dependency 'minitest', '~> 5.11'
30
- spec.add_development_dependency 'rake', '~> 12.3'
31
31
  spec.add_development_dependency 'pry-byebug', '~> 3.7.0'
32
+ spec.add_development_dependency 'rake', '~> 12.3'
33
+ spec.add_development_dependency 'rubocop', '~> 1.10'
32
34
  spec.add_development_dependency 'webmock', '~> 3.7.5'
33
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.7.1
4
+ version: 5.0.2
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-19 00:00:00.000000000 Z
11
+ date: 2021-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-eventsource
@@ -16,28 +16,42 @@ 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
@@ -52,6 +66,20 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
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
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.7.0
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rake
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -67,19 +95,19 @@ dependencies:
67
95
  - !ruby/object:Gem::Version
68
96
  version: '12.3'
69
97
  - !ruby/object:Gem::Dependency
70
- name: pry-byebug
98
+ name: rubocop
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: 3.7.0
103
+ version: '1.10'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: 3.7.0
110
+ version: '1.10'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: webmock
85
113
  requirement: !ruby/object:Gem::Requirement
@@ -102,36 +130,25 @@ extensions: []
102
130
  extra_rdoc_files: []
103
131
  files:
104
132
  - ".circleci/config.yml"
133
+ - ".editorconfig"
134
+ - ".github/workflows/ruby.yml"
105
135
  - ".gitignore"
106
- - CODEOWNERS
136
+ - ".rubocop.yml"
107
137
  - Gemfile
108
138
  - LICENSE
109
- - README_DEVELOP.md
139
+ - README.md
110
140
  - 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
141
  - bin/console
129
142
  - bin/setup
143
+ - e2e-server/run_server.sh
144
+ - e2e-server/server.rb
130
145
  - e2e/container.rb
131
146
  - e2e/custom_props.rb
132
147
  - e2e/rox_e2e_test.rb
133
148
  - e2e/test_vars.rb
149
+ - example/local.rb
134
150
  - lib/rox.rb
151
+ - lib/rox/core/analytics.rb
135
152
  - lib/rox/core/client/buid.rb
136
153
  - lib/rox/core/client/device_properties.rb
137
154
  - lib/rox/core/client/dynamic_api.rb
@@ -150,9 +167,15 @@ files:
150
167
  - lib/rox/core/consts/property_type.rb
151
168
  - lib/rox/core/context/merged_context.rb
152
169
  - lib/rox/core/core.rb
170
+ - lib/rox/core/entities/default_flag_values.rb
153
171
  - lib/rox/core/entities/flag.rb
154
172
  - lib/rox/core/entities/flag_setter.rb
155
- - 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
156
179
  - lib/rox/core/impression/impression_args.rb
157
180
  - lib/rox/core/impression/impression_invoker.rb
158
181
  - lib/rox/core/impression/models/experiment.rb
@@ -163,6 +186,7 @@ files:
163
186
  - lib/rox/core/network/configuration_fetcher.rb
164
187
  - lib/rox/core/network/configuration_fetcher_base.rb
165
188
  - lib/rox/core/network/configuration_fetcher_roxy.rb
189
+ - lib/rox/core/network/configuration_fetcher_self_managed.rb
166
190
  - lib/rox/core/network/configuration_source.rb
167
191
  - lib/rox/core/network/request.rb
168
192
  - lib/rox/core/network/request_configuration_builder.rb
@@ -173,6 +197,7 @@ files:
173
197
  - lib/rox/core/properties/custom_property.rb
174
198
  - lib/rox/core/properties/custom_property_type.rb
175
199
  - lib/rox/core/properties/device_property.rb
200
+ - lib/rox/core/properties/property_factory.rb
176
201
  - lib/rox/core/register/registerer.rb
177
202
  - lib/rox/core/reporting/error_reporter.rb
178
203
  - lib/rox/core/repositories/custom_property_repository.rb
@@ -192,13 +217,17 @@ files:
192
217
  - lib/rox/core/roxx/tokenized_expression.rb
193
218
  - lib/rox/core/roxx/value_compare_extensions.rb
194
219
  - lib/rox/core/security/signature_verifier.rb
220
+ - lib/rox/core/security/signature_verifier_mock.rb
195
221
  - lib/rox/core/utils/debouncer.rb
196
222
  - lib/rox/core/utils/periodic_task.rb
197
223
  - lib/rox/core/utils/type_utils.rb
198
224
  - lib/rox/server/client/sdk_settings.rb
199
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
200
228
  - lib/rox/server/flags/rox_flag.rb
201
- - lib/rox/server/flags/rox_variant.rb
229
+ - lib/rox/server/flags/rox_int.rb
230
+ - lib/rox/server/flags/rox_string.rb
202
231
  - lib/rox/server/flags/server_entities_provider.rb
203
232
  - lib/rox/server/logging/server_logger.rb
204
233
  - lib/rox/server/rox_options.rb
@@ -224,8 +253,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
224
253
  - !ruby/object:Gem::Version
225
254
  version: '0'
226
255
  requirements: []
227
- rubygems_version: 3.0.3
256
+ rubygems_version: 3.0.8
228
257
  signing_key:
229
258
  specification_version: 4
230
- summary: Rollout.io ROX Ruby SDK
259
+ summary: Feature Management ROX Ruby SDK
231
260
  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