panko_serializer 0.8.2 → 0.8.3

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +6 -0
  3. data/.github/workflows/docs.yml +4 -4
  4. data/.github/workflows/lint.yml +8 -14
  5. data/.github/workflows/ruby.yml +11 -7
  6. data/.gitignore +2 -0
  7. data/.rubocop.yml +29 -21
  8. data/Appraisals +20 -8
  9. data/Gemfile +11 -3
  10. data/README.md +3 -3
  11. data/Rakefile +3 -1
  12. data/benchmarks/allocs.rb +2 -2
  13. data/benchmarks/benchmarking_support.rb +2 -1
  14. data/benchmarks/bm_ams_0_10.rb +3 -7
  15. data/benchmarks/bm_panko_json.rb +2 -6
  16. data/benchmarks/bm_panko_object.rb +2 -6
  17. data/benchmarks/bm_plain_object.rb +1 -4
  18. data/benchmarks/bm_serialization_descriptor.rb +1 -1
  19. data/benchmarks/bm_to_object.rb +2 -6
  20. data/benchmarks/profile.rb +2 -2
  21. data/benchmarks/sanity.rb +2 -6
  22. data/benchmarks/setup.rb +4 -3
  23. data/benchmarks/type_casts/support.rb +0 -1
  24. data/docs/docs/associations.md +19 -6
  25. data/docs/docs/attributes.md +29 -23
  26. data/docs/docs/design-choices.md +28 -27
  27. data/docs/docs/getting-started.md +9 -3
  28. data/docs/docs/introduction.md +5 -5
  29. data/docs/docs/performance.md +0 -1
  30. data/docs/docs/response-bag.md +8 -1
  31. data/docs/docusaurus.config.js +86 -0
  32. data/docs/package-lock.json +12607 -18674
  33. data/docs/package.json +14 -7
  34. data/docs/src/css/customTheme.css +9 -0
  35. data/docs/static/CNAME +1 -0
  36. data/ext/panko_serializer/attributes_writer/active_record.c +103 -72
  37. data/ext/panko_serializer/attributes_writer/active_record.h +2 -0
  38. data/gemfiles/7.0.0.gemfile +12 -3
  39. data/gemfiles/7.0.0.gemfile.lock +62 -50
  40. data/gemfiles/7.1.0.gemfile +15 -6
  41. data/gemfiles/7.1.0.gemfile.lock +76 -59
  42. data/gemfiles/{6.1.0.gemfile → 7.2.0.gemfile} +15 -6
  43. data/gemfiles/{6.1.0.gemfile.lock → 7.2.0.gemfile.lock} +97 -65
  44. data/gemfiles/8.0.0.gemfile +39 -0
  45. data/gemfiles/8.0.0.gemfile.lock +219 -0
  46. data/lib/panko/version.rb +1 -1
  47. data/panko_serializer.gemspec +1 -1
  48. metadata +12 -12
  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
data/docs/package.json CHANGED
@@ -1,14 +1,21 @@
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",
7
6
  "write-translations": "docusaurus-write-translations",
8
7
  "version": "docusaurus-version",
9
- "rename-version": "docusaurus-rename-version"
8
+ "rename-version": "docusaurus-rename-version",
9
+ "swizzle": "docusaurus swizzle",
10
+ "deploy": "docusaurus deploy",
11
+ "docusaurus": "docusaurus"
10
12
  },
11
- "devDependencies": {
12
- "docusaurus": "^1.14.7"
13
+ "devDependencies": {},
14
+ "dependencies": {
15
+ "@docusaurus/core": "3.5.2",
16
+ "@docusaurus/preset-classic": "3.5.2",
17
+ "clsx": "^1.1.1",
18
+ "react": "^17.0.2",
19
+ "react-dom": "^17.0.2"
13
20
  }
14
- }
21
+ }
@@ -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,118 @@ 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;
12
+ static ID fetch_id;
13
+
14
+ // ActiveRecord::Result::IndexedRow
15
+ static VALUE ar_result_indexed_row = Qundef;
16
+ static int fetched_ar_result_indexed_row = 0;
17
+
18
+ VALUE fetch_ar_result_indexed_row_type() {
19
+ if (fetched_ar_result_indexed_row == 1) {
20
+ return ar_result_indexed_row;
24
21
  }
25
22
 
26
- if (is_lazy_attributes_set_defined) {
27
- return attributes_set;
23
+ fetched_ar_result_indexed_row = 1;
24
+
25
+ VALUE ar, ar_result;
26
+
27
+ ar = rb_const_get_at(rb_cObject, rb_intern("ActiveRecord"));
28
+
29
+ // ActiveRecord::Result
30
+ ar_result = rb_const_get_at(ar, rb_intern("Result"));
31
+
32
+ if (rb_const_defined_at(ar_result, rb_intern("IndexedRow")) == (int)Qtrue) {
33
+ ar_result_indexed_row = rb_const_get_at(ar_result, rb_intern("IndexedRow"));
28
34
  }
29
35
 
30
- lazy_attributes_hash = rb_ivar_get(attributes_set, attributes_id);
31
- return lazy_attributes_hash;
36
+ return ar_result_indexed_row;
32
37
  }
33
38
 
34
39
  struct attributes {
40
+ // Hash
35
41
  VALUE attributes_hash;
42
+ size_t attributes_hash_size;
36
43
 
44
+ // Hash
37
45
  VALUE types;
46
+ // Hash
38
47
  VALUE additional_types;
48
+ // heuristics
49
+ bool tryToReadFromAdditionalTypes;
50
+
51
+ // Rails <8: Hash
52
+ // Rails >=8: ActiveRecord::Result::IndexedRow
39
53
  VALUE values;
40
54
 
41
- // heuristicts
42
- bool tryToReadFromAdditionalTypes;
55
+ // Hash
56
+ VALUE indexed_row_column_indexes;
57
+ // Array or NIL
58
+ VALUE indexed_row_row;
59
+ bool is_indexed_row;
43
60
  };
44
61
 
45
62
  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;
63
+ volatile VALUE attributes_set = rb_ivar_get(obj, attributes_id);
64
+ volatile VALUE attributes_hash = rb_ivar_get(attributes_set, attributes_id);
65
+
66
+ struct attributes attrs = (struct attributes){
67
+ .attributes_hash =
68
+ PANKO_EMPTY_HASH(attributes_hash) ? Qnil : attributes_hash,
69
+ .attributes_hash_size = 0,
70
+
71
+ .types = rb_ivar_get(attributes_set, types_id),
72
+ .additional_types = rb_ivar_get(attributes_set, additional_types_id),
73
+ .tryToReadFromAdditionalTypes =
74
+ PANKO_EMPTY_HASH(rb_ivar_get(attributes_set, additional_types_id)) ==
75
+ false,
76
+
77
+ .values = rb_ivar_get(attributes_set, values_id),
78
+ .is_indexed_row = false,
79
+ .indexed_row_column_indexes = Qnil,
80
+ .indexed_row_row = Qnil,
81
+ };
82
+
83
+ if (attrs.attributes_hash != Qnil) {
84
+ attrs.attributes_hash_size = RHASH_SIZE(attrs.attributes_hash);
85
+ }
51
86
 
52
- attributes_ctx.tryToReadFromAdditionalTypes = false;
87
+ if (CLASS_OF(attrs.values) == fetch_ar_result_indexed_row_type()) {
88
+ volatile VALUE indexed_row_column_indexes =
89
+ rb_ivar_get(attrs.values, rb_intern("@column_indexes"));
53
90
 
54
- volatile VALUE attributes_container = panko_read_attributes_container(obj);
91
+ volatile VALUE indexed_row_row =
92
+ rb_ivar_get(attrs.values, rb_intern("@row"));
55
93
 
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);
94
+ attrs.indexed_row_column_indexes = indexed_row_column_indexes;
95
+ attrs.indexed_row_row = indexed_row_row;
96
+ attrs.is_indexed_row = true;
97
+ }
62
98
 
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);
99
+ return attrs;
100
+ }
69
101
 
70
- if (PANKO_EMPTY_HASH(attributes_hash) == false) {
71
- attributes_ctx.attributes_hash = attributes_hash;
72
- }
73
- }
102
+ VALUE _read_value_from_indexed_row(struct attributes attributes_ctx,
103
+ volatile VALUE member) {
104
+ volatile VALUE value = Qnil;
74
105
 
75
- attributes_ctx.types = rb_ivar_get(attributes_container, types_id);
76
- attributes_ctx.values = rb_ivar_get(attributes_container, values_id);
106
+ if (NIL_P(attributes_ctx.indexed_row_column_indexes) ||
107
+ NIL_P(attributes_ctx.indexed_row_row)) {
108
+ return value;
109
+ }
110
+
111
+ volatile VALUE column_index =
112
+ rb_hash_aref(attributes_ctx.indexed_row_column_indexes, member);
113
+
114
+ if (NIL_P(column_index)) {
115
+ return value;
116
+ }
77
117
 
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;
118
+ volatile VALUE row = attributes_ctx.indexed_row_row;
119
+ if (NIL_P(row)) {
120
+ return value;
82
121
  }
83
122
 
84
- return attributes_ctx;
123
+ return RARRAY_AREF(row, NUM2INT(column_index));
85
124
  }
86
125
 
87
126
  VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute,
@@ -91,7 +130,11 @@ VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute,
91
130
  member = attribute->name_str;
92
131
  value = Qnil;
93
132
 
94
- if (!NIL_P(attributes_ctx.attributes_hash)) {
133
+ if (
134
+ // we have attributes_hash
135
+ !NIL_P(attributes_ctx.attributes_hash)
136
+ // It's not empty
137
+ && (attributes_ctx.attributes_hash_size > 0)) {
95
138
  volatile VALUE attribute_metadata =
96
139
  rb_hash_aref(attributes_ctx.attributes_hash, member);
97
140
 
@@ -105,7 +148,11 @@ VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute,
105
148
  }
106
149
 
107
150
  if (NIL_P(value) && !NIL_P(attributes_ctx.values)) {
108
- value = rb_hash_aref(attributes_ctx.values, member);
151
+ if (attributes_ctx.is_indexed_row == true) {
152
+ value = _read_value_from_indexed_row(attributes_ctx, member);
153
+ } else {
154
+ value = rb_hash_aref(attributes_ctx.values, member);
155
+ }
109
156
  }
110
157
 
111
158
  if (NIL_P(attribute->type) && !NIL_P(value)) {
@@ -125,31 +172,9 @@ VALUE read_attribute(struct attributes attributes_ctx, Attribute attribute,
125
172
  return value;
126
173
  }
127
174
 
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
175
  void active_record_attributes_writer(VALUE obj, VALUE attributes,
145
176
  EachAttributeFunc write_value,
146
177
  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
178
  long i;
154
179
  struct attributes attributes_ctx = init_context(obj);
155
180
  volatile VALUE record_class = CLASS_OF(obj);
@@ -174,4 +199,10 @@ void init_active_record_attributes_writer(VALUE mPanko) {
174
199
  additional_types_id = rb_intern("@additional_types");
175
200
  type_id = rb_intern("@type");
176
201
  value_before_type_cast_id = rb_intern("@value_before_type_cast");
202
+ fetch_id = rb_intern("fetch");
177
203
  }
204
+
205
+ void panko_init_active_record(VALUE mPanko) {
206
+ init_active_record_attributes_writer(mPanko);
207
+ panko_init_type_cast(mPanko);
208
+ }
@@ -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);
@@ -2,14 +2,15 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "standard", group: [:development, :test]
5
+ gem "sqlite3", "~> 1.4"
6
6
  gem "activesupport", "~> 7.0.0"
7
7
  gem "activemodel", "~> 7.0.0"
8
8
  gem "activerecord", "~> 7.0.0", group: :test
9
9
 
10
10
  group :benchmarks do
11
- gem "sqlite3", "~> 1.4"
12
- gem "pg", ">= 0.18", "< 2.0"
11
+ gem "vernier"
12
+ gem "stackprof"
13
+ gem "pg"
13
14
  gem "benchmark-ips"
14
15
  gem "active_model_serializers", "~> 0.10"
15
16
  gem "terminal-table"
@@ -27,4 +28,12 @@ group :development do
27
28
  gem "rake-compiler"
28
29
  end
29
30
 
31
+ group :development, :test do
32
+ gem "rubocop"
33
+ gem "standard"
34
+ gem "standard-performance"
35
+ gem "rubocop-performance"
36
+ gem "rubocop-rspec"
37
+ end
38
+
30
39
  gemspec path: "../"
@@ -1,22 +1,22 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- panko_serializer (0.8.1)
4
+ panko_serializer (0.8.3)
5
5
  activesupport
6
6
  oj (> 3.11.0, < 4.0.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actionpack (7.0.8.1)
12
- actionview (= 7.0.8.1)
13
- activesupport (= 7.0.8.1)
11
+ actionpack (7.0.8.5)
12
+ actionview (= 7.0.8.5)
13
+ activesupport (= 7.0.8.5)
14
14
  rack (~> 2.0, >= 2.2.4)
15
15
  rack-test (>= 0.6.3)
16
16
  rails-dom-testing (~> 2.0)
17
17
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
18
- actionview (7.0.8.1)
19
- activesupport (= 7.0.8.1)
18
+ actionview (7.0.8.5)
19
+ activesupport (= 7.0.8.5)
20
20
  builder (~> 3.1)
21
21
  erubi (~> 1.4)
22
22
  rails-dom-testing (~> 2.0)
@@ -26,12 +26,12 @@ GEM
26
26
  activemodel (>= 4.1)
27
27
  case_transform (>= 0.2)
28
28
  jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
29
- activemodel (7.0.8.1)
30
- activesupport (= 7.0.8.1)
31
- activerecord (7.0.8.1)
32
- activemodel (= 7.0.8.1)
33
- activesupport (= 7.0.8.1)
34
- activesupport (7.0.8.1)
29
+ activemodel (7.0.8.5)
30
+ activesupport (= 7.0.8.5)
31
+ activerecord (7.0.8.5)
32
+ activemodel (= 7.0.8.5)
33
+ activesupport (= 7.0.8.5)
34
+ activesupport (7.0.8.5)
35
35
  concurrent-ruby (~> 1.0, >= 1.0.2)
36
36
  i18n (>= 1.6, < 2)
37
37
  minitest (>= 5.1)
@@ -41,38 +41,42 @@ GEM
41
41
  rake
42
42
  thor (>= 0.14.0)
43
43
  ast (2.4.2)
44
- benchmark-ips (2.13.0)
45
- builder (3.2.4)
44
+ benchmark-ips (2.14.0)
45
+ bigdecimal (3.1.8)
46
+ builder (3.3.0)
46
47
  byebug (11.1.3)
47
48
  case_transform (0.2)
48
49
  activesupport
49
- concurrent-ruby (1.2.3)
50
+ concurrent-ruby (1.3.4)
50
51
  crass (1.0.6)
51
52
  diff-lcs (1.5.1)
52
- erubi (1.12.0)
53
- faker (3.2.3)
53
+ erubi (1.13.0)
54
+ faker (3.5.1)
54
55
  i18n (>= 1.8.11, < 2)
55
- i18n (1.14.4)
56
+ i18n (1.14.6)
56
57
  concurrent-ruby (~> 1.0)
57
- json (2.7.1)
58
+ json (2.7.5)
58
59
  jsonapi-renderer (0.2.2)
59
60
  language_server-protocol (3.17.0.3)
60
61
  lint_roller (1.1.0)
61
62
  loofah (2.22.0)
62
63
  crass (~> 1.0.2)
63
64
  nokogiri (>= 1.12.0)
64
- memory_profiler (1.0.1)
65
- minitest (5.22.3)
66
- nokogiri (1.16.3-arm64-darwin)
65
+ memory_profiler (1.1.0)
66
+ minitest (5.25.4)
67
+ nokogiri (1.16.7-arm64-darwin)
67
68
  racc (~> 1.4)
68
- oj (3.16.1)
69
- parallel (1.24.0)
70
- parser (3.3.0.5)
69
+ oj (3.16.7)
70
+ bigdecimal (>= 3.0)
71
+ ostruct (>= 0.2)
72
+ ostruct (0.6.0)
73
+ parallel (1.26.3)
74
+ parser (3.3.5.1)
71
75
  ast (~> 2.4.1)
72
76
  racc
73
- pg (1.5.5)
74
- racc (1.7.3)
75
- rack (2.2.8.1)
77
+ pg (1.5.9)
78
+ racc (1.8.1)
79
+ rack (2.2.10)
76
80
  rack-test (2.1.0)
77
81
  rack (>= 1.3)
78
82
  rails-dom-testing (2.2.0)
@@ -84,59 +88,61 @@ GEM
84
88
  nokogiri (~> 1.14)
85
89
  rainbow (3.1.1)
86
90
  rake (13.2.1)
87
- rake-compiler (1.2.1)
91
+ rake-compiler (1.2.8)
88
92
  rake
89
- regexp_parser (2.9.0)
90
- rexml (3.2.6)
93
+ regexp_parser (2.9.2)
91
94
  rspec (3.13.0)
92
95
  rspec-core (~> 3.13.0)
93
96
  rspec-expectations (~> 3.13.0)
94
97
  rspec-mocks (~> 3.13.0)
95
- rspec-core (3.13.0)
98
+ rspec-core (3.13.2)
96
99
  rspec-support (~> 3.13.0)
97
- rspec-expectations (3.13.0)
100
+ rspec-expectations (3.13.3)
98
101
  diff-lcs (>= 1.2.0, < 2.0)
99
102
  rspec-support (~> 3.13.0)
100
- rspec-mocks (3.13.0)
103
+ rspec-mocks (3.13.2)
101
104
  diff-lcs (>= 1.2.0, < 2.0)
102
105
  rspec-support (~> 3.13.0)
103
106
  rspec-support (3.13.1)
104
- rubocop (1.62.1)
107
+ rubocop (1.66.1)
105
108
  json (~> 2.3)
106
109
  language_server-protocol (>= 3.17.0)
107
110
  parallel (~> 1.10)
108
111
  parser (>= 3.3.0.2)
109
112
  rainbow (>= 2.2.2, < 4.0)
110
- regexp_parser (>= 1.8, < 3.0)
111
- rexml (>= 3.2.5, < 4.0)
112
- rubocop-ast (>= 1.31.1, < 2.0)
113
+ regexp_parser (>= 2.4, < 3.0)
114
+ rubocop-ast (>= 1.32.2, < 2.0)
113
115
  ruby-progressbar (~> 1.7)
114
116
  unicode-display_width (>= 2.4.0, < 3.0)
115
- rubocop-ast (1.31.2)
116
- parser (>= 3.3.0.4)
117
- rubocop-performance (1.20.2)
117
+ rubocop-ast (1.33.0)
118
+ parser (>= 3.3.1.0)
119
+ rubocop-performance (1.22.1)
118
120
  rubocop (>= 1.48.1, < 2.0)
119
- rubocop-ast (>= 1.30.0, < 2.0)
121
+ rubocop-ast (>= 1.31.1, < 2.0)
122
+ rubocop-rspec (3.2.0)
123
+ rubocop (~> 1.61)
120
124
  ruby-progressbar (1.13.0)
121
125
  sqlite3 (1.7.3-arm64-darwin)
122
- standard (1.34.0)
126
+ stackprof (0.2.26)
127
+ standard (1.41.1)
123
128
  language_server-protocol (~> 3.17.0.2)
124
129
  lint_roller (~> 1.0)
125
- rubocop (~> 1.60)
130
+ rubocop (~> 1.66.0)
126
131
  standard-custom (~> 1.0.0)
127
- standard-performance (~> 1.3)
132
+ standard-performance (~> 1.5)
128
133
  standard-custom (1.0.2)
129
134
  lint_roller (~> 1.0)
130
135
  rubocop (~> 1.50)
131
- standard-performance (1.3.1)
136
+ standard-performance (1.5.0)
132
137
  lint_roller (~> 1.1)
133
- rubocop-performance (~> 1.20.2)
138
+ rubocop-performance (~> 1.22.0)
134
139
  terminal-table (3.0.2)
135
140
  unicode-display_width (>= 1.1.1, < 3)
136
- thor (1.3.1)
141
+ thor (1.3.2)
137
142
  tzinfo (2.0.6)
138
143
  concurrent-ruby (~> 1.0)
139
- unicode-display_width (2.5.0)
144
+ unicode-display_width (2.6.0)
145
+ vernier (1.3.0)
140
146
 
141
147
  PLATFORMS
142
148
  arm64-darwin-23
@@ -152,13 +158,19 @@ DEPENDENCIES
152
158
  faker
153
159
  memory_profiler
154
160
  panko_serializer!
155
- pg (>= 0.18, < 2.0)
161
+ pg
156
162
  rake
157
163
  rake-compiler
158
164
  rspec (~> 3.0)
165
+ rubocop
166
+ rubocop-performance
167
+ rubocop-rspec
159
168
  sqlite3 (~> 1.4)
169
+ stackprof
160
170
  standard
171
+ standard-performance
161
172
  terminal-table
173
+ vernier
162
174
 
163
175
  BUNDLED WITH
164
176
  2.4.6
@@ -2,14 +2,15 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "standard", group: [:development, :test]
6
- gem "activesupport", "~> 7.1.0"
7
- gem "activemodel", "~> 7.1.0"
8
- gem "activerecord", "~> 7.1.0", group: :test
5
+ gem "sqlite3", "~> 1.4"
6
+ gem "activesupport", "~> 7.1.5"
7
+ gem "activemodel", "~> 7.1.5"
8
+ gem "activerecord", "~> 7.1.5", group: :test
9
9
 
10
10
  group :benchmarks do
11
- gem "sqlite3", "~> 1.4"
12
- gem "pg", ">= 0.18", "< 2.0"
11
+ gem "vernier"
12
+ gem "stackprof"
13
+ gem "pg"
13
14
  gem "benchmark-ips"
14
15
  gem "active_model_serializers", "~> 0.10"
15
16
  gem "terminal-table"
@@ -27,4 +28,12 @@ group :development do
27
28
  gem "rake-compiler"
28
29
  end
29
30
 
31
+ group :development, :test do
32
+ gem "rubocop"
33
+ gem "standard"
34
+ gem "standard-performance"
35
+ gem "rubocop-performance"
36
+ gem "rubocop-rspec"
37
+ end
38
+
30
39
  gemspec path: "../"