Skip to content

Commit f787839

Browse files
authored
Fixes for Rails < 7.1 (#18)
1 parent 48d2b16 commit f787839

25 files changed

+1262
-133
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
/spec/dummy/log
1010
/spec/dummy/tmp
1111
/spec/dummy/db/*.sqlite3*
12+
/spec/dummy/db/schema.rb
13+
/spec/dummy/db/api_logger_schema.rb
1214
.env
1315

1416
# rspec failure tracking

.semaphore/semaphore.yml

Lines changed: 91 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,61 +23,140 @@ blocks:
2323
- bundle install -j 4
2424

2525
- cache store
26+
env_vars:
27+
- name: BUNDLE_GEMFILE
28+
value: /home/semaphore/rails_api_logger/gemfiles/rails_8.0.gemfile
2629
jobs:
2730
- name: linter
2831
commands:
2932
- bundle exec standardrb
30-
- name: tests sqlite separate db
33+
- name: tests postgres separate db and separate target
3134
env_vars:
35+
- name: SAME_DB
36+
value: "false"
37+
- name: SAME_TARGET
38+
value: "false"
3239
- name: TARGET_DB
33-
value: sqlite
40+
value: postgres
3441
- name: RAILS_ENV
3542
value: test
3643
commands:
44+
- sem-service start postgres 14
45+
- bin/rails db:create db:migrate
3746
- bundle exec rspec
38-
- name: tests postgres separate db
47+
- name: tests postgres separate db and same target
3948
env_vars:
49+
- name: SAME_DB
50+
value: "false"
51+
- name: SAME_TARGET
52+
value: "true"
4053
- name: TARGET_DB
4154
value: postgres
4255
- name: RAILS_ENV
4356
value: test
4457
commands:
4558
- sem-service start postgres 14
46-
- bin/rails db:create db:schema:load
59+
- bin/rails db:create db:migrate
4760
- bundle exec rspec
48-
- name: tests sqlite same db
61+
- name: tests postgres same db and separate target
4962
env_vars:
5063
- name: SAME_DB
5164
value: "true"
5265
- name: TARGET_DB
53-
value: sqlite
66+
value: postgres
5467
- name: RAILS_ENV
5568
value: test
5669
commands:
70+
- sem-service start postgres 14
71+
- bin/rails db:create db:migrate
5772
- bundle exec rspec
58-
- name: tests postgres same db
73+
- name: tests postgres separate db and separate target | rails 6.1
5974
env_vars:
6075
- name: SAME_DB
61-
value: "true"
76+
value: "false"
77+
- name: SAME_TARGET
78+
value: "false"
6279
- name: TARGET_DB
6380
value: postgres
6481
- name: RAILS_ENV
6582
value: test
83+
- name: BUNDLE_GEMFILE
84+
value: /home/semaphore/rails_api_logger/gemfiles/rails_6.1.gemfile
6685
commands:
6786
- sem-service start postgres 14
68-
- bin/rails db:create db:schema:load
87+
- bin/rails db:create db:migrate
6988
- bundle exec rspec
70-
- name: tests postgres same target
89+
- name: tests postgres separate db and separate target | rails 7.0
7190
env_vars:
91+
- name: SAME_DB
92+
value: "false"
7293
- name: SAME_TARGET
73-
value: "true"
94+
value: "false"
95+
- name: TARGET_DB
96+
value: postgres
97+
- name: RAILS_ENV
98+
value: test
99+
- name: BUNDLE_GEMFILE
100+
value: /home/semaphore/rails_api_logger/gemfiles/rails_7.0.gemfile
101+
commands:
102+
- sem-service start postgres 14
103+
- bin/rails db:create db:migrate
104+
- bundle exec rspec
105+
- name: tests postgres separate db and separate target | rails 7.1
106+
env_vars:
107+
- name: SAME_DB
108+
value: "false"
109+
- name: SAME_TARGET
110+
value: "false"
74111
- name: TARGET_DB
75112
value: postgres
76113
- name: RAILS_ENV
77114
value: test
115+
- name: BUNDLE_GEMFILE
116+
value: /home/semaphore/rails_api_logger/gemfiles/rails_7.1.gemfile
78117
commands:
79118
- sem-service start postgres 14
80-
- bin/rails db:create db:schema:load
119+
- bin/rails db:create db:migrate
120+
- bundle exec rspec
121+
- name: tests postgres separate db and separate target | rails 7.2
122+
env_vars:
123+
- name: SAME_DB
124+
value: "false"
125+
- name: SAME_TARGET
126+
value: "false"
127+
- name: TARGET_DB
128+
value: postgres
129+
- name: RAILS_ENV
130+
value: test
131+
- name: BUNDLE_GEMFILE
132+
value: /home/semaphore/rails_api_logger/gemfiles/rails_7.2.gemfile
133+
commands:
134+
- sem-service start postgres 14
135+
- bin/rails db:create db:migrate
136+
- bundle exec rspec
137+
- name: tests sqlite separate db and separate target
138+
env_vars:
139+
- name: SAME_DB
140+
value: "false"
141+
- name: SAME_TARGET
142+
value: "false"
143+
- name: TARGET_DB
144+
value: sqlite
145+
- name: RAILS_ENV
146+
value: test
147+
commands:
148+
- bin/rails db:create db:migrate
149+
- bundle exec rspec
150+
- name: tests sqlite same db
151+
env_vars:
152+
- name: SAME_DB
153+
value: "true"
154+
- name: TARGET_DB
155+
value: sqlite
156+
- name: RAILS_ENV
157+
value: test
158+
commands:
159+
- bin/rails db:create db:migrate
81160
- bundle exec rspec
82161
promotions:
83162
- name: main

.standard.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ignore:
2+
- 'gemfiles/**/*'

Appraisals

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
appraise "rails-6.1" do
2+
gem "concurrent-ruby", "1.3.4"
3+
gem "rails", "~> 6.1.0"
4+
gem "rspec-rails", "~> 6.1.0"
5+
gem "sqlite3", "~> 1.7.3"
6+
end
7+
8+
appraise "rails-7.0" do
9+
gem "concurrent-ruby", "1.3.4"
10+
gem "rails", "~> 7.0.0"
11+
gem "rspec-rails", "~> 7.1.0"
12+
gem "sqlite3", "~> 1.7.3"
13+
end
14+
15+
appraise "rails-7.1" do
16+
gem "rails", "~> 7.1.0"
17+
gem "rspec-rails", "~> 7.1.0"
18+
gem "sqlite3", "~> 1.7.3"
19+
end
20+
21+
appraise "rails-7.2" do
22+
gem "rails", "~> 7.2.0"
23+
gem "rspec-rails", "~> 7.1.0"
24+
gem "sqlite3", "~> 1.7.3"
25+
end
26+
27+
appraise "rails-8.0" do
28+
gem "rails", "~> 8.0.0"
29+
gem "rspec-rails", "~> 7.1.0"
30+
gem "sqlite3", "~> 2.1.0"
31+
end

CHANGELOG.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
# 0.10.1
2+
3+
* Fix a bug introduced in 0.8.1 where we fixed Rails 7.1 warnings. This broke the serialization in Rails < 7.1.
4+
We now configure the serializer differently if you are running Rails 7.0 or lower.
5+
If you used the gem version 0.8.1 or above in combination with Rails 7.0 or lower this caused the serialization of
6+
the request and response body into YML format instead of JSON. This is now fixed and tests run on different rails
7+
versions as well.
8+
19
# 0.10.0
210

311
**BREAKING CHANGES**
@@ -12,7 +20,7 @@ This version contains many breaking changes. Consider this when upgrading:
1220
* `InboundRequestsLoggerMiddleware` has been renamed to `RailsApiLogger::Middleware`
1321

1422
> Do the changes above and then continue with the following steps if you want to connect rails_api_logger to a different
15-
database:
23+
> database:
1624
1725
* Specify a database called `api_logger`. [Check here](spec/dummy/config/database.yml) for an example.
1826
* Check that everything still works (also in production!) with the new configuration.
@@ -23,8 +31,8 @@ database:
2331
* Add the following line into `production.rb`:
2432
`config.rails_api_logger.connects_to = { database: { writing: :api_logger } }` if you want to point to a new database.
2533

26-
> If you are not on SQLite you can point also `api_logger` database to the current database you have, so you benefit from
27-
isolated transactions but don't need to create a new database or migrate data.
34+
> If you are not on SQLite you can point also `api_logger` database to the current database you have, so you benefit
35+
> from isolated transactions but don't need to create a new database or migrate data.
2836
2937
### List of changes in this version:
3038

README.md

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,37 @@ end
216216

217217
## Development
218218

219-
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can
220-
also run `bin/console` for an interactive prompt that will allow you to experiment.
219+
We use Appraisals to un on different Rails versions. This is a run example:
220+
221+
```bash
222+
export SAME_TARGET=false
223+
export SAME_DB=false
224+
export TARGET_DB=postgres
225+
export BUNDLE_GEMFILE=/Users/alessandrorodi/RenuoWorkspace/rails_api_logger/gemfiles/rails_6.1.gemfile
226+
bundle exec rails db:create db:migrate
227+
bundle exec rspec
228+
```
229+
230+
These are the possible ENV variables:
231+
232+
* `SAME_TARGET` if true, the api_logger database is the same as the primary one. It will still use two separate
233+
connection pools, but they'll point to the same database. This cannot be set to true if TARGET_DB is sqlite because
234+
sqlite does not support multiple connection pools to the same database.
235+
* `SAME_DB` if true, the api_logger uses the primary database. In this case SAME_TARGET is ignored.
236+
* `TARGET_DB` the database to use. Can be `postgres`, `mysql`, or `sqlite`.
237+
* `BUNDLE_GEMFILE` the gemfile to use. This is used to run the tests on different Rails versions.
238+
239+
Possible combinations:
240+
241+
| SAME_DB | SAME_TARGET | TARGET_DB | Description |
242+
|---------|-------------|-----------|----------------------------------------------------------------------|
243+
| false | false | postgres | Separate database, separate connection pool. |
244+
| false | true | postgres | Same database, separate connection pool. |
245+
| true | - | postgres | Same connection pool so the separate target is ignored. |
246+
| false | false | sqlite | Separate database, separate connection pool. |
247+
| false | true | sqlite | Not allowed. sqlite cannot have two connection pools to the same db. |
248+
| true | - | sqlite | Same connection pool so the separate target is ignored. |
249+
221250

222251
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the
223252
version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version,

app/models/rails_api_logger/request_log.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@ class RequestLog < ActiveRecord::Base
44

55
connects_to(**RailsApiLogger.connects_to) if RailsApiLogger.connects_to
66

7-
serialize :request_body, coder: JSON
8-
serialize :response_body, coder: JSON
7+
if Gem::Version.new(Rails.version) >= Gem::Version.new("7.1")
8+
serialize :request_body, coder: JSON
9+
serialize :response_body, coder: JSON
10+
else
11+
serialize :request_body, JSON
12+
serialize :response_body, JSON
13+
end
914

1015
belongs_to :loggable, optional: true, polymorphic: true
1116

gemfiles/rails_6.1.gemfile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# This file was generated by Appraisal
2+
3+
source "https://rubygems.org"
4+
5+
gem "concurrent-ruby", "1.3.4"
6+
gem "rails", "~> 6.1.0"
7+
gem "rspec-rails", "~> 6.1.0"
8+
gem "sqlite3", "~> 1.7.3"
9+
10+
gemspec path: "../"

0 commit comments

Comments
 (0)