meta-api 0.0.2 → 0.0.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/.gitignore +4 -4
- data/CHANGELOG.md +11 -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 +50 -22
- 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/linked_action.rb +18 -0
- data/lib/meta/application/{meta.rb → metadata.rb} +5 -15
- data/lib/meta/application/parameters.rb +47 -0
- data/lib/meta/application/route.rb +6 -7
- data/lib/meta/json_schema/builders/array_schema_builder.rb +7 -11
- 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 +43 -70
- 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 +12 -12
- data/lib/meta/json_schema.rb +2 -0
- data/lib/meta/rails.rb +98 -0
- data/lib/meta/route_dsl/application_builder.rb +16 -10
- data/lib/meta/route_dsl/around_action_builder.rb +53 -0
- data/lib/meta/route_dsl/parameters_builder.rb +2 -1
- data/lib/meta/route_dsl/route_builder.rb +8 -5
- 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 +57 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc6f6c3dddfd1e683cae7147be60bd7ead57e46b097700fc1db4113d12f08965
|
4
|
+
data.tar.gz: 476caee521969debd84614433ab41be89fbe7d1e5b074f46a6c8df40ca2d2c43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e213a983004b7fed1d15c2e0b41c9746584d259af6f969c631669b7efbb63f5573ee67b61ca5cb95888738925ca525e2ae4045502a7998c57c96432c12e3fd7
|
7
|
+
data.tar.gz: b575cf5145a3693ceb14296178c25c1ab1f8bf23e2a7dac92e9cc131a82dd79649d101f066c716069a5cb99114c138842b7bde89734790f217095fd459bf8fb4
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
# 更新日志
|
2
2
|
|
3
|
-
##
|
3
|
+
## 0.0.4(2023 年 4 月 18 日)
|
4
|
+
|
5
|
+
1. `Application` 添加 `.around` 宏。
|
6
|
+
2. `render` 时支持传递 `user_data` 选项,用作 value 解析的第二个参数。
|
7
|
+
|
8
|
+
## 0.0.3(2023 年 4 月 4 日)
|
9
|
+
|
10
|
+
1. 添加两个新的选项 `ref:` 和 `dynamic_ref:`,以便后期取代 `using:`.
|
11
|
+
2. 提供 Rails 插件。
|
12
|
+
|
13
|
+
## 0.0.2(2023 年 3 月 8 日)
|
4
14
|
|
5
15
|
1. 添加两个配置项,适合生产环境下使用,用以关闭渲染时的数据验证验证。
|
6
16
|
2. 添加对多态实体的支持。
|
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
|
|
@@ -118,7 +118,7 @@ class DemoApp < Meta::Application
|
|
118
118
|
end
|
119
119
|
```
|
120
120
|
|
121
|
-
###
|
121
|
+
### 钩子
|
122
122
|
|
123
123
|
*(如果不涉及到钩子和异常拦截,嵌套路由将毫无意义。)*
|
124
124
|
|
@@ -142,6 +142,34 @@ class DemoApp < Meta::Application
|
|
142
142
|
end
|
143
143
|
```
|
144
144
|
|
145
|
+
同时还支持 `around` 钩子(*试验特性*):
|
146
|
+
|
147
|
+
```ruby
|
148
|
+
class DemoApp < Meta::Application
|
149
|
+
before { puts 1 }
|
150
|
+
before { puts 2 }
|
151
|
+
around { |next_action|
|
152
|
+
puts 3
|
153
|
+
next_action.execute(self)
|
154
|
+
puts 5
|
155
|
+
}
|
156
|
+
after { puts 6 }
|
157
|
+
after { puts 7 }
|
158
|
+
|
159
|
+
get '/request' do
|
160
|
+
puts 4
|
161
|
+
end
|
162
|
+
end
|
163
|
+
```
|
164
|
+
|
165
|
+
所有钩子的执行顺序是:
|
166
|
+
|
167
|
+
1. 首先执行 `before` 钩子,按照定义的顺序执行。
|
168
|
+
2. 然后执行 `around` 钩子的前半部分,按照定义的顺序执行。
|
169
|
+
3. 然后执行路由方法。
|
170
|
+
4. 然后执行 `around` 钩子的后半部分,按照定义的顺序执行。
|
171
|
+
5. 最后执行 `after` 钩子,按照定义的顺序执行。
|
172
|
+
|
145
173
|
### 异常拦截
|
146
174
|
|
147
175
|
在 `namespace` 中使用 `rescue_error` 拦截异常。
|
@@ -771,15 +799,15 @@ class UserEntity < Meta::Entity
|
|
771
799
|
end
|
772
800
|
```
|
773
801
|
|
774
|
-
然后在 `params` 和 `status` 内部使用 `
|
802
|
+
然后在 `params` 和 `status` 内部使用 `ref` 引用这个实体:
|
775
803
|
|
776
804
|
```ruby
|
777
805
|
params do
|
778
|
-
param :user,
|
806
|
+
param :user, ref: UserEntity
|
779
807
|
end
|
780
808
|
|
781
809
|
status 200 do
|
782
|
-
expose :user,
|
810
|
+
expose :user, ref: UserEntity
|
783
811
|
end
|
784
812
|
```
|
785
813
|
|
@@ -789,11 +817,11 @@ end
|
|
789
817
|
>
|
790
818
|
> ```ruby
|
791
819
|
> params do
|
792
|
-
>
|
820
|
+
> property :user, ref: UserEntity
|
793
821
|
> end
|
794
822
|
>
|
795
823
|
> status 200 do
|
796
|
-
>
|
824
|
+
> property :user, ref: UserEntity
|
797
825
|
> end
|
798
826
|
> ```
|
799
827
|
|
@@ -805,7 +833,7 @@ end
|
|
805
833
|
|
806
834
|
```ruby
|
807
835
|
params do
|
808
|
-
param :users, type: "array",
|
836
|
+
param :users, type: "array", ref: UserEntity
|
809
837
|
end
|
810
838
|
```
|
811
839
|
|
@@ -887,7 +915,7 @@ end
|
|
887
915
|
```ruby
|
888
916
|
get '/articles' do
|
889
917
|
status 200 do
|
890
|
-
expose :articles,
|
918
|
+
expose :articles, ref: ArticleEntity
|
891
919
|
end
|
892
920
|
action do
|
893
921
|
articles = Article.all
|
@@ -901,7 +929,7 @@ end
|
|
901
929
|
```ruby
|
902
930
|
get '/articles/:id' do
|
903
931
|
status 200 do
|
904
|
-
expose :article,
|
932
|
+
expose :article, ref: ArticleEntity
|
905
933
|
end
|
906
934
|
action do
|
907
935
|
article = Article.find(request.params['id'])
|
@@ -915,7 +943,7 @@ end
|
|
915
943
|
```ruby
|
916
944
|
get '/articles/:id' do
|
917
945
|
status 200 do
|
918
|
-
expose :article,
|
946
|
+
expose :article, ref: ArticleEntity.lock_scope('full')
|
919
947
|
end
|
920
948
|
action do
|
921
949
|
article = Article.find(request.params['id'])
|
@@ -929,14 +957,14 @@ end
|
|
929
957
|
```ruby
|
930
958
|
post '/articles' do
|
931
959
|
params do
|
932
|
-
param :article,
|
960
|
+
param :article, ref: ArticleEntity.lock_scope('on_create')
|
933
961
|
end
|
934
962
|
...
|
935
963
|
end
|
936
964
|
|
937
965
|
put '/articles/:id' do
|
938
966
|
params do
|
939
|
-
param :article,
|
967
|
+
param :article, ref: ArticleEntity.lock_scope('on_update')
|
940
968
|
end
|
941
969
|
...
|
942
970
|
end
|
@@ -994,7 +1022,7 @@ end
|
|
994
1022
|
|
995
1023
|
```ruby
|
996
1024
|
params do
|
997
|
-
param :article,
|
1025
|
+
param :article, ref: ArticleEntity
|
998
1026
|
end
|
999
1027
|
```
|
1000
1028
|
|
@@ -1034,10 +1062,10 @@ end
|
|
1034
1062
|
|
1035
1063
|
### 多态参数和返回值
|
1036
1064
|
|
1037
|
-
定义属性时可定义多态类型,`
|
1065
|
+
定义属性时可定义多态类型,`dynamic_ref` 选项可接受一个块,它根据值来返回指定的类型:
|
1038
1066
|
|
1039
1067
|
```ruby
|
1040
|
-
property :target,
|
1068
|
+
property :target, dynamic_ref: ->(value) {
|
1041
1069
|
# 根据 value.target_type 值返回实体类型
|
1042
1070
|
# 例如,value.target_type == 'UserEntity',将返回 UserEntity 类
|
1043
1071
|
value.target_type.constantize
|
@@ -1047,7 +1075,7 @@ property :target, using: ->(value) {
|
|
1047
1075
|
或者接受一个 Hash,这时可提供 `one_of` 选项为文档生成提供加成:
|
1048
1076
|
|
1049
1077
|
```ruby
|
1050
|
-
property :animal,
|
1078
|
+
property :animal, dynamic_ref: {
|
1051
1079
|
one_of: [CatEntity, DogEntity, PigEntity],
|
1052
1080
|
resolve: ->(value) { value.animal_type.constantize }
|
1053
1081
|
}
|
@@ -1098,7 +1126,7 @@ Meta.config.render_validation = false # 渲染时不执行数据验证
|
|
1098
1126
|
|
1099
1127
|
```ruby
|
1100
1128
|
params do
|
1101
|
-
param :user,
|
1129
|
+
param :user, ref: UserEntity
|
1102
1130
|
end
|
1103
1131
|
|
1104
1132
|
|
@@ -1109,7 +1137,7 @@ end
|
|
1109
1137
|
但也可以将包裹的外层字段去掉,即将 `UserEntity` 直接用在顶层:
|
1110
1138
|
|
1111
1139
|
```ruby
|
1112
|
-
params
|
1140
|
+
params ref: UserEntity
|
1113
1141
|
|
1114
1142
|
|
1115
1143
|
# 接受如下格式的数据
|
@@ -1119,7 +1147,7 @@ params using: UserEntity
|
|
1119
1147
|
这个方案同时也支持数组:
|
1120
1148
|
|
1121
1149
|
```ruby
|
1122
|
-
params type: 'array',
|
1150
|
+
params type: 'array', ref: UserEntity
|
1123
1151
|
|
1124
1152
|
# 接受如下格式的数据
|
1125
1153
|
[
|
@@ -1190,12 +1218,12 @@ end
|
|
1190
1218
|
|
1191
1219
|
> **小提示:**还有一种调用方式 `params(:raw)`,它返回无任何转换逻辑的原生参数。它与 `request.params` 的行为一致。
|
1192
1220
|
|
1193
|
-
> **大提示:**如果你是通过 `
|
1221
|
+
> **大提示:**如果你是通过 `ref:` 引用一个实体定义,另一个更符合语义的方式是使用 `lock` 方法。
|
1194
1222
|
>
|
1195
1223
|
> ```ruby
|
1196
1224
|
> patch '/users/:id' do
|
1197
1225
|
> params do
|
1198
|
-
> param :user,
|
1226
|
+
> param :user, ref: UserEntity.lock(:discard_missing, true)
|
1199
1227
|
> end
|
1200
1228
|
> action do
|
1201
1229
|
> 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.3)
|
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
|