meta-api 0.0.2 → 0.0.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.
- checksums.yaml +4 -4
- data/.gitignore +4 -4
- data/CHANGELOG.md +6 -1
- data/Gemfile.lock +1 -1
- data/README.md +9 -7
- data/docs/Rails.md +61 -0
- data/docs//345/246/202/344/275/225/350/264/241/347/214/256.md +10 -0
- data/docs//346/225/231/347/250/213.md +21 -21
- data/examples/rails_app/.gitattributes +5 -0
- data/examples/rails_app/.gitignore +23 -0
- data/examples/rails_app/.rspec +1 -0
- data/examples/rails_app/.ruby-version +1 -0
- data/examples/rails_app/Gemfile +29 -0
- data/examples/rails_app/Gemfile.lock +190 -0
- data/examples/rails_app/README.md +11 -0
- data/examples/rails_app/Rakefile +6 -0
- data/examples/rails_app/app/controllers/application_controller.rb +7 -0
- data/examples/rails_app/app/controllers/concerns/.keep +0 -0
- data/examples/rails_app/app/controllers/data_controller.rb +63 -0
- data/examples/rails_app/app/controllers/swagger_controller.rb +13 -0
- data/examples/rails_app/app/models/concerns/.keep +0 -0
- data/examples/rails_app/bin/rails +4 -0
- data/examples/rails_app/bin/rake +4 -0
- data/examples/rails_app/bin/setup +25 -0
- data/examples/rails_app/config/application.rb +39 -0
- data/examples/rails_app/config/boot.rb +3 -0
- data/examples/rails_app/config/credentials.yml.enc +1 -0
- data/examples/rails_app/config/environment.rb +5 -0
- data/examples/rails_app/config/environments/development.rb +51 -0
- data/examples/rails_app/config/environments/production.rb +65 -0
- data/examples/rails_app/config/environments/test.rb +50 -0
- data/examples/rails_app/config/initializers/cors.rb +16 -0
- data/examples/rails_app/config/initializers/filter_parameter_logging.rb +8 -0
- data/examples/rails_app/config/initializers/inflections.rb +16 -0
- data/examples/rails_app/config/initializers/meta_rails_plugin.rb +3 -0
- data/examples/rails_app/config/locales/en.yml +33 -0
- data/examples/rails_app/config/puma.rb +43 -0
- data/examples/rails_app/config/routes.rb +13 -0
- data/examples/rails_app/config.ru +6 -0
- data/examples/rails_app/lib/tasks/.keep +0 -0
- data/examples/rails_app/log/.keep +0 -0
- data/examples/rails_app/public/robots.txt +1 -0
- data/examples/rails_app/spec/data_controller_spec.rb +60 -0
- data/examples/rails_app/spec/rails_helper.rb +55 -0
- data/examples/rails_app/spec/spec_helper.rb +94 -0
- data/examples/rails_app/spec/swagger_controller_spec.rb +13 -0
- data/examples/rails_app/tmp/.keep +0 -0
- data/examples/rails_app/tmp/pids/.keep +0 -0
- data/lib/meta/application/execution.rb +3 -11
- data/lib/meta/application/{meta.rb → metadata.rb} +5 -15
- data/lib/meta/application/parameters.rb +47 -0
- data/lib/meta/application/route.rb +2 -2
- data/lib/meta/json_schema/builders/array_schema_builder.rb +11 -10
- data/lib/meta/json_schema/builders/dynamic_schema_builder.rb +23 -0
- data/lib/meta/json_schema/builders/object_schema_builder.rb +4 -18
- data/lib/meta/json_schema/builders/ref_schema_builder.rb +19 -0
- data/lib/meta/json_schema/builders/schema_builder_tool.rb +26 -1
- data/lib/meta/json_schema/schemas/array_schema.rb +3 -3
- data/lib/meta/json_schema/schemas/base_schema.rb +29 -69
- data/lib/meta/json_schema/schemas/dynamic_schema.rb +29 -0
- data/lib/meta/json_schema/schemas/object_schema.rb +27 -113
- data/lib/meta/json_schema/schemas/properties.rb +157 -0
- data/lib/meta/json_schema/schemas/ref_schema.rb +35 -0
- data/lib/meta/json_schema/schemas.rb +0 -2
- data/lib/meta/json_schema/support/schema_options.rb +21 -12
- data/lib/meta/json_schema.rb +2 -0
- data/lib/meta/rails.rb +98 -0
- data/lib/meta/route_dsl/parameters_builder.rb +2 -1
- data/lib/meta/swagger_doc.rb +5 -2
- data/lib/meta/utils/kwargs/builder.rb +115 -0
- data/lib/meta/utils/{kwargs.rb → kwargs/check.rb} +22 -22
- data/meta-api.gemspec +1 -1
- metadata +55 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b4cc662a6a580592192bcc29cd4367249d1bbba4678aee0f95d75d9ff01c219
|
4
|
+
data.tar.gz: 5bd5ed38531f286ba422a57b8da12aceb0c13a063be1d5c0895c5073abd5a868
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b54219704c980114719f6cd9d53d1d77036a194eddd991610b88fe36f52ecf9e04abccfbfaad0d9acd527ba8edc294b333ca403752ff6a0a0f753c30e93d22cd
|
7
|
+
data.tar.gz: 564d6e0dfcae8a11aa59bc740e7fff4901326eff996171539156ae064ce205173c548f295e6d0d8cb085fd4de3b829c7141e5cff5aa343e658f8b2475b004d02
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -17,7 +17,7 @@ $ git clone https://github.com/yetrun/web-frame-example.git
|
|
17
17
|
在 Gemfile 中添加:
|
18
18
|
|
19
19
|
```ruby
|
20
|
-
gem 'meta-api', '~> 0.0.
|
20
|
+
gem 'meta-api', '~> 0.0.3' # Meta 框架处于快速开发阶段,引入时应尽量固定版本
|
21
21
|
```
|
22
22
|
|
23
23
|
然后在 Ruby 代码中引用:
|
@@ -26,6 +26,8 @@ gem 'meta-api', '~> 0.0.1' # Meta 框架处于快速开发阶段,引入时应
|
|
26
26
|
require 'meta/api'
|
27
27
|
```
|
28
28
|
|
29
|
+
> 或者可嵌入到 Rails 项目中使用,参见[为 Rails 项目带来参数验证效果](docs/Rails.md)。
|
30
|
+
|
29
31
|
## 快速上手
|
30
32
|
|
31
33
|
### 定义 API
|
@@ -37,7 +39,7 @@ class NotesAPI < Meta::Application
|
|
37
39
|
get '/notes' do
|
38
40
|
title '查看笔记列表'
|
39
41
|
status 200 do
|
40
|
-
expose :notes, type: 'array',
|
42
|
+
expose :notes, type: 'array', ref: NoteEntity
|
41
43
|
end
|
42
44
|
action do
|
43
45
|
render :notes, Note.all
|
@@ -47,10 +49,10 @@ class NotesAPI < Meta::Application
|
|
47
49
|
post '/notes' do
|
48
50
|
title '创建新的笔记'
|
49
51
|
params do
|
50
|
-
param :note, type: 'object',
|
52
|
+
param :note, type: 'object', ref: NoteEntity
|
51
53
|
end
|
52
54
|
status 201 do
|
53
|
-
expose :note, type: 'object',
|
55
|
+
expose :note, type: 'object', ref: NoteEntity
|
54
56
|
end
|
55
57
|
action do
|
56
58
|
note = Note.create!(params[:note])
|
@@ -65,7 +67,7 @@ class NotesAPI < Meta::Application
|
|
65
67
|
param :id, type: 'integer'
|
66
68
|
end
|
67
69
|
status 200 do
|
68
|
-
expose :note, type: 'object',
|
70
|
+
expose :note, type: 'object', ref: NoteEntity
|
69
71
|
end
|
70
72
|
action do
|
71
73
|
note = Note.find(params[:id])
|
@@ -76,10 +78,10 @@ class NotesAPI < Meta::Application
|
|
76
78
|
put '/notes/:id' do
|
77
79
|
title '更新笔记'
|
78
80
|
params do
|
79
|
-
param :note, type: 'object',
|
81
|
+
param :note, type: 'object', ref: NoteEntity
|
80
82
|
end
|
81
83
|
status 200 do
|
82
|
-
expose :note, type: 'object',
|
84
|
+
expose :note, type: 'object', ref: NoteEntity
|
83
85
|
end
|
84
86
|
action do
|
85
87
|
note = Note.find(params[:id])
|
data/docs/Rails.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# 作为 Rails 插件
|
2
|
+
|
3
|
+
## 安装
|
4
|
+
|
5
|
+
首先,你需要将其安装在 Rails 项目中:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
gem 'meta-api', '~> 0.0.3' # 0.0.3 版本以上才提供 Rails 插件功能
|
9
|
+
```
|
10
|
+
|
11
|
+
在 config/initializers 目录下创建一个文件,例如 `meta_rails_plugin.rb`,并写入:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
require 'meta/rails'
|
15
|
+
|
16
|
+
Meta::Rails.setup
|
17
|
+
```
|
18
|
+
|
19
|
+
在 `application_controller.rb` 下加入:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
class ApplicationController < ActionController::API
|
23
|
+
# 引入插件,同时引入 route 宏、params_on_schema 方法、json_on_schema 渲染器
|
24
|
+
include Meta::Rails::Plugin
|
25
|
+
|
26
|
+
# 处理参数验证错误
|
27
|
+
rescue_from Meta::Errors::ParameterInvalid do |e|
|
28
|
+
render json: e.errors, status: :bad_request
|
29
|
+
end
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
这样,一切就准备好了。
|
34
|
+
|
35
|
+
## 示例
|
36
|
+
|
37
|
+
接口定义:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
class UsersController < ApplicationController
|
41
|
+
route '/users', :post do
|
42
|
+
params do
|
43
|
+
param :user, required: true do
|
44
|
+
param :name, type: 'string'
|
45
|
+
param :age, type: 'integer'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
def create
|
50
|
+
user = User.create!(params_on_schema[:user])
|
51
|
+
render json_on_schema: user
|
52
|
+
end
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
生成 Swagger 文档:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
Rails.application.eager_load! # 需要提前加载所有常量
|
60
|
+
Meta::Rails::Plugin.generate_swagger_doc(ApplicationController)
|
61
|
+
```
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
现有的 Web API 框架并不关注文档的问题,文档往往是作为插件挂载到框架上的。但是,文档和业务实现并不需要割裂开,它们在很大程度上应该是耦合在一起的。比方说,某个接口我定义了参数如此,就该自动生成一致的文档向前端告知;同样,当我提供了文档是如此后,我的接口实现就改自动地约束为这样实现。
|
4
4
|
|
5
|
-
Meta
|
5
|
+
Meta 框架天生就是将文档和实现统一起来的,并始终致力于此(如果真的有什么不一致或者不到位的地方,那只能说框架实现上尚有欠缺,并不能从思想上说本该如此)。Meta 框架与 Swagger 合作,致力于产生符合 Restful 和社区规范的文档格式。它提供了几乎完整的描述接口信息的宏命令,并且在描述接口的同时就能基本实现接口的一些约束,其中最重要的莫过于对参数和返回值的声明。
|
6
6
|
|
7
7
|
## 准备工作
|
8
8
|
|
@@ -771,15 +771,15 @@ class UserEntity < Meta::Entity
|
|
771
771
|
end
|
772
772
|
```
|
773
773
|
|
774
|
-
然后在 `params` 和 `status` 内部使用 `
|
774
|
+
然后在 `params` 和 `status` 内部使用 `ref` 引用这个实体:
|
775
775
|
|
776
776
|
```ruby
|
777
777
|
params do
|
778
|
-
param :user,
|
778
|
+
param :user, ref: UserEntity
|
779
779
|
end
|
780
780
|
|
781
781
|
status 200 do
|
782
|
-
expose :user,
|
782
|
+
expose :user, ref: UserEntity
|
783
783
|
end
|
784
784
|
```
|
785
785
|
|
@@ -789,11 +789,11 @@ end
|
|
789
789
|
>
|
790
790
|
> ```ruby
|
791
791
|
> params do
|
792
|
-
>
|
792
|
+
> property :user, ref: UserEntity
|
793
793
|
> end
|
794
794
|
>
|
795
795
|
> status 200 do
|
796
|
-
>
|
796
|
+
> property :user, ref: UserEntity
|
797
797
|
> end
|
798
798
|
> ```
|
799
799
|
|
@@ -805,7 +805,7 @@ end
|
|
805
805
|
|
806
806
|
```ruby
|
807
807
|
params do
|
808
|
-
param :users, type: "array",
|
808
|
+
param :users, type: "array", ref: UserEntity
|
809
809
|
end
|
810
810
|
```
|
811
811
|
|
@@ -887,7 +887,7 @@ end
|
|
887
887
|
```ruby
|
888
888
|
get '/articles' do
|
889
889
|
status 200 do
|
890
|
-
expose :articles,
|
890
|
+
expose :articles, ref: ArticleEntity
|
891
891
|
end
|
892
892
|
action do
|
893
893
|
articles = Article.all
|
@@ -901,7 +901,7 @@ end
|
|
901
901
|
```ruby
|
902
902
|
get '/articles/:id' do
|
903
903
|
status 200 do
|
904
|
-
expose :article,
|
904
|
+
expose :article, ref: ArticleEntity
|
905
905
|
end
|
906
906
|
action do
|
907
907
|
article = Article.find(request.params['id'])
|
@@ -915,7 +915,7 @@ end
|
|
915
915
|
```ruby
|
916
916
|
get '/articles/:id' do
|
917
917
|
status 200 do
|
918
|
-
expose :article,
|
918
|
+
expose :article, ref: ArticleEntity.lock_scope('full')
|
919
919
|
end
|
920
920
|
action do
|
921
921
|
article = Article.find(request.params['id'])
|
@@ -929,14 +929,14 @@ end
|
|
929
929
|
```ruby
|
930
930
|
post '/articles' do
|
931
931
|
params do
|
932
|
-
param :article,
|
932
|
+
param :article, ref: ArticleEntity.lock_scope('on_create')
|
933
933
|
end
|
934
934
|
...
|
935
935
|
end
|
936
936
|
|
937
937
|
put '/articles/:id' do
|
938
938
|
params do
|
939
|
-
param :article,
|
939
|
+
param :article, ref: ArticleEntity.lock_scope('on_update')
|
940
940
|
end
|
941
941
|
...
|
942
942
|
end
|
@@ -994,7 +994,7 @@ end
|
|
994
994
|
|
995
995
|
```ruby
|
996
996
|
params do
|
997
|
-
param :article,
|
997
|
+
param :article, ref: ArticleEntity
|
998
998
|
end
|
999
999
|
```
|
1000
1000
|
|
@@ -1034,10 +1034,10 @@ end
|
|
1034
1034
|
|
1035
1035
|
### 多态参数和返回值
|
1036
1036
|
|
1037
|
-
定义属性时可定义多态类型,`
|
1037
|
+
定义属性时可定义多态类型,`dynamic_ref` 选项可接受一个块,它根据值来返回指定的类型:
|
1038
1038
|
|
1039
1039
|
```ruby
|
1040
|
-
property :target,
|
1040
|
+
property :target, dynamic_ref: ->(value) {
|
1041
1041
|
# 根据 value.target_type 值返回实体类型
|
1042
1042
|
# 例如,value.target_type == 'UserEntity',将返回 UserEntity 类
|
1043
1043
|
value.target_type.constantize
|
@@ -1047,7 +1047,7 @@ property :target, using: ->(value) {
|
|
1047
1047
|
或者接受一个 Hash,这时可提供 `one_of` 选项为文档生成提供加成:
|
1048
1048
|
|
1049
1049
|
```ruby
|
1050
|
-
property :animal,
|
1050
|
+
property :animal, dynamic_ref: {
|
1051
1051
|
one_of: [CatEntity, DogEntity, PigEntity],
|
1052
1052
|
resolve: ->(value) { value.animal_type.constantize }
|
1053
1053
|
}
|
@@ -1098,7 +1098,7 @@ Meta.config.render_validation = false # 渲染时不执行数据验证
|
|
1098
1098
|
|
1099
1099
|
```ruby
|
1100
1100
|
params do
|
1101
|
-
param :user,
|
1101
|
+
param :user, ref: UserEntity
|
1102
1102
|
end
|
1103
1103
|
|
1104
1104
|
|
@@ -1109,7 +1109,7 @@ end
|
|
1109
1109
|
但也可以将包裹的外层字段去掉,即将 `UserEntity` 直接用在顶层:
|
1110
1110
|
|
1111
1111
|
```ruby
|
1112
|
-
params
|
1112
|
+
params ref: UserEntity
|
1113
1113
|
|
1114
1114
|
|
1115
1115
|
# 接受如下格式的数据
|
@@ -1119,7 +1119,7 @@ params using: UserEntity
|
|
1119
1119
|
这个方案同时也支持数组:
|
1120
1120
|
|
1121
1121
|
```ruby
|
1122
|
-
params type: 'array',
|
1122
|
+
params type: 'array', ref: UserEntity
|
1123
1123
|
|
1124
1124
|
# 接受如下格式的数据
|
1125
1125
|
[
|
@@ -1190,12 +1190,12 @@ end
|
|
1190
1190
|
|
1191
1191
|
> **小提示:**还有一种调用方式 `params(:raw)`,它返回无任何转换逻辑的原生参数。它与 `request.params` 的行为一致。
|
1192
1192
|
|
1193
|
-
> **大提示:**如果你是通过 `
|
1193
|
+
> **大提示:**如果你是通过 `ref:` 引用一个实体定义,另一个更符合语义的方式是使用 `lock` 方法。
|
1194
1194
|
>
|
1195
1195
|
> ```ruby
|
1196
1196
|
> patch '/users/:id' do
|
1197
1197
|
> params do
|
1198
|
-
> param :user,
|
1198
|
+
> param :user, ref: UserEntity.lock(:discard_missing, true)
|
1199
1199
|
> end
|
1200
1200
|
> action do
|
1201
1201
|
> user = User.find(params['id'])
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
6
|
+
|
7
|
+
# Ignore bundler config.
|
8
|
+
/.bundle
|
9
|
+
|
10
|
+
# Ignore all logfiles and tempfiles.
|
11
|
+
/log/*
|
12
|
+
/tmp/*
|
13
|
+
!/log/.keep
|
14
|
+
!/tmp/.keep
|
15
|
+
|
16
|
+
# Ignore pidfiles, but keep the directory.
|
17
|
+
/tmp/pids/*
|
18
|
+
!/tmp/pids/
|
19
|
+
!/tmp/pids/.keep
|
20
|
+
|
21
|
+
|
22
|
+
# Ignore master key for decrypting credentials and more.
|
23
|
+
/config/master.key
|
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
@@ -0,0 +1 @@
|
|
1
|
+
3.1.2
|
@@ -0,0 +1,29 @@
|
|
1
|
+
source "https://gems.ruby-china.com"
|
2
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
3
|
+
|
4
|
+
ruby "3.1.2"
|
5
|
+
|
6
|
+
# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
|
7
|
+
gem "rails", "~> 7.0.4"
|
8
|
+
gem "meta-api", path: "../.."
|
9
|
+
|
10
|
+
# Use the Puma web server [https://github.com/puma/puma]
|
11
|
+
gem "puma", "~> 5.0"
|
12
|
+
|
13
|
+
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
14
|
+
gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ]
|
15
|
+
|
16
|
+
# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible
|
17
|
+
# gem "rack-cors"
|
18
|
+
|
19
|
+
group :development, :test do
|
20
|
+
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
|
21
|
+
gem "debug", platforms: %i[ mri mingw x64_mingw ]
|
22
|
+
gem 'rspec-rails', '~> 6.0.0'
|
23
|
+
end
|
24
|
+
|
25
|
+
group :development do
|
26
|
+
# Speed up commands on slow machines / big apps [https://github.com/rails/spring]
|
27
|
+
# gem "spring"
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1,190 @@
|
|
1
|
+
PATH
|
2
|
+
remote: /home/run/workspace/personal/web-frame
|
3
|
+
specs:
|
4
|
+
meta-api (0.0.2)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://gems.ruby-china.com/
|
8
|
+
specs:
|
9
|
+
actioncable (7.0.4.3)
|
10
|
+
actionpack (= 7.0.4.3)
|
11
|
+
activesupport (= 7.0.4.3)
|
12
|
+
nio4r (~> 2.0)
|
13
|
+
websocket-driver (>= 0.6.1)
|
14
|
+
actionmailbox (7.0.4.3)
|
15
|
+
actionpack (= 7.0.4.3)
|
16
|
+
activejob (= 7.0.4.3)
|
17
|
+
activerecord (= 7.0.4.3)
|
18
|
+
activestorage (= 7.0.4.3)
|
19
|
+
activesupport (= 7.0.4.3)
|
20
|
+
mail (>= 2.7.1)
|
21
|
+
net-imap
|
22
|
+
net-pop
|
23
|
+
net-smtp
|
24
|
+
actionmailer (7.0.4.3)
|
25
|
+
actionpack (= 7.0.4.3)
|
26
|
+
actionview (= 7.0.4.3)
|
27
|
+
activejob (= 7.0.4.3)
|
28
|
+
activesupport (= 7.0.4.3)
|
29
|
+
mail (~> 2.5, >= 2.5.4)
|
30
|
+
net-imap
|
31
|
+
net-pop
|
32
|
+
net-smtp
|
33
|
+
rails-dom-testing (~> 2.0)
|
34
|
+
actionpack (7.0.4.3)
|
35
|
+
actionview (= 7.0.4.3)
|
36
|
+
activesupport (= 7.0.4.3)
|
37
|
+
rack (~> 2.0, >= 2.2.0)
|
38
|
+
rack-test (>= 0.6.3)
|
39
|
+
rails-dom-testing (~> 2.0)
|
40
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
41
|
+
actiontext (7.0.4.3)
|
42
|
+
actionpack (= 7.0.4.3)
|
43
|
+
activerecord (= 7.0.4.3)
|
44
|
+
activestorage (= 7.0.4.3)
|
45
|
+
activesupport (= 7.0.4.3)
|
46
|
+
globalid (>= 0.6.0)
|
47
|
+
nokogiri (>= 1.8.5)
|
48
|
+
actionview (7.0.4.3)
|
49
|
+
activesupport (= 7.0.4.3)
|
50
|
+
builder (~> 3.1)
|
51
|
+
erubi (~> 1.4)
|
52
|
+
rails-dom-testing (~> 2.0)
|
53
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
54
|
+
activejob (7.0.4.3)
|
55
|
+
activesupport (= 7.0.4.3)
|
56
|
+
globalid (>= 0.3.6)
|
57
|
+
activemodel (7.0.4.3)
|
58
|
+
activesupport (= 7.0.4.3)
|
59
|
+
activerecord (7.0.4.3)
|
60
|
+
activemodel (= 7.0.4.3)
|
61
|
+
activesupport (= 7.0.4.3)
|
62
|
+
activestorage (7.0.4.3)
|
63
|
+
actionpack (= 7.0.4.3)
|
64
|
+
activejob (= 7.0.4.3)
|
65
|
+
activerecord (= 7.0.4.3)
|
66
|
+
activesupport (= 7.0.4.3)
|
67
|
+
marcel (~> 1.0)
|
68
|
+
mini_mime (>= 1.1.0)
|
69
|
+
activesupport (7.0.4.3)
|
70
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
71
|
+
i18n (>= 1.6, < 2)
|
72
|
+
minitest (>= 5.1)
|
73
|
+
tzinfo (~> 2.0)
|
74
|
+
builder (3.2.4)
|
75
|
+
concurrent-ruby (1.2.2)
|
76
|
+
crass (1.0.6)
|
77
|
+
date (3.3.3)
|
78
|
+
debug (1.7.1)
|
79
|
+
irb (>= 1.5.0)
|
80
|
+
reline (>= 0.3.1)
|
81
|
+
diff-lcs (1.5.0)
|
82
|
+
erubi (1.12.0)
|
83
|
+
globalid (1.1.0)
|
84
|
+
activesupport (>= 5.0)
|
85
|
+
i18n (1.12.0)
|
86
|
+
concurrent-ruby (~> 1.0)
|
87
|
+
io-console (0.6.0)
|
88
|
+
irb (1.6.3)
|
89
|
+
reline (>= 0.3.0)
|
90
|
+
loofah (2.19.1)
|
91
|
+
crass (~> 1.0.2)
|
92
|
+
nokogiri (>= 1.5.9)
|
93
|
+
mail (2.8.1)
|
94
|
+
mini_mime (>= 0.1.1)
|
95
|
+
net-imap
|
96
|
+
net-pop
|
97
|
+
net-smtp
|
98
|
+
marcel (1.0.2)
|
99
|
+
method_source (1.0.0)
|
100
|
+
mini_mime (1.1.2)
|
101
|
+
minitest (5.18.0)
|
102
|
+
net-imap (0.3.4)
|
103
|
+
date
|
104
|
+
net-protocol
|
105
|
+
net-pop (0.1.2)
|
106
|
+
net-protocol
|
107
|
+
net-protocol (0.2.1)
|
108
|
+
timeout
|
109
|
+
net-smtp (0.3.3)
|
110
|
+
net-protocol
|
111
|
+
nio4r (2.5.8)
|
112
|
+
nokogiri (1.14.2-x86_64-linux)
|
113
|
+
racc (~> 1.4)
|
114
|
+
puma (5.6.5)
|
115
|
+
nio4r (~> 2.0)
|
116
|
+
racc (1.6.2)
|
117
|
+
rack (2.2.6.4)
|
118
|
+
rack-test (2.1.0)
|
119
|
+
rack (>= 1.3)
|
120
|
+
rails (7.0.4.3)
|
121
|
+
actioncable (= 7.0.4.3)
|
122
|
+
actionmailbox (= 7.0.4.3)
|
123
|
+
actionmailer (= 7.0.4.3)
|
124
|
+
actionpack (= 7.0.4.3)
|
125
|
+
actiontext (= 7.0.4.3)
|
126
|
+
actionview (= 7.0.4.3)
|
127
|
+
activejob (= 7.0.4.3)
|
128
|
+
activemodel (= 7.0.4.3)
|
129
|
+
activerecord (= 7.0.4.3)
|
130
|
+
activestorage (= 7.0.4.3)
|
131
|
+
activesupport (= 7.0.4.3)
|
132
|
+
bundler (>= 1.15.0)
|
133
|
+
railties (= 7.0.4.3)
|
134
|
+
rails-dom-testing (2.0.3)
|
135
|
+
activesupport (>= 4.2.0)
|
136
|
+
nokogiri (>= 1.6)
|
137
|
+
rails-html-sanitizer (1.5.0)
|
138
|
+
loofah (~> 2.19, >= 2.19.1)
|
139
|
+
railties (7.0.4.3)
|
140
|
+
actionpack (= 7.0.4.3)
|
141
|
+
activesupport (= 7.0.4.3)
|
142
|
+
method_source
|
143
|
+
rake (>= 12.2)
|
144
|
+
thor (~> 1.0)
|
145
|
+
zeitwerk (~> 2.5)
|
146
|
+
rake (13.0.6)
|
147
|
+
reline (0.3.2)
|
148
|
+
io-console (~> 0.5)
|
149
|
+
rspec-core (3.12.1)
|
150
|
+
rspec-support (~> 3.12.0)
|
151
|
+
rspec-expectations (3.12.2)
|
152
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
153
|
+
rspec-support (~> 3.12.0)
|
154
|
+
rspec-mocks (3.12.4)
|
155
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
156
|
+
rspec-support (~> 3.12.0)
|
157
|
+
rspec-rails (6.0.1)
|
158
|
+
actionpack (>= 6.1)
|
159
|
+
activesupport (>= 6.1)
|
160
|
+
railties (>= 6.1)
|
161
|
+
rspec-core (~> 3.11)
|
162
|
+
rspec-expectations (~> 3.11)
|
163
|
+
rspec-mocks (~> 3.11)
|
164
|
+
rspec-support (~> 3.11)
|
165
|
+
rspec-support (3.12.0)
|
166
|
+
thor (1.2.1)
|
167
|
+
timeout (0.3.2)
|
168
|
+
tzinfo (2.0.6)
|
169
|
+
concurrent-ruby (~> 1.0)
|
170
|
+
websocket-driver (0.7.5)
|
171
|
+
websocket-extensions (>= 0.1.0)
|
172
|
+
websocket-extensions (0.1.5)
|
173
|
+
zeitwerk (2.6.7)
|
174
|
+
|
175
|
+
PLATFORMS
|
176
|
+
x86_64-linux
|
177
|
+
|
178
|
+
DEPENDENCIES
|
179
|
+
debug
|
180
|
+
meta-api!
|
181
|
+
puma (~> 5.0)
|
182
|
+
rails (~> 7.0.4)
|
183
|
+
rspec-rails (~> 6.0.0)
|
184
|
+
tzinfo-data
|
185
|
+
|
186
|
+
RUBY VERSION
|
187
|
+
ruby 3.1.2p20
|
188
|
+
|
189
|
+
BUNDLED WITH
|
190
|
+
2.3.17
|
File without changes
|