prefab-cloud-ruby 1.6.0.pre2 → 1.6.1
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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +4 -2
- data/CHANGELOG.md +10 -1
- data/Gemfile +1 -2
- data/Gemfile.lock +69 -82
- data/README.md +36 -6
- data/Rakefile +35 -32
- data/VERSION +1 -1
- data/dev/allocation_stats +60 -0
- data/dev/benchmark +40 -0
- data/lib/prefab/client.rb +5 -8
- data/lib/prefab/config_client.rb +2 -2
- data/lib/prefab/config_resolver.rb +5 -6
- data/lib/prefab/context.rb +90 -37
- data/lib/prefab/evaluation.rb +2 -1
- data/lib/prefab/options.rb +5 -3
- data/lib/prefab-cloud-ruby.rb +0 -1
- data/prefab-cloud-ruby.gemspec +7 -8
- data/test/support/common_helpers.rb +17 -10
- data/test/test_config_resolver.rb +41 -0
- data/test/test_context.rb +40 -44
- data/test/test_example_contexts_aggregator.rb +1 -4
- data/test/test_helper.rb +1 -1
- data/test/test_integration.rb +6 -0
- data/test/test_log_path_aggregator.rb +6 -6
- metadata +8 -21
- /data/{bin → dev}/console +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0cc90e8b5acc15676a5101e6cbd902e37e38781ebb6d6fb33c892f938df3bbc
|
4
|
+
data.tar.gz: 68e1dbb144273aa9c54fb11efdf9333f2260a8805705d2aff47885719d995b7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9518b4ab1b19e6f7532fd29146b26bd0fd4e3527dbc4fde041b61b712a843db95f6f9355d8afb0b2496436aab711ec5f4a57075dbaf80c7afd4bb85c35d92b53
|
7
|
+
data.tar.gz: d2f4806025b4c965792653149ac9976b47ed4f687bbbb9b73cf58af091a55d4ad03affe49e6cd55aba132fa1a49f422f73900a2d295abb3afb2867cf204bb533
|
data/.github/workflows/ruby.yml
CHANGED
@@ -22,7 +22,7 @@ jobs:
|
|
22
22
|
runs-on: ubuntu-latest
|
23
23
|
strategy:
|
24
24
|
matrix:
|
25
|
-
ruby-version: ['2.7', '3.0', '3.
|
25
|
+
ruby-version: ['2.7', '3.0', '3.3']
|
26
26
|
|
27
27
|
steps:
|
28
28
|
- uses: actions/checkout@v3
|
@@ -36,7 +36,9 @@ jobs:
|
|
36
36
|
uses: ruby/setup-ruby@v1
|
37
37
|
with:
|
38
38
|
ruby-version: ${{ matrix.ruby-version }}
|
39
|
-
bundler-cache:
|
39
|
+
bundler-cache: false # runs 'bundle install' and caches installed gems automatically
|
40
|
+
- name: Install dependencies
|
41
|
+
run: bundle install --without development --jobs 4 --retry 3
|
40
42
|
- name: Run tests
|
41
43
|
run: bundle exec rake
|
42
44
|
env:
|
data/CHANGELOG.md
CHANGED
@@ -1,11 +1,20 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
##
|
3
|
+
## 1.6.1 - 2024-03-28
|
4
|
+
|
5
|
+
- Performance optimizations (#178)
|
6
|
+
- Global context (#182)
|
7
|
+
|
8
|
+
## 1.6.0 - 2024-03-27
|
4
9
|
|
5
10
|
- Use semantic_logger for internal logging (#173)
|
6
11
|
- Remove Prefab::LoggerClient as a logger for end users (#173)
|
7
12
|
- Provide log_filter for end users (#173)
|
8
13
|
|
14
|
+
## 1.5.1 - 2024-02-22
|
15
|
+
|
16
|
+
- Fix: Send context shapes by default (#174)
|
17
|
+
|
9
18
|
## 1.5.0 - 2024-02-12
|
10
19
|
|
11
20
|
- Fix potential inconsistent Context behavior (#172)
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,23 +1,7 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
5
|
-
actionview (= 7.1.2)
|
6
|
-
activesupport (= 7.1.2)
|
7
|
-
nokogiri (>= 1.8.5)
|
8
|
-
racc
|
9
|
-
rack (>= 2.2.4)
|
10
|
-
rack-session (>= 1.0.1)
|
11
|
-
rack-test (>= 0.6.3)
|
12
|
-
rails-dom-testing (~> 2.2)
|
13
|
-
rails-html-sanitizer (~> 1.6)
|
14
|
-
actionview (7.1.2)
|
15
|
-
activesupport (= 7.1.2)
|
16
|
-
builder (~> 3.1)
|
17
|
-
erubi (~> 1.11)
|
18
|
-
rails-dom-testing (~> 2.2)
|
19
|
-
rails-html-sanitizer (~> 1.6)
|
20
|
-
activesupport (7.1.2)
|
4
|
+
activesupport (7.1.3.2)
|
21
5
|
base64
|
22
6
|
bigdecimal
|
23
7
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
@@ -27,34 +11,48 @@ GEM
|
|
27
11
|
minitest (>= 5.1)
|
28
12
|
mutex_m
|
29
13
|
tzinfo (~> 2.0)
|
30
|
-
addressable (2.8.
|
31
|
-
public_suffix (>= 2.0.2, <
|
14
|
+
addressable (2.8.6)
|
15
|
+
public_suffix (>= 2.0.2, < 6.0)
|
32
16
|
ansi (1.5.0)
|
33
17
|
base64 (0.2.0)
|
34
|
-
benchmark-ips (2.
|
35
|
-
bigdecimal (3.1.
|
18
|
+
benchmark-ips (2.13.0)
|
19
|
+
bigdecimal (3.1.7)
|
36
20
|
builder (3.2.4)
|
37
|
-
concurrent-ruby (1.
|
21
|
+
concurrent-ruby (1.2.3)
|
38
22
|
connection_pool (2.4.1)
|
39
|
-
crass (1.0.6)
|
40
23
|
descendants_tracker (0.0.4)
|
41
24
|
thread_safe (~> 0.3, >= 0.3.1)
|
42
|
-
docile (1.
|
43
|
-
domain_name (0.
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
25
|
+
docile (1.4.0)
|
26
|
+
domain_name (0.6.20240107)
|
27
|
+
drb (2.2.1)
|
28
|
+
faraday (1.10.3)
|
29
|
+
faraday-em_http (~> 1.0)
|
30
|
+
faraday-em_synchrony (~> 1.0)
|
31
|
+
faraday-excon (~> 1.1)
|
32
|
+
faraday-httpclient (~> 1.0)
|
33
|
+
faraday-multipart (~> 1.0)
|
49
34
|
faraday-net_http (~> 1.0)
|
50
|
-
|
51
|
-
|
35
|
+
faraday-net_http_persistent (~> 1.0)
|
36
|
+
faraday-patron (~> 1.0)
|
37
|
+
faraday-rack (~> 1.0)
|
38
|
+
faraday-retry (~> 1.0)
|
39
|
+
ruby2_keywords (>= 0.0.4)
|
40
|
+
faraday-em_http (1.0.0)
|
41
|
+
faraday-em_synchrony (1.0.0)
|
42
|
+
faraday-excon (1.1.0)
|
43
|
+
faraday-httpclient (1.0.1)
|
44
|
+
faraday-multipart (1.0.4)
|
45
|
+
multipart-post (~> 2)
|
52
46
|
faraday-net_http (1.0.1)
|
53
|
-
|
54
|
-
|
55
|
-
|
47
|
+
faraday-net_http_persistent (1.2.0)
|
48
|
+
faraday-patron (1.0.0)
|
49
|
+
faraday-rack (1.0.0)
|
50
|
+
faraday-retry (1.0.3)
|
51
|
+
ffi (1.16.3)
|
52
|
+
ffi-compiler (1.3.2)
|
53
|
+
ffi (>= 1.15.5)
|
56
54
|
rake
|
57
|
-
git (1.
|
55
|
+
git (1.19.1)
|
58
56
|
addressable (~> 2.8)
|
59
57
|
rchardet (~> 1.8)
|
60
58
|
github_api (0.19.0)
|
@@ -63,20 +61,21 @@ GEM
|
|
63
61
|
faraday (>= 0.8, < 2)
|
64
62
|
hashie (~> 3.5, >= 3.5.2)
|
65
63
|
oauth2 (~> 1.0)
|
66
|
-
google-protobuf (3.
|
67
|
-
googleapis-common-protos-types (1.
|
68
|
-
google-protobuf (~> 3.
|
64
|
+
google-protobuf (3.25.3)
|
65
|
+
googleapis-common-protos-types (1.14.0)
|
66
|
+
google-protobuf (~> 3.18)
|
69
67
|
hashie (3.6.0)
|
70
|
-
highline (
|
71
|
-
http (5.0
|
72
|
-
addressable (~> 2.
|
68
|
+
highline (3.0.1)
|
69
|
+
http (5.2.0)
|
70
|
+
addressable (~> 2.8)
|
71
|
+
base64 (~> 0.1)
|
73
72
|
http-cookie (~> 1.0)
|
74
73
|
http-form_data (~> 2.2)
|
75
|
-
llhttp-ffi (~> 0.
|
76
|
-
http-cookie (1.0.
|
74
|
+
llhttp-ffi (~> 0.5.0)
|
75
|
+
http-cookie (1.0.5)
|
77
76
|
domain_name (~> 0.5)
|
78
77
|
http-form_data (2.3.0)
|
79
|
-
i18n (1.14.
|
78
|
+
i18n (1.14.4)
|
80
79
|
concurrent-ruby (~> 1.0)
|
81
80
|
juwelier (2.4.9)
|
82
81
|
builder
|
@@ -90,34 +89,32 @@ GEM
|
|
90
89
|
rake
|
91
90
|
rdoc
|
92
91
|
semver2
|
93
|
-
jwt (2.
|
92
|
+
jwt (2.8.1)
|
93
|
+
base64
|
94
94
|
kamelcase (0.0.2)
|
95
95
|
semver2 (~> 3)
|
96
|
-
ld-eventsource (2.2.
|
96
|
+
ld-eventsource (2.2.2)
|
97
97
|
concurrent-ruby (~> 1.0)
|
98
98
|
http (>= 4.4.1, < 6.0.0)
|
99
|
-
llhttp-ffi (0.
|
99
|
+
llhttp-ffi (0.5.0)
|
100
100
|
ffi-compiler (~> 1.0)
|
101
101
|
rake (~> 13.0)
|
102
|
-
loofah (2.21.4)
|
103
|
-
crass (~> 1.0.2)
|
104
|
-
nokogiri (>= 1.12.0)
|
105
102
|
macaddr (1.7.2)
|
106
103
|
systemu (~> 2.6.5)
|
107
|
-
mini_portile2 (2.8.
|
108
|
-
minitest (5.
|
109
|
-
minitest-focus (1.
|
104
|
+
mini_portile2 (2.8.5)
|
105
|
+
minitest (5.22.3)
|
106
|
+
minitest-focus (1.4.0)
|
110
107
|
minitest (>= 4, < 6)
|
111
|
-
minitest-reporters (1.
|
108
|
+
minitest-reporters (1.6.1)
|
112
109
|
ansi
|
113
110
|
builder
|
114
111
|
minitest (>= 5.0)
|
115
112
|
ruby-progressbar
|
116
113
|
multi_json (1.15.0)
|
117
114
|
multi_xml (0.6.0)
|
118
|
-
multipart-post (2.
|
115
|
+
multipart-post (2.4.0)
|
119
116
|
mutex_m (0.2.0)
|
120
|
-
nokogiri (1.
|
117
|
+
nokogiri (1.16.3)
|
121
118
|
mini_portile2 (~> 2.8.2)
|
122
119
|
racc (~> 1.4)
|
123
120
|
oauth2 (1.4.11)
|
@@ -126,41 +123,32 @@ GEM
|
|
126
123
|
multi_json (~> 1.3)
|
127
124
|
multi_xml (~> 0.5)
|
128
125
|
rack (>= 1.2, < 4)
|
129
|
-
psych (
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
rack
|
134
|
-
|
135
|
-
rack-test (2.1.0)
|
136
|
-
rack (>= 1.3)
|
137
|
-
rails-dom-testing (2.2.0)
|
138
|
-
activesupport (>= 5.0.0)
|
139
|
-
minitest
|
140
|
-
nokogiri (>= 1.6)
|
141
|
-
rails-html-sanitizer (1.6.0)
|
142
|
-
loofah (~> 2.21)
|
143
|
-
nokogiri (~> 1.14)
|
144
|
-
rake (13.0.6)
|
126
|
+
psych (5.1.2)
|
127
|
+
stringio
|
128
|
+
public_suffix (5.0.4)
|
129
|
+
racc (1.7.3)
|
130
|
+
rack (3.0.10)
|
131
|
+
rake (13.1.0)
|
145
132
|
rchardet (1.8.0)
|
146
|
-
rdoc (6.3.
|
147
|
-
|
148
|
-
|
133
|
+
rdoc (6.6.3.1)
|
134
|
+
psych (>= 4.0.0)
|
135
|
+
ruby-progressbar (1.13.0)
|
136
|
+
ruby2_keywords (0.0.5)
|
149
137
|
semantic_logger (4.15.0)
|
150
138
|
concurrent-ruby (~> 1.0)
|
151
139
|
semver2 (3.4.2)
|
152
|
-
simplecov (0.
|
140
|
+
simplecov (0.22.0)
|
153
141
|
docile (~> 1.1)
|
154
142
|
simplecov-html (~> 0.11)
|
143
|
+
simplecov_json_formatter (~> 0.1)
|
155
144
|
simplecov-html (0.12.3)
|
145
|
+
simplecov_json_formatter (0.1.4)
|
146
|
+
stringio (3.1.0)
|
156
147
|
systemu (2.6.5)
|
157
148
|
thread_safe (0.3.6)
|
158
|
-
timecop (0.9.
|
149
|
+
timecop (0.9.8)
|
159
150
|
tzinfo (2.0.6)
|
160
151
|
concurrent-ruby (~> 1.0)
|
161
|
-
unf (0.1.4)
|
162
|
-
unf_ext
|
163
|
-
unf_ext (0.0.8)
|
164
152
|
uuid (2.3.9)
|
165
153
|
macaddr (~> 1.0)
|
166
154
|
|
@@ -168,7 +156,6 @@ PLATFORMS
|
|
168
156
|
ruby
|
169
157
|
|
170
158
|
DEPENDENCIES
|
171
|
-
actionpack (>= 4)
|
172
159
|
activesupport (>= 4)
|
173
160
|
benchmark-ips
|
174
161
|
bundler
|
data/README.md
CHANGED
@@ -34,7 +34,7 @@ Many ruby web servers fork. When the process is forked, the current realtime upd
|
|
34
34
|
|
35
35
|
```ruby
|
36
36
|
#config/application.rb
|
37
|
-
Prefab.init # reads PREFAB_API_KEY env var
|
37
|
+
Prefab.init # reads PREFAB_API_KEY env var by default
|
38
38
|
```
|
39
39
|
|
40
40
|
```ruby
|
@@ -53,23 +53,51 @@ end
|
|
53
53
|
|
54
54
|
## Logging & Debugging
|
55
55
|
|
56
|
-
To use dynamic logging
|
56
|
+
To use dynamic logging, we recommend [semantic logger]. Add semantic_logger to your Gemfile and then we'll configure our app to use it.
|
57
57
|
|
58
|
+
### Plain ol' Ruby
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
# Gemfile
|
62
|
+
gem "semantic_logger"
|
58
63
|
```
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
require "semantic_logger"
|
67
|
+
require "prefab"
|
68
|
+
|
69
|
+
Prefab.init
|
70
|
+
|
71
|
+
SemanticLogger.sync!
|
72
|
+
SemanticLogger.default_level = :trace # Prefab will take over the filtering
|
73
|
+
SemanticLogger.add_appender(
|
74
|
+
io: $stdout,
|
75
|
+
formatter: :json,
|
76
|
+
filter: Prefab.log_filter,
|
77
|
+
)
|
78
|
+
```
|
79
|
+
|
80
|
+
### With Rails
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
# Gemfile
|
59
84
|
gem "amazing_print"
|
60
85
|
gem "rails_semantic_logger"
|
61
86
|
```
|
87
|
+
|
62
88
|
```ruby
|
63
|
-
#application.rb
|
89
|
+
# config/application.rb
|
90
|
+
Prefab.init
|
91
|
+
|
92
|
+
# config/initializers/logging.rb
|
64
93
|
SemanticLogger.sync!
|
65
94
|
SemanticLogger.default_level = :trace # Prefab will take over the filtering
|
66
95
|
SemanticLogger.add_appender(
|
67
96
|
io: $stdout,
|
68
|
-
formatter: Rails.env.development? ? :
|
97
|
+
formatter: Rails.env.development? ? :color : :json,
|
69
98
|
filter: Prefab.log_filter,
|
70
99
|
)
|
71
|
-
|
72
|
-
````
|
100
|
+
```
|
73
101
|
|
74
102
|
```ruby
|
75
103
|
#puma.rb
|
@@ -102,3 +130,5 @@ REMOTE_BRANCH=main LOCAL_BRANCH=main bundle exec rake release
|
|
102
130
|
## Copyright
|
103
131
|
|
104
132
|
Copyright (c) 2024 Prefab, Inc. See LICENSE.txt for further details.
|
133
|
+
|
134
|
+
[semantic logger]: https://logger.rocketjob.io/
|
data/Rakefile
CHANGED
@@ -9,42 +9,45 @@ rescue Bundler::BundlerError => e
|
|
9
9
|
warn 'Run `bundle install` to install missing gems'
|
10
10
|
exit e.status_code
|
11
11
|
end
|
12
|
+
|
12
13
|
require 'rake'
|
13
|
-
|
14
|
-
Juwelier::Tasks.new do |gem|
|
15
|
-
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
16
|
-
gem.name = 'prefab-cloud-ruby'
|
17
|
-
gem.homepage = 'http://github.com/prefab-cloud/prefab-cloud-ruby'
|
18
|
-
gem.license = 'MIT'
|
19
|
-
gem.summary = %(Prefab Ruby Infrastructure)
|
20
|
-
gem.description = %(Feature Flags, Live Config, and Dynamic Log Levels as a service)
|
21
|
-
gem.email = 'jdwyer@prefab.cloud'
|
22
|
-
gem.authors = ['Jeff Dwyer']
|
14
|
+
task default: :test
|
23
15
|
|
24
|
-
|
25
|
-
|
26
|
-
Juwelier::
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
16
|
+
unless ENV['CI']
|
17
|
+
require 'juwelier'
|
18
|
+
Juwelier::Tasks.new do |gem|
|
19
|
+
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
20
|
+
gem.name = 'prefab-cloud-ruby'
|
21
|
+
gem.homepage = 'http://github.com/prefab-cloud/prefab-cloud-ruby'
|
22
|
+
gem.license = 'MIT'
|
23
|
+
gem.summary = %(Prefab Ruby Infrastructure)
|
24
|
+
gem.description = %(Feature Flags, Live Config, and Dynamic Log Levels as a service)
|
25
|
+
gem.email = 'jdwyer@prefab.cloud'
|
26
|
+
gem.authors = ['Jeff Dwyer']
|
33
27
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
28
|
+
# dependencies defined in Gemfile
|
29
|
+
end
|
30
|
+
Juwelier::RubygemsDotOrgTasks.new
|
31
|
+
require 'rake/testtask'
|
32
|
+
Rake::TestTask.new(:test) do |test|
|
33
|
+
test.libs << 'lib' << 'test'
|
34
|
+
test.pattern = 'test/**/test_*.rb'
|
35
|
+
test.verbose = true
|
36
|
+
end
|
39
37
|
|
40
|
-
|
38
|
+
desc 'Code coverage detail'
|
39
|
+
task :simplecov do
|
40
|
+
ENV['COVERAGE'] = 'true'
|
41
|
+
Rake::Task['test'].execute
|
42
|
+
end
|
41
43
|
|
42
|
-
require 'rdoc/task'
|
43
|
-
Rake::RDocTask.new do |rdoc|
|
44
|
-
|
44
|
+
require 'rdoc/task'
|
45
|
+
Rake::RDocTask.new do |rdoc|
|
46
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ''
|
45
47
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
rdoc.rdoc_dir = 'rdoc'
|
49
|
+
rdoc.title = "prefab-cloud-ruby #{version}"
|
50
|
+
rdoc.rdoc_files.include('README*')
|
51
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
52
|
+
end
|
50
53
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.1
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
|
6
|
+
gemspec = Dir.glob(File.expand_path("../../*.gemspec", __FILE__)).first
|
7
|
+
spec = Gem::Specification.load(gemspec)
|
8
|
+
|
9
|
+
# Add the require paths to the $LOAD_PATH
|
10
|
+
spec.require_paths.each do |path|
|
11
|
+
full_path = File.expand_path("../" + path, __dir__)
|
12
|
+
$LOAD_PATH.unshift(full_path) unless $LOAD_PATH.include?(full_path)
|
13
|
+
end
|
14
|
+
|
15
|
+
spec.require_paths.each do |path|
|
16
|
+
require "./lib/prefab-cloud-ruby"
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'prefab-cloud-ruby'
|
20
|
+
|
21
|
+
$prefab = Prefab::Client.new(collect_logger_counts: false, collect_evaluation_summaries: false,
|
22
|
+
context_upload_mode: :none)
|
23
|
+
$prefab.get('prefab.auth.allowed_origins')
|
24
|
+
|
25
|
+
puts '-' * 80
|
26
|
+
|
27
|
+
require 'allocation_stats'
|
28
|
+
|
29
|
+
$runs = 100
|
30
|
+
|
31
|
+
def measure(description)
|
32
|
+
puts "Measuring #{description}..."
|
33
|
+
stats = $prefab.with_context(user: { email_suffix: 'yahoo.com' }) do
|
34
|
+
AllocationStats.trace do
|
35
|
+
$runs.times do
|
36
|
+
yield
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
allocations = stats.allocations(alias_paths: true).group_by(:sourcefile, :sourceline, :class)
|
42
|
+
|
43
|
+
if ENV['TOP']
|
44
|
+
puts allocations.sort_by_size.to_text.split("\n").first(20)
|
45
|
+
end
|
46
|
+
|
47
|
+
puts "Total allocations: #{allocations.all.values.map(&:size).sum}"
|
48
|
+
puts "Total memory: #{allocations.all.values.flatten.map(&:memsize).sum}"
|
49
|
+
puts stats.gc_profiler_report
|
50
|
+
end
|
51
|
+
|
52
|
+
measure "no-JIT context (#{$runs} runs)" do
|
53
|
+
$prefab.get('prefab.auth.allowed_origins')
|
54
|
+
end
|
55
|
+
|
56
|
+
puts "\n\n"
|
57
|
+
|
58
|
+
measure "with JIT context (#{$runs} runs)" do
|
59
|
+
$prefab.get('prefab.auth.allowed_origins', { a: { b: "c" } })
|
60
|
+
end
|
data/dev/benchmark
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
|
6
|
+
gemspec = Dir.glob(File.expand_path("../../*.gemspec", __FILE__)).first
|
7
|
+
spec = Gem::Specification.load(gemspec)
|
8
|
+
|
9
|
+
# Add the require paths to the $LOAD_PATH
|
10
|
+
spec.require_paths.each do |path|
|
11
|
+
full_path = File.expand_path("../" + path, __dir__)
|
12
|
+
$LOAD_PATH.unshift(full_path) unless $LOAD_PATH.include?(full_path)
|
13
|
+
end
|
14
|
+
|
15
|
+
spec.require_paths.each do |path|
|
16
|
+
require "./lib/prefab-cloud-ruby"
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'prefab-cloud-ruby'
|
20
|
+
require 'benchmark/ips'
|
21
|
+
|
22
|
+
prefab = Prefab::Client.new(collect_logger_counts: false, collect_evaluation_summaries: false,
|
23
|
+
context_upload_mode: :none)
|
24
|
+
|
25
|
+
prefab.get('prefab.auth.allowed_origins')
|
26
|
+
|
27
|
+
prefab.with_context(user: { email_suffix: 'yahoo.com' }) do
|
28
|
+
Benchmark.ips do |x|
|
29
|
+
x.report("noop") do
|
30
|
+
end
|
31
|
+
|
32
|
+
x.report('prefab.get') do
|
33
|
+
prefab.get('prefab.auth.allowed_origins')
|
34
|
+
end
|
35
|
+
|
36
|
+
x.report('prefab.get with jit context') do
|
37
|
+
prefab.get('prefab.auth.allowed_origins', { a: { b: "c" } })
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/prefab/client.rb
CHANGED
@@ -29,6 +29,9 @@ module Prefab
|
|
29
29
|
end
|
30
30
|
|
31
31
|
context.clear
|
32
|
+
|
33
|
+
Prefab::Context.global_context = @options.global_context
|
34
|
+
|
32
35
|
# start config client
|
33
36
|
config_client
|
34
37
|
end
|
@@ -51,6 +54,7 @@ module Prefab
|
|
51
54
|
|
52
55
|
def log_path_aggregator
|
53
56
|
return nil if @options.collect_max_paths <= 0
|
57
|
+
|
54
58
|
@log_path_aggregator ||= LogPathAggregator.new(client: self, max_paths: @options.collect_max_paths,
|
55
59
|
sync_interval: @options.collect_sync_interval)
|
56
60
|
end
|
@@ -87,14 +91,7 @@ module Prefab
|
|
87
91
|
end
|
88
92
|
|
89
93
|
def set_rails_loggers
|
90
|
-
|
91
|
-
ActionView::Base.logger = log
|
92
|
-
ActionController::Base.logger = log
|
93
|
-
ActiveJob::Base.logger = log if defined?(ActiveJob)
|
94
|
-
ActiveRecord::Base.logger = log
|
95
|
-
ActiveStorage.logger = log if defined?(ActiveStorage)
|
96
|
-
|
97
|
-
LogSubscribers::ActionControllerSubscriber.attach_to :action_controller unless @options.disable_action_controller_logging
|
94
|
+
warn '[DEPRECATION] `set_rails_loggers` is deprecated since 1.6. Please use semantic_logger or `Prefab.log_filter` instead.'
|
98
95
|
end
|
99
96
|
|
100
97
|
def on_update(&block)
|
data/lib/prefab/config_client.rb
CHANGED
@@ -60,7 +60,7 @@ module Prefab
|
|
60
60
|
@base_client.example_contexts_aggregator.record(context)
|
61
61
|
end
|
62
62
|
|
63
|
-
evaluation = _get(key,
|
63
|
+
evaluation = _get(key, properties)
|
64
64
|
|
65
65
|
@base_client.context_shape_aggregator&.push(context)
|
66
66
|
|
@@ -168,7 +168,7 @@ module Prefab
|
|
168
168
|
]
|
169
169
|
end.to_h
|
170
170
|
|
171
|
-
|
171
|
+
Prefab::Context.default_context = default_contexts || {}
|
172
172
|
|
173
173
|
configs.configs.each do |config|
|
174
174
|
@config_loader.set(config, source)
|
@@ -5,8 +5,6 @@ module Prefab
|
|
5
5
|
attr_accessor :project_env_id # this will be set by the config_client when it gets an API response
|
6
6
|
attr_reader :local_store
|
7
7
|
|
8
|
-
attr_accessor :default_context
|
9
|
-
|
10
8
|
def initialize(base_client, config_loader)
|
11
9
|
@lock = Concurrent::ReadWriteLock.new
|
12
10
|
@local_store = {}
|
@@ -14,7 +12,6 @@ module Prefab
|
|
14
12
|
@project_env_id = 0 # we don't know this yet, it is set from the API results
|
15
13
|
@base_client = base_client
|
16
14
|
@on_update = nil
|
17
|
-
@default_context = {}
|
18
15
|
make_local
|
19
16
|
end
|
20
17
|
|
@@ -59,11 +56,13 @@ module Prefab
|
|
59
56
|
end
|
60
57
|
|
61
58
|
def make_context(properties)
|
62
|
-
if properties
|
59
|
+
if properties.is_a?(Context)
|
60
|
+
properties
|
61
|
+
elsif properties == NO_DEFAULT_PROVIDED || properties.nil?
|
63
62
|
Context.current
|
64
63
|
else
|
65
|
-
Context.
|
66
|
-
end
|
64
|
+
Context.join(parent: Context.current, hash: properties, id: :jit)
|
65
|
+
end
|
67
66
|
end
|
68
67
|
|
69
68
|
private
|