runways 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e982aaecae5159992f07d2a5edbc6be3c37d9ca02658cfd0077f8d05eccc7e63
4
- data.tar.gz: 70535c84bcdad8ef21a0c9c950119b784b7420e786229ecf1fb90b5aaecb077c
3
+ metadata.gz: 38f45a3b612a1641cfbef86e72e0521c7f6488473724aa94df6b9740ce329d54
4
+ data.tar.gz: 1f768cc190fe9ce380e63a72dd4720556c96e1bd94c3adde4d01111af7b0b699
5
5
  SHA512:
6
- metadata.gz: 10d215260565f79d4e378facdac4c6a63b409553f109a0a53f689be57bd48bd3d0f2084e5ddcfca669831b9c54bc2034285ef7fc772095928787fd2c3b8c76d3
7
- data.tar.gz: 5725e891dc785f52d2ac395f08b10b13556749b99423eedf5bc36acb1b2a7d569dc7cd368f8711b596fb5d5bdd289cd202a15fc025dea6c7c454cea2d585b358
6
+ metadata.gz: ca1b07e2162af7aeca9d6fc378b2534a58959fe4668356095e3a656c1a27357f22be74d9b8fdcb5c79ae3aa2384d1477de7c698b6086eb0411b5bb89bac2a69f
7
+ data.tar.gz: '083596ed81e0dd1486782ac3b61c17f7a2a23933d84cfbf7b359a79cb0b081f711776a2d70d976b0eb12e755a310b747a9ced7a2c01c0fc5fcd4697ab78839e9'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- runways (0.1.6)
4
+ runways (0.1.7)
5
5
  activerecord (~> 5.2)
6
6
  grpc (~> 1.16)
7
7
  grpc-tools (~> 1.16)
@@ -23,10 +23,10 @@ GEM
23
23
  tzinfo (~> 1.1)
24
24
  arel (9.0.0)
25
25
  concurrent-ruby (1.1.3)
26
- google-protobuf (3.6.1)
26
+ google-protobuf (3.6.1-universal-darwin)
27
27
  googleapis-common-protos-types (1.0.2)
28
28
  google-protobuf (~> 3.0)
29
- grpc (1.16.0)
29
+ grpc (1.16.0-universal-darwin)
30
30
  google-protobuf (~> 3.1)
31
31
  googleapis-common-protos-types (~> 1.0.0)
32
32
  grpc-tools (1.16.0)
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
1
  # Runways
2
-
3
2
  Runways is a gRPC based ruby application. It will setup the basic project structure with active_record ORM.
4
3
 
5
4
  ## Installation
@@ -10,7 +9,7 @@ Install Runways at the command prompt:
10
9
 
11
10
  Create a new runways application:
12
11
 
13
- $ runways hello
12
+ $ runways new hello
14
13
 
15
14
  Run the following rake task to update protobuf files:
16
15
 
@@ -48,7 +47,7 @@ Everyone interacting in the Runways project’s codebases, issue trackers, chat
48
47
  - [ ] Setup logging
49
48
  - [ ] Use ActiveRecord generators to handle ActiveRecord related tasks ( ex: generate migration, migrate, rollback )
50
49
  - [ ] Create runways controller
51
- - [ ] Refactor generator code
50
+ - [x] Refactor generator code
52
51
  - [ ] Refactor code to generate protobuf files when the application is initialized
53
52
  - [x] Handle loading the server without DbConfig setup
54
53
  - [ ] Handle DbConfig in the ActiveRecord style
@@ -56,3 +55,7 @@ Everyone interacting in the Runways project’s codebases, issue trackers, chat
56
55
  - [x] Handle file loading like how rails handles it
57
56
  - [ ] Accept package name from command line
58
57
  - [ ] Don't hard code port
58
+ - [ ] Figure out how to handle nil values in the GRPC request
59
+ - [ ] Add callbacks for RPC's
60
+ - [ ] Test for streaming rpcs
61
+ - [ ] How to generalize interceptors for simple & streaming rpcs
@@ -2,4 +2,4 @@
2
2
 
3
3
  require 'runways'
4
4
 
5
- AppStructure.start
5
+ Runways::CLI.start(ARGV)
@@ -3,6 +3,9 @@ require "active_record"
3
3
  require "runways/version"
4
4
  require "runways/generators/app_structure_generator"
5
5
  require "runways/dependencies"
6
+ require "runways/cli"
7
+ require "runways/interceptors/base_interceptor"
8
+ require "runways/interceptors/benchmark_interceptor"
6
9
 
7
10
  module Runways
8
11
  # Your code goes here...
@@ -0,0 +1,10 @@
1
+ module Runways
2
+ class CLI < Thor
3
+ desc "new name", "provide name for the framework"
4
+ def new(app_name)
5
+ puts "building framework #{app_name}"
6
+
7
+ AppStructure.start([app_name])
8
+ end
9
+ end
10
+ end
@@ -9,91 +9,198 @@ class AppStructure < Thor::Group
9
9
  File.dirname(__FILE__)
10
10
  end
11
11
 
12
- def create_basic_app_structure
13
- root_directory = name.to_s
14
- app_directory = root_directory + "/app"
15
- models_directory = app_directory + "/models"
16
- controller_directory = app_directory + "/controllers"
17
- db_directory = root_directory + "/db"
18
- migration_directory = db_directory + "/migrate"
19
- lib_directory = root_directory + "/lib"
20
- lib_protos_directory = lib_directory + "/protos"
21
- tasks_directory = lib_directory + "/tasks"
22
- config_directory = root_directory + "/config"
23
- test_directory = root_directory + "/test"
12
+ def root_directory
13
+ app_name = name.to_s
14
+ empty_directory(app_name)
15
+ path = app_name
16
+
17
+ app_directory(path)
18
+ db_directory(path)
19
+ lib_directory(path)
20
+ proto_directory(path)
21
+ config_directory(path)
22
+ test_directory(path)
23
+
24
+ generate_gemfile(path)
25
+ generate_rake_file(path)
26
+ generate_server_file(path)
27
+
28
+ run_protoc_cmd(path)
29
+ run_bundle_install(path)
30
+ end
31
+
32
+ private
33
+ def app_directory(path)
34
+ path += "/app"
35
+ empty_directory(path)
24
36
 
25
- create_following_dirs([
26
- root_directory, app_directory, config_directory,
27
- lib_directory, lib_protos_directory, tasks_directory,
28
- models_directory, controller_directory,
29
- db_directory, migration_directory, test_directory,
30
- ])
37
+ models_directory(path)
31
38
  end
32
39
 
33
- def generate_proto_file
34
- # generate from template
35
- template("templates/proto.tt", "#{name}/proto/#{name}.proto")
40
+ def models_directory(path)
41
+ path += "/models"
42
+ empty_directory(path)
43
+
44
+ generate_application_record(path)
36
45
  end
37
46
 
38
- def generate_gemfile
39
- template("templates/gemfile.tt", "#{name}/Gemfile")
47
+ def generate_application_record(path)
48
+ path += "/"
49
+ template_name = "application_record"
50
+ generate_template(path: path, template_name: template_name, extenstion: 'rb')
40
51
  end
41
52
 
42
- def generate_db_rake_file
43
- template("templates/db_rake.tt", "#{name}/lib/tasks/db.rake")
53
+ def db_directory(path)
54
+ path += "/db"
55
+ empty_directory(path)
56
+
57
+ migration_directory(path)
44
58
  end
45
59
 
46
- def generate_rake_file
47
- template("templates/rakefile.tt", "#{name}/Rakefile")
60
+ def migration_directory(path)
61
+ path += "/migrate"
62
+ empty_directory(path)
48
63
  end
49
64
 
50
- def generate_application_record
51
- template(
52
- "templates/application_record.tt",
53
- "#{name}/app/models/application_record.rb"
65
+ def lib_directory(path)
66
+ path += "/lib"
67
+ empty_directory(path)
68
+
69
+ protos_directory(path)
70
+ tasks_directory(path)
71
+
72
+ generate_service_file(path)
73
+ end
74
+
75
+ def protos_directory(path)
76
+ path += "/protos"
77
+ empty_directory(path)
78
+ end
79
+
80
+ def tasks_directory(path)
81
+ path += "/tasks"
82
+ empty_directory(path)
83
+
84
+ generate_db_rake_file(path)
85
+ generate_protofub_rake_file(path)
86
+ end
87
+
88
+ def generate_db_rake_file(path)
89
+ path += "/"
90
+ generate_template(
91
+ path: path, extenstion: 'rake', template_name: 'db'
54
92
  )
55
93
  end
56
94
 
57
- def generate_service_file
58
- template(
59
- "templates/service.tt",
60
- "#{name}/lib/#{name.underscore}_service.rb"
95
+ def generate_protofub_rake_file(path)
96
+ path += "/"
97
+ generate_template(
98
+ path: path, extenstion: 'rake', template_name: 'generate_protobuf_files'
61
99
  )
62
100
  end
63
101
 
64
- def generate_server_file
65
- template(
66
- "templates/server.tt",
67
- "#{name}/#{name.underscore}_server.rb"
102
+ def generate_service_file(path)
103
+ path += "/"
104
+ file_name = "#{name.underscore}_service"
105
+
106
+ generate_template(
107
+ path: path, file_name: file_name,
108
+ extenstion: 'rb', template_name: "service"
68
109
  )
69
110
  end
70
111
 
71
- def generate_db_config_file
72
- template("templates/db_config.tt", "#{name}/config/db_config.rb")
112
+ def proto_directory(path)
113
+ path += "/proto"
114
+ empty_directory(path)
115
+
116
+ generate_proto_file(path)
73
117
  end
74
118
 
75
- def generate_protofub_file
76
- template("templates/protobuf_rake.tt", "#{name}/lib/tasks/generate_protobuf_files.rake")
119
+ def generate_proto_file(path)
120
+ path += "/"
121
+ generate_template(
122
+ path: path, extenstion: 'proto', template_name: 'proto', file_name: name
123
+ )
77
124
  end
78
125
 
79
- def generate_test_client_file
80
- template("templates/test_client.tt", "#{name}/test/test_client.rb")
126
+ def config_directory(path)
127
+ path += "/config"
128
+ empty_directory(path)
129
+
130
+ generate_db_config_file(path)
131
+ generate_application_config_file(path)
81
132
  end
82
133
 
83
- def generate_application_file
84
- template("templates/application_config.tt", "#{name}/config/application.rb")
134
+ def generate_db_config_file(path)
135
+ path += "/"
136
+ generate_template(
137
+ path: path, extenstion: 'rb', template_name: 'db_config'
138
+ )
85
139
  end
86
140
 
87
- def run_protoc_cmd
88
- inside(name) do
141
+ def generate_application_config_file(path)
142
+ path += "/"
143
+ generate_template(
144
+ path: path, extenstion: 'rb', template_name: 'application'
145
+ )
146
+ end
147
+
148
+ def test_directory(path)
149
+ path += "/test"
150
+ empty_directory(path)
151
+
152
+ generate_test_client_file(path)
153
+ end
154
+
155
+ def generate_test_client_file(path)
156
+ path += "/"
157
+ generate_template(
158
+ path: path, extenstion: 'rb', template_name: 'test_client'
159
+ )
160
+ end
161
+
162
+ def generate_gemfile(path)
163
+ path += "/"
164
+ generate_template(
165
+ path: path, template_name: 'Gemfile'
166
+ )
167
+ end
168
+
169
+ def generate_rake_file(path)
170
+ path += "/"
171
+ generate_template(
172
+ path: path, template_name: 'Rakefile'
173
+ )
174
+ end
175
+
176
+ def generate_server_file(path)
177
+ path += "/"
178
+ generate_template(
179
+ path: path, template_name: 'server',
180
+ file_name: name + "_server", extenstion: 'rb'
181
+ )
182
+ end
183
+
184
+ def run_protoc_cmd(path)
185
+ inside(path) do
89
186
  run ("grpc_tools_ruby_protoc -I proto --ruby_out=lib/protos --grpc_out=lib/protos proto/#{name.underscore}.proto")
90
187
  end
91
188
  end
92
189
 
93
- private
94
- def create_following_dirs(dir_paths)
95
- dir_paths.each do |dir_path|
96
- empty_directory(dir_path)
190
+ def run_bundle_install(path)
191
+ inside(path) do
192
+ run ("bundle install")
97
193
  end
98
194
  end
195
+
196
+ def templates_directory
197
+ "templates"
198
+ end
199
+
200
+ def generate_template(path:, template_name:, extenstion: '', file_name: nil)
201
+ template(
202
+ path.sub(name, templates_directory) + template_name + ".tt",
203
+ path + ( file_name ? file_name : template_name ) + ( extenstion.present? ? '.' + extenstion : extenstion )
204
+ )
205
+ end
99
206
  end
@@ -14,10 +14,14 @@ class <%= name.camelize %>Server
14
14
  private
15
15
 
16
16
  def start_grpc_server
17
- @server = GRPC::RpcServer.new(pool_size: 5)
17
+ # Available interceptors Runways::BenchmarkInterceptor
18
+ @server = GRPC::RpcServer.new(
19
+ pool_size: 5,
20
+ interceptors: []
21
+ )
18
22
  @server.add_http2_port('0.0.0.0:50052', :this_port_is_insecure)
19
- @server.handle(<%= name.camelize %>Service)
20
- @server.run_till_terminated
23
+ @server.handle(<%= name.camelize %>Service)
24
+ @server.run_till_terminated
21
25
  end
22
26
  end
23
27
  end
@@ -0,0 +1,23 @@
1
+ module Runways
2
+ class BaseInterceptor < ::GRPC::ServerInterceptor
3
+ def all_request_responses(request: nil, call: nil, method: nil)
4
+ yield
5
+ end
6
+
7
+ def request_response(request: nil, call: nil, method: nil, &block)
8
+ all_request_responses(request: request, call: call, method: method, &block)
9
+ end
10
+
11
+ def client_streamer(request: nil, call: nil, method: nil, &block)
12
+ all_request_responses(request: request, call: call, method: method, &block)
13
+ end
14
+
15
+ def server_streamer(request: nil, call: nil, method: nil, &block)
16
+ all_request_responses(request: request, call: call, method: method, &block)
17
+ end
18
+
19
+ def bidi_streamer(request: nil, call: nil, method: nil, &block)
20
+ all_request_responses(request: request, call: call, method: method, &block)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,11 @@
1
+ module Runways
2
+ class BenchmarkInterceptor < BaseInterceptor
3
+ def all_request_responses(request: nil, call: nil, method: nil)
4
+ realtime = Benchmark.realtime do
5
+ yield
6
+ end
7
+
8
+ puts "Completed in #{realtime} secs"
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Runways
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: runways
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - NG
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-21 00:00:00.000000000 Z
11
+ date: 2018-11-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -115,19 +115,22 @@ files:
115
115
  - bin/setup
116
116
  - exe/runways
117
117
  - lib/runways.rb
118
+ - lib/runways/cli.rb
118
119
  - lib/runways/dependencies.rb
119
120
  - lib/runways/generators/app_structure_generator.rb
120
- - lib/runways/generators/templates/application_config.tt
121
- - lib/runways/generators/templates/application_record.tt
122
- - lib/runways/generators/templates/db_config.tt
123
- - lib/runways/generators/templates/db_rake.tt
121
+ - lib/runways/generators/templates/app/models/application_record.tt
122
+ - lib/runways/generators/templates/config/application.tt
123
+ - lib/runways/generators/templates/config/db_config.tt
124
124
  - lib/runways/generators/templates/gemfile.tt
125
- - lib/runways/generators/templates/proto.tt
126
- - lib/runways/generators/templates/protobuf_rake.tt
125
+ - lib/runways/generators/templates/lib/service.tt
126
+ - lib/runways/generators/templates/lib/tasks/db.tt
127
+ - lib/runways/generators/templates/lib/tasks/generate_protobuf_files.tt
128
+ - lib/runways/generators/templates/proto/proto.tt
127
129
  - lib/runways/generators/templates/rakefile.tt
128
130
  - lib/runways/generators/templates/server.tt
129
- - lib/runways/generators/templates/service.tt
130
- - lib/runways/generators/templates/test_client.tt
131
+ - lib/runways/generators/templates/test/test_client.tt
132
+ - lib/runways/interceptors/base_interceptor.rb
133
+ - lib/runways/interceptors/benchmark_interceptor.rb
131
134
  - lib/runways/version.rb
132
135
  - runways.gemspec
133
136
  homepage: https://github.com