neo_gruby 0.2.0.pre.rc1
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 +7 -0
- data/exe/neogruby +5 -0
- data/lib/neo_gruby.rb +59 -0
- data/lib/neo_gruby/application.rb +114 -0
- data/lib/neo_gruby/cli/commands.rb +14 -0
- data/lib/neo_gruby/cli/commands/console.rb +24 -0
- data/lib/neo_gruby/cli/commands/db.rb +34 -0
- data/lib/neo_gruby/cli/commands/protoc.rb +56 -0
- data/lib/neo_gruby/cli/commands/server.rb +22 -0
- data/lib/neo_gruby/ext/class.rb +20 -0
- data/lib/neo_gruby/registry.rb +20 -0
- data/lib/neo_gruby/version.rb +3 -0
- metadata +127 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 937ca306efab93ba61192077aacb966bf6383f794f7c1c949de411737720d495
|
4
|
+
data.tar.gz: 6e60760487b9c7ef9bab1536bf3dd0224be5f3214077d49af533139e41fb7d90
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d0b448be92b9cba100bfb5040d6b0a134a381e9512c6ef6d0ec4e36cfddacf13446668a0de8259b3ea0f07c4b7b2d615b42004fc8702ca21e10b2045bad02837
|
7
|
+
data.tar.gz: f4bbd4ad9610a2debf0c2b93931656288f08d8bb3d104e0a414ec96e1222f20fb2aacc8bfaccc82d40e48c5f2008af943898ddb6ae7c0cffc3383bc6db131e9d
|
data/exe/neogruby
ADDED
data/lib/neo_gruby.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require "neo_gruby/version"
|
2
|
+
require "neo_gruby/ext/class"
|
3
|
+
require "dotenv"
|
4
|
+
|
5
|
+
module NeoGruby
|
6
|
+
class Error < StandardError; end
|
7
|
+
|
8
|
+
autoload :Registry, 'neo_gruby/registry'
|
9
|
+
autoload :Application, 'neo_gruby/application'
|
10
|
+
|
11
|
+
module CLI
|
12
|
+
autoload :Commands, 'neo_gruby/cli/commands'
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
16
|
+
|
17
|
+
attr_accessor :root, :app, :env, :db
|
18
|
+
|
19
|
+
def boot
|
20
|
+
if @root.nil?
|
21
|
+
@root = File.expand_path('../../', File.expand_path(caller_locations.first.path))
|
22
|
+
|
23
|
+
def @root.join(*args)
|
24
|
+
File.join self, args.join(File::Separator)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
@env = (ENV['NEOGRUBY_ENV'] || ENV['APP_ENV'] || ENV.fetch('RACK_ENV') { 'development' }).to_s
|
29
|
+
def @env.development?
|
30
|
+
self == 'development'
|
31
|
+
end
|
32
|
+
|
33
|
+
def @env.production?
|
34
|
+
self == 'production'
|
35
|
+
end
|
36
|
+
|
37
|
+
def @env.test?
|
38
|
+
self == 'test'
|
39
|
+
end
|
40
|
+
|
41
|
+
Dotenv.load(root.join('.env'), root.join(".env.#{NeoGruby.env}"), root.join(".env.#{NeoGruby.env}.local"))
|
42
|
+
|
43
|
+
@configs = []
|
44
|
+
NeoGruby::Registry.trigger(:before_boot)
|
45
|
+
@app = Application.new
|
46
|
+
@configs.each {|c| app.configure {|app| c.call(app) } }
|
47
|
+
app.loadpaths
|
48
|
+
NeoGruby::Registry.trigger(:after_boot, @app)
|
49
|
+
end
|
50
|
+
|
51
|
+
def configure(&block)
|
52
|
+
@configs << block if block_given?
|
53
|
+
end
|
54
|
+
|
55
|
+
def run!
|
56
|
+
app.run
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
|
2
|
+
module NeoGruby
|
3
|
+
class Application
|
4
|
+
|
5
|
+
attr_accessor :logger,
|
6
|
+
:proto_path,
|
7
|
+
:protos,
|
8
|
+
:services,
|
9
|
+
:server,
|
10
|
+
:load_paths
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@protos = []
|
14
|
+
@services = []
|
15
|
+
@load_paths = [
|
16
|
+
NeoGruby.root.join('app', 'protobuf'),
|
17
|
+
NeoGruby.root.join('app', 'models'),
|
18
|
+
NeoGruby.root.join('app', 'services'),
|
19
|
+
]
|
20
|
+
|
21
|
+
@proto_path = NeoGruby.root.join('protos')
|
22
|
+
|
23
|
+
prepare_application
|
24
|
+
running_initializers
|
25
|
+
end
|
26
|
+
|
27
|
+
def loadpaths
|
28
|
+
NeoGruby::Registry.trigger(:before_loadpaths, @load_paths, self)
|
29
|
+
@load_paths.each {|f| $: << f }
|
30
|
+
end
|
31
|
+
|
32
|
+
def run
|
33
|
+
create_logger if logger.nil?
|
34
|
+
prepare_grpc
|
35
|
+
load_services
|
36
|
+
start_services
|
37
|
+
end
|
38
|
+
|
39
|
+
def configure(&block)
|
40
|
+
yield self if block_given?
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def prepare_application
|
46
|
+
require NeoGruby.root.join('config', 'application')
|
47
|
+
|
48
|
+
environment_file = NeoGruby.root.join('config', 'environments', NeoGruby.env)
|
49
|
+
require environment_file if File.exist? environment_file
|
50
|
+
end
|
51
|
+
|
52
|
+
def running_initializers
|
53
|
+
NeoGruby::Registry.trigger(:before_initializers, @load_paths, self)
|
54
|
+
Dir[NeoGruby.root.join('config', 'initializers', '*.rb')].each do |f|
|
55
|
+
require f
|
56
|
+
end
|
57
|
+
NeoGruby::Registry.trigger(:after_initializers, @load_paths, self)
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
def prepare_grpc
|
62
|
+
require 'grpc'
|
63
|
+
|
64
|
+
load_grpc_resources
|
65
|
+
|
66
|
+
@port = "0.0.0.0:#{ENV.fetch('PORT') { 50051 }}"
|
67
|
+
@server = GRPC::RpcServer.new
|
68
|
+
@server.add_http2_port(@port, :this_port_is_insecure)
|
69
|
+
end
|
70
|
+
|
71
|
+
def load_services
|
72
|
+
Dir[NeoGruby.root.join('app', 'services', '*.rb')].each do |f|
|
73
|
+
require f
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def start_services
|
78
|
+
NeoGruby::Registry.trigger(:before_start, self)
|
79
|
+
puts '[SERVER] Adding services'
|
80
|
+
ObjectSpace.each_object(Class).select { |c| c.included_modules.include? GRPC::GenericService }.each do |s|
|
81
|
+
unless s.to_s.end_with? "::Service"
|
82
|
+
puts "[SERVER] - #{s}"
|
83
|
+
server.handle(s.new)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
puts("[SERVER] running insecurely on #{@port}")
|
88
|
+
# Runs the server with SIGHUP, SIGINT and SIGQUIT signal handlers to
|
89
|
+
# gracefully shutdown.
|
90
|
+
# User could also choose to run server via call to run_till_terminated
|
91
|
+
server.run_till_terminated_or_interrupted([1, 'int', 'SIGQUIT'])
|
92
|
+
|
93
|
+
NeoGruby::Registry.trigger(:after_start, self)
|
94
|
+
end
|
95
|
+
|
96
|
+
def load_grpc_resources
|
97
|
+
Dir[NeoGruby.root.join('app', 'protobuf', '*_pb.rb')].each do |f|
|
98
|
+
require f
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def create_logger
|
105
|
+
NeoGruby::Registry.trigger(:before_create_logger, self)
|
106
|
+
return unless @logger.nil?
|
107
|
+
require 'logger'
|
108
|
+
FileUtils.mkdir_p NeoGruby.root.join('log')
|
109
|
+
output = NeoGruby.env.production? ? NeoGruby.root.join('log', "#{NeoGruby.env}.log") : '/dev/stdout'
|
110
|
+
@logger = Logger.new output
|
111
|
+
NeoGruby::Registry.trigger(:after_create_logger, self)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "dry/cli"
|
2
|
+
|
3
|
+
module NeoGruby
|
4
|
+
module CLI
|
5
|
+
module Commands
|
6
|
+
extend Dry::CLI::Registry
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require_relative 'commands/db'
|
12
|
+
require_relative 'commands/protoc'
|
13
|
+
require_relative 'commands/server'
|
14
|
+
require_relative 'commands/console'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module NeoGruby
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class Console < Dry::CLI::Command
|
5
|
+
def call(*)
|
6
|
+
require './config/boot'
|
7
|
+
require 'pry'
|
8
|
+
Pry.config.prompt_name = 'NeoGruby'
|
9
|
+
Pry.start
|
10
|
+
puts 'Goodbye 👋'
|
11
|
+
|
12
|
+
rescue Interrupt => e
|
13
|
+
puts 'Goodbye 👋'
|
14
|
+
rescue SignalException => e
|
15
|
+
rescue Exception => e
|
16
|
+
puts e.message
|
17
|
+
puts e.backtrace
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
register 'console', Console, aliases: ['c']
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "dry/cli"
|
2
|
+
|
3
|
+
module NeoGruby
|
4
|
+
module CLI
|
5
|
+
module Commands
|
6
|
+
module Db
|
7
|
+
class Migrate < Dry::CLI::Command
|
8
|
+
desc "Run database migration"
|
9
|
+
|
10
|
+
argument :version, type: :string, desc: "Informe the migration name to destination"
|
11
|
+
|
12
|
+
def call(version: nil, **)
|
13
|
+
require './config/boot'
|
14
|
+
require 'sequel'
|
15
|
+
require 'yaml'
|
16
|
+
|
17
|
+
Sequel.extension :migration
|
18
|
+
|
19
|
+
config = YAML.load_file(NeoGruby.root.join('config', 'database.yml'))
|
20
|
+
config[NeoGruby.env].keys.each do |name|
|
21
|
+
dir = NeoGruby.root.join('db/migrations', name)
|
22
|
+
puts dir if File.directory? dir
|
23
|
+
Sequel::Migrator.run(NeoGruby::Db.conn[name.to_sym], dir, target: version) if File.directory? dir
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
register "db" do |prefix|
|
30
|
+
prefix.register "migrate", Db::Migrate
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require "dry/cli"
|
2
|
+
|
3
|
+
module NeoGruby
|
4
|
+
module CLI
|
5
|
+
module Commands
|
6
|
+
class Protoc < Dry::CLI::Command
|
7
|
+
desc "Compile proto3 files into ruby classes"
|
8
|
+
|
9
|
+
def call(*)
|
10
|
+
require './config/boot'
|
11
|
+
|
12
|
+
prepare_folders
|
13
|
+
|
14
|
+
puts "> Loading proto files from '#{NeoGruby.app.proto_path.join ', '}'"
|
15
|
+
compiling_messages
|
16
|
+
compiling_services
|
17
|
+
end
|
18
|
+
|
19
|
+
def prepare_folders
|
20
|
+
@output_path = NeoGruby.root.join('app', 'protobuf')
|
21
|
+
FileUtils.rm_rf @output_path
|
22
|
+
FileUtils.mkdir_p @output_path
|
23
|
+
end
|
24
|
+
|
25
|
+
def compiling_messages
|
26
|
+
puts "> Compiling proto into MESSAGES classes"
|
27
|
+
|
28
|
+
NeoGruby.app.protos.flatten.each do |proto|
|
29
|
+
puts "#{proto}.proto"
|
30
|
+
|
31
|
+
system 'grpc_tools_ruby_protoc',
|
32
|
+
NeoGruby.app.proto_path.map {|p| "-I#{p}" }.join(' '),
|
33
|
+
"--ruby_out=#{@output_path}",
|
34
|
+
"--grpc_out=#{@output_path}",
|
35
|
+
"#{proto}.proto"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def compiling_services
|
40
|
+
puts "> Compiling proto into SERVICES classes"
|
41
|
+
|
42
|
+
NeoGruby.app.services.flatten.each do |proto|
|
43
|
+
puts "#{proto}.proto"
|
44
|
+
|
45
|
+
system 'grpc_tools_ruby_protoc',
|
46
|
+
NeoGruby.app.proto_path.map {|p| "-I#{p}" }.join(' '),
|
47
|
+
"--ruby_out=#{@output_path}",
|
48
|
+
"#{proto}.proto"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
register "protoc", Protoc, aliases: ['compile']
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "dry/cli"
|
2
|
+
|
3
|
+
module NeoGruby
|
4
|
+
module CLI
|
5
|
+
module Commands
|
6
|
+
class Server < Dry::CLI::Command
|
7
|
+
desc "Run GRPC server"
|
8
|
+
|
9
|
+
def call(*)
|
10
|
+
system '/usr/bin/env ruby config.ru'
|
11
|
+
|
12
|
+
rescue Interrupt => e
|
13
|
+
rescue SignalException => e
|
14
|
+
rescue Exception => e
|
15
|
+
puts e.backtrace
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
register "server", Server, aliases: ['s']
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Class
|
2
|
+
class << self
|
3
|
+
def descendants
|
4
|
+
descendants = []
|
5
|
+
ObjectSpace.each_object(singleton_class) do |k|
|
6
|
+
next if k.singleton_class?
|
7
|
+
descendants.unshift k unless k == self
|
8
|
+
end
|
9
|
+
descendants
|
10
|
+
end
|
11
|
+
|
12
|
+
def subclasses
|
13
|
+
subclasses, chain = [], descendants
|
14
|
+
chain.each do |k|
|
15
|
+
subclasses << k unless chain.any? { |c| c > k }
|
16
|
+
end
|
17
|
+
subclasses
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module NeoGruby
|
2
|
+
module Registry
|
3
|
+
class << self
|
4
|
+
attr_accessor :bucket
|
5
|
+
|
6
|
+
def add(name, &block)
|
7
|
+
bucket[name.to_sym] ||= []
|
8
|
+
bucket[name.to_sym] << block if block_given?
|
9
|
+
end
|
10
|
+
|
11
|
+
def trigger(name, *params)
|
12
|
+
if bucket.has_key?(name.to_sym)
|
13
|
+
bucket[name.to_sym].each {|b| b.call(*params)}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
NeoGruby::Registry.bucket = {}
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: neo_gruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0.pre.rc1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Welington Sampaio
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-02-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: grpc
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.26.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.26.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dotenv
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.7.5
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.7.5
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: dry-cli
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.5.1
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.5.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: logger
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.4.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.4.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.12.2
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.12.2
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
- welington@gruponeolife.com.br
|
86
|
+
executables:
|
87
|
+
- neogruby
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- exe/neogruby
|
92
|
+
- lib/neo_gruby.rb
|
93
|
+
- lib/neo_gruby/application.rb
|
94
|
+
- lib/neo_gruby/cli/commands.rb
|
95
|
+
- lib/neo_gruby/cli/commands/console.rb
|
96
|
+
- lib/neo_gruby/cli/commands/db.rb
|
97
|
+
- lib/neo_gruby/cli/commands/protoc.rb
|
98
|
+
- lib/neo_gruby/cli/commands/server.rb
|
99
|
+
- lib/neo_gruby/ext/class.rb
|
100
|
+
- lib/neo_gruby/registry.rb
|
101
|
+
- lib/neo_gruby/version.rb
|
102
|
+
homepage: https://github.com/neolifehq/neogruby
|
103
|
+
licenses:
|
104
|
+
- MIT
|
105
|
+
metadata:
|
106
|
+
homepage_uri: https://github.com/neolifehq/neogruby
|
107
|
+
source_code_uri: https://github.com/neolifehq/neogruby.git
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 2.3.0
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">"
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: 1.3.1
|
122
|
+
requirements: []
|
123
|
+
rubygems_version: 3.0.3
|
124
|
+
signing_key:
|
125
|
+
specification_version: 4
|
126
|
+
summary: Little ruby framework to works with GRPC
|
127
|
+
test_files: []
|