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.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +6 -0
- data/.github/workflows/database_matrix.yml +85 -0
- data/.github/workflows/docs.yml +5 -5
- data/.github/workflows/lint.yml +10 -16
- data/.github/workflows/{ruby.yml → tests.yml} +9 -22
- data/.gitignore +2 -0
- data/.rubocop.yml +29 -21
- data/Appraisals +23 -12
- data/Gemfile +12 -3
- data/README.md +4 -4
- data/Rakefile +3 -1
- data/benchmarks/allocs.rb +2 -2
- data/benchmarks/benchmarking_support.rb +2 -1
- data/benchmarks/bm_ams_0_10.rb +3 -7
- data/benchmarks/bm_panko_json.rb +2 -6
- data/benchmarks/bm_panko_object.rb +2 -6
- data/benchmarks/bm_plain_object.rb +1 -4
- data/benchmarks/bm_serialization_descriptor.rb +1 -1
- data/benchmarks/bm_to_object.rb +2 -6
- data/benchmarks/profile.rb +2 -2
- data/benchmarks/sanity.rb +2 -6
- data/benchmarks/setup.rb +4 -3
- data/benchmarks/type_casts/support.rb +0 -1
- data/docs/docs/associations.md +28 -15
- data/docs/docs/attributes.md +33 -20
- data/docs/docs/design-choices.md +36 -35
- data/docs/docs/getting-started.md +13 -7
- data/docs/docs/introduction.md +6 -6
- data/docs/docs/performance.md +4 -5
- data/docs/docs/response-bag.md +13 -6
- data/docs/docusaurus.config.js +86 -0
- data/docs/package-lock.json +13999 -18188
- data/docs/package.json +10 -6
- data/docs/src/css/customTheme.css +9 -0
- data/docs/static/CNAME +1 -0
- data/ext/panko_serializer/attributes_writer/active_record.c +81 -77
- data/ext/panko_serializer/attributes_writer/active_record.h +2 -0
- data/ext/panko_serializer/attributes_writer/type_cast/type_cast.c +1 -1
- data/gemfiles/{6.1.0.gemfile → 7.2.0.gemfile} +17 -6
- data/gemfiles/7.2.0.gemfile.lock +221 -0
- data/gemfiles/{7.0.0.gemfile → 8.0.0.gemfile} +17 -6
- data/gemfiles/8.0.0.gemfile.lock +239 -0
- data/gemfiles/{7.1.0.gemfile → 8.1.0.gemfile} +17 -6
- data/gemfiles/8.1.0.gemfile.lock +248 -0
- data/lib/panko/version.rb +1 -1
- data/panko_serializer.gemspec +1 -1
- metadata +16 -21
- data/.standard.yml +0 -5
- data/docs/.DS_Store +0 -0
- data/docs/README.md +0 -198
- data/docs/core/Footer.js +0 -80
- data/docs/i18n/en.json +0 -50
- data/docs/siteConfig.js +0 -80
- data/gemfiles/6.1.0.gemfile.lock +0 -166
- data/gemfiles/7.0.0.gemfile.lock +0 -164
- 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
|
|
5
|
-
"build": "docusaurus
|
|
6
|
-
"
|
|
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
|
-
"
|
|
12
|
-
"docusaurus": "^
|
|
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
|
|
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
|
-
//
|
|
42
|
-
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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
|
-
|
|
64
|
-
|
|
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
|
-
|
|
71
|
-
|
|
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
|
-
|
|
76
|
-
|
|
87
|
+
if (NIL_P(column_index)) {
|
|
88
|
+
return value;
|
|
89
|
+
}
|
|
77
90
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
|
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 (
|
|
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
|
-
|
|
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
|
+
}
|
|
@@ -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 "
|
|
6
|
-
gem "
|
|
7
|
-
gem "
|
|
8
|
-
gem "
|
|
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 "
|
|
12
|
-
gem "
|
|
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 "
|
|
6
|
-
gem "
|
|
7
|
-
gem "
|
|
8
|
-
gem "
|
|
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 "
|
|
12
|
-
gem "
|
|
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: "../"
|