makanai 0.1.1 → 0.1.6
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 +1 -0
- data/.rubocop.yml +17 -6
- data/.ruby-version +1 -0
- data/.travis.yml +20 -3
- data/CHANGELOG.md +33 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +47 -20
- data/README.md +104 -16
- data/Rakefile +2 -0
- data/bin/console +4 -3
- data/docker-compose.yml +14 -0
- data/exe/makanai +2 -3
- data/lib/makanai.rb +3 -1
- data/lib/makanai/application.rb +16 -7
- data/lib/makanai/database.rb +12 -11
- data/lib/makanai/dbms/base.rb +15 -0
- data/lib/makanai/dbms/mysql.rb +36 -0
- data/lib/makanai/dbms/postgres.rb +36 -0
- data/lib/makanai/dbms/sqlite.rb +27 -0
- data/lib/makanai/dsl.rb +9 -7
- data/lib/makanai/generator.rb +8 -1
- data/lib/makanai/generator/application/templates/gemfile.erb +4 -0
- data/lib/makanai/main.rb +3 -3
- data/lib/makanai/migration.rb +3 -3
- data/lib/makanai/model.rb +1 -1
- data/lib/makanai/rake_tasks.rb +5 -4
- data/lib/makanai/request.rb +2 -1
- data/lib/makanai/router.rb +33 -2
- data/lib/makanai/settings.rb +61 -4
- data/lib/makanai/template.rb +17 -6
- data/lib/makanai/template_engine/base.rb +11 -0
- data/lib/makanai/template_engine/erb.rb +37 -0
- data/lib/makanai/template_engine/haml.rb +23 -0
- data/lib/makanai/version.rb +3 -1
- data/makanai.gemspec +5 -2
- data/sample/Rakefile +1 -1
- metadata +63 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c7b32701bd75c6ea7cae7f893310a50e5e70a9fea7c14e9a99ba9559b2e7a39
|
4
|
+
data.tar.gz: 8890f0956507a1d0bfa92197718f40b4ed7da313737fe4501032565154f68e08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 268af34e32c0cfd48753227a04bf604f6b1fe3fae0a2ef4bb709965c8d6ac73ec3b78a6c6813a2576c33e69e9c00506d60ef1edecd8fd4046bdb013f96081574
|
7
|
+
data.tar.gz: d112687c6207e860f5c0513f2530c26c0d388472d3058aae069dc98771c7e637636ef61dfb2300727fa7952c8d03d018d3649b7d086a3b395d98a4c33bb2e8eb
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
AllCops:
|
2
2
|
TargetRubyVersion: 2.7.0
|
3
|
+
NewCops: enable
|
3
4
|
Exclude:
|
4
5
|
- './makanai.gemspec'
|
5
|
-
|
6
|
-
Style/Documentation:
|
7
|
-
Enabled: false
|
8
|
-
|
9
|
-
Metrics/LineLength:
|
10
|
-
Max: 90
|
6
|
+
- 'vendor/**/*'
|
11
7
|
|
12
8
|
Metrics/ClassLength:
|
13
9
|
Max: 120
|
@@ -17,8 +13,23 @@ Metrics/BlockLength:
|
|
17
13
|
- 'spec/**/*'
|
18
14
|
- 'lib/makanai/rake_tasks.rb'
|
19
15
|
|
16
|
+
Style/Documentation:
|
17
|
+
Enabled: false
|
18
|
+
|
20
19
|
Style/ParallelAssignment:
|
21
20
|
Enabled: false
|
22
21
|
|
22
|
+
Style/HashEachMethods:
|
23
|
+
Enabled: true
|
24
|
+
|
25
|
+
Style/HashTransformKeys:
|
26
|
+
Enabled: true
|
27
|
+
|
28
|
+
Style/HashTransformValues:
|
29
|
+
Enabled: true
|
30
|
+
|
31
|
+
Layout/LineLength:
|
32
|
+
Max: 90
|
33
|
+
|
23
34
|
Layout/EmptyLineAfterGuardClause:
|
24
35
|
Enabled: false
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7.1
|
data/.travis.yml
CHANGED
@@ -1,7 +1,24 @@
|
|
1
1
|
---
|
2
|
-
sudo: false
|
3
2
|
language: ruby
|
4
3
|
cache: bundler
|
4
|
+
services:
|
5
|
+
- postgresql
|
6
|
+
- mysql
|
5
7
|
rvm:
|
6
|
-
- 2.
|
7
|
-
|
8
|
+
- 2.6.6
|
9
|
+
- 2.7.1
|
10
|
+
- ruby-head
|
11
|
+
os:
|
12
|
+
- linux
|
13
|
+
before_install:
|
14
|
+
- gem install bundler -v 2.1.4
|
15
|
+
- mysql -e 'CREATE DATABASE IF NOT EXISTS makanai;'
|
16
|
+
before_script:
|
17
|
+
- psql -c "create user makanai WITH PASSWORD 'password';" -U postgres
|
18
|
+
- psql -c 'create database makanai;' -U postgres
|
19
|
+
script:
|
20
|
+
- bundle exec rubocop --parallel
|
21
|
+
- bundle exec rspec
|
22
|
+
jobs:
|
23
|
+
allow_failures:
|
24
|
+
- rvm: ruby-head
|
data/CHANGELOG.md
CHANGED
@@ -13,3 +13,36 @@
|
|
13
13
|
* :sparkles: add `Makanai::Model#first`.
|
14
14
|
execute `SELECT * FROM table_name ORDER BY prymary_key asc limit 1` and return record object.
|
15
15
|
https://github.com/Madogiwa0124/makanai/commit/8949796bf7428f5e2d854041b35397ef4d442ee6
|
16
|
+
|
17
|
+
## :gift: 2020/02/22 `v0.1.2` released.
|
18
|
+
* :sparkles: use config object by Makanai::Settings for replaceable app config.
|
19
|
+
Changed the setting so that it is retained by the Class variable, and made it configurable.
|
20
|
+
The big advantage is that you can use any web server(ex. puma) except WEBrick.
|
21
|
+
https://github.com/Madogiwa0124/makanai/pull/18/commits/e6ea10e596c685ef77c042fa1e8f0294c85166f2
|
22
|
+
|
23
|
+
## :gift: 2020/03/04 `v0.1.3` released.
|
24
|
+
* :sparkles: Multiple DBMS available.
|
25
|
+
you can use dbms(MySQL :dolphin:, PostgreSQL :elephant:) other then SQLite.
|
26
|
+
https://github.com/Madogiwa0124/makanai/pull/19
|
27
|
+
|
28
|
+
## :gift: 2020/04/08 `v0.1.4` released.
|
29
|
+
* :sparkles: support lastest ruby versions(2.6.6, 2.7.1)
|
30
|
+
* :sparkles: support for dynamic URL routing.
|
31
|
+
|
32
|
+
``` ruby
|
33
|
+
router.get '/hoge/:id' do
|
34
|
+
request.params['id']
|
35
|
+
end
|
36
|
+
```
|
37
|
+
|
38
|
+
https://github.com/Madogiwa0124/makanai/commit/e256368fd0a13f1d0d2d6c6af17caef7760e64f0
|
39
|
+
|
40
|
+
## :gift: 2020/06/16 `v0.1.5` released.
|
41
|
+
* :package: dependency update.
|
42
|
+
|
43
|
+
## :gift: 2020/08/07 `v0.1.6` released.
|
44
|
+
* :sparkles: enabled to switch template engine Haml and ERB.
|
45
|
+
https://github.com/Madogiwa0124/makanai/commit/b9f977fe9e974aa1abbf2764a2fdad989e2767ec
|
46
|
+
|
47
|
+
* :zap: remove sqlite3 from runtime_dependency.
|
48
|
+
https://github.com/Madogiwa0124/makanai/commit/d63c3b12cf6fc412a8d88806dca9710e210e5fe0
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,55 +1,82 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
makanai (0.1.
|
5
|
-
rack (
|
4
|
+
makanai (0.1.6)
|
5
|
+
rack (>= 2.0.7, < 2.3.0)
|
6
6
|
rake (>= 10, < 14)
|
7
|
-
sqlite3 (~> 1.4.1)
|
8
7
|
|
9
8
|
GEM
|
10
9
|
remote: https://rubygems.org/
|
11
10
|
specs:
|
12
|
-
ast (2.4.
|
11
|
+
ast (2.4.1)
|
12
|
+
codecov (0.2.3)
|
13
|
+
colorize
|
14
|
+
json
|
15
|
+
simplecov
|
16
|
+
colorize (0.8.1)
|
13
17
|
diff-lcs (1.3)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
18
|
+
docile (1.3.2)
|
19
|
+
haml (5.1.2)
|
20
|
+
temple (>= 0.8.0)
|
21
|
+
tilt
|
22
|
+
json (2.3.1)
|
23
|
+
mysql2 (0.5.3)
|
24
|
+
parallel (1.19.2)
|
25
|
+
parser (2.7.1.4)
|
26
|
+
ast (~> 2.4.1)
|
27
|
+
pg (1.2.3)
|
28
|
+
rack (2.2.3)
|
19
29
|
rainbow (3.0.0)
|
20
30
|
rake (13.0.1)
|
31
|
+
regexp_parser (1.7.1)
|
32
|
+
rexml (3.2.4)
|
21
33
|
rspec (3.9.0)
|
22
34
|
rspec-core (~> 3.9.0)
|
23
35
|
rspec-expectations (~> 3.9.0)
|
24
36
|
rspec-mocks (~> 3.9.0)
|
25
|
-
rspec-core (3.9.
|
26
|
-
rspec-support (~> 3.9.
|
27
|
-
rspec-expectations (3.9.
|
37
|
+
rspec-core (3.9.1)
|
38
|
+
rspec-support (~> 3.9.1)
|
39
|
+
rspec-expectations (3.9.1)
|
28
40
|
diff-lcs (>= 1.2.0, < 2.0)
|
29
41
|
rspec-support (~> 3.9.0)
|
30
|
-
rspec-mocks (3.9.
|
42
|
+
rspec-mocks (3.9.1)
|
31
43
|
diff-lcs (>= 1.2.0, < 2.0)
|
32
44
|
rspec-support (~> 3.9.0)
|
33
|
-
rspec-support (3.9.
|
34
|
-
rubocop (0.
|
35
|
-
jaro_winkler (~> 1.5.1)
|
45
|
+
rspec-support (3.9.2)
|
46
|
+
rubocop (0.89.0)
|
36
47
|
parallel (~> 1.10)
|
37
|
-
parser (>= 2.
|
48
|
+
parser (>= 2.7.1.1)
|
38
49
|
rainbow (>= 2.2.2, < 4.0)
|
50
|
+
regexp_parser (>= 1.7)
|
51
|
+
rexml
|
52
|
+
rubocop-ast (>= 0.1.0, < 1.0)
|
39
53
|
ruby-progressbar (~> 1.7)
|
40
|
-
unicode-display_width (>= 1.4.0, <
|
54
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
55
|
+
rubocop-ast (0.3.0)
|
56
|
+
parser (>= 2.7.1.4)
|
41
57
|
ruby-progressbar (1.10.1)
|
58
|
+
simplecov (0.18.5)
|
59
|
+
docile (~> 1.1)
|
60
|
+
simplecov-html (~> 0.11)
|
61
|
+
simplecov-html (0.12.2)
|
42
62
|
sqlite3 (1.4.2)
|
43
|
-
|
63
|
+
temple (0.8.2)
|
64
|
+
tilt (2.0.10)
|
65
|
+
unicode-display_width (1.7.0)
|
44
66
|
|
45
67
|
PLATFORMS
|
46
68
|
ruby
|
47
69
|
|
48
70
|
DEPENDENCIES
|
49
71
|
bundler (~> 2.0)
|
72
|
+
codecov
|
73
|
+
haml (~> 5.0)
|
50
74
|
makanai!
|
75
|
+
mysql2 (~> 0.5)
|
76
|
+
pg (~> 1.2)
|
51
77
|
rspec (~> 3.0)
|
52
78
|
rubocop (~> 0.74)
|
79
|
+
sqlite3 (~> 1.4.1)
|
53
80
|
|
54
81
|
BUNDLED WITH
|
55
|
-
2.1.
|
82
|
+
2.1.4
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/makanai)
|
4
4
|
[](https://travis-ci.com/Madogiwa0124/makanai)
|
5
|
+
[](https://codecov.io/gh/Madogiwa0124/makanai)
|
5
6
|
|
6
7
|
simple web application framework for learning.
|
7
8
|
|
@@ -23,12 +24,6 @@ Or install it yourself as:
|
|
23
24
|
|
24
25
|
$ gem install makanai
|
25
26
|
|
26
|
-
## Dependencies
|
27
|
-
|
28
|
-
Makanai depends on the following, so please install it in advance.
|
29
|
-
|
30
|
-
* [SQLite3](https://www.sqlite.org/index.html)
|
31
|
-
|
32
27
|
## Start sample project
|
33
28
|
Getting started with Makanai is easy.
|
34
29
|
|
@@ -47,7 +42,7 @@ $ ruby app.rb
|
|
47
42
|
create a ruby file(ex. app.rb).
|
48
43
|
|
49
44
|
``` ruby
|
50
|
-
|
45
|
+
require 'makanai/main'
|
51
46
|
|
52
47
|
router.get '/' do
|
53
48
|
'Hello Makanai!'
|
@@ -76,10 +71,57 @@ root ┬ app.rb # main application file
|
|
76
71
|
└ db # use Sqlite3 dabase file
|
77
72
|
```
|
78
73
|
|
74
|
+
## override application config
|
75
|
+
|
76
|
+
You can overwrite the settings (`Makanai :: Settings`) with the created ruby file(ex. app.rb).
|
77
|
+
|
78
|
+
ex) When overriding rack app settings.
|
79
|
+
|
80
|
+
``` ruby
|
81
|
+
Makanai::Settings.rack_app_config = { handler: :webrick, host: '0.0.0.0', port: '8081' }
|
82
|
+
```
|
83
|
+
|
84
|
+
### use other application server
|
85
|
+
|
86
|
+
Add rack web server(ex. puma) gem in your Gemfile.
|
87
|
+
|
88
|
+
``` ruby
|
89
|
+
gem 'puma'
|
90
|
+
```
|
91
|
+
|
92
|
+
Overwrite the `handler` in `rack_app_config` with the created ruby file(ex. app.rb).
|
93
|
+
|
94
|
+
``` ruby
|
95
|
+
Makanai::Settings.rack_app_config = { handler: :puma, host: '0.0.0.0', port: '8080' }
|
96
|
+
```
|
97
|
+
|
98
|
+
### use dbms
|
99
|
+
|
100
|
+
Makanai use `sqlite` by default, and make `db/makanai.db`.
|
101
|
+
|
102
|
+
If you use another dbms, install dbms(PostgreSQL or MySQL). And add dbms gem (`pg` or `mysql2`) in your Gemfile.
|
103
|
+
|
104
|
+
``` ruby
|
105
|
+
gem 'pg'
|
106
|
+
```
|
107
|
+
|
108
|
+
Overwrite the `databse_client` and `databse_config` with the created ruby file(ex. app.rb) and Rakefile.
|
109
|
+
|
110
|
+
``` ruby
|
111
|
+
Makanai::Settings.databse_client = :postgres
|
112
|
+
Makanai::Settings.databse_config = {
|
113
|
+
host: 'localhost',
|
114
|
+
password:'password',
|
115
|
+
dbname: 'makanai',
|
116
|
+
port: 5432
|
117
|
+
}
|
118
|
+
```
|
119
|
+
|
79
120
|
## routing
|
121
|
+
Routing is searched in the order defined and call block args.
|
80
122
|
|
81
123
|
``` ruby
|
82
|
-
|
124
|
+
require 'makanai/main'
|
83
125
|
|
84
126
|
# root path
|
85
127
|
router.get '/' do
|
@@ -91,11 +133,17 @@ router.get '/hoge' do
|
|
91
133
|
'Hello Hoge!'
|
92
134
|
end
|
93
135
|
|
94
|
-
# enable access to /
|
95
|
-
router.get '/
|
136
|
+
# enable access to /hoge with get parameter(?hoge=fuga)
|
137
|
+
router.get '/hoge' do |request|
|
96
138
|
request.params['hoge']
|
97
139
|
end
|
98
140
|
|
141
|
+
# enable access to /hoge/:id with dinamic url args({ 'id' => '1'})
|
142
|
+
# NOTE: dinamics prefix is `:`.
|
143
|
+
router.get '/hoge/:id' do
|
144
|
+
request.params['id']
|
145
|
+
end
|
146
|
+
|
99
147
|
# enable access to /resources with method post and redirect other url.
|
100
148
|
router.post '/resources' do |request|
|
101
149
|
Resource.new(request.params).create
|
@@ -117,22 +165,33 @@ router.delete '/resources' do |request|
|
|
117
165
|
end
|
118
166
|
```
|
119
167
|
|
120
|
-
##
|
168
|
+
## rendering
|
121
169
|
|
122
|
-
Define instance variables used in the routing view.
|
170
|
+
Define instance variables used in the routing view. And specify template engine(`ERB` or `Haml`).
|
123
171
|
|
124
172
|
``` ruby
|
125
|
-
|
173
|
+
require 'makanai/main'
|
174
|
+
|
175
|
+
# setting template engine(default: :erb).
|
176
|
+
Makanai::Settings.template_engine = :haml
|
177
|
+
|
178
|
+
router.get '/index' do
|
179
|
+
@title = 'Makanai title'
|
180
|
+
@body = 'Makanai body'
|
181
|
+
render :index # render default template engine.
|
182
|
+
end
|
126
183
|
|
127
184
|
router.get '/index' do
|
128
185
|
@title = 'Makanai title'
|
129
186
|
@body = 'Makanai body'
|
130
|
-
render :index
|
187
|
+
render :index, :haml # render specified template engine.
|
131
188
|
end
|
132
189
|
```
|
133
190
|
|
134
191
|
Create an erb file in `src/views` with the name specified in render.
|
135
192
|
|
193
|
+
erb
|
194
|
+
|
136
195
|
``` html
|
137
196
|
<!-- src/views/index.erb -->
|
138
197
|
<html>
|
@@ -146,9 +205,22 @@ Create an erb file in `src/views` with the name specified in render.
|
|
146
205
|
</html>
|
147
206
|
```
|
148
207
|
|
208
|
+
haml
|
209
|
+
|
210
|
+
``` haml
|
211
|
+
!!!
|
212
|
+
%html
|
213
|
+
%head
|
214
|
+
%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
|
215
|
+
%meta{:charset => "UTF-8"}/
|
216
|
+
%title= @title
|
217
|
+
%body
|
218
|
+
= @body
|
219
|
+
```
|
220
|
+
|
149
221
|
## migration
|
150
222
|
|
151
|
-
|
223
|
+
migrate schema when executed `rake makanai:db:migration`.
|
152
224
|
|
153
225
|
```
|
154
226
|
# execute all migraiton sql
|
@@ -178,7 +250,7 @@ INFO: finished migration all
|
|
178
250
|
It can be used by creating a class that inherits `Makanai::Model`.
|
179
251
|
|
180
252
|
``` ruby
|
181
|
-
|
253
|
+
require 'makanai/model'
|
182
254
|
|
183
255
|
class Resource < Makanai::Model
|
184
256
|
# target table when executing sql.
|
@@ -215,6 +287,22 @@ Resource.find(1).delete
|
|
215
287
|
|
216
288
|
Bug reports and pull requests are welcome on GitHub at https://github.com/Madogiwa0124/makanai. 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.
|
217
289
|
|
290
|
+
## setup develop enviroment
|
291
|
+
|
292
|
+
Use docker-compose to build `mysql` and` postgres` containers for development.
|
293
|
+
|
294
|
+
``` sh
|
295
|
+
$ docker-compose up -d
|
296
|
+
Creating makanai_mysql_1 ... done
|
297
|
+
Creating makanai_postgres_1 ... done
|
298
|
+
|
299
|
+
$ docker-compose ps
|
300
|
+
Name Command State Ports
|
301
|
+
----------------------------------------------------------------------------------------------
|
302
|
+
makanai_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
|
303
|
+
makanai_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp
|
304
|
+
```
|
305
|
+
|
218
306
|
# License
|
219
307
|
|
220
308
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
require
|
4
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'makanai'
|
5
6
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +11,5 @@ require "makanai"
|
|
10
11
|
# require "pry"
|
11
12
|
# Pry.start
|
12
13
|
|
13
|
-
require
|
14
|
+
require 'irb'
|
14
15
|
IRB.start(__FILE__)
|
data/docker-compose.yml
ADDED
data/exe/makanai
CHANGED
data/lib/makanai.rb
CHANGED
data/lib/makanai/application.rb
CHANGED
@@ -3,21 +3,27 @@
|
|
3
3
|
require 'json'
|
4
4
|
require 'uri'
|
5
5
|
require 'rack'
|
6
|
-
require_relative './
|
7
|
-
require_relative './
|
8
|
-
require_relative './
|
6
|
+
require_relative './settings'
|
7
|
+
require_relative './request'
|
8
|
+
require_relative './response'
|
9
|
+
require_relative './router'
|
9
10
|
|
10
11
|
module Makanai
|
11
12
|
class Application
|
12
13
|
def initialize(router:)
|
13
14
|
@router = router
|
14
|
-
@
|
15
|
+
@config = Settings
|
15
16
|
end
|
16
17
|
|
17
|
-
attr_reader :router, :
|
18
|
+
attr_reader :router, :config, :request, :response
|
18
19
|
|
19
20
|
def run!
|
20
|
-
|
21
|
+
app_config = config.rack_app_config
|
22
|
+
handler = Rack::Handler.get(app_config[:handler])
|
23
|
+
handler.run(self, { Host: app_config[:host], Port: app_config[:port] })
|
24
|
+
rescue Interrupt
|
25
|
+
handler.shutdown
|
26
|
+
puts '==== Goodbye! :) ===='
|
21
27
|
end
|
22
28
|
|
23
29
|
def call(env)
|
@@ -32,7 +38,10 @@ module Makanai
|
|
32
38
|
private
|
33
39
|
|
34
40
|
def execute_route
|
35
|
-
router.bind!(url: request.url, method: request.method)
|
41
|
+
route = router.bind!(url: request.url, method: request.method)
|
42
|
+
# NOTE: merge dynamic url params (ex. /resources/1 -> { 'id' => '1' })
|
43
|
+
@request.params.merge!(route.url_args)
|
44
|
+
route.process.call(request)
|
36
45
|
rescue Makanai::Router::NotFound
|
37
46
|
@response.status = 404
|
38
47
|
nil
|
data/lib/makanai/database.rb
CHANGED
@@ -1,29 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require_relative './settings.rb'
|
3
|
+
require_relative './settings'
|
5
4
|
|
6
5
|
module Makanai
|
7
6
|
class Database
|
8
|
-
|
7
|
+
class UnsupportedException < StandardError; end
|
9
8
|
|
10
|
-
def initialize(
|
11
|
-
|
12
|
-
@
|
13
|
-
db.tap { |db| db.results_as_hash = true }
|
9
|
+
def initialize(client: Settings.databse_client, config: Settings.databse_config)
|
10
|
+
client_class = client_class(client)
|
11
|
+
@client = client_class.new(config)
|
14
12
|
end
|
15
13
|
|
16
|
-
attr_reader :
|
14
|
+
attr_reader :client
|
17
15
|
|
18
16
|
def execute_sql(sql)
|
19
17
|
puts "SQL: #{sql.gsub("\n", ' ')}"
|
20
|
-
|
18
|
+
client.execute_sql(sql)
|
21
19
|
end
|
22
20
|
|
23
21
|
private
|
24
22
|
|
25
|
-
def
|
26
|
-
|
23
|
+
def client_class(client)
|
24
|
+
require_relative File.join('dbms', client.to_s)
|
25
|
+
Object.const_get("Makanai::Dbms::#{client.capitalize}")
|
26
|
+
rescue LoadError
|
27
|
+
raise UnsupportedException
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mysql2'
|
4
|
+
require_relative './base'
|
5
|
+
module Makanai
|
6
|
+
module Dbms
|
7
|
+
class Mysql < Base
|
8
|
+
def initialize(config)
|
9
|
+
super()
|
10
|
+
@db = Mysql2::Client.new(config || default_config)
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :db
|
14
|
+
|
15
|
+
def execute_sql(sql)
|
16
|
+
db.query(sql).to_a.tap { close_db }
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def default_config
|
22
|
+
{
|
23
|
+
host: '0.0.0.0',
|
24
|
+
username: 'root',
|
25
|
+
password: 'password',
|
26
|
+
database: 'makanai',
|
27
|
+
port: 3306
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def close_db
|
32
|
+
db.close
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pg'
|
4
|
+
require_relative './base'
|
5
|
+
module Makanai
|
6
|
+
module Dbms
|
7
|
+
class Postgres < Base
|
8
|
+
def initialize(config)
|
9
|
+
super()
|
10
|
+
@db = PG.connect(config || default_config)
|
11
|
+
db.type_map_for_results = PG::BasicTypeMapForResults.new(db)
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :db
|
15
|
+
|
16
|
+
def execute_sql(sql)
|
17
|
+
db.exec(sql).each.to_a.tap { close_db }
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def default_config
|
23
|
+
{
|
24
|
+
host: 'localhost',
|
25
|
+
password: nil,
|
26
|
+
dbname: 'makanai',
|
27
|
+
port: 5432
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def close_db
|
32
|
+
db.finish
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sqlite3'
|
4
|
+
require_relative './base'
|
5
|
+
module Makanai
|
6
|
+
module Dbms
|
7
|
+
class Sqlite < Base
|
8
|
+
def initialize(config)
|
9
|
+
super()
|
10
|
+
@db = SQLite3::Database.new(config[:path])
|
11
|
+
db.tap { |db| db.results_as_hash = true }
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :db
|
15
|
+
|
16
|
+
def execute_sql(sql)
|
17
|
+
db.execute(sql).tap { close_db }
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def close_db
|
23
|
+
db.close
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/makanai/dsl.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative './template
|
4
|
-
require_relative './response
|
5
|
-
require_relative './settings
|
3
|
+
require_relative './template'
|
4
|
+
require_relative './response'
|
5
|
+
require_relative './settings'
|
6
6
|
|
7
|
-
def render(path)
|
8
|
-
template_root_path =
|
9
|
-
full_path =
|
10
|
-
|
7
|
+
def render(path, engine = Makanai::Settings.template_engine)
|
8
|
+
template_root_path = Makanai::Settings.template_full_path
|
9
|
+
full_path = File.join(template_root_path, path.to_s)
|
10
|
+
# NOTE: Get all instance variables in main by Hash
|
11
|
+
locals = instance_variables.map { |name| [name, instance_variable_get(name)] }.to_h
|
12
|
+
Makanai::Template.new(path: full_path, engine: engine, locals: locals).render
|
11
13
|
end
|
12
14
|
|
13
15
|
def redirect_to(url)
|
data/lib/makanai/generator.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'erb'
|
4
4
|
require 'yaml'
|
5
|
-
require_relative '../makanai
|
5
|
+
require_relative '../makanai'
|
6
6
|
|
7
7
|
module Makanai
|
8
8
|
class Generator
|
@@ -10,6 +10,7 @@ module Makanai
|
|
10
10
|
DIRECTORY_NAMES = YAML.load_file("#{ROOT_PATH}/application/directories.yaml")
|
11
11
|
APP_TEMPLATE = File.read("#{ROOT_PATH}/application/templates/app.erb")
|
12
12
|
RAKEFILE_TEMPLATE = File.read("#{ROOT_PATH}/application/templates/rakefile.erb")
|
13
|
+
GEMFILE_TEMPLATE = File.read("#{ROOT_PATH}/application/templates/gemfile.erb")
|
13
14
|
|
14
15
|
def initialize(path = Dir.pwd)
|
15
16
|
@path = path
|
@@ -39,6 +40,12 @@ module Makanai
|
|
39
40
|
end
|
40
41
|
end
|
41
42
|
|
43
|
+
def create_gemfile(template = GEMFILE_TEMPLATE)
|
44
|
+
File.join(path, 'Gemfile').tap do |file_path|
|
45
|
+
create_file(file_path, ERB.new(template).result)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
42
49
|
private
|
43
50
|
|
44
51
|
def create_file(file_path, content)
|
data/lib/makanai/main.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative './application
|
4
|
-
require_relative './router
|
5
|
-
require_relative './dsl
|
3
|
+
require_relative './application'
|
4
|
+
require_relative './router'
|
5
|
+
require_relative './dsl'
|
6
6
|
|
7
7
|
def router
|
8
8
|
@router ||= Makanai::Router.new
|
data/lib/makanai/migration.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative './settings
|
4
|
-
require_relative './database
|
3
|
+
require_relative './settings'
|
4
|
+
require_relative './database'
|
5
5
|
|
6
6
|
module Makanai
|
7
7
|
module Migration
|
@@ -12,7 +12,7 @@ module Makanai
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def migration_root_path
|
15
|
-
|
15
|
+
Settings.migration_full_path
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/makanai/model.rb
CHANGED
data/lib/makanai/rake_tasks.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rake'
|
4
|
-
|
5
|
-
require_relative './
|
6
|
-
require_relative './generator.rb'
|
4
|
+
require_relative './migration'
|
5
|
+
require_relative './generator'
|
7
6
|
|
8
7
|
namespace :makanai do
|
9
8
|
namespace :initialize do
|
@@ -14,6 +13,7 @@ namespace :makanai do
|
|
14
13
|
puts generator.create_app_directories
|
15
14
|
puts generator.create_app_rb
|
16
15
|
puts generator.create_rakefile
|
16
|
+
puts generator.create_gemfile
|
17
17
|
puts 'INFO: finished ganerate app'
|
18
18
|
end
|
19
19
|
end
|
@@ -25,11 +25,12 @@ namespace :makanai do
|
|
25
25
|
|
26
26
|
puts "INFO: start migration #{ENV['target']}"
|
27
27
|
target = ENV['target']
|
28
|
+
pp migration_root_path
|
28
29
|
if target == 'all'
|
29
30
|
sql_paths = Dir.glob("#{migration_root_path}*")
|
30
31
|
sql_paths.each { |sql_path| execute_sql(sql_path: sql_path) }
|
31
32
|
else
|
32
|
-
execute_sql(sql_path:
|
33
|
+
execute_sql(sql_path: File.join(migration_root_path, target))
|
33
34
|
end
|
34
35
|
puts "INFO: finished migration #{ENV['target']}"
|
35
36
|
end
|
data/lib/makanai/request.rb
CHANGED
data/lib/makanai/router.rb
CHANGED
@@ -30,19 +30,50 @@ module Makanai
|
|
30
30
|
|
31
31
|
def bind!(url:, method:)
|
32
32
|
path = URI.parse(url).path
|
33
|
-
routes.find { |route| route.path
|
33
|
+
routes.find { |route| route.match?(path: path, method: method) }.tap do |route|
|
34
34
|
raise NotFound if route.nil?
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
class Route
|
39
|
+
DYNAMIC_PREFIX = ':' # Prefix for dynamic path
|
40
|
+
|
39
41
|
def initialize(path:, process:, method:)
|
40
42
|
@path = path
|
41
43
|
@process = process
|
42
44
|
@method = method
|
45
|
+
@url_args = {}
|
46
|
+
end
|
47
|
+
|
48
|
+
attr_reader :path, :process, :method, :url_args
|
49
|
+
|
50
|
+
def match?(path:, method:)
|
51
|
+
build_url_args(path: path)
|
52
|
+
path_match?(path) && self.method == method
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def dynamic_indx
|
58
|
+
@dynamic_indx ||= path.split('/').map.with_index do |val, i|
|
59
|
+
i if val.include?(DYNAMIC_PREFIX)
|
60
|
+
end.compact
|
43
61
|
end
|
44
62
|
|
45
|
-
|
63
|
+
def path_match?(path)
|
64
|
+
request_path, route_path = [path, self.path].map(&->(array) { array.split('/') })
|
65
|
+
request_path.each.with_index do |val, i|
|
66
|
+
route_path[i] = val if dynamic_indx.include?(i)
|
67
|
+
end
|
68
|
+
route_path == request_path
|
69
|
+
end
|
70
|
+
|
71
|
+
def build_url_args(path:)
|
72
|
+
request_path, route_path = [path, self.path].map(&->(array) { array.split('/') })
|
73
|
+
dynamic_indx.each do |i|
|
74
|
+
@url_args.merge!({ route_path[i].gsub(DYNAMIC_PREFIX, '') => request_path[i] })
|
75
|
+
end
|
76
|
+
end
|
46
77
|
end
|
47
78
|
end
|
48
79
|
end
|
data/lib/makanai/settings.rb
CHANGED
@@ -1,10 +1,67 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'rack'
|
4
|
+
|
3
5
|
module Makanai
|
4
6
|
class Settings
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
7
|
+
DEFAULT_APP_ROOT_PATH = Dir.pwd
|
8
|
+
DEFAULT_DATABASE_PATH = '/db/makanai.db'
|
9
|
+
DEFAULT_TEMPLATE_ROOT_PATH = '/views/'
|
10
|
+
DEFAULT_MIGRATION_ROOT_PATH = '/migration/'
|
11
|
+
DEFAULT_RACK_APP_CONFIG = { handler: :webrick, host: '0.0.0.0', port: '8080' }.freeze
|
12
|
+
DEFAULT_TEMPLATE_ENGINE = :erb
|
13
|
+
|
14
|
+
@app_root_path = DEFAULT_APP_ROOT_PATH
|
15
|
+
@database_path = DEFAULT_DATABASE_PATH
|
16
|
+
@template_root_path = DEFAULT_TEMPLATE_ROOT_PATH
|
17
|
+
@template_engine = DEFAULT_TEMPLATE_ENGINE
|
18
|
+
@migration_root_path = DEFAULT_MIGRATION_ROOT_PATH
|
19
|
+
@rack_app_config = DEFAULT_RACK_APP_CONFIG
|
20
|
+
|
21
|
+
# NOTE: Use Sqlite3
|
22
|
+
@databse_client = :sqlite
|
23
|
+
@databse_config = { path: File.join(@app_root_path, @database_path) }
|
24
|
+
|
25
|
+
# NOTE: Use Postgresql
|
26
|
+
# @databse_client = :postgres
|
27
|
+
# @databse_config = {
|
28
|
+
# host: 'localhost',
|
29
|
+
# password: 'password',
|
30
|
+
# dbname: 'makanai',
|
31
|
+
# port: 5432
|
32
|
+
# }.freeze
|
33
|
+
|
34
|
+
# NOTE: Use MySQL
|
35
|
+
# @databse_client = :mysql
|
36
|
+
# @databse_config = {
|
37
|
+
# host: 'localhost',
|
38
|
+
# username: 'root',
|
39
|
+
# password: 'password',
|
40
|
+
# database: 'makanai',
|
41
|
+
# port: 3306
|
42
|
+
# }.freeze
|
43
|
+
|
44
|
+
class << self
|
45
|
+
attr_accessor :app_root_path,
|
46
|
+
:database_path,
|
47
|
+
:template_root_path,
|
48
|
+
:template_engine,
|
49
|
+
:migration_root_path,
|
50
|
+
:rack_app_config,
|
51
|
+
:databse_client,
|
52
|
+
:databse_config
|
53
|
+
|
54
|
+
def database_full_path
|
55
|
+
File.join(app_root_path, database_path)
|
56
|
+
end
|
57
|
+
|
58
|
+
def template_full_path
|
59
|
+
File.join(app_root_path, template_root_path)
|
60
|
+
end
|
61
|
+
|
62
|
+
def migration_full_path
|
63
|
+
File.join(app_root_path, migration_root_path)
|
64
|
+
end
|
65
|
+
end
|
9
66
|
end
|
10
67
|
end
|
data/lib/makanai/template.rb
CHANGED
@@ -1,18 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'erb'
|
4
|
-
|
5
3
|
module Makanai
|
6
4
|
class Template
|
7
|
-
|
5
|
+
class UnsupportedException < StandardError; end
|
6
|
+
|
7
|
+
def initialize(path:, engine: :erb, locals: {})
|
8
8
|
@path = path
|
9
|
+
@engine = engine
|
10
|
+
@locals = locals
|
9
11
|
end
|
10
12
|
|
11
|
-
attr_reader :path
|
13
|
+
attr_reader :path, :engine, :locals
|
12
14
|
|
13
15
|
def render
|
14
|
-
template_file = File.read(path)
|
15
|
-
|
16
|
+
template_file = File.read("#{path}.#{engine}")
|
17
|
+
engine_class.new(text: template_file, locals: locals).result
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def engine_class
|
23
|
+
require_relative File.join('template_engine', engine.to_s)
|
24
|
+
Object.const_get("Makanai::TemplateEngine::#{engine.capitalize}")
|
25
|
+
rescue LoadError
|
26
|
+
raise UnsupportedException
|
16
27
|
end
|
17
28
|
end
|
18
29
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'erb'
|
4
|
+
require 'ostruct'
|
5
|
+
require_relative './base'
|
6
|
+
|
7
|
+
module Makanai
|
8
|
+
module TemplateEngine
|
9
|
+
class Erb < Base
|
10
|
+
def initialize(text:, locals: {})
|
11
|
+
super()
|
12
|
+
@text = text
|
13
|
+
@locals = locals
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader :text, :locals
|
17
|
+
|
18
|
+
def result
|
19
|
+
# NOTE: ERB is need to pass the binding.
|
20
|
+
# So, pass the binding of the object that defined the instance variable.
|
21
|
+
# ref: https://docs.ruby-lang.org/en/2.7.0/ERB.html#method-i-result
|
22
|
+
ERB.new(text).result(Locals.new(locals).self_binding)
|
23
|
+
end
|
24
|
+
class Locals
|
25
|
+
def initialize(locals)
|
26
|
+
locals.each { |key, val| instance_variable_set(key, val) }
|
27
|
+
end
|
28
|
+
|
29
|
+
def self_binding
|
30
|
+
binding
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private_constant :Locals
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'haml'
|
4
|
+
require_relative './base'
|
5
|
+
|
6
|
+
module Makanai
|
7
|
+
module TemplateEngine
|
8
|
+
class Haml < Base
|
9
|
+
def initialize(text:, locals: {})
|
10
|
+
super()
|
11
|
+
@text = text
|
12
|
+
@locals = locals
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :text, :locals
|
16
|
+
|
17
|
+
def result
|
18
|
+
# ref: http://haml.info/docs/yardoc/Haml/Engine.html#render-instance_method
|
19
|
+
::Haml::Engine.new(text).render(Object.new, locals)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/makanai/version.rb
CHANGED
data/makanai.gemspec
CHANGED
@@ -26,9 +26,12 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.require_paths = ["lib"]
|
27
27
|
|
28
28
|
spec.add_dependency "rake", ">= 10", "< 14"
|
29
|
-
spec.add_dependency "rack", "
|
30
|
-
spec.
|
29
|
+
spec.add_dependency "rack", ">= 2.0.7", "< 2.3.0"
|
30
|
+
spec.add_development_dependency "sqlite3", "~> 1.4.1"
|
31
31
|
spec.add_development_dependency "rubocop", "~> 0.74"
|
32
32
|
spec.add_development_dependency "bundler", "~> 2.0"
|
33
33
|
spec.add_development_dependency "rspec", "~> 3.0"
|
34
|
+
spec.add_development_dependency "pg", "~> 1.2"
|
35
|
+
spec.add_development_dependency "mysql2", "~> 0.5"
|
36
|
+
spec.add_development_dependency "haml", "~> 5.0"
|
34
37
|
end
|
data/sample/Rakefile
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: makanai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Madogiwa
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -34,16 +34,22 @@ dependencies:
|
|
34
34
|
name: rack
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- - "
|
37
|
+
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 2.0.7
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 2.3.0
|
40
43
|
type: :runtime
|
41
44
|
prerelease: false
|
42
45
|
version_requirements: !ruby/object:Gem::Requirement
|
43
46
|
requirements:
|
44
|
-
- - "
|
47
|
+
- - ">="
|
45
48
|
- !ruby/object:Gem::Version
|
46
49
|
version: 2.0.7
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.3.0
|
47
53
|
- !ruby/object:Gem::Dependency
|
48
54
|
name: sqlite3
|
49
55
|
requirement: !ruby/object:Gem::Requirement
|
@@ -51,7 +57,7 @@ dependencies:
|
|
51
57
|
- - "~>"
|
52
58
|
- !ruby/object:Gem::Version
|
53
59
|
version: 1.4.1
|
54
|
-
type: :
|
60
|
+
type: :development
|
55
61
|
prerelease: false
|
56
62
|
version_requirements: !ruby/object:Gem::Requirement
|
57
63
|
requirements:
|
@@ -100,6 +106,48 @@ dependencies:
|
|
100
106
|
- - "~>"
|
101
107
|
- !ruby/object:Gem::Version
|
102
108
|
version: '3.0'
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: pg
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '1.2'
|
116
|
+
type: :development
|
117
|
+
prerelease: false
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '1.2'
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: mysql2
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0.5'
|
130
|
+
type: :development
|
131
|
+
prerelease: false
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - "~>"
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0.5'
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: haml
|
139
|
+
requirement: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - "~>"
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '5.0'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - "~>"
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '5.0'
|
103
151
|
description: simple web application framework for learning.
|
104
152
|
email:
|
105
153
|
- madogiwa0124@gmail.com
|
@@ -111,6 +159,7 @@ files:
|
|
111
159
|
- ".gitignore"
|
112
160
|
- ".rspec"
|
113
161
|
- ".rubocop.yml"
|
162
|
+
- ".ruby-version"
|
114
163
|
- ".travis.yml"
|
115
164
|
- CHANGELOG.md
|
116
165
|
- CODE_OF_CONDUCT.md
|
@@ -121,14 +170,20 @@ files:
|
|
121
170
|
- Rakefile
|
122
171
|
- bin/console
|
123
172
|
- bin/setup
|
173
|
+
- docker-compose.yml
|
124
174
|
- exe/makanai
|
125
175
|
- lib/makanai.rb
|
126
176
|
- lib/makanai/application.rb
|
127
177
|
- lib/makanai/database.rb
|
178
|
+
- lib/makanai/dbms/base.rb
|
179
|
+
- lib/makanai/dbms/mysql.rb
|
180
|
+
- lib/makanai/dbms/postgres.rb
|
181
|
+
- lib/makanai/dbms/sqlite.rb
|
128
182
|
- lib/makanai/dsl.rb
|
129
183
|
- lib/makanai/generator.rb
|
130
184
|
- lib/makanai/generator/application/directories.yaml
|
131
185
|
- lib/makanai/generator/application/templates/app.erb
|
186
|
+
- lib/makanai/generator/application/templates/gemfile.erb
|
132
187
|
- lib/makanai/generator/application/templates/rakefile.erb
|
133
188
|
- lib/makanai/main.rb
|
134
189
|
- lib/makanai/migration.rb
|
@@ -139,6 +194,9 @@ files:
|
|
139
194
|
- lib/makanai/router.rb
|
140
195
|
- lib/makanai/settings.rb
|
141
196
|
- lib/makanai/template.rb
|
197
|
+
- lib/makanai/template_engine/base.rb
|
198
|
+
- lib/makanai/template_engine/erb.rb
|
199
|
+
- lib/makanai/template_engine/haml.rb
|
142
200
|
- lib/makanai/version.rb
|
143
201
|
- makanai.gemspec
|
144
202
|
- sample/Rakefile
|