panko_serializer 0.8.2 → 0.8.4

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +6 -0
  3. data/.github/workflows/database_matrix.yml +85 -0
  4. data/.github/workflows/docs.yml +5 -5
  5. data/.github/workflows/lint.yml +10 -16
  6. data/.github/workflows/{ruby.yml → tests.yml} +9 -22
  7. data/.gitignore +2 -0
  8. data/.rubocop.yml +29 -21
  9. data/Appraisals +23 -12
  10. data/Gemfile +12 -3
  11. data/README.md +4 -4
  12. data/Rakefile +3 -1
  13. data/benchmarks/allocs.rb +2 -2
  14. data/benchmarks/benchmarking_support.rb +2 -1
  15. data/benchmarks/bm_ams_0_10.rb +3 -7
  16. data/benchmarks/bm_panko_json.rb +2 -6
  17. data/benchmarks/bm_panko_object.rb +2 -6
  18. data/benchmarks/bm_plain_object.rb +1 -4
  19. data/benchmarks/bm_serialization_descriptor.rb +1 -1
  20. data/benchmarks/bm_to_object.rb +2 -6
  21. data/benchmarks/profile.rb +2 -2
  22. data/benchmarks/sanity.rb +2 -6
  23. data/benchmarks/setup.rb +4 -3
  24. data/benchmarks/type_casts/support.rb +0 -1
  25. data/docs/docs/associations.md +28 -15
  26. data/docs/docs/attributes.md +33 -20
  27. data/docs/docs/design-choices.md +36 -35
  28. data/docs/docs/getting-started.md +13 -7
  29. data/docs/docs/introduction.md +6 -6
  30. data/docs/docs/performance.md +4 -5
  31. data/docs/docs/response-bag.md +13 -6
  32. data/docs/docusaurus.config.js +86 -0
  33. data/docs/package-lock.json +13999 -18188
  34. data/docs/package.json +10 -6
  35. data/docs/src/css/customTheme.css +9 -0
  36. data/docs/static/CNAME +1 -0
  37. data/ext/panko_serializer/attributes_writer/active_record.c +81 -77
  38. data/ext/panko_serializer/attributes_writer/active_record.h +2 -0
  39. data/ext/panko_serializer/attributes_writer/type_cast/type_cast.c +1 -1
  40. data/gemfiles/{6.1.0.gemfile → 7.2.0.gemfile} +17 -6
  41. data/gemfiles/7.2.0.gemfile.lock +221 -0
  42. data/gemfiles/{7.0.0.gemfile → 8.0.0.gemfile} +17 -6
  43. data/gemfiles/8.0.0.gemfile.lock +239 -0
  44. data/gemfiles/{7.1.0.gemfile → 8.1.0.gemfile} +17 -6
  45. data/gemfiles/8.1.0.gemfile.lock +248 -0
  46. data/lib/panko/version.rb +1 -1
  47. data/panko_serializer.gemspec +1 -1
  48. metadata +16 -21
  49. data/.standard.yml +0 -5
  50. data/docs/.DS_Store +0 -0
  51. data/docs/README.md +0 -198
  52. data/docs/core/Footer.js +0 -80
  53. data/docs/i18n/en.json +0 -50
  54. data/docs/siteConfig.js +0 -80
  55. data/gemfiles/6.1.0.gemfile.lock +0 -166
  56. data/gemfiles/7.0.0.gemfile.lock +0 -164
  57. data/gemfiles/7.1.0.gemfile.lock +0 -181
data/docs/package.json CHANGED
@@ -1,14 +1,18 @@
1
1
  {
2
2
  "scripts": {
3
3
  "examples": "docusaurus-examples",
4
- "start": "docusaurus-start",
5
- "build": "docusaurus-build",
6
- "publish-gh-pages": "docusaurus-publish",
4
+ "start": "docusaurus start",
5
+ "build": "docusaurus build",
6
+ "serve": "docusaurus serve",
7
7
  "write-translations": "docusaurus-write-translations",
8
8
  "version": "docusaurus-version",
9
- "rename-version": "docusaurus-rename-version"
9
+ "rename-version": "docusaurus-rename-version",
10
+ "swizzle": "docusaurus swizzle",
11
+ "deploy": "docusaurus deploy",
12
+ "docusaurus": "docusaurus"
10
13
  },
11
- "devDependencies": {
12
- "docusaurus": "^1.14.7"
14
+ "dependencies": {
15
+ "@docusaurus/core": "^3.9.2",
16
+ "@docusaurus/preset-classic": "^3.9.2"
13
17
  }
14
18
  }
@@ -0,0 +1,9 @@
1
+ :root{
2
+ --ifm-color-primary-lightest: #D34A4B;
3
+ --ifm-color-primary-lighter: #CA3133;
4
+ --ifm-color-primary-light: #C22F30;
5
+ --ifm-color-primary: #B02B2C;
6
+ --ifm-color-primary-dark: #9E2728;
7
+ --ifm-color-primary-darker: #962525;
8
+ --ifm-color-primary-darkest: #7B1E1F;
9
+ }
data/docs/static/CNAME ADDED
@@ -0,0 +1 @@
1
+ panko.dev
@@ -9,79 +9,91 @@ static ID delegate_hash_id;
9
9
  static ID value_before_type_cast_id;
10
10
  static ID type_id;
11
11
 
12
- static bool type_detection_ran = false;
13
- static bool is_lazy_attributes_set_defined = false;
14
-
15
- /***
16
- * Returns ActiveModel::LazyAttributeSet or ActiveModel::LazyAttributesHash
17
- */
18
- VALUE panko_read_attributes_container(VALUE object) {
19
- volatile VALUE attributes_set, lazy_attributes_hash;
20
-
21
- attributes_set = rb_ivar_get(object, attributes_id);
22
- if (NIL_P(attributes_set)) {
23
- return Qnil;
24
- }
25
-
26
- if (is_lazy_attributes_set_defined) {
27
- return attributes_set;
28
- }
29
-
30
- lazy_attributes_hash = rb_ivar_get(attributes_set, attributes_id);
31
- return lazy_attributes_hash;
32
- }
12
+ static ID fetch_id;
33
13
 
34
14
  struct attributes {
15
+ // Hash
35
16
  VALUE attributes_hash;
17
+ size_t attributes_hash_size;
36
18
 
19
+ // Hash
37
20
  VALUE types;
21
+ // Hash
38
22
  VALUE additional_types;
23
+ // heuristics
24
+ bool tryToReadFromAdditionalTypes;
25
+
26
+ // Rails <8: Hash
27
+ // Rails >=8: ActiveRecord::Result::IndexedRow
39
28
  VALUE values;
40
29
 
41
- // heuristicts
42
- bool tryToReadFromAdditionalTypes;
30
+ // Hash
31
+ VALUE indexed_row_column_indexes;
32
+ // Array or NIL
33
+ VALUE indexed_row_row;
34
+ bool is_indexed_row;
43
35
  };
44
36
 
45
37
  struct attributes init_context(VALUE obj) {
46
- struct attributes attributes_ctx;
47
- attributes_ctx.attributes_hash = Qnil;
48
- attributes_ctx.values = Qnil;
49
- attributes_ctx.types = Qnil;
50
- attributes_ctx.additional_types = Qnil;
38
+ volatile VALUE attributes_set = rb_ivar_get(obj, attributes_id);
39
+ volatile VALUE attributes_hash = rb_ivar_get(attributes_set, attributes_id);
40
+
41
+ struct attributes attrs = (struct attributes){
42
+ .attributes_hash =
43
+ PANKO_EMPTY_HASH(attributes_hash) ? Qnil : attributes_hash,
44
+ .attributes_hash_size = 0,
45
+ .types = rb_ivar_get(attributes_set, types_id),
46
+ .additional_types = rb_ivar_get(attributes_set, additional_types_id),
47
+ .tryToReadFromAdditionalTypes =
48
+ PANKO_EMPTY_HASH(rb_ivar_get(attributes_set, additional_types_id)) ==
49
+ false,
50
+ .values = rb_ivar_get(attributes_set, values_id),
51
+ .is_indexed_row = false,
52
+ .indexed_row_column_indexes = Qnil,
53
+ .indexed_row_row = Qnil,
54
+ };
55
+
56
+ if (attrs.attributes_hash != Qnil) {
57
+ attrs.attributes_hash_size = RHASH_SIZE(attrs.attributes_hash);
58
+ }
51
59
 
52
- attributes_ctx.tryToReadFromAdditionalTypes = false;
60
+ if (strcmp(rb_class2name(CLASS_OF(attrs.values)),
61
+ "ActiveRecord::Result::IndexedRow") == 0) {
62
+ volatile VALUE indexed_row_column_indexes =
63
+ rb_ivar_get(attrs.values, rb_intern("@column_indexes"));
64
+ volatile VALUE indexed_row_row =
65
+ rb_ivar_get(attrs.values, rb_intern("@row"));
53
66
 
54
- volatile VALUE attributes_container = panko_read_attributes_container(obj);
67
+ attrs.indexed_row_column_indexes = indexed_row_column_indexes;
68
+ attrs.indexed_row_row = indexed_row_row;
69
+ attrs.is_indexed_row = true;
70
+ }
55
71
 
56
- if (RB_TYPE_P(attributes_container, T_HASH)) {
57
- attributes_ctx.attributes_hash = attributes_container;
58
- } else {
59
- if (is_lazy_attributes_set_defined == false) {
60
- volatile VALUE delegate_hash =
61
- rb_ivar_get(attributes_container, delegate_hash_id);
72
+ return attrs;
73
+ }
62
74
 
63
- if (PANKO_EMPTY_HASH(delegate_hash) == false) {
64
- attributes_ctx.attributes_hash = delegate_hash;
65
- }
66
- } else {
67
- volatile VALUE attributes_hash =
68
- rb_ivar_get(attributes_container, attributes_id);
75
+ VALUE _read_value_from_indexed_row(struct attributes attributes_ctx,
76
+ volatile VALUE member) {
77
+ volatile VALUE value = Qnil;
69
78
 
70
- if (PANKO_EMPTY_HASH(attributes_hash) == false) {
71
- attributes_ctx.attributes_hash = attributes_hash;
72
- }
73
- }
79
+ if (NIL_P(attributes_ctx.indexed_row_column_indexes) ||
80
+ NIL_P(attributes_ctx.indexed_row_row)) {
81
+ return value;
82
+ }
83
+
84
+ volatile VALUE column_index =
85
+ rb_hash_aref(attributes_ctx.indexed_row_column_indexes, member);
74
86
 
75
- attributes_ctx.types = rb_ivar_get(attributes_container, types_id);
76
- attributes_ctx.values = rb_ivar_get(attributes_container, values_id);
87
+ if (NIL_P(column_index)) {
88
+ return value;
89
+ }
77
90
 
78
- attributes_ctx.additional_types =
79
- rb_ivar_get(attributes_container, additional_types_id);
80
- attributes_ctx.tryToReadFromAdditionalTypes =
81
- PANKO_EMPTY_HASH(attributes_ctx.additional_types) == false;
91
+ volatile VALUE row = attributes_ctx.indexed_row_row;
92
+ if (NIL_P(row)) {
93
+ return value;
82
94
  }
83
95
 
84
- return attributes_ctx;
96
+ return RARRAY_AREF(row, NUM2INT(column_index));
85
97
  }
86
98
 
87
99
  VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute,
@@ -91,7 +103,11 @@ VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute,
91
103
  member = attribute->name_str;
92
104
  value = Qnil;
93
105
 
94
- if (!NIL_P(attributes_ctx.attributes_hash)) {
106
+ if (
107
+ // we have attributes_hash
108
+ !NIL_P(attributes_ctx.attributes_hash)
109
+ // It's not empty
110
+ && (attributes_ctx.attributes_hash_size > 0)) {
95
111
  volatile VALUE attribute_metadata =
96
112
  rb_hash_aref(attributes_ctx.attributes_hash, member);
97
113
 
@@ -105,7 +121,11 @@ VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute,
105
121
  }
106
122
 
107
123
  if (NIL_P(value) && !NIL_P(attributes_ctx.values)) {
108
- value = rb_hash_aref(attributes_ctx.values, member);
124
+ if (attributes_ctx.is_indexed_row == true) {
125
+ value = _read_value_from_indexed_row(attributes_ctx, member);
126
+ } else {
127
+ value = rb_hash_aref(attributes_ctx.values, member);
128
+ }
109
129
  }
110
130
 
111
131
  if (NIL_P(attribute->type) && !NIL_P(value)) {
@@ -125,31 +145,9 @@ VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute,
125
145
  return value;
126
146
  }
127
147
 
128
- VALUE detect_active_model_changes(VALUE v) {
129
- if (type_detection_ran == true) {
130
- return Qundef;
131
- }
132
-
133
- type_detection_ran = true;
134
-
135
- volatile VALUE active_model_type =
136
- rb_const_get_at(rb_cObject, rb_intern("ActiveModel"));
137
-
138
- is_lazy_attributes_set_defined =
139
- rb_const_defined(active_model_type, rb_intern("LazyAttributeSet")) > 0;
140
-
141
- return Qundef;
142
- }
143
-
144
148
  void active_record_attributes_writer(VALUE obj, VALUE attributes,
145
149
  EachAttributeFunc write_value,
146
150
  VALUE writer) {
147
- if (type_detection_ran == false) {
148
- // If ActiveModel can't be found it will throw error
149
- int isErrored;
150
- rb_protect(detect_active_model_changes, Qnil, &isErrored);
151
- }
152
-
153
151
  long i;
154
152
  struct attributes attributes_ctx = init_context(obj);
155
153
  volatile VALUE record_class = CLASS_OF(obj);
@@ -174,4 +172,10 @@ void init_active_record_attributes_writer(VALUE mPanko) {
174
172
  additional_types_id = rb_intern("@additional_types");
175
173
  type_id = rb_intern("@type");
176
174
  value_before_type_cast_id = rb_intern("@value_before_type_cast");
175
+ fetch_id = rb_intern("fetch");
177
176
  }
177
+
178
+ void panko_init_active_record(VALUE mPanko) {
179
+ init_active_record_attributes_writer(mPanko);
180
+ panko_init_type_cast(mPanko);
181
+ }
@@ -13,3 +13,5 @@ extern void active_record_attributes_writer(VALUE object, VALUE attributes,
13
13
  VALUE writer);
14
14
 
15
15
  void init_active_record_attributes_writer(VALUE mPanko);
16
+
17
+ void panko_init_active_record(VALUE mPanko);
@@ -288,7 +288,7 @@ VALUE cast_date_time_type(VALUE value) {
288
288
  return Qundef;
289
289
  }
290
290
 
291
- VALUE rescue_func() { return Qfalse; }
291
+ VALUE rescue_func(VALUE _arg, VALUE _data) { return Qfalse; }
292
292
 
293
293
  VALUE parse_json(VALUE value) {
294
294
  return rb_funcall(oj_type, oj_sc_parse_id, 2, rb_cObject, value);
@@ -2,14 +2,16 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "standard", group: [:development, :test]
6
- gem "activesupport", "~> 6.1.0"
7
- gem "activemodel", "~> 6.1.0"
8
- gem "activerecord", "~> 6.1.0", group: :test
5
+ gem "activesupport", "~> 7.2.0"
6
+ gem "activemodel", "~> 7.2.0"
7
+ gem "activerecord", "~> 7.2.0", group: :test
8
+ gem "trilogy"
9
+ gem "sqlite3", "~> 1.4"
9
10
 
10
11
  group :benchmarks do
11
- gem "sqlite3", "~> 1.4"
12
- gem "pg", ">= 0.18", "< 2.0"
12
+ gem "vernier"
13
+ gem "stackprof"
14
+ gem "pg"
13
15
  gem "benchmark-ips"
14
16
  gem "active_model_serializers", "~> 0.10"
15
17
  gem "terminal-table"
@@ -18,6 +20,7 @@ end
18
20
 
19
21
  group :test do
20
22
  gem "faker"
23
+ gem "temping"
21
24
  end
22
25
 
23
26
  group :development do
@@ -27,4 +30,12 @@ group :development do
27
30
  gem "rake-compiler"
28
31
  end
29
32
 
33
+ group :development, :test do
34
+ gem "rubocop"
35
+ gem "standard"
36
+ gem "standard-performance"
37
+ gem "rubocop-performance"
38
+ gem "rubocop-rspec"
39
+ end
40
+
30
41
  gemspec path: "../"
@@ -0,0 +1,221 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ panko_serializer (0.8.3)
5
+ activesupport
6
+ oj (> 3.11.0, < 4.0.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actionpack (7.2.3)
12
+ actionview (= 7.2.3)
13
+ activesupport (= 7.2.3)
14
+ cgi
15
+ nokogiri (>= 1.8.5)
16
+ racc
17
+ rack (>= 2.2.4, < 3.3)
18
+ rack-session (>= 1.0.1)
19
+ rack-test (>= 0.6.3)
20
+ rails-dom-testing (~> 2.2)
21
+ rails-html-sanitizer (~> 1.6)
22
+ useragent (~> 0.16)
23
+ actionview (7.2.3)
24
+ activesupport (= 7.2.3)
25
+ builder (~> 3.1)
26
+ cgi
27
+ erubi (~> 1.11)
28
+ rails-dom-testing (~> 2.2)
29
+ rails-html-sanitizer (~> 1.6)
30
+ active_model_serializers (0.10.15)
31
+ actionpack (>= 4.1)
32
+ activemodel (>= 4.1)
33
+ case_transform (>= 0.2)
34
+ jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
35
+ activemodel (7.2.3)
36
+ activesupport (= 7.2.3)
37
+ activerecord (7.2.3)
38
+ activemodel (= 7.2.3)
39
+ activesupport (= 7.2.3)
40
+ timeout (>= 0.4.0)
41
+ activesupport (7.2.3)
42
+ base64
43
+ benchmark (>= 0.3)
44
+ bigdecimal
45
+ concurrent-ruby (~> 1.0, >= 1.3.1)
46
+ connection_pool (>= 2.2.5)
47
+ drb
48
+ i18n (>= 1.6, < 2)
49
+ logger (>= 1.4.2)
50
+ minitest (>= 5.1)
51
+ securerandom (>= 0.3)
52
+ tzinfo (~> 2.0, >= 2.0.5)
53
+ appraisal (2.5.0)
54
+ bundler
55
+ rake
56
+ thor (>= 0.14.0)
57
+ ast (2.4.3)
58
+ base64 (0.3.0)
59
+ benchmark (0.5.0)
60
+ benchmark-ips (2.14.0)
61
+ bigdecimal (3.3.1)
62
+ builder (3.3.0)
63
+ byebug (12.0.0)
64
+ case_transform (0.2)
65
+ activesupport
66
+ cgi (0.5.0)
67
+ concurrent-ruby (1.3.5)
68
+ connection_pool (2.5.4)
69
+ crass (1.0.6)
70
+ diff-lcs (1.6.2)
71
+ drb (2.2.3)
72
+ erubi (1.13.1)
73
+ faker (3.5.2)
74
+ i18n (>= 1.8.11, < 2)
75
+ i18n (1.14.7)
76
+ concurrent-ruby (~> 1.0)
77
+ json (2.13.2)
78
+ jsonapi-renderer (0.2.2)
79
+ language_server-protocol (3.17.0.5)
80
+ lint_roller (1.1.0)
81
+ logger (1.7.0)
82
+ loofah (2.24.1)
83
+ crass (~> 1.0.2)
84
+ nokogiri (>= 1.12.0)
85
+ memory_profiler (1.1.0)
86
+ mini_portile2 (2.8.9)
87
+ minitest (5.26.2)
88
+ nokogiri (1.18.9-arm64-darwin)
89
+ racc (~> 1.4)
90
+ nokogiri (1.18.9-x86_64-linux-gnu)
91
+ racc (~> 1.4)
92
+ oj (3.16.11)
93
+ bigdecimal (>= 3.0)
94
+ ostruct (>= 0.2)
95
+ ostruct (0.6.3)
96
+ parallel (1.27.0)
97
+ parser (3.3.9.0)
98
+ ast (~> 2.4.1)
99
+ racc
100
+ pg (1.6.1-arm64-darwin)
101
+ pg (1.6.1-x86_64-linux)
102
+ prism (1.4.0)
103
+ racc (1.8.1)
104
+ rack (3.1.16)
105
+ rack-session (2.1.1)
106
+ base64 (>= 0.1.0)
107
+ rack (>= 3.0.0)
108
+ rack-test (2.2.0)
109
+ rack (>= 1.3)
110
+ rails-dom-testing (2.3.0)
111
+ activesupport (>= 5.0.0)
112
+ minitest
113
+ nokogiri (>= 1.6)
114
+ rails-html-sanitizer (1.6.2)
115
+ loofah (~> 2.21)
116
+ nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
117
+ rainbow (3.1.1)
118
+ rake (13.3.0)
119
+ rake-compiler (1.3.0)
120
+ rake
121
+ regexp_parser (2.11.2)
122
+ rspec (3.13.1)
123
+ rspec-core (~> 3.13.0)
124
+ rspec-expectations (~> 3.13.0)
125
+ rspec-mocks (~> 3.13.0)
126
+ rspec-core (3.13.5)
127
+ rspec-support (~> 3.13.0)
128
+ rspec-expectations (3.13.5)
129
+ diff-lcs (>= 1.2.0, < 2.0)
130
+ rspec-support (~> 3.13.0)
131
+ rspec-mocks (3.13.5)
132
+ diff-lcs (>= 1.2.0, < 2.0)
133
+ rspec-support (~> 3.13.0)
134
+ rspec-support (3.13.5)
135
+ rubocop (1.75.8)
136
+ json (~> 2.3)
137
+ language_server-protocol (~> 3.17.0.2)
138
+ lint_roller (~> 1.1.0)
139
+ parallel (~> 1.10)
140
+ parser (>= 3.3.0.2)
141
+ rainbow (>= 2.2.2, < 4.0)
142
+ regexp_parser (>= 2.9.3, < 3.0)
143
+ rubocop-ast (>= 1.44.0, < 2.0)
144
+ ruby-progressbar (~> 1.7)
145
+ unicode-display_width (>= 2.4.0, < 4.0)
146
+ rubocop-ast (1.46.0)
147
+ parser (>= 3.3.7.2)
148
+ prism (~> 1.4)
149
+ rubocop-performance (1.25.0)
150
+ lint_roller (~> 1.1)
151
+ rubocop (>= 1.75.0, < 2.0)
152
+ rubocop-ast (>= 1.38.0, < 2.0)
153
+ rubocop-rspec (3.6.0)
154
+ lint_roller (~> 1.1)
155
+ rubocop (~> 1.72, >= 1.72.1)
156
+ ruby-progressbar (1.13.0)
157
+ securerandom (0.4.1)
158
+ sqlite3 (1.7.3)
159
+ mini_portile2 (~> 2.8.0)
160
+ stackprof (0.2.27)
161
+ standard (1.50.0)
162
+ language_server-protocol (~> 3.17.0.2)
163
+ lint_roller (~> 1.0)
164
+ rubocop (~> 1.75.5)
165
+ standard-custom (~> 1.0.0)
166
+ standard-performance (~> 1.8)
167
+ standard-custom (1.0.2)
168
+ lint_roller (~> 1.0)
169
+ rubocop (~> 1.50)
170
+ standard-performance (1.8.0)
171
+ lint_roller (~> 1.1)
172
+ rubocop-performance (~> 1.25.0)
173
+ temping (4.3.0)
174
+ activerecord (>= 6.0, < 8.1)
175
+ activesupport (>= 6.0, < 8.1)
176
+ terminal-table (4.0.0)
177
+ unicode-display_width (>= 1.1.1, < 4)
178
+ thor (1.4.0)
179
+ timeout (0.4.4)
180
+ trilogy (2.9.0)
181
+ tzinfo (2.0.6)
182
+ concurrent-ruby (~> 1.0)
183
+ unicode-display_width (3.1.5)
184
+ unicode-emoji (~> 4.0, >= 4.0.4)
185
+ unicode-emoji (4.0.4)
186
+ useragent (0.16.11)
187
+ vernier (1.8.0)
188
+
189
+ PLATFORMS
190
+ arm64-darwin
191
+ x86_64-linux
192
+
193
+ DEPENDENCIES
194
+ active_model_serializers (~> 0.10)
195
+ activemodel (~> 7.2.0)
196
+ activerecord (~> 7.2.0)
197
+ activesupport (~> 7.2.0)
198
+ appraisal
199
+ benchmark-ips
200
+ byebug
201
+ faker
202
+ memory_profiler
203
+ panko_serializer!
204
+ pg
205
+ rake
206
+ rake-compiler
207
+ rspec (~> 3.0)
208
+ rubocop
209
+ rubocop-performance
210
+ rubocop-rspec
211
+ sqlite3 (~> 1.4)
212
+ stackprof
213
+ standard
214
+ standard-performance
215
+ temping
216
+ terminal-table
217
+ trilogy
218
+ vernier
219
+
220
+ BUNDLED WITH
221
+ 2.7.2
@@ -2,14 +2,16 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "standard", group: [:development, :test]
6
- gem "activesupport", "~> 7.0.0"
7
- gem "activemodel", "~> 7.0.0"
8
- gem "activerecord", "~> 7.0.0", group: :test
5
+ gem "activesupport", "~> 8.0.0"
6
+ gem "activemodel", "~> 8.0.0"
7
+ gem "activerecord", "~> 8.0.0", group: :test
8
+ gem "trilogy"
9
+ gem "sqlite3", ">= 2.1"
9
10
 
10
11
  group :benchmarks do
11
- gem "sqlite3", "~> 1.4"
12
- gem "pg", ">= 0.18", "< 2.0"
12
+ gem "vernier"
13
+ gem "stackprof"
14
+ gem "pg"
13
15
  gem "benchmark-ips"
14
16
  gem "active_model_serializers", "~> 0.10"
15
17
  gem "terminal-table"
@@ -18,6 +20,7 @@ end
18
20
 
19
21
  group :test do
20
22
  gem "faker"
23
+ gem "temping"
21
24
  end
22
25
 
23
26
  group :development do
@@ -27,4 +30,12 @@ group :development do
27
30
  gem "rake-compiler"
28
31
  end
29
32
 
33
+ group :development, :test do
34
+ gem "rubocop"
35
+ gem "standard"
36
+ gem "standard-performance"
37
+ gem "rubocop-performance"
38
+ gem "rubocop-rspec"
39
+ end
40
+
30
41
  gemspec path: "../"