launchdarkly-server-sdk 5.8.1 → 6.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +28 -122
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  4. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  5. data/.gitignore +2 -1
  6. data/.ldrelease/build-docs.sh +18 -0
  7. data/.ldrelease/circleci/linux/execute.sh +18 -0
  8. data/.ldrelease/circleci/mac/execute.sh +18 -0
  9. data/.ldrelease/circleci/template/build.sh +29 -0
  10. data/.ldrelease/circleci/template/publish.sh +23 -0
  11. data/.ldrelease/circleci/template/set-gem-home.sh +7 -0
  12. data/.ldrelease/circleci/template/test.sh +10 -0
  13. data/.ldrelease/circleci/template/update-version.sh +8 -0
  14. data/.ldrelease/circleci/windows/execute.ps1 +19 -0
  15. data/.ldrelease/config.yml +14 -2
  16. data/CHANGELOG.md +29 -0
  17. data/CONTRIBUTING.md +1 -1
  18. data/README.md +4 -3
  19. data/azure-pipelines.yml +1 -1
  20. data/docs/Makefile +26 -0
  21. data/docs/index.md +9 -0
  22. data/launchdarkly-server-sdk.gemspec +16 -16
  23. data/lib/ldclient-rb.rb +0 -1
  24. data/lib/ldclient-rb/config.rb +15 -3
  25. data/lib/ldclient-rb/evaluation_detail.rb +324 -0
  26. data/lib/ldclient-rb/events.rb +6 -7
  27. data/lib/ldclient-rb/file_data_source.rb +1 -1
  28. data/lib/ldclient-rb/impl/evaluator.rb +231 -0
  29. data/lib/ldclient-rb/impl/evaluator_bucketing.rb +87 -0
  30. data/lib/ldclient-rb/impl/evaluator_operators.rb +160 -0
  31. data/lib/ldclient-rb/impl/event_factory.rb +28 -0
  32. data/lib/ldclient-rb/impl/event_sender.rb +56 -40
  33. data/lib/ldclient-rb/impl/integrations/consul_impl.rb +5 -5
  34. data/lib/ldclient-rb/impl/integrations/dynamodb_impl.rb +5 -5
  35. data/lib/ldclient-rb/impl/integrations/redis_impl.rb +5 -7
  36. data/lib/ldclient-rb/impl/model/serialization.rb +62 -0
  37. data/lib/ldclient-rb/impl/unbounded_pool.rb +34 -0
  38. data/lib/ldclient-rb/ldclient.rb +36 -15
  39. data/lib/ldclient-rb/polling.rb +1 -4
  40. data/lib/ldclient-rb/requestor.rb +25 -15
  41. data/lib/ldclient-rb/stream.rb +9 -6
  42. data/lib/ldclient-rb/util.rb +12 -8
  43. data/lib/ldclient-rb/version.rb +1 -1
  44. data/spec/evaluation_detail_spec.rb +135 -0
  45. data/spec/event_sender_spec.rb +20 -2
  46. data/spec/events_spec.rb +10 -0
  47. data/spec/http_util.rb +11 -1
  48. data/spec/impl/evaluator_bucketing_spec.rb +216 -0
  49. data/spec/impl/evaluator_clause_spec.rb +55 -0
  50. data/spec/impl/evaluator_operators_spec.rb +141 -0
  51. data/spec/impl/evaluator_rule_spec.rb +128 -0
  52. data/spec/impl/evaluator_segment_spec.rb +125 -0
  53. data/spec/impl/evaluator_spec.rb +349 -0
  54. data/spec/impl/evaluator_spec_base.rb +75 -0
  55. data/spec/impl/event_factory_spec.rb +108 -0
  56. data/spec/impl/model/serialization_spec.rb +41 -0
  57. data/spec/launchdarkly-server-sdk_spec.rb +1 -1
  58. data/spec/ldclient_end_to_end_spec.rb +34 -0
  59. data/spec/ldclient_spec.rb +64 -12
  60. data/spec/polling_spec.rb +2 -2
  61. data/spec/redis_feature_store_spec.rb +2 -2
  62. data/spec/requestor_spec.rb +11 -11
  63. metadata +92 -48
  64. data/.yardopts +0 -9
  65. data/Gemfile.lock +0 -89
  66. data/lib/ldclient-rb/evaluation.rb +0 -462
  67. data/scripts/gendocs.sh +0 -11
  68. data/scripts/release.sh +0 -27
  69. data/spec/evaluation_spec.rb +0 -789
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: dcb72b5ad43bf4a2f4250cbe1b12fb3eaf803e66
4
- data.tar.gz: bd7ceebb0ff2a746d8b773fbeb7b3e287dcbcb01
2
+ SHA256:
3
+ metadata.gz: 1ee671939e04661c649d31502496cc33cd8844002c9af06864db9f322a81ec56
4
+ data.tar.gz: f5f77f10a6c487e1846f8d86201e9456b04bfb03950c751a328a7d3b9c3b8597
5
5
  SHA512:
6
- metadata.gz: 4f3d71bf78a2cc31574470fd57af2eee84b5222dfaddfe90160ecd2bda746e5137df3fed136d12578b01ae84364f2fd04477046964bc8f73e5bced212988c59a
7
- data.tar.gz: 165bb1c1b646ca0f759bb081020a16fd78b5df014be47cb9c5386f7e99b2287dfb640b7e865230e7604886dd3ad933ebae3d82b113bce21f549e03e2875c7d03
6
+ metadata.gz: 6dc025a98ed3ab25bfe14baa878ff36beb34875caafee9c1979c724d58af9d08ca2596615cb31819dbb150fdeffd17b597f76e19cf2f09962dc1095ffe686ea7
7
+ data.tar.gz: 5d22b72feb1b46e7537f00b3959c72368d94c6606db640df1a7a9b17e1b01b952f1d34ea260e8d20b661fdee558975a9e034087e0d785aacd297d20ab15e9944
data/.circleci/config.yml CHANGED
@@ -1,134 +1,40 @@
1
- version: 2
2
-
1
+ # This CircleCI configuration was generated by Releaser for a specific release. It is not to be used
2
+ # for regular CI builds. Be aware that rerunning this build may cause it to repeat release actions
3
+ # such as publishing to a package manager. However, it will not perform any Git actions other than
4
+ # reading the repository.
5
+ version: 2.1
3
6
  workflows:
4
- version: 2
5
7
  test:
6
8
  jobs:
7
- - test-misc-rubies
8
- - test-2.2
9
- - test-2.3
10
- - test-2.4
11
- - test-2.5
12
- - test-2.6
13
- - test-jruby-9.2
14
-
15
- ruby-docker-template: &ruby-docker-template
16
- steps:
17
- - checkout
18
- - run: |
19
- if [[ $CIRCLE_JOB == test-jruby* ]]; then
20
- gem install jruby-openssl; # required by bundler, no effect on Ruby MRI
21
- fi
22
- - run: ruby -v
23
- - run: gem install bundler -v 1.17.3
24
- - run: bundle install
25
- - run: mkdir ./rspec
26
- - run: bundle exec rspec --format progress --format RspecJunitFormatter -o ./rspec/rspec.xml spec
27
- - store_test_results:
28
- path: ./rspec
29
- - store_artifacts:
30
- path: ./rspec
31
-
9
+ - release_linux:
10
+ context: org-global
32
11
  jobs:
33
- test-2.2:
34
- <<: *ruby-docker-template
12
+ release_linux:
35
13
  docker:
36
- - image: circleci/ruby:2.2.10-jessie
37
- - image: consul
38
- - image: redis
39
- - image: amazon/dynamodb-local
40
- test-2.3:
41
- <<: *ruby-docker-template
42
- docker:
43
- - image: circleci/ruby:2.3.7-jessie
44
- - image: consul
45
- - image: redis
46
- - image: amazon/dynamodb-local
47
- test-2.4:
48
- <<: *ruby-docker-template
49
- docker:
50
- - image: circleci/ruby:2.4.5-stretch
51
- - image: consul
52
- - image: redis
53
- - image: amazon/dynamodb-local
54
- test-2.5:
55
- <<: *ruby-docker-template
56
- docker:
57
- - image: circleci/ruby:2.5.3-stretch
58
- - image: consul
59
- - image: redis
60
- - image: amazon/dynamodb-local
61
- test-2.6:
62
- <<: *ruby-docker-template
63
- docker:
64
- - image: circleci/ruby:2.6.2-stretch
65
- - image: consul
66
- - image: redis
67
- - image: amazon/dynamodb-local
68
- test-jruby-9.2:
69
- <<: *ruby-docker-template
70
- docker:
71
- - image: circleci/jruby:9-jdk
72
- - image: consul
73
- - image: redis
74
- - image: amazon/dynamodb-local
75
-
76
- # The following very slow job uses an Ubuntu container to run the Ruby versions that
77
- # CircleCI doesn't provide Docker images for.
78
- test-misc-rubies:
79
- machine:
80
- image: circleci/classic:latest
14
+ - image: circleci/ruby:2.6.6-buster
81
15
  environment:
82
- - RUBIES: "jruby-9.1.17.0"
16
+ LD_RELEASE_CIRCLECI_TYPE: linux
17
+ LD_RELEASE_BRANCH: "master"
18
+ LD_RELEASE_CIRCLECI_BRANCH: ""
19
+ LD_RELEASE_DOCS_GITHUB_PAGES: "1"
20
+ LD_RELEASE_DOCS_TITLE: ""
21
+ LD_RELEASE_PROJECT: "ruby-server-sdk"
22
+ LD_RELEASE_PROJECT_TEMPLATE: "ruby"
23
+ LD_RELEASE_VERSION: "6.2.0"
24
+ LD_SKIP_DATABASE_TESTS: "1"
83
25
  steps:
84
- - run: sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
85
- - run: sudo apt-get -q update
86
- - run: sudo apt-get -qy install redis-server
87
- - run: sudo apt-cache policy docker-ce
88
- - run: sudo apt-get -qy install docker-ce
89
26
  - checkout
90
27
  - run:
91
- name: install all Ruby versions
92
- command: "parallel rvm install ::: $RUBIES"
93
- - run:
94
- name: bundle install for all versions
95
- shell: /bin/bash -leo pipefail # need -l in order for "rvm use" to work
96
- command: |
97
- set -e;
98
- for i in $RUBIES;
99
- do
100
- rvm use $i;
101
- if [[ $i == jruby* ]]; then
102
- gem install jruby-openssl; # required by bundler, no effect on Ruby MRI
103
- fi
104
- # bundler 2.0 may be preinstalled, we need to remove it if so
105
- yes | gem uninstall bundler --version '>=2.0' || true;
106
- gem install bundler -v 1.17.3;
107
- bundle install;
108
- mv Gemfile.lock "Gemfile.lock.$i"
109
- done
110
- - run:
111
- name: start DynamoDB
112
- command: docker run -p 8000:8000 amazon/dynamodb-local
113
- background: true
114
- - run:
115
- name: download Consul
116
- command: wget https://releases.hashicorp.com/consul/0.8.0/consul_0.8.0_linux_amd64.zip
28
+ name: "Releaser: build"
29
+ command: .ldrelease/circleci/mac/execute.sh build .ldrelease/circleci/template/build.sh
117
30
  - run:
118
- name: extract Consul
119
- command: unzip consul_0.8.0_linux_amd64.zip
31
+ name: "Releaser: test"
32
+ command: .ldrelease/circleci/mac/execute.sh test .ldrelease/circleci/template/test.sh
120
33
  - run:
121
- name: start Consul
122
- command: ./consul agent -dev
123
- background: true
34
+ name: "Releaser: build-docs"
35
+ command: .ldrelease/circleci/mac/execute.sh build-docs .ldrelease/build-docs.sh
124
36
  - run:
125
- name: run tests for all versions
126
- shell: /bin/bash -leo pipefail
127
- command: |
128
- set -e;
129
- for i in $RUBIES;
130
- do
131
- rvm use $i;
132
- cp "Gemfile.lock.$i" Gemfile.lock;
133
- bundle exec rspec spec;
134
- done
37
+ name: "Releaser: publish"
38
+ command: .ldrelease/circleci/mac/execute.sh publish .ldrelease/circleci/template/publish.sh
39
+ - store_artifacts:
40
+ path: artifacts
@@ -8,7 +8,7 @@ assignees: ''
8
8
  ---
9
9
 
10
10
  **Is this a support request?**
11
- This issue tracker is maintained by LaunchDarkly SDK developers and is intended for feedback on the SDK code. If you're not sure whether the problem you are having is specifically related to the SDK, or to the LaunchDarkly service overall, it may be more appropriate to contact the LaunchDarkly support team; they can help to investigate the problem and will consult the SDK team if necessary. You can submit a support request by going [here](https://support.launchdarkly.com/) and clicking "submit a request", or by emailing support@launchdarkly.com.
11
+ This issue tracker is maintained by LaunchDarkly SDK developers and is intended for feedback on the SDK code. If you're not sure whether the problem you are having is specifically related to the SDK, or to the LaunchDarkly service overall, it may be more appropriate to contact the LaunchDarkly support team; they can help to investigate the problem and will consult the SDK team if necessary. You can submit a support request by going [here](https://support.launchdarkly.com/hc/en-us/requests/new) or by emailing support@launchdarkly.com.
12
12
 
13
13
  Note that issues filed on this issue tracker are publicly accessible. Do not provide any private account information on your issues. If your problem is specific to your account, you should submit a support request as described above.
14
14
 
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Support request
4
+ url: https://support.launchdarkly.com/hc/en-us/requests/new
5
+ about: File your support requests with LaunchDarkly's support team
data/.gitignore CHANGED
@@ -2,7 +2,7 @@
2
2
  /.yardoc
3
3
  /_yardoc/
4
4
  /coverage/
5
- /doc/
5
+ /docs/build
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
@@ -13,3 +13,4 @@
13
13
  mkmf.log
14
14
  *.gem
15
15
  .DS_Store
16
+ Gemfile.lock
@@ -0,0 +1,18 @@
1
+ #!/bin/bash
2
+
3
+ # doc generation is not part of Releaser's standard Ruby project template
4
+
5
+ mkdir -p ./artifacts/
6
+
7
+ cd ./docs
8
+ make
9
+ cd ..
10
+
11
+ # Releaser will pick up docs generated in CI if we put an archive of them in the
12
+ # artifacts directory and name it docs.tar.gz or docs.zip. They will be uploaded
13
+ # to GitHub Pages and also attached as release artifacts. There's no separate
14
+ # "publish-docs" step because the external service that also hosts them doesn't
15
+ # require an upload, it just picks up gems automatically.
16
+
17
+ cd ./docs/build/html
18
+ tar cfz ../../../artifacts/docs.tar.gz *
@@ -0,0 +1,18 @@
1
+ #!/bin/bash
2
+
3
+ set -ue
4
+
5
+ # Performs a delegated release step in a CircleCI Linux container. This mechanism is described
6
+ # in scripts/circleci/README.md. All of the necessary environment variables should already be
7
+ # in the generated CircleCI configuration.
8
+
9
+ mkdir -p artifacts
10
+
11
+ export LD_RELEASE_TEMP_DIR=/tmp/project-releaser-temp
12
+ mkdir -p ${LD_RELEASE_TEMP_DIR}
13
+
14
+ STEP="$1"
15
+ SCRIPT="$2"
16
+ echo
17
+ echo "[${STEP}] executing ${SCRIPT}"
18
+ "./${SCRIPT}"
@@ -0,0 +1,18 @@
1
+ #!/bin/bash
2
+
3
+ set -ue
4
+
5
+ # Performs a delegated release step in a CircleCI Mac container. This mechanism is described
6
+ # in scripts/circleci/README.md. All of the necessary environment variables should already be
7
+ # in the generated CircleCI configuration.
8
+
9
+ mkdir -p artifacts
10
+
11
+ export LD_RELEASE_TEMP_DIR=/tmp/project-releaser-temp
12
+ mkdir -p ${LD_RELEASE_TEMP_DIR}
13
+
14
+ STEP="$1"
15
+ SCRIPT="$2"
16
+ echo
17
+ echo "[${STEP}] executing ${SCRIPT}"
18
+ "./${SCRIPT}"
@@ -0,0 +1,29 @@
1
+ #!/bin/bash
2
+
3
+ set -ue
4
+
5
+ # Standard build.sh for Ruby-based projects that publish a gem
6
+
7
+ echo "Using gem $(gem --version)"
8
+
9
+ #shellcheck source=/dev/null
10
+ source "$(dirname "$0")/set-gem-home.sh"
11
+
12
+ # If the gemspec specifies a certain version of bundler, we need to make sure we install that version.
13
+ echo "Installing bundler"
14
+ GEMSPEC_BUNDLER_VERSION=$(sed -n -e "s/.*['\"]bundler['\"], *['\"]\([^'\"]*\)['\"]/\1/p" ./*.gemspec | tr -d ' ')
15
+ if [ -n "${GEMSPEC_BUNDLER_VERSION}" ]; then
16
+ GEMSPEC_OPTIONS="-v ${GEMSPEC_BUNDLER_VERSION}"
17
+ else
18
+ GEMSPEC_OPTIONS=""
19
+ fi
20
+ gem install bundler ${GEMSPEC_OPTIONS} || { echo "installing bundler failed" >&2; exit 1; }
21
+
22
+ echo; echo "Installing dependencies"
23
+ bundle install
24
+
25
+ # Build Ruby Gem - this assumes there is a single .gemspec file in the main project directory
26
+ # Note that the gemspec must be able to get the project version either from $LD_RELEASE_VERSION,
27
+ # or from somewhere in the source code that the project-specific update-version.sh has updated.
28
+ echo "Running gem build"
29
+ gem build ./*.gemspec || { echo "gem build failed" >&2; exit 1; }
@@ -0,0 +1,23 @@
1
+ #!/bin/bash
2
+
3
+ set -ue
4
+
5
+ # Standard publish.sh for Ruby-based projects - we can assume build.sh has already been run
6
+
7
+ export GEM_HOME="${LD_RELEASE_TEMP_DIR}/gems"
8
+
9
+ # If we're running in CircleCI, the RubyGems credentials will be in an environment
10
+ # variable and need to be copied to a file
11
+ if [ -n "${LD_RELEASE_RUBYGEMS_API_KEY}" ]; then
12
+ mkdir -p ~/.gem
13
+ cat >~/.gem/credentials <<EOF
14
+ ---
15
+ :rubygems_api_key: $LD_RELEASE_RUBYGEMS_API_KEY
16
+ EOF
17
+ chmod 0600 ~/.gem/credentials
18
+ fi
19
+
20
+ # Since all Releaser builds are clean builds, we can assume that the only .gem file here
21
+ # is the one we just built
22
+ echo "Running gem push"
23
+ gem push ./*.gem || { echo "gem push failed" >&2; exit 1; }
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+
3
+ # helper script to set GEM_HOME and PATH for Ruby - must be sourced, not executed
4
+
5
+ mkdir -p "${LD_RELEASE_TEMP_DIR}/gems"
6
+ export GEM_HOME="${LD_RELEASE_TEMP_DIR}/gems"
7
+ export PATH="${GEM_HOME}/bin:${PATH}"
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+
3
+ set -ue
4
+
5
+ # Standard test.sh for Ruby-based projects
6
+
7
+ #shellcheck source=/dev/null
8
+ source "$(dirname "$0")/set-gem-home.sh"
9
+
10
+ bundle exec rspec spec
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+
3
+ set -ue
4
+
5
+ # Standard update-version.sh for Ruby-based projects - this will work only if the version string
6
+ # is in a source file under lib/ that has a line like his: VERSION = "2.0.0"
7
+
8
+ "$(dirname "$0")/../update-version-constant.sh" lib '*.rb'
@@ -0,0 +1,19 @@
1
+ param(
2
+ [string]$step,
3
+ [string]$script
4
+ )
5
+
6
+ # Performs a delegated release step in a CircleCI Windows container using PowerShell. This
7
+ # mechanism is described in scripts/circleci/README.md. All of the necessary environment
8
+ # variables should already be in the generated CircleCI configuration.
9
+
10
+ $ErrorActionPreference = "Stop"
11
+
12
+ New-Item -Path "./artifacts" -ItemType "directory" -Force | Out-Null
13
+
14
+ $env:LD_RELEASE_TEMP_DIR = "$env:TEMP\project-releaser-temp"
15
+ New-Item -Path $env:LD_RELEASE_TEMP_DIR -ItemType "directory" -Force | Out-Null
16
+
17
+ Write-Host
18
+ Write-Host "[$step] executing $script"
19
+ & "./$script"
@@ -2,6 +2,10 @@ repo:
2
2
  public: ruby-server-sdk
3
3
  private: ruby-server-sdk-private
4
4
 
5
+ releasableBranches:
6
+ - name: master
7
+ - name: 5.x
8
+
5
9
  publications:
6
10
  - url: https://rubygems.org/gems/launchdarkly-server-sdk
7
11
  description: RubyGems
@@ -10,8 +14,16 @@ publications:
10
14
 
11
15
  template:
12
16
  name: ruby
13
- env:
14
- LD_SKIP_DATABASE_TESTS: 1 # Don't run Redis/Consul/DynamoDB tests in release; they are run in CI
17
+
18
+ circleci:
19
+ linux:
20
+ image: circleci/ruby:2.6.6-buster
21
+ context: org-global
22
+ env:
23
+ LD_SKIP_DATABASE_TESTS: "1" # Don't run Redis/Consul/DynamoDB tests in release; they are run in CI
24
+
25
+ documentation:
26
+ githubPages: true
15
27
 
16
28
  sdk:
17
29
  displayName: "Ruby"
data/CHANGELOG.md CHANGED
@@ -2,6 +2,35 @@
2
2
 
3
3
  All notable changes to the LaunchDarkly Ruby SDK will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org).
4
4
 
5
+ ## [6.1.1] - 2021-05-27
6
+ ### Fixed:
7
+ - Calling `variation` with a nil user parameter is invalid, causing the SDK to log an error and return a fallback value, but the SDK was still sending an analytics event for this. An event without a user is meaningless and can&#39;t be processed by LaunchDarkly. This is now fixed so the SDK will not send one.
8
+
9
+ ## [6.1.0] - 2021-02-04
10
+ ### Added:
11
+ - Added the `alias` method. This can be used to associate two user objects for analytics purposes by generating an alias event.
12
+
13
+
14
+ ## [6.0.0] - 2021-01-26
15
+ ### Added:
16
+ - Added a `socket_factory` configuration option which can be used for socket creation by the HTTP client if provided. The value of `socket_factory` must be an object providing an `open(uri, timeout)` method and returning a connected socket.
17
+
18
+ ### Changed:
19
+ - Switched to the `http` gem instead of `socketry` (with a custom http client) for streaming, and instead of `Net::HTTP` for polling / events.
20
+ - Dropped support for Ruby &lt; version 2.5
21
+ - Dropped support for JRuby &lt; version 9.2
22
+ - Switched the default polling domain from `app.launchdarkly.com` to `sdk.launchdarkly.com`.
23
+
24
+ ## [5.8.2] - 2021-01-19
25
+ ### Fixed:
26
+ - Fixed a warning within the Redis integration when run with version 4.3 or later of the `redis` gem. (Thanks, [emancu](https://github.com/launchdarkly/ruby-server-sdk/pull/167)!)
27
+
28
+
29
+ ## [5.8.1] - 2020-11-09
30
+ ### Fixed:
31
+ - Updated `json` gem to patch [CVE-2020-10663](https://nvd.nist.gov/vuln/detail/CVE-2020-10663).
32
+
33
+
5
34
  ## [5.8.0] - 2020-05-27
6
35
  ### Added:
7
36
  - In `LaunchDarkly::Integrations::Redis::new_feature_store`, if you pass in an externally created `pool`, you can now set the new option `pool_shutdown_on_close` to `false` to indicate that the SDK should _not_ shut down this pool if the SDK is shut down. The default behavior, as before, is that it will be shut down. (Thanks, [jacobthemyth](https://github.com/launchdarkly/ruby-server-sdk/pull/158)!)
data/CONTRIBUTING.md CHANGED
@@ -18,7 +18,7 @@ Build instructions
18
18
 
19
19
  ### Prerequisites
20
20
 
21
- This SDK is built with [Bundler](https://bundler.io/). To install Bundler, run `gem install bundler -v 1.17.3`. You might need `sudo` to execute the command successfully. As of this writing, the SDK does not support being built with Bundler 2.0.
21
+ This SDK is built with [Bundler](https://bundler.io/). To install Bundler, run `gem install bundler`. You might need `sudo` to execute the command successfully.
22
22
 
23
23
  To install the runtime dependencies:
24
24