souls 0.8.0 → 0.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/exe/souls +6 -2
- data/lib/souls/init.rb +2 -10
- data/lib/souls/version.rb +1 -1
- data/souls_service-0.0.8/.env.sample +1 -0
- data/souls_service-0.0.8/.gitignore +31 -0
- data/souls_service-0.0.8/.irbrc +2 -0
- data/souls_service-0.0.8/.rubocop.yml +212 -0
- data/souls_service-0.0.8/.ruby-version +1 -0
- data/souls_service-0.0.8/.ruby_version +1 -0
- data/souls_service-0.0.8/Dockerfile +16 -0
- data/souls_service-0.0.8/Gemfile +41 -0
- data/souls_service-0.0.8/Gemfile.lock +191 -0
- data/souls_service-0.0.8/README.md +75 -0
- data/souls_service-0.0.8/Rakefile +34 -0
- data/souls_service-0.0.8/app.rb +26 -0
- data/souls_service-0.0.8/app/controllers/application_controller.rb +3 -0
- data/souls_service-0.0.8/app/controllers/article_method.rb +60 -0
- data/souls_service-0.0.8/app/controllers/hello_method.rb +13 -0
- data/souls_service-0.0.8/app/services/blog_pb.rb +69 -0
- data/souls_service-0.0.8/app/services/souls.rb +30 -0
- data/souls_service-0.0.8/config/initializers/souls.rb +11 -0
- data/souls_service-0.0.8/deployment.yml +39 -0
- data/souls_service-0.0.8/grpc_server.rb +12 -0
- data/souls_service-0.0.8/protos/blog.proto +79 -0
- data/v0.0.8.tar.gz +0 -0
- metadata +24 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2f7f929b1640d3a618f6244944f72ff08a1fc51136d1bb276a4c19a24bc0076
|
4
|
+
data.tar.gz: df57c53de699968a8e0d781803fc0627b04ef94d29f0eecb82f51e9ff736dd50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b14c6586602a8fc1745b50c11564936d896bd5b34996edf552d82a22a69cbebc1d926625974f1a9dd4f908dd2e3efe82144521cdec277e08d439fb268aeec4a8
|
7
|
+
data.tar.gz: 33d4ed28ecb5fa0260f50c964ac7669dc1f6294ab8caefea5923b1148c172e4c8f453bc01d9d926bc4b9a6efff2e6cc972f77fc6b9a5967e7a41d96917313a4b
|
data/Gemfile.lock
CHANGED
data/exe/souls
CHANGED
@@ -2,7 +2,11 @@
|
|
2
2
|
require "souls"
|
3
3
|
|
4
4
|
begin
|
5
|
-
|
5
|
+
begin
|
6
|
+
require "./config/initializers/souls" unless ARGV[0] == "new"
|
7
|
+
rescue
|
8
|
+
Souls::Init.config_init
|
9
|
+
end
|
6
10
|
case ARGV[0]
|
7
11
|
when "new"
|
8
12
|
if ARGV[1].nil?
|
@@ -38,7 +42,7 @@ begin
|
|
38
42
|
when "p", "proto"
|
39
43
|
Souls::Init.proto proto_package_name: "souls", service: ARGV[1]
|
40
44
|
when "init"
|
41
|
-
Souls::Init.
|
45
|
+
Souls::Init.config_init
|
42
46
|
when "-v", "--version"
|
43
47
|
puts Souls::VERSION
|
44
48
|
when "g", "generate"
|
data/lib/souls/init.rb
CHANGED
@@ -49,6 +49,7 @@ module Souls
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def config_init app_name: "souls", project: {}
|
52
|
+
puts "Generating souls conf..."
|
52
53
|
file_path = "#{app_name}/config/initializers/souls.rb"
|
53
54
|
File.open(file_path, "w") do |f|
|
54
55
|
f.write <<~EOS
|
@@ -83,7 +84,7 @@ module Souls
|
|
83
84
|
system "tar -zxvf ./#{version}.tar.gz"
|
84
85
|
system "mkdir #{app_name}"
|
85
86
|
folder = version.delete "v"
|
86
|
-
system "cp -
|
87
|
+
system "cp -r #{repository_name}-#{folder}/ #{app_name}/"
|
87
88
|
system "rm -rf #{version}.tar.gz && rm -rf #{repository_name}-#{folder}"
|
88
89
|
txt = <<~TEXT
|
89
90
|
_____ ____ __ ____
|
@@ -103,13 +104,6 @@ module Souls
|
|
103
104
|
|
104
105
|
def proto proto_package_name: "souls", service: "blog"
|
105
106
|
system "grpc_tools_ruby_protoc -I ./protos --ruby_out=./app/services --grpc_out=./app/services ./protos/#{service}.proto"
|
106
|
-
file_path = "./app/services/#{service}_pb.rb"
|
107
|
-
File.open(file_path, "a") do |f|
|
108
|
-
f.write <<~EOS
|
109
|
-
module #{service.capitalize}Pb
|
110
|
-
end
|
111
|
-
EOS
|
112
|
-
end
|
113
107
|
service_pb_path = "./app/services/#{service}_services_pb.rb"
|
114
108
|
new_file = "./app/services/#{proto_package_name}.rb"
|
115
109
|
File.open(new_file, "w") do |new_line|
|
@@ -120,8 +114,6 @@ module Souls
|
|
120
114
|
new_line.write "# Generated by the SOULs protocol buffer compiler. DO NOT EDIT!\n"
|
121
115
|
when 3
|
122
116
|
next
|
123
|
-
when 4
|
124
|
-
new_line.write "require_relative \"#{service}_pb\""
|
125
117
|
else
|
126
118
|
puts "#{i}: #{line}"
|
127
119
|
new_line.write line.to_s
|
data/lib/souls/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
GOOGLE_APPLICATION_CREDENTIALS="./config/keyfile.json"
|
@@ -0,0 +1,31 @@
|
|
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
|
+
.DS_Store
|
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
|
+
# Ignore uploaded files in development.
|
22
|
+
/storage/*
|
23
|
+
!/storage/.keep
|
24
|
+
.byebug_history
|
25
|
+
|
26
|
+
# Ignore master key for decrypting credentials and more.
|
27
|
+
/config/master.key
|
28
|
+
.irb_history
|
29
|
+
.idea
|
30
|
+
.env
|
31
|
+
/config/keyfile.json
|
@@ -0,0 +1,212 @@
|
|
1
|
+
AllCops:
|
2
|
+
EnabledByDefault: true
|
3
|
+
Exclude:
|
4
|
+
- "db/migrate/*.rb"
|
5
|
+
- "db/schema.rb"
|
6
|
+
- "app/services/*.rb"
|
7
|
+
|
8
|
+
Style/AndOr:
|
9
|
+
Enabled: false
|
10
|
+
|
11
|
+
Style/ClassAndModuleChildren:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Style/AsciiComments:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Style/SymbolArray:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Style/WordArray:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Style/MixinGrouping:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
Style/RescueStandardError:
|
27
|
+
Enabled: false
|
28
|
+
|
29
|
+
Style/MethodCallWithArgsParentheses:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
Style/DocumentationMethod:
|
33
|
+
Enabled: false
|
34
|
+
|
35
|
+
Style/CollectionMethods:
|
36
|
+
PreferredMethods:
|
37
|
+
detect: "detect"
|
38
|
+
find: "detect"
|
39
|
+
inject: "inject"
|
40
|
+
reduce: "inject"
|
41
|
+
|
42
|
+
Style/Documentation:
|
43
|
+
Enabled: false
|
44
|
+
|
45
|
+
Style/DoubleNegation:
|
46
|
+
Enabled: false
|
47
|
+
|
48
|
+
Lint/ConstantResolution:
|
49
|
+
Enabled: false
|
50
|
+
|
51
|
+
Layout/DotPosition:
|
52
|
+
EnforcedStyle: trailing
|
53
|
+
|
54
|
+
|
55
|
+
Layout/EmptyLineAfterGuardClause:
|
56
|
+
Enabled: false
|
57
|
+
|
58
|
+
Style/EmptyElse:
|
59
|
+
EnforcedStyle: empty
|
60
|
+
|
61
|
+
Layout/ExtraSpacing:
|
62
|
+
Exclude:
|
63
|
+
- "db/migrate/*.rb"
|
64
|
+
- "*.gemspec"
|
65
|
+
|
66
|
+
Style/FormatString:
|
67
|
+
EnforcedStyle: percent
|
68
|
+
|
69
|
+
Style/MissingElse:
|
70
|
+
Enabled: false
|
71
|
+
|
72
|
+
Style/StringHashKeys:
|
73
|
+
Exclude:
|
74
|
+
- "spec/queries/*.rb"
|
75
|
+
- "*.gemspec"
|
76
|
+
|
77
|
+
Style/GuardClause:
|
78
|
+
MinBodyLength: 5
|
79
|
+
Exclude:
|
80
|
+
- "spec/spec_helper.rb"
|
81
|
+
|
82
|
+
Style/HashSyntax:
|
83
|
+
EnforcedStyle: ruby19
|
84
|
+
Exclude:
|
85
|
+
- "**/*.rake"
|
86
|
+
- "Rakefile"
|
87
|
+
|
88
|
+
Style/IfUnlessModifier:
|
89
|
+
Enabled: false
|
90
|
+
|
91
|
+
Style/PreferredHashMethods:
|
92
|
+
EnforcedStyle: short
|
93
|
+
|
94
|
+
Style/Lambda:
|
95
|
+
Enabled: false
|
96
|
+
|
97
|
+
Style/NumericLiterals:
|
98
|
+
MinDigits: 7
|
99
|
+
|
100
|
+
Style/PerlBackrefs:
|
101
|
+
AutoCorrect: false
|
102
|
+
|
103
|
+
Style/RedundantSelf:
|
104
|
+
Enabled: false
|
105
|
+
|
106
|
+
Style/FrozenStringLiteralComment:
|
107
|
+
Enabled: false
|
108
|
+
|
109
|
+
Style/RedundantReturn:
|
110
|
+
AllowMultipleReturnValues: true
|
111
|
+
|
112
|
+
Style/Semicolon:
|
113
|
+
Exclude:
|
114
|
+
- "spec/**/*"
|
115
|
+
|
116
|
+
Style/SignalException:
|
117
|
+
EnforcedStyle: only_raise
|
118
|
+
|
119
|
+
Style/MethodDefParentheses:
|
120
|
+
Enabled: false
|
121
|
+
|
122
|
+
Style/StringLiterals:
|
123
|
+
EnforcedStyle: double_quotes
|
124
|
+
|
125
|
+
Style/StringLiteralsInInterpolation:
|
126
|
+
Enabled: false
|
127
|
+
|
128
|
+
Style/SingleLineBlockParams:
|
129
|
+
Enabled: false
|
130
|
+
|
131
|
+
Lint/UnderscorePrefixedVariableName:
|
132
|
+
Enabled: false
|
133
|
+
|
134
|
+
Lint/UnusedMethodArgument:
|
135
|
+
Enabled: false
|
136
|
+
|
137
|
+
|
138
|
+
Metrics/AbcSize:
|
139
|
+
Enabled: false
|
140
|
+
|
141
|
+
Metrics/CyclomaticComplexity:
|
142
|
+
Max: 10
|
143
|
+
|
144
|
+
Metrics/PerceivedComplexity:
|
145
|
+
Enabled: false
|
146
|
+
|
147
|
+
Metrics/BlockLength:
|
148
|
+
Enabled: false
|
149
|
+
|
150
|
+
Layout/LineLength:
|
151
|
+
Enabled: false
|
152
|
+
|
153
|
+
|
154
|
+
Metrics/MethodLength:
|
155
|
+
Enabled: false
|
156
|
+
|
157
|
+
Metrics/ClassLength:
|
158
|
+
Enabled: false
|
159
|
+
|
160
|
+
Naming/HeredocDelimiterNaming:
|
161
|
+
Enabled: false
|
162
|
+
|
163
|
+
Naming/AccessorMethodName:
|
164
|
+
Enabled: false
|
165
|
+
|
166
|
+
Metrics/ModuleLength:
|
167
|
+
Enabled: false
|
168
|
+
|
169
|
+
Lint/UnusedBlockArgument:
|
170
|
+
Enabled: false
|
171
|
+
|
172
|
+
Lint/RescueException:
|
173
|
+
Enabled: false
|
174
|
+
|
175
|
+
Naming/RescuedExceptionsVariableName:
|
176
|
+
Enabled: false
|
177
|
+
|
178
|
+
Bundler/GemComment:
|
179
|
+
Enabled: false
|
180
|
+
|
181
|
+
Style/SafeNavigation:
|
182
|
+
Enabled: false
|
183
|
+
|
184
|
+
Lint/NumberConversion:
|
185
|
+
Enabled: false
|
186
|
+
Style/ConstantVisibility:
|
187
|
+
Enabled: false
|
188
|
+
Style/MutableConstant:
|
189
|
+
Enabled: false
|
190
|
+
Style/Copyright:
|
191
|
+
Enabled: false
|
192
|
+
Style/MultilineTernaryOperator:
|
193
|
+
Enabled: false
|
194
|
+
Layout/MultilineAssignmentLayout:
|
195
|
+
Enabled: false
|
196
|
+
Style/Send:
|
197
|
+
Enabled: false
|
198
|
+
Style/MixinUsage:
|
199
|
+
Enabled: false
|
200
|
+
Style/GlobalStdStream:
|
201
|
+
Enabled: false
|
202
|
+
Lint/ConstantDefinitionInBlock:
|
203
|
+
Enabled: false
|
204
|
+
Layout/TrailingEmptyLines:
|
205
|
+
Enabled: false
|
206
|
+
Style/PercentLiteralDelimiters:
|
207
|
+
Enabled: false
|
208
|
+
Style/ClassVars:
|
209
|
+
Exclude:
|
210
|
+
- "spec/spec_helper.rb"
|
211
|
+
Style/StringConcatenation:
|
212
|
+
Enabled: false
|
@@ -0,0 +1 @@
|
|
1
|
+
2.7.2
|
@@ -0,0 +1 @@
|
|
1
|
+
2.7.2
|
@@ -0,0 +1,16 @@
|
|
1
|
+
FROM ruby:2.7.2
|
2
|
+
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
|
3
|
+
|
4
|
+
USER root
|
5
|
+
|
6
|
+
RUN mkdir /myapp
|
7
|
+
WORKDIR /myapp
|
8
|
+
|
9
|
+
COPY Gemfile /myapp/Gemfile
|
10
|
+
COPY Gemfile.lock /myapp/Gemfile.lock
|
11
|
+
RUN gem install bundler:2.1.4
|
12
|
+
RUN bundle
|
13
|
+
COPY . /myapp
|
14
|
+
|
15
|
+
EXPOSE 50051
|
16
|
+
CMD ["rake", "run_server"]
|
@@ -0,0 +1,41 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem "activerecord", require: "active_record"
|
4
|
+
gem "dotenv", "2.7.6"
|
5
|
+
gem "grpc", "1.34.0"
|
6
|
+
gem "grpc-tools", "1.34.0"
|
7
|
+
gem "jwt", "2.2.2"
|
8
|
+
gem "rake", "13.0.3"
|
9
|
+
gem "zeitwerk", "2.4.2"
|
10
|
+
|
11
|
+
## Select DB gem.
|
12
|
+
# Firestore
|
13
|
+
gem "google-cloud-firestore"
|
14
|
+
|
15
|
+
# NoSQL
|
16
|
+
# gem "mongoid", "7.2"
|
17
|
+
|
18
|
+
# PostgreSQL
|
19
|
+
# gem "pg", ">= 0.18", "< 2.0"
|
20
|
+
|
21
|
+
group :development, :test do
|
22
|
+
gem "byebug", platforms: %i[mri mingw x64_mingw]
|
23
|
+
gem "capybara", "2.18.0"
|
24
|
+
gem "capybara-user_agent", "0.0.3"
|
25
|
+
gem "database_cleaner", "1.8.5"
|
26
|
+
gem "factory_bot", "6.1.0"
|
27
|
+
gem "faker", "2.15.1"
|
28
|
+
gem "rack-test", "1.1.0"
|
29
|
+
gem "rspec", "3.10.0"
|
30
|
+
gem "rubocop", "1.7.0"
|
31
|
+
gem "souls", "0.8.0"
|
32
|
+
gem "webmock", "3.11.0"
|
33
|
+
end
|
34
|
+
|
35
|
+
group :development do
|
36
|
+
gem "listen", "~> 3.2"
|
37
|
+
gem "spring", "2.1.0"
|
38
|
+
gem "spring-watcher-listen", "~> 2.0.0"
|
39
|
+
end
|
40
|
+
|
41
|
+
gem "tzinfo-data", platforms: %i[mingw mswin x64_mingw jruby]
|
@@ -0,0 +1,191 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activemodel (6.1.1)
|
5
|
+
activesupport (= 6.1.1)
|
6
|
+
activerecord (6.1.1)
|
7
|
+
activemodel (= 6.1.1)
|
8
|
+
activesupport (= 6.1.1)
|
9
|
+
activesupport (6.1.1)
|
10
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
11
|
+
i18n (>= 1.6, < 2)
|
12
|
+
minitest (>= 5.1)
|
13
|
+
tzinfo (~> 2.0)
|
14
|
+
zeitwerk (~> 2.3)
|
15
|
+
addressable (2.7.0)
|
16
|
+
public_suffix (>= 2.0.2, < 5.0)
|
17
|
+
ast (2.4.1)
|
18
|
+
byebug (11.1.3)
|
19
|
+
capybara (2.18.0)
|
20
|
+
addressable
|
21
|
+
mini_mime (>= 0.1.3)
|
22
|
+
nokogiri (>= 1.3.3)
|
23
|
+
rack (>= 1.0.0)
|
24
|
+
rack-test (>= 0.5.4)
|
25
|
+
xpath (>= 2.0, < 4.0)
|
26
|
+
capybara-user_agent (0.0.3)
|
27
|
+
capybara (~> 2.0, >= 2.0.2)
|
28
|
+
concurrent-ruby (1.1.7)
|
29
|
+
crack (0.4.5)
|
30
|
+
rexml
|
31
|
+
database_cleaner (1.8.5)
|
32
|
+
diff-lcs (1.4.4)
|
33
|
+
dotenv (2.7.6)
|
34
|
+
factory_bot (6.1.0)
|
35
|
+
activesupport (>= 5.0.0)
|
36
|
+
faker (2.15.1)
|
37
|
+
i18n (>= 1.6, < 2)
|
38
|
+
faraday (1.2.0)
|
39
|
+
multipart-post (>= 1.2, < 3)
|
40
|
+
ruby2_keywords
|
41
|
+
ffi (1.14.2)
|
42
|
+
foreman (0.87.2)
|
43
|
+
gapic-common (0.3.4)
|
44
|
+
google-protobuf (~> 3.12, >= 3.12.2)
|
45
|
+
googleapis-common-protos (>= 1.3.9, < 2.0)
|
46
|
+
googleapis-common-protos-types (>= 1.0.4, < 2.0)
|
47
|
+
googleauth (~> 0.9)
|
48
|
+
grpc (~> 1.25)
|
49
|
+
google-cloud-core (1.5.0)
|
50
|
+
google-cloud-env (~> 1.0)
|
51
|
+
google-cloud-errors (~> 1.0)
|
52
|
+
google-cloud-env (1.4.0)
|
53
|
+
faraday (>= 0.17.3, < 2.0)
|
54
|
+
google-cloud-errors (1.0.1)
|
55
|
+
google-cloud-firestore (2.4.0)
|
56
|
+
concurrent-ruby (~> 1.0)
|
57
|
+
google-cloud-core (~> 1.5)
|
58
|
+
google-cloud-firestore-v1 (~> 0.0)
|
59
|
+
rbtree (~> 0.4.2)
|
60
|
+
google-cloud-firestore-v1 (0.2.2)
|
61
|
+
gapic-common (~> 0.3)
|
62
|
+
google-cloud-errors (~> 1.0)
|
63
|
+
google-protobuf (3.14.0)
|
64
|
+
googleapis-common-protos (1.3.10)
|
65
|
+
google-protobuf (~> 3.11)
|
66
|
+
googleapis-common-protos-types (>= 1.0.5, < 2.0)
|
67
|
+
grpc (~> 1.27)
|
68
|
+
googleapis-common-protos-types (1.0.5)
|
69
|
+
google-protobuf (~> 3.11)
|
70
|
+
googleauth (0.14.0)
|
71
|
+
faraday (>= 0.17.3, < 2.0)
|
72
|
+
jwt (>= 1.4, < 3.0)
|
73
|
+
memoist (~> 0.16)
|
74
|
+
multi_json (~> 1.11)
|
75
|
+
os (>= 0.9, < 2.0)
|
76
|
+
signet (~> 0.14)
|
77
|
+
grpc (1.34.0)
|
78
|
+
google-protobuf (~> 3.13)
|
79
|
+
googleapis-common-protos-types (~> 1.0)
|
80
|
+
grpc-tools (1.34.0)
|
81
|
+
hashdiff (1.0.1)
|
82
|
+
i18n (1.8.7)
|
83
|
+
concurrent-ruby (~> 1.0)
|
84
|
+
jwt (2.2.2)
|
85
|
+
listen (3.4.1)
|
86
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
87
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
88
|
+
memoist (0.16.2)
|
89
|
+
mini_mime (1.0.2)
|
90
|
+
mini_portile2 (2.5.0)
|
91
|
+
minitest (5.14.3)
|
92
|
+
multi_json (1.15.0)
|
93
|
+
multipart-post (2.1.1)
|
94
|
+
nokogiri (1.11.1)
|
95
|
+
mini_portile2 (~> 2.5.0)
|
96
|
+
racc (~> 1.4)
|
97
|
+
os (1.1.1)
|
98
|
+
parallel (1.20.1)
|
99
|
+
parser (3.0.0.0)
|
100
|
+
ast (~> 2.4.1)
|
101
|
+
public_suffix (4.0.6)
|
102
|
+
racc (1.5.2)
|
103
|
+
rack (2.2.3)
|
104
|
+
rack-test (1.1.0)
|
105
|
+
rack (>= 1.0, < 3)
|
106
|
+
rainbow (3.0.0)
|
107
|
+
rake (13.0.3)
|
108
|
+
rb-fsevent (0.10.4)
|
109
|
+
rb-inotify (0.10.1)
|
110
|
+
ffi (~> 1.0)
|
111
|
+
rbtree (0.4.2)
|
112
|
+
regexp_parser (2.0.2)
|
113
|
+
rexml (3.2.4)
|
114
|
+
rspec (3.10.0)
|
115
|
+
rspec-core (~> 3.10.0)
|
116
|
+
rspec-expectations (~> 3.10.0)
|
117
|
+
rspec-mocks (~> 3.10.0)
|
118
|
+
rspec-core (3.10.1)
|
119
|
+
rspec-support (~> 3.10.0)
|
120
|
+
rspec-expectations (3.10.1)
|
121
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
122
|
+
rspec-support (~> 3.10.0)
|
123
|
+
rspec-mocks (3.10.1)
|
124
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
125
|
+
rspec-support (~> 3.10.0)
|
126
|
+
rspec-support (3.10.1)
|
127
|
+
rubocop (1.7.0)
|
128
|
+
parallel (~> 1.10)
|
129
|
+
parser (>= 2.7.1.5)
|
130
|
+
rainbow (>= 2.2.2, < 4.0)
|
131
|
+
regexp_parser (>= 1.8, < 3.0)
|
132
|
+
rexml
|
133
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
134
|
+
ruby-progressbar (~> 1.7)
|
135
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
136
|
+
rubocop-ast (1.3.0)
|
137
|
+
parser (>= 2.7.1.5)
|
138
|
+
ruby-progressbar (1.10.1)
|
139
|
+
ruby2_keywords (0.0.2)
|
140
|
+
signet (0.14.0)
|
141
|
+
addressable (~> 2.3)
|
142
|
+
faraday (>= 0.17.3, < 2.0)
|
143
|
+
jwt (>= 1.5, < 3.0)
|
144
|
+
multi_json (~> 1.10)
|
145
|
+
souls (0.8.0)
|
146
|
+
spring (2.1.0)
|
147
|
+
spring-watcher-listen (2.0.1)
|
148
|
+
listen (>= 2.7, < 4.0)
|
149
|
+
spring (>= 1.2, < 3.0)
|
150
|
+
tzinfo (2.0.4)
|
151
|
+
concurrent-ruby (~> 1.0)
|
152
|
+
unicode-display_width (1.7.0)
|
153
|
+
webmock (3.11.0)
|
154
|
+
addressable (>= 2.3.6)
|
155
|
+
crack (>= 0.3.2)
|
156
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
157
|
+
xpath (3.2.0)
|
158
|
+
nokogiri (~> 1.8)
|
159
|
+
zeitwerk (2.4.2)
|
160
|
+
|
161
|
+
PLATFORMS
|
162
|
+
ruby
|
163
|
+
|
164
|
+
DEPENDENCIES
|
165
|
+
activerecord
|
166
|
+
byebug
|
167
|
+
capybara (= 2.18.0)
|
168
|
+
capybara-user_agent (= 0.0.3)
|
169
|
+
database_cleaner (= 1.8.5)
|
170
|
+
dotenv (= 2.7.6)
|
171
|
+
factory_bot (= 6.1.0)
|
172
|
+
faker (= 2.15.1)
|
173
|
+
foreman (= 0.87.2)
|
174
|
+
google-cloud-firestore
|
175
|
+
grpc (= 1.34.0)
|
176
|
+
grpc-tools (= 1.34.0)
|
177
|
+
jwt (= 2.2.2)
|
178
|
+
listen (~> 3.2)
|
179
|
+
rack-test (= 1.1.0)
|
180
|
+
rake (= 13.0.3)
|
181
|
+
rspec (= 3.10.0)
|
182
|
+
rubocop (= 1.7.0)
|
183
|
+
souls (= 0.8.0)
|
184
|
+
spring (= 2.1.0)
|
185
|
+
spring-watcher-listen (~> 2.0.0)
|
186
|
+
tzinfo-data
|
187
|
+
webmock (= 3.11.0)
|
188
|
+
zeitwerk (= 2.4.2)
|
189
|
+
|
190
|
+
BUNDLED WITH
|
191
|
+
2.1.4
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# gRPC Ruby Server
|
2
|
+
gRPC Ruby Server Boilerplate
|
3
|
+
|
4
|
+
<p align="center">
|
5
|
+
|
6
|
+
<a aria-label="Ruby logo" href="https://el-soul.com">
|
7
|
+
<img src="https://badgen.net/badge/icon/Made%20by%20ELSOUL?icon=ruby&label&color=black&labelColor=black">
|
8
|
+
</a>
|
9
|
+
<br/>
|
10
|
+
</p>
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
git clone
|
15
|
+
|
16
|
+
```
|
17
|
+
git clone git@github.com:elsoul/grpc-ruby-server.git
|
18
|
+
cd grpc-ruby-server
|
19
|
+
bundle install
|
20
|
+
```
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
Check Rakefile to see what command is available
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
rake -T
|
30
|
+
```
|
31
|
+
|
32
|
+
|
33
|
+
# Run Server on local
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
rake run_server
|
37
|
+
```
|
38
|
+
|
39
|
+
# Run Server with Docker
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
rake run_test
|
43
|
+
```
|
44
|
+
|
45
|
+
# Run Client to check response
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
rake run_client
|
49
|
+
```
|
50
|
+
|
51
|
+
Then you will get response below;
|
52
|
+
|
53
|
+
```
|
54
|
+
"Greeting: Hello world"
|
55
|
+
"Greeting: Hello again, world"
|
56
|
+
```
|
57
|
+
|
58
|
+
|
59
|
+
## Development
|
60
|
+
|
61
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
62
|
+
|
63
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org/gems/grpc-ruby-server).
|
64
|
+
|
65
|
+
## Contributing
|
66
|
+
|
67
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/elsoul/grpc-ruby-server. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
68
|
+
|
69
|
+
## License
|
70
|
+
|
71
|
+
The gem is available as open source under the terms of the [Apache-2.0 License](https://www.apache.org/licenses/LICENSE-2.0).
|
72
|
+
|
73
|
+
## Code of Conduct
|
74
|
+
|
75
|
+
Everyone interacting in the HotelPrice project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/elsoul/grpc-ruby-server/blob/master/CODE_OF_CONDUCT.md).
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "erb"
|
3
|
+
require "logger"
|
4
|
+
|
5
|
+
desc "Generate proto files"
|
6
|
+
task :proto do
|
7
|
+
system "grpc_tools_ruby_protoc -I ./protos --ruby_out=./app/services --grpc_out=./app/services ./protos/blog.proto"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Run gRPC Server"
|
11
|
+
task :run_server do
|
12
|
+
system "ruby grpc_server.rb"
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Run gRPC Client"
|
16
|
+
task :run_client do
|
17
|
+
system "ruby greeter_client.rb"
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Run gRPC Server with Docker"
|
21
|
+
task :run_test do
|
22
|
+
system "docker build . -t souls_service:latest"
|
23
|
+
system "docker rm -f web"
|
24
|
+
system "docker run --name web -p 50051:50051 souls_service:latest"
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Update Google Container Registry"
|
28
|
+
task :update do
|
29
|
+
version = ARGV[1]
|
30
|
+
project_id = "elsoul2"
|
31
|
+
system("docker build . -t souls_service:#{version}")
|
32
|
+
system("docker tag souls_service:#{version} asia.gcr.io/#{project_id}/souls_service:#{version}")
|
33
|
+
system("docker push asia.gcr.io/#{project_id}/souls_service:#{version}")
|
34
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "grpc"
|
2
|
+
require "yaml"
|
3
|
+
require "erb"
|
4
|
+
require "logger"
|
5
|
+
require "zeitwerk"
|
6
|
+
require "dotenv/load"
|
7
|
+
require "google/cloud/firestore"
|
8
|
+
require "./app"
|
9
|
+
|
10
|
+
ENV["SOULS_ENV"] ||= "development"
|
11
|
+
|
12
|
+
# NoSQL Conf
|
13
|
+
# YAML.safe_load(ERB.new(File.new("./config/mongoid.yml").read).result)
|
14
|
+
|
15
|
+
## SQL Conf
|
16
|
+
# db_conf = YAML.safe_load(ERB.new(File.read("./config/database.yml")).result, [], [], true)
|
17
|
+
# ActiveRecord::Base.establish_connection(db_conf[ENV["RACK_ENV"]])
|
18
|
+
|
19
|
+
loader = Zeitwerk::Loader.new
|
20
|
+
loader.push_dir("#{Dir.pwd}/app/controllers")
|
21
|
+
loader.push_dir("#{Dir.pwd}/app/services")
|
22
|
+
loader.do_not_eager_load("#{Dir.pwd}/app/services")
|
23
|
+
loader.collapse("#{__dir__}/app/services")
|
24
|
+
loader.setup
|
25
|
+
|
26
|
+
loader.eager_load
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module ArticleMethod
|
2
|
+
def create_article(grpc_req, _unused_call)
|
3
|
+
logger = Logger.new(STDOUT)
|
4
|
+
firestore = Google::Cloud::Firestore.new
|
5
|
+
article = firestore.col("articles").doc
|
6
|
+
article.set({})
|
7
|
+
data = firestore.col("articles").doc(article.document_id)
|
8
|
+
article_hash = {
|
9
|
+
id: article.document_id,
|
10
|
+
user_id: grpc_req.user_id,
|
11
|
+
title: grpc_req.title,
|
12
|
+
body: grpc_req.body,
|
13
|
+
thumnail_url: grpc_req.thumnail_url,
|
14
|
+
public_date: grpc_req.public_date,
|
15
|
+
is_public: grpc_req.is_public,
|
16
|
+
tag: grpc_req.tag.to_a,
|
17
|
+
created_at: Time.now.utc,
|
18
|
+
updated_at: Time.now.utc
|
19
|
+
}
|
20
|
+
data.update article_hash
|
21
|
+
res = Souls::CreateArticleReply.new(
|
22
|
+
{ article: article_hash }
|
23
|
+
)
|
24
|
+
logger.info res.article
|
25
|
+
res
|
26
|
+
rescue StandardError => error
|
27
|
+
logger.debug error
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_article(grpc_req, _unused_call)
|
31
|
+
logger = Logger.new(STDOUT)
|
32
|
+
article = Article.find(grpc_req.id)
|
33
|
+
reply = JSON.parse(article.to_json)
|
34
|
+
reply["created_at"] = article.created_at.to_s
|
35
|
+
reply["updated_at"] = article.updated_at.to_s
|
36
|
+
res = Souls::GetArticleReply.new(
|
37
|
+
{ article: Souls::Article.new(reply) }
|
38
|
+
)
|
39
|
+
logger.info res.article
|
40
|
+
res
|
41
|
+
rescue StandardError => error
|
42
|
+
logger.debug error
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_articles
|
46
|
+
return enum_for(:get_articles) unless block_given?
|
47
|
+
q = ::Article
|
48
|
+
limit = 100
|
49
|
+
q.limit(limit).each do |article|
|
50
|
+
sleep(rand(0.01..0.3))
|
51
|
+
Souls::Article.new article.to_proto
|
52
|
+
end
|
53
|
+
rescue StandardError => e
|
54
|
+
fail!(:internal, :unknown, "Unknown error when listing Articles: #{e.message}")
|
55
|
+
end
|
56
|
+
|
57
|
+
def update_article(grpc_req, _unused_call); end
|
58
|
+
|
59
|
+
def delete_article(grpc_req, _unused_call); end
|
60
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module HelloMethod
|
2
|
+
def say_hello(hello_req, _unused_call)
|
3
|
+
logger = Logger.new(STDOUT)
|
4
|
+
logger.info hello_req
|
5
|
+
Souls::HelloReply.new(message: "Hello #{hello_req.name}")
|
6
|
+
end
|
7
|
+
|
8
|
+
def say_hello_again(hello_req, _unused_call)
|
9
|
+
logger = Logger.new(STDOUT)
|
10
|
+
logger.info hello_req
|
11
|
+
Souls::HelloReply.new(message: "Works Perfect, #{hello_req.name}")
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# source: blog.proto
|
3
|
+
|
4
|
+
require 'google/protobuf'
|
5
|
+
|
6
|
+
require 'google/protobuf/timestamp_pb'
|
7
|
+
Google::Protobuf::DescriptorPool.generated_pool.build do
|
8
|
+
add_file("blog.proto", :syntax => :proto3) do
|
9
|
+
add_message "Souls.HelloRequest" do
|
10
|
+
optional :name, :string, 1
|
11
|
+
end
|
12
|
+
add_message "Souls.HelloReply" do
|
13
|
+
optional :message, :string, 1
|
14
|
+
end
|
15
|
+
add_message "Souls.Article" do
|
16
|
+
optional :id, :string, 1
|
17
|
+
optional :user_id, :string, 2
|
18
|
+
optional :title, :string, 3
|
19
|
+
optional :body, :string, 4
|
20
|
+
optional :thumnail_url, :string, 5
|
21
|
+
optional :public_date, :uint32, 6
|
22
|
+
optional :article_category_id, :uint32, 7
|
23
|
+
optional :is_public, :bool, 8
|
24
|
+
repeated :tag, :string, 9
|
25
|
+
optional :has_series, :bool, 10
|
26
|
+
optional :series_id, :uint32, 11
|
27
|
+
optional :episode_num, :uint32, 12
|
28
|
+
optional :created_at, :message, 13, "google.protobuf.Timestamp"
|
29
|
+
optional :updated_at, :message, 14, "google.protobuf.Timestamp"
|
30
|
+
end
|
31
|
+
add_message "Souls.GetArticlRequest" do
|
32
|
+
optional :id, :uint32, 1
|
33
|
+
end
|
34
|
+
add_message "Souls.GetArticleReply" do
|
35
|
+
optional :article, :message, 1, "Souls.Article"
|
36
|
+
end
|
37
|
+
add_message "Souls.GetArticlesRequest" do
|
38
|
+
optional :search, :string, 1
|
39
|
+
optional :limit, :uint32, 2
|
40
|
+
end
|
41
|
+
add_message "Souls.UpdateArticlesReply" do
|
42
|
+
repeated :articles, :message, 1, "Souls.Article"
|
43
|
+
end
|
44
|
+
add_message "Souls.DeleteArticlRequest" do
|
45
|
+
optional :id, :uint32, 1
|
46
|
+
end
|
47
|
+
add_message "Souls.DeleteArticleReply" do
|
48
|
+
optional :article, :message, 1, "Souls.Article"
|
49
|
+
end
|
50
|
+
add_message "Souls.CreateArticleReply" do
|
51
|
+
optional :article, :message, 1, "Souls.Article"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
module Souls
|
57
|
+
HelloRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.HelloRequest").msgclass
|
58
|
+
HelloReply = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.HelloReply").msgclass
|
59
|
+
Article = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.Article").msgclass
|
60
|
+
GetArticlRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.GetArticlRequest").msgclass
|
61
|
+
GetArticleReply = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.GetArticleReply").msgclass
|
62
|
+
GetArticlesRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.GetArticlesRequest").msgclass
|
63
|
+
UpdateArticlesReply = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.UpdateArticlesReply").msgclass
|
64
|
+
DeleteArticlRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.DeleteArticlRequest").msgclass
|
65
|
+
DeleteArticleReply = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.DeleteArticleReply").msgclass
|
66
|
+
CreateArticleReply = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("Souls.CreateArticleReply").msgclass
|
67
|
+
end
|
68
|
+
module BlogPb
|
69
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Generated by the SOULs protocol buffer compiler. DO NOT EDIT!
|
2
|
+
# Source: blog.proto for package 'Souls'
|
3
|
+
|
4
|
+
require_relative "blog_pb"
|
5
|
+
module Souls
|
6
|
+
module Blog
|
7
|
+
class Service
|
8
|
+
|
9
|
+
include GRPC::GenericService
|
10
|
+
|
11
|
+
self.marshal_class_method = :encode
|
12
|
+
self.unmarshal_class_method = :decode
|
13
|
+
self.service_name = 'Souls.Blog'
|
14
|
+
|
15
|
+
# Sends a greeting
|
16
|
+
rpc :SayHello, ::Souls::HelloRequest, ::Souls::HelloReply
|
17
|
+
# Sends another greeting
|
18
|
+
rpc :SayHelloAgain, ::Souls::HelloRequest, ::Souls::HelloReply
|
19
|
+
# Blog Service Sample
|
20
|
+
rpc :GetArticle, ::Souls::GetArticlRequest, ::Souls::GetArticleReply
|
21
|
+
rpc :GetArticles, ::Souls::GetArticlesRequest, stream(::Souls::Article)
|
22
|
+
rpc :CreateArticle, ::Souls::Article, ::Souls::CreateArticleReply
|
23
|
+
rpc :UpdateArticles, stream(::Souls::Article), ::Souls::UpdateArticlesReply
|
24
|
+
rpc :DeleteArticle, ::Souls::DeleteArticlRequest, ::Souls::DeleteArticleReply
|
25
|
+
rpc :CreateArticlesInStream, stream(::Souls::Article), stream(::Souls::Article)
|
26
|
+
end
|
27
|
+
|
28
|
+
Stub = Service.rpc_stub_class
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Souls.configure do |config|
|
2
|
+
config.project_id = "elsoul2"
|
3
|
+
config.app = "blog"
|
4
|
+
config.network = "elsoul"
|
5
|
+
config.machine_type = "custom-1-6656"
|
6
|
+
config.zone = "asia-northeast1-b"
|
7
|
+
config.domain = "blog.el-soul.com"
|
8
|
+
config.google_application_credentials = "./config/credentials.json"
|
9
|
+
config.strain = "service"
|
10
|
+
config.proto_package_name = "souls"
|
11
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
apiVersion: v1
|
2
|
+
kind: Service
|
3
|
+
metadata:
|
4
|
+
name: souls_service
|
5
|
+
annotations:
|
6
|
+
cloud.google.com/neg: '{"exposed_ports":{"8080":{}}}'
|
7
|
+
spec:
|
8
|
+
ports:
|
9
|
+
- port: 8080
|
10
|
+
name: souls_service
|
11
|
+
protocol: TCP
|
12
|
+
targetPort: 50051
|
13
|
+
selector:
|
14
|
+
run: souls_service
|
15
|
+
type: ClusterIP
|
16
|
+
|
17
|
+
---
|
18
|
+
apiVersion: apps/v1
|
19
|
+
kind: Deployment
|
20
|
+
metadata:
|
21
|
+
labels:
|
22
|
+
run: souls_service
|
23
|
+
name: souls_service
|
24
|
+
spec:
|
25
|
+
selector:
|
26
|
+
matchLabels:
|
27
|
+
run: souls_service
|
28
|
+
replicas: 2
|
29
|
+
template:
|
30
|
+
metadata:
|
31
|
+
labels:
|
32
|
+
run: souls_service
|
33
|
+
spec:
|
34
|
+
containers:
|
35
|
+
- image: asia.gcr.io/elsoul2/souls_service:0.0.1
|
36
|
+
name: souls_service
|
37
|
+
ports:
|
38
|
+
- protocol: TCP
|
39
|
+
containerPort: 50051
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "./app"
|
2
|
+
|
3
|
+
def main
|
4
|
+
s = GRPC::RpcServer.new
|
5
|
+
s.add_http2_port("0.0.0.0:50051", :this_port_is_insecure)
|
6
|
+
s.handle(ApplicationController)
|
7
|
+
logger = Logger.new(STDOUT)
|
8
|
+
logger.info "Running Server! SOULs Ready on localhost:50051"
|
9
|
+
s.run_till_terminated_or_interrupted([1, "int", "SIGQUIT"])
|
10
|
+
end
|
11
|
+
|
12
|
+
main
|
@@ -0,0 +1,79 @@
|
|
1
|
+
syntax = "proto3";
|
2
|
+
|
3
|
+
package Souls;
|
4
|
+
|
5
|
+
import "google/protobuf/timestamp.proto";
|
6
|
+
|
7
|
+
service Blog {
|
8
|
+
// Sends a greeting
|
9
|
+
rpc SayHello (HelloRequest) returns (HelloReply) {}
|
10
|
+
// Sends another greeting
|
11
|
+
rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
|
12
|
+
|
13
|
+
// Blog Service Sample
|
14
|
+
rpc GetArticle(GetArticlRequest) returns (GetArticleReply) {}
|
15
|
+
rpc GetArticles(GetArticlesRequest) returns (stream Article) {}
|
16
|
+
rpc CreateArticle(Article) returns (CreateArticleReply) {}
|
17
|
+
rpc UpdateArticles(stream Article) returns (UpdateArticlesReply) {}
|
18
|
+
rpc DeleteArticle(DeleteArticlRequest) returns (DeleteArticleReply) {}
|
19
|
+
rpc CreateArticlesInStream(stream Article) returns (stream Article) {}
|
20
|
+
}
|
21
|
+
|
22
|
+
// The request message containing the user's name.
|
23
|
+
message HelloRequest {
|
24
|
+
string name = 1;
|
25
|
+
}
|
26
|
+
|
27
|
+
// The response message containing the greetings
|
28
|
+
message HelloReply {
|
29
|
+
string message = 1;
|
30
|
+
}
|
31
|
+
|
32
|
+
|
33
|
+
// Blog Protos
|
34
|
+
message Article {
|
35
|
+
string id = 1;
|
36
|
+
string user_id = 2;
|
37
|
+
string title = 3;
|
38
|
+
string body = 4;
|
39
|
+
string thumnail_url = 5;
|
40
|
+
uint32 public_date = 6;
|
41
|
+
uint32 article_category_id = 7;
|
42
|
+
bool is_public = 8;
|
43
|
+
repeated string tag = 9;
|
44
|
+
bool has_series = 10;
|
45
|
+
uint32 series_id = 11;
|
46
|
+
uint32 episode_num = 12;
|
47
|
+
google.protobuf.Timestamp created_at = 13;
|
48
|
+
google.protobuf.Timestamp updated_at = 14;
|
49
|
+
}
|
50
|
+
|
51
|
+
|
52
|
+
message GetArticlRequest {
|
53
|
+
uint32 id = 1;
|
54
|
+
}
|
55
|
+
|
56
|
+
message GetArticleReply {
|
57
|
+
Article article = 1;
|
58
|
+
}
|
59
|
+
|
60
|
+
message GetArticlesRequest {
|
61
|
+
string search = 1;
|
62
|
+
uint32 limit = 2;
|
63
|
+
}
|
64
|
+
|
65
|
+
message UpdateArticlesReply {
|
66
|
+
repeated Article articles = 1;
|
67
|
+
}
|
68
|
+
|
69
|
+
message DeleteArticlRequest {
|
70
|
+
uint32 id = 1;
|
71
|
+
}
|
72
|
+
|
73
|
+
message DeleteArticleReply {
|
74
|
+
Article article = 1;
|
75
|
+
}
|
76
|
+
|
77
|
+
message CreateArticleReply {
|
78
|
+
Article article = 1;
|
79
|
+
}
|
data/v0.0.8.tar.gz
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: souls
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- POPPIN-FUMI
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-01-
|
12
|
+
date: 2021-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: SOULS is a Web Application Framework for Microservices on Multi Cloud
|
15
15
|
Platform such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud.
|
@@ -45,6 +45,27 @@ files:
|
|
45
45
|
- lib/souls/version.rb
|
46
46
|
- rbs/init.rbs
|
47
47
|
- souls.gemspec
|
48
|
+
- souls_service-0.0.8/.env.sample
|
49
|
+
- souls_service-0.0.8/.gitignore
|
50
|
+
- souls_service-0.0.8/.irbrc
|
51
|
+
- souls_service-0.0.8/.rubocop.yml
|
52
|
+
- souls_service-0.0.8/.ruby-version
|
53
|
+
- souls_service-0.0.8/.ruby_version
|
54
|
+
- souls_service-0.0.8/Dockerfile
|
55
|
+
- souls_service-0.0.8/Gemfile
|
56
|
+
- souls_service-0.0.8/Gemfile.lock
|
57
|
+
- souls_service-0.0.8/README.md
|
58
|
+
- souls_service-0.0.8/Rakefile
|
59
|
+
- souls_service-0.0.8/app.rb
|
60
|
+
- souls_service-0.0.8/app/controllers/application_controller.rb
|
61
|
+
- souls_service-0.0.8/app/controllers/article_method.rb
|
62
|
+
- souls_service-0.0.8/app/controllers/hello_method.rb
|
63
|
+
- souls_service-0.0.8/app/services/blog_pb.rb
|
64
|
+
- souls_service-0.0.8/app/services/souls.rb
|
65
|
+
- souls_service-0.0.8/config/initializers/souls.rb
|
66
|
+
- souls_service-0.0.8/deployment.yml
|
67
|
+
- souls_service-0.0.8/grpc_server.rb
|
68
|
+
- souls_service-0.0.8/protos/blog.proto
|
48
69
|
- v0.0.8.tar.gz
|
49
70
|
homepage: https://github.com/elsoul/souls
|
50
71
|
licenses:
|
@@ -68,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
89
|
- !ruby/object:Gem::Version
|
69
90
|
version: '0'
|
70
91
|
requirements: []
|
71
|
-
rubygems_version: 3.2.
|
92
|
+
rubygems_version: 3.2.4
|
72
93
|
signing_key:
|
73
94
|
specification_version: 4
|
74
95
|
summary: SOULS is a Web Application Framework for Microservices on Multi Cloud Platform
|