rubypitaya 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/rubypitaya +56 -0
- data/lib/rubypitaya/app-template/Gemfile +10 -0
- data/lib/rubypitaya/app-template/Gemfile.lock +83 -0
- data/lib/rubypitaya/app-template/Makefile +91 -0
- data/lib/rubypitaya/app-template/Rakefile +57 -0
- data/lib/rubypitaya/app-template/app/app_initializer.rb +23 -0
- data/lib/rubypitaya/app-template/app/bll/player_bll.rb +10 -0
- data/lib/rubypitaya/app-template/app/config/initial_player.json +3 -0
- data/lib/rubypitaya/app-template/app/constants/status_codes.rb +15 -0
- data/lib/rubypitaya/app-template/app/handlers/hello_world_handler.rb +11 -0
- data/lib/rubypitaya/app-template/app/handlers/player_handler.rb +79 -0
- data/lib/rubypitaya/app-template/app/models/player.rb +15 -0
- data/lib/rubypitaya/app-template/app/models/user.rb +4 -0
- data/lib/rubypitaya/app-template/bin/console +22 -0
- data/lib/rubypitaya/app-template/config/database.yml +22 -0
- data/lib/rubypitaya/app-template/db/migrate/001_create_user_migration.rb +12 -0
- data/lib/rubypitaya/app-template/db/migrate/002_create_player_migration.rb +14 -0
- data/lib/rubypitaya/app-template/docker/dev/Dockerfile +19 -0
- data/lib/rubypitaya/app-template/docker/entrypoint.sh +13 -0
- data/lib/rubypitaya/app-template/docker/prod/Dockerfile +32 -0
- data/lib/rubypitaya/app-template/docker/prod/Makefile +67 -0
- data/lib/rubypitaya/app-template/docker-compose.yml +75 -0
- data/lib/rubypitaya/core/application_files_importer.rb +13 -0
- data/lib/rubypitaya/core/config.rb +33 -0
- data/lib/rubypitaya/core/database_config.rb +50 -0
- data/lib/rubypitaya/core/database_connector.rb +22 -0
- data/lib/rubypitaya/core/etcd_connector.rb +75 -0
- data/lib/rubypitaya/core/handler_base.rb +26 -0
- data/lib/rubypitaya/core/handler_router.rb +71 -0
- data/lib/rubypitaya/core/initializer_base.rb +8 -0
- data/lib/rubypitaya/core/initializer_broadcast.rb +15 -0
- data/lib/rubypitaya/core/initializer_content.rb +12 -0
- data/lib/rubypitaya/core/instance_holder.rb +17 -0
- data/lib/rubypitaya/core/main.rb +121 -0
- data/lib/rubypitaya/core/nats_connector.rb +148 -0
- data/lib/rubypitaya/core/parameters.rb +245 -0
- data/lib/rubypitaya/core/path.rb +13 -0
- data/lib/rubypitaya/core/postman.rb +31 -0
- data/lib/rubypitaya/core/redis_connector.rb +26 -0
- data/lib/rubypitaya/core/session.rb +29 -0
- data/lib/rubypitaya/version.rb +4 -0
- data/lib/rubypitaya.rb +20 -0
- metadata +240 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 573d0dce81f6383ae631e5bcde6676f45d516ce7a38b51eefa4ebd922d229e4e
|
4
|
+
data.tar.gz: 1b163c885db0a3a532edfd21d07cd9058f7003f2ad44dd40e90429f1311c337e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b5a39ccf4533c32c285c1e31f0db14131c3a255639693e4c343b4d2f8cd2fda9f4be5d000c7b68a0a7b78fbb9a80d32e26a23792a3e88dbaab27efefd7ceb55c
|
7
|
+
data.tar.gz: bc1c57916f513bac17a22e8b3ad720d725d93fd9369111b6bcb0fd18175063c7a69e84e90cf1aaab474ad215c0658102c10c7355ce075783fa85c53302e98035
|
data/bin/rubypitaya
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubypitaya'
|
4
|
+
|
5
|
+
COMMANDS = ['run', 'create']
|
6
|
+
|
7
|
+
def main
|
8
|
+
if ARGV.size == 0 || !COMMANDS.include?(ARGV[0])
|
9
|
+
show_help()
|
10
|
+
exit(-1)
|
11
|
+
end
|
12
|
+
|
13
|
+
command = ARGV[0]
|
14
|
+
|
15
|
+
if command == 'run'
|
16
|
+
command_run(ARGV)
|
17
|
+
end
|
18
|
+
|
19
|
+
if command == 'create'
|
20
|
+
command_create(ARGV)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def command_run(argv)
|
25
|
+
puts 'Starting server...'
|
26
|
+
RubyPitaya::RubyPitaya.run_server
|
27
|
+
end
|
28
|
+
|
29
|
+
def command_create(argv)
|
30
|
+
if argv.size <= 1
|
31
|
+
show_help_create()
|
32
|
+
exit(-1)
|
33
|
+
end
|
34
|
+
|
35
|
+
project_name = argv[1]
|
36
|
+
folder_path = Dir.pwd
|
37
|
+
|
38
|
+
RubyPitaya::RubyPitaya.create_project(project_name, folder_path)
|
39
|
+
|
40
|
+
puts "Project #{project_name} created!"
|
41
|
+
end
|
42
|
+
|
43
|
+
def show_help
|
44
|
+
puts 'Usage: $ rubypitaya [COMMAND]'
|
45
|
+
puts 'COMMAND:'
|
46
|
+
puts ' run: - Run server'
|
47
|
+
puts ' create: - Create project'
|
48
|
+
puts ''
|
49
|
+
end
|
50
|
+
|
51
|
+
def show_help_create
|
52
|
+
puts 'Usage: $ rubypitaya create [project_name]'
|
53
|
+
puts ''
|
54
|
+
end
|
55
|
+
|
56
|
+
main
|
@@ -0,0 +1,83 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activemodel (6.0.2)
|
5
|
+
activesupport (= 6.0.2)
|
6
|
+
activerecord (6.0.2)
|
7
|
+
activemodel (= 6.0.2)
|
8
|
+
activesupport (= 6.0.2)
|
9
|
+
activesupport (6.0.2)
|
10
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
11
|
+
i18n (>= 0.7, < 2)
|
12
|
+
minitest (~> 5.1)
|
13
|
+
tzinfo (~> 1.1)
|
14
|
+
zeitwerk (~> 2.2)
|
15
|
+
coderay (1.1.2)
|
16
|
+
concurrent-ruby (1.1.6)
|
17
|
+
diff-lcs (1.3)
|
18
|
+
etcdv3 (0.10.2)
|
19
|
+
grpc (~> 1.17)
|
20
|
+
eventmachine (1.2.7)
|
21
|
+
google-protobuf (3.11.4)
|
22
|
+
googleapis-common-protos-types (1.0.5)
|
23
|
+
google-protobuf (~> 3.11)
|
24
|
+
grpc (1.28.0)
|
25
|
+
google-protobuf (~> 3.11)
|
26
|
+
googleapis-common-protos-types (~> 1.0)
|
27
|
+
i18n (1.8.2)
|
28
|
+
concurrent-ruby (~> 1.0)
|
29
|
+
method_source (0.9.2)
|
30
|
+
middleware (0.1.0)
|
31
|
+
minitest (5.14.0)
|
32
|
+
nats (0.11.0)
|
33
|
+
eventmachine (~> 1.2, >= 1.2)
|
34
|
+
pg (0.21.0)
|
35
|
+
protobuf (3.10.0)
|
36
|
+
activesupport (>= 3.2)
|
37
|
+
middleware
|
38
|
+
thor
|
39
|
+
thread_safe
|
40
|
+
pry (0.12.2)
|
41
|
+
coderay (~> 1.1.0)
|
42
|
+
method_source (~> 0.9.0)
|
43
|
+
rake (10.0.0)
|
44
|
+
redis (4.1.3)
|
45
|
+
rspec (3.8.0)
|
46
|
+
rspec-core (~> 3.8.0)
|
47
|
+
rspec-expectations (~> 3.8.0)
|
48
|
+
rspec-mocks (~> 3.8.0)
|
49
|
+
rspec-core (3.8.2)
|
50
|
+
rspec-support (~> 3.8.0)
|
51
|
+
rspec-expectations (3.8.6)
|
52
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
53
|
+
rspec-support (~> 3.8.0)
|
54
|
+
rspec-mocks (3.8.2)
|
55
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
56
|
+
rspec-support (~> 3.8.0)
|
57
|
+
rspec-support (3.8.3)
|
58
|
+
rubypitaya (1.1.0)
|
59
|
+
activerecord (= 6.0.2)
|
60
|
+
etcdv3 (= 0.10.2)
|
61
|
+
eventmachine (= 1.2.7)
|
62
|
+
nats (= 0.11.0)
|
63
|
+
pg (= 0.21.0)
|
64
|
+
protobuf (= 3.10.0)
|
65
|
+
redis (= 4.1.3)
|
66
|
+
thor (1.0.1)
|
67
|
+
thread_safe (0.3.6)
|
68
|
+
tzinfo (1.2.7)
|
69
|
+
thread_safe (~> 0.1)
|
70
|
+
zeitwerk (2.3.0)
|
71
|
+
|
72
|
+
PLATFORMS
|
73
|
+
ruby
|
74
|
+
|
75
|
+
DEPENDENCIES
|
76
|
+
bundler (= 1.17.2)
|
77
|
+
pry (= 0.12.2)
|
78
|
+
rake (= 10.0)
|
79
|
+
rspec (= 3.8.0)
|
80
|
+
rubypitaya (= 1.0.6)
|
81
|
+
|
82
|
+
BUNDLED WITH
|
83
|
+
1.17.2
|
@@ -0,0 +1,91 @@
|
|
1
|
+
## Run ruby pitaya metagame project
|
2
|
+
run:
|
3
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rubypitaya run
|
4
|
+
|
5
|
+
## Build project
|
6
|
+
build:
|
7
|
+
@docker-compose build
|
8
|
+
|
9
|
+
## Kill all containers
|
10
|
+
kill:
|
11
|
+
@docker rm -f $$(docker-compose ps -aq)
|
12
|
+
|
13
|
+
## Run tests
|
14
|
+
test:
|
15
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rspec
|
16
|
+
|
17
|
+
## Run ruby irb console
|
18
|
+
console:
|
19
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec ruby ./bin/console
|
20
|
+
|
21
|
+
## Run bash on container
|
22
|
+
bash:
|
23
|
+
@docker-compose run --service-ports --rm rubypitaya bash
|
24
|
+
|
25
|
+
## Create database
|
26
|
+
db-create:
|
27
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rake db:create
|
28
|
+
|
29
|
+
## Run migrations to database
|
30
|
+
db-migrate:
|
31
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rake db:migrate
|
32
|
+
|
33
|
+
## Drop database
|
34
|
+
db-drop:
|
35
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rake db:drop
|
36
|
+
|
37
|
+
## Reset database
|
38
|
+
db-reset:
|
39
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rake db:reset
|
40
|
+
|
41
|
+
## Generate Gemfile.lock
|
42
|
+
generate-gemfilelock:
|
43
|
+
@docker run --rm -v "$(PWD)":/usr/src/app -w /usr/src/app ruby:2.6.6 bundle install
|
44
|
+
|
45
|
+
## Build image to production environment
|
46
|
+
prod-build-image:
|
47
|
+
@docker build . -f docker/prod/Dockerfile -t registry.gitlab.com/lucianopc/ruby-pitaya-app:latest
|
48
|
+
|
49
|
+
.DEFAULT_GOAL := show-help
|
50
|
+
|
51
|
+
.PHONY: show-help
|
52
|
+
show-help:
|
53
|
+
@echo "$$(tput bold)Commands:$$(tput sgr0)"
|
54
|
+
@echo
|
55
|
+
@sed -n -e "/^## / { \
|
56
|
+
h; \
|
57
|
+
s/.*//; \
|
58
|
+
:doc" \
|
59
|
+
-e "H; \
|
60
|
+
n; \
|
61
|
+
s/^## //; \
|
62
|
+
t doc" \
|
63
|
+
-e "s/:.*//; \
|
64
|
+
G; \
|
65
|
+
s/\\n## /---/; \
|
66
|
+
s/\\n/ /g; \
|
67
|
+
p; \
|
68
|
+
}" ${MAKEFILE_LIST} \
|
69
|
+
| LC_ALL='C' sort --ignore-case \
|
70
|
+
| awk -F '---' \
|
71
|
+
-v ncol=$$(tput cols) \
|
72
|
+
-v indent=22 \
|
73
|
+
-v col_on="$$(tput setaf 6)" \
|
74
|
+
-v col_off="$$(tput sgr0)" \
|
75
|
+
'{ \
|
76
|
+
printf "%s%*s%s ", col_on, -indent, $$1, col_off; \
|
77
|
+
n = split($$2, words, " "); \
|
78
|
+
line_length = ncol - indent; \
|
79
|
+
for (i = 1; i <= n; i++) { \
|
80
|
+
line_length -= length(words[i]) + 1; \
|
81
|
+
if (line_length <= 0) { \
|
82
|
+
line_length = ncol - indent - length(words[i]) - 1; \
|
83
|
+
printf "\n%*s ", -indent, " "; \
|
84
|
+
} \
|
85
|
+
printf "%s ", words[i]; \
|
86
|
+
} \
|
87
|
+
printf "\n"; \
|
88
|
+
}'
|
89
|
+
|
90
|
+
|
91
|
+
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
require 'rubypitaya/core/path'
|
4
|
+
require 'rubypitaya/core/database_config'
|
5
|
+
|
6
|
+
|
7
|
+
namespace :db do
|
8
|
+
|
9
|
+
desc 'Create the database'
|
10
|
+
task :create do
|
11
|
+
environment_name = ENV.fetch("RUBYPITAYA_ENV") { 'development' }
|
12
|
+
database_config = RubyPitaya::DatabaseConfig.new(environment_name, RubyPitaya::Path::DATABASE_CONFIG_PATH)
|
13
|
+
connection_data = database_config.connection_data_without_database
|
14
|
+
|
15
|
+
ActiveRecord::Base.establish_connection(connection_data)
|
16
|
+
ActiveRecord::Base.connection.create_database(database_config.database_name)
|
17
|
+
ActiveRecord::Base.connection.close
|
18
|
+
|
19
|
+
puts 'Database created.'
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'Migrate the database'
|
23
|
+
task :migrate do
|
24
|
+
environment_name = ENV.fetch("RUBYPITAYA_ENV") { 'development' }
|
25
|
+
database_config = RubyPitaya::DatabaseConfig.new(environment_name, RubyPitaya::Path::DATABASE_CONFIG_PATH)
|
26
|
+
connection_data = database_config.connection_data
|
27
|
+
migrations_path = RubyPitaya::Path::MIGRATIONS_FOLDER_PATH
|
28
|
+
|
29
|
+
ActiveRecord::Base.establish_connection(connection_data)
|
30
|
+
ActiveRecord::Migrator.migrations_paths = [migrations_path]
|
31
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate
|
32
|
+
ActiveRecord::Base.connection.close
|
33
|
+
puts 'Database migrated.'
|
34
|
+
end
|
35
|
+
|
36
|
+
desc 'Drop the database'
|
37
|
+
task :drop do
|
38
|
+
environment_name = ENV.fetch("RUBYPITAYA_ENV") { 'development' }
|
39
|
+
database_config = RubyPitaya::DatabaseConfig.new(environment_name, RubyPitaya::Path::DATABASE_CONFIG_PATH)
|
40
|
+
connection_data = database_config.connection_data_without_database
|
41
|
+
|
42
|
+
ActiveRecord::Base.establish_connection(connection_data)
|
43
|
+
ActiveRecord::Base.connection.drop_database(database_config.database_name)
|
44
|
+
ActiveRecord::Base.connection.close
|
45
|
+
|
46
|
+
puts 'Database deleted.'
|
47
|
+
end
|
48
|
+
|
49
|
+
desc 'Reset the database'
|
50
|
+
task :reset do
|
51
|
+
Rake::Task['db:drop'].invoke
|
52
|
+
Rake::Task['db:create'].invoke
|
53
|
+
Rake::Task['db:migrate'].invoke
|
54
|
+
|
55
|
+
puts 'Database reset finish.'
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class AppInitializer < RubyPitaya::InitializerBase
|
2
|
+
|
3
|
+
# method: run
|
4
|
+
# parameter: initializer_content
|
5
|
+
# attributes:
|
6
|
+
# - bll
|
7
|
+
# - class: InstanceHolder
|
8
|
+
# - methods:
|
9
|
+
# - add_instance(key, instance)
|
10
|
+
# - add any instance to any key
|
11
|
+
# - [](key)
|
12
|
+
# - get instance by key
|
13
|
+
# - redis
|
14
|
+
# - link: https://github.com/redis/redis-rb/
|
15
|
+
|
16
|
+
def run(initializer_content)
|
17
|
+
bll = initializer_content.bll
|
18
|
+
|
19
|
+
playerBll = PlayerBLL.new
|
20
|
+
|
21
|
+
bll.add_instance(:player, playerBll)
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class StatusCodes
|
2
|
+
# Success codes
|
3
|
+
CODE_OK = 'RP-200'
|
4
|
+
|
5
|
+
# Error codes
|
6
|
+
CODE_UNKNOWN = 'RP-000'
|
7
|
+
CODE_HANDLER_NOT_FOUNDED = 'RP-001'
|
8
|
+
CODE_ACTION_NOT_FOUNDED = 'RP-002'
|
9
|
+
CODE_NOT_AUTHENTICATED = 'RP-003'
|
10
|
+
CODE_AUTHENTICATION_ERROR = 'RP-004'
|
11
|
+
|
12
|
+
class Connector
|
13
|
+
CODE_UNKNOWN = 'PIT-000'
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
class PlayerHandler < RubyPitaya::HandlerBase
|
2
|
+
|
3
|
+
# class: HandlerBase
|
4
|
+
# attributes:
|
5
|
+
# - @bll
|
6
|
+
# - class: InstanceHolder
|
7
|
+
# - methods:
|
8
|
+
# - [](key)
|
9
|
+
# - info: get bll by key
|
10
|
+
#
|
11
|
+
# - @redis
|
12
|
+
# - link: https://github.com/redis/redis-rb/
|
13
|
+
#
|
14
|
+
# - @config
|
15
|
+
# - info: Hash with config json files inside of 'app/config'
|
16
|
+
# - example:
|
17
|
+
# Given you have the following file "app/config/initial_player.json"
|
18
|
+
# And this json content is {'name': 'Guest'}
|
19
|
+
# And you can get the initial player name
|
20
|
+
# Then you can run the following code: @config['initial_player']['name']
|
21
|
+
#
|
22
|
+
# - @params
|
23
|
+
# - info: Special hash with the request parameters
|
24
|
+
# - link: https://api.rubyonrails.org/classes/ActionController/Parameters.html
|
25
|
+
#
|
26
|
+
# - @session
|
27
|
+
# - attributes:
|
28
|
+
# - id :: session id
|
29
|
+
# - uid :: user id
|
30
|
+
# - data :: session data
|
31
|
+
# - metadata :: session data
|
32
|
+
# - frontend_id :: connector server id
|
33
|
+
#
|
34
|
+
# - @postman
|
35
|
+
# - info: Send messages to server and clients
|
36
|
+
# - methods:
|
37
|
+
# - bind_session(session)
|
38
|
+
# - info:
|
39
|
+
# Send a session to connector, you can use to set the userId
|
40
|
+
# of the session, for example you can set an userId on
|
41
|
+
# @session, like `@session.uid = '123'`, and then you can
|
42
|
+
# bind this session with `@postman.bind_session(@session)`
|
43
|
+
|
44
|
+
non_authenticated_actions :authenticate
|
45
|
+
|
46
|
+
def authenticate
|
47
|
+
user_id = @params[:userId]
|
48
|
+
|
49
|
+
player = Player.find_by_user_id(user_id)
|
50
|
+
player = @bll[:player].create_new_player(@config) if player.nil?
|
51
|
+
|
52
|
+
@session.uid = player.user_id
|
53
|
+
|
54
|
+
bind_session_response = @postman.bind_session(@session)
|
55
|
+
|
56
|
+
unless bind_session_response.dig(:error, :code).nil?
|
57
|
+
return response = {
|
58
|
+
code: StatusCodes::CODE_AUTHENTICATION_ERROR,
|
59
|
+
msg: 'Error to authenticate',
|
60
|
+
}
|
61
|
+
end
|
62
|
+
|
63
|
+
response = {
|
64
|
+
code: StatusCodes::CODE_OK,
|
65
|
+
player: player.to_hash,
|
66
|
+
}
|
67
|
+
end
|
68
|
+
|
69
|
+
def getInfo
|
70
|
+
user_id = @session.uid
|
71
|
+
|
72
|
+
player = Player.find_by_user_id(user_id)
|
73
|
+
|
74
|
+
response = {
|
75
|
+
code: StatusCodes::CODE_OK,
|
76
|
+
player: player.to_hash,
|
77
|
+
}
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'active_record'
|
5
|
+
|
6
|
+
require 'rubypitaya'
|
7
|
+
require 'rubypitaya/core/database_config'
|
8
|
+
|
9
|
+
environment_name = ENV.fetch("RUBYPITAYA_ENV") { 'development' }
|
10
|
+
database_config = DatabaseConfig.new(environment_name, Path::DATABASE_CONFIG_PATH)
|
11
|
+
ActiveRecord::Base.establish_connection(database_config.connection_data)
|
12
|
+
ActiveRecord::Base.logger = ActiveSupport::Logger.new(STDOUT)
|
13
|
+
ActiveSupport::LogSubscriber.colorize_logging = true
|
14
|
+
|
15
|
+
Gem.find_files('rubypitaya/**/*.rb').each do |path|
|
16
|
+
require path unless path.end_with?('spec.rb') || path.include?('db/migrate')
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'irb'
|
20
|
+
IRB.start(__FILE__)
|
21
|
+
|
22
|
+
ActiveRecord::Base.connection.close
|
@@ -0,0 +1,22 @@
|
|
1
|
+
default: &default
|
2
|
+
adapter: postgresql
|
3
|
+
encoding: unicode
|
4
|
+
pool: <%= ENV['RUBYPITAYA_MAX_THREADS'] { 5 } %>
|
5
|
+
host: <%= ENV['DATABASE_HOST'] %>
|
6
|
+
user: <%= ENV['DATABASE_USER'] %>
|
7
|
+
password: <%= ENV['DATABASE_PASSWORD'] %>
|
8
|
+
|
9
|
+
development:
|
10
|
+
<<: *default
|
11
|
+
database: <%= "#{ENV['DATABASE_NAME']}_development" %>
|
12
|
+
|
13
|
+
test:
|
14
|
+
<<: *default
|
15
|
+
database: <%= "#{ENV['DATABASE_NAME']}_test" %>
|
16
|
+
|
17
|
+
production:
|
18
|
+
<<: *default
|
19
|
+
database: <%= "#{ENV['DATABASE_NAME']}_production" %>
|
20
|
+
# username: rails_project
|
21
|
+
# password: <%= ENV['RAILS_PROJECT_DATABASE_PASSWORD'] %>
|
22
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
class CreatePlayerMigration < ActiveRecord::Migration[5.1]
|
4
|
+
|
5
|
+
enable_extension 'pgcrypto'
|
6
|
+
|
7
|
+
def change
|
8
|
+
create_table :players, id: :uuid do |t|
|
9
|
+
t.belongs_to :user, type: :uuid
|
10
|
+
t.string :name, null: false
|
11
|
+
t.timestamps null: false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
FROM ruby:2.6.6
|
2
|
+
|
3
|
+
RUN apt update
|
4
|
+
RUN apt install -y git vim docker.io postgresql-client --no-install-recommends
|
5
|
+
|
6
|
+
WORKDIR /app/rubypitaya/
|
7
|
+
|
8
|
+
COPY Gemfile Gemfile.lock ./
|
9
|
+
|
10
|
+
RUN bundle install
|
11
|
+
|
12
|
+
COPY . .
|
13
|
+
|
14
|
+
ENV LANG=C.UTF-8
|
15
|
+
ENV LC_ALL=C.UTF-8
|
16
|
+
|
17
|
+
ENTRYPOINT ["./docker/entrypoint.sh"]
|
18
|
+
|
19
|
+
CMD ["bundle", "exec", "rubypitaya"]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
cmd="$@"
|
4
|
+
|
5
|
+
echo "=> Waiting for postgres"
|
6
|
+
until PGPASSWORD=$DATABASE_PASSWORD psql -h "$DATABASE_HOST" -U "$DATABASE_USER" -c '\q' > /dev/null 2>&1; do
|
7
|
+
echo "=> Waiting for Postgres..."
|
8
|
+
sleep 1
|
9
|
+
done
|
10
|
+
|
11
|
+
echo "=> Postgres is ready"
|
12
|
+
|
13
|
+
exec $cmd
|
@@ -0,0 +1,32 @@
|
|
1
|
+
FROM ruby:2.6.6 as builder
|
2
|
+
|
3
|
+
WORKDIR /app/rubypitaya/
|
4
|
+
|
5
|
+
COPY Gemfile Gemfile.lock ./
|
6
|
+
|
7
|
+
RUN bundle install
|
8
|
+
|
9
|
+
COPY . .
|
10
|
+
|
11
|
+
FROM ruby:2.6.6-slim
|
12
|
+
|
13
|
+
RUN apt update && apt install -y docker.io postgresql-client --no-install-recommends
|
14
|
+
RUN rm -rf /var/lib/apt/lists/*
|
15
|
+
|
16
|
+
COPY --from=builder /usr/local/etc /usr/local/etc
|
17
|
+
COPY --from=builder /usr/local/bundle /usr/local/bundle
|
18
|
+
COPY --from=builder /usr/local/bin/ruby /usr/local/bin/ruby
|
19
|
+
COPY --from=builder /usr/local/lib/ruby/gems/2.6.0 /usr/local/lib/ruby/gems/2.6.0
|
20
|
+
|
21
|
+
COPY --from=builder /app/rubypitaya /app/rubypitaya
|
22
|
+
|
23
|
+
WORKDIR /app/rubypitaya/
|
24
|
+
|
25
|
+
RUN rm -rf vendor/
|
26
|
+
|
27
|
+
ENV LANG=C.UTF-8
|
28
|
+
ENV LC_ALL=C.UTF-8
|
29
|
+
|
30
|
+
ENTRYPOINT ["./docker/entrypoint.sh"]
|
31
|
+
|
32
|
+
CMD ["bundle", "exec", "rubypitaya"]
|
@@ -0,0 +1,67 @@
|
|
1
|
+
## Run ruby pitaya metagame project
|
2
|
+
run:
|
3
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rubypitaya
|
4
|
+
|
5
|
+
## Update docker images
|
6
|
+
update:
|
7
|
+
@docker-compose pull
|
8
|
+
|
9
|
+
## Create database
|
10
|
+
db-create:
|
11
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rake db:create
|
12
|
+
|
13
|
+
## Run migrations to database
|
14
|
+
db-migrate:
|
15
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rake db:migrate
|
16
|
+
|
17
|
+
## Drop database
|
18
|
+
db-drop:
|
19
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rake db:drop
|
20
|
+
|
21
|
+
## Reset database
|
22
|
+
db-reset:
|
23
|
+
@docker-compose run --service-ports --rm rubypitaya bundle exec rake db:reset
|
24
|
+
|
25
|
+
.DEFAULT_GOAL := show-help
|
26
|
+
|
27
|
+
.PHONY: show-help
|
28
|
+
show-help:
|
29
|
+
@echo "$$(tput bold)Commands:$$(tput sgr0)"
|
30
|
+
@echo
|
31
|
+
@sed -n -e "/^## / { \
|
32
|
+
h; \
|
33
|
+
s/.*//; \
|
34
|
+
:doc" \
|
35
|
+
-e "H; \
|
36
|
+
n; \
|
37
|
+
s/^## //; \
|
38
|
+
t doc" \
|
39
|
+
-e "s/:.*//; \
|
40
|
+
G; \
|
41
|
+
s/\\n## /---/; \
|
42
|
+
s/\\n/ /g; \
|
43
|
+
p; \
|
44
|
+
}" ${MAKEFILE_LIST} \
|
45
|
+
| LC_ALL='C' sort --ignore-case \
|
46
|
+
| awk -F '---' \
|
47
|
+
-v ncol=$$(tput cols) \
|
48
|
+
-v indent=19 \
|
49
|
+
-v col_on="$$(tput setaf 6)" \
|
50
|
+
-v col_off="$$(tput sgr0)" \
|
51
|
+
'{ \
|
52
|
+
printf "%s%*s%s ", col_on, -indent, $$1, col_off; \
|
53
|
+
n = split($$2, words, " "); \
|
54
|
+
line_length = ncol - indent; \
|
55
|
+
for (i = 1; i <= n; i++) { \
|
56
|
+
line_length -= length(words[i]) + 1; \
|
57
|
+
if (line_length <= 0) { \
|
58
|
+
line_length = ncol - indent - length(words[i]) - 1; \
|
59
|
+
printf "\n%*s ", -indent, " "; \
|
60
|
+
} \
|
61
|
+
printf "%s ", words[i]; \
|
62
|
+
} \
|
63
|
+
printf "\n"; \
|
64
|
+
}'
|
65
|
+
|
66
|
+
|
67
|
+
|