serrano-vk 0.1.0 → 0.1.2
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/EXAMPLES.md +8 -8
- data/README.md +14 -10
- data/lib/serrano/cli/templates/new_default_gemfile.tt +6 -6
- data/lib/serrano/cli/templates/new_minimal_gemfile.tt +4 -4
- data/lib/serrano/cli/templates/new_project_gemfile.tt +8 -8
- data/lib/serrano/dispatcher.rb +26 -9
- data/lib/serrano/version.rb +1 -1
- metadata +14 -42
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6a3f9a5c639bfa422a1441b9399fe91bb858f072787b6ff882f13dbbb706d1e1
|
|
4
|
+
data.tar.gz: 50a6aec6958948a931bbfd6bfbd55208adb241dca6c2d79cf3bc7329c79cebb4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 77d117adcb1376fc62219aad4d05798b5075ba511f4e36bf8377e963c868231333c979d3842315def62d88f1543bb0a3ef1f9ef03644152441b5d17081d62372
|
|
7
|
+
data.tar.gz: d4573e52bed1ce97874e1f4b11aef7b3cee8f697d5e0b35066545e888ca59ccf011b85d6f2ec34ada12a0ccf758425b92dcfb1fcb87723166c027fc8102b8c02
|
data/EXAMPLES.md
CHANGED
|
@@ -135,7 +135,7 @@ request['id']
|
|
|
135
135
|
## 5.1 create full project (recommended)
|
|
136
136
|
|
|
137
137
|
```bash
|
|
138
|
-
bundle exec
|
|
138
|
+
bundle exec serrano new my_app
|
|
139
139
|
```
|
|
140
140
|
|
|
141
141
|
Generated structure includes `app/`, `config.ru`, `Gemfile`, `config/db.rb`, `db/migrations/`.
|
|
@@ -143,7 +143,7 @@ Generated structure includes `app/`, `config.ru`, `Gemfile`, `config/db.rb`, `db
|
|
|
143
143
|
## 5.2 create full project + sqlite db
|
|
144
144
|
|
|
145
145
|
```bash
|
|
146
|
-
bundle exec
|
|
146
|
+
bundle exec serrano new my_app --db=sqlite
|
|
147
147
|
```
|
|
148
148
|
|
|
149
149
|
Adds sqlite dependency and DB config.
|
|
@@ -151,7 +151,7 @@ Adds sqlite dependency and DB config.
|
|
|
151
151
|
## 5.3 minimal project
|
|
152
152
|
|
|
153
153
|
```bash
|
|
154
|
-
bundle exec
|
|
154
|
+
bundle exec serrano new my_app --minimal
|
|
155
155
|
```
|
|
156
156
|
|
|
157
157
|
Only boot files, no app/db scaffolding.
|
|
@@ -159,7 +159,7 @@ Only boot files, no app/db scaffolding.
|
|
|
159
159
|
## 5.4 minimal + db
|
|
160
160
|
|
|
161
161
|
```bash
|
|
162
|
-
bundle exec
|
|
162
|
+
bundle exec serrano new my_app --minimal --db=postgres
|
|
163
163
|
```
|
|
164
164
|
|
|
165
165
|
Orthogonal behavior: `--minimal` does not disable DB files.
|
|
@@ -179,7 +179,7 @@ bundle exec rackup
|
|
|
179
179
|
### 6.1 scaffold full resource
|
|
180
180
|
|
|
181
181
|
```bash
|
|
182
|
-
bundle exec
|
|
182
|
+
bundle exec serrano generate resource Article title:string content:text
|
|
183
183
|
```
|
|
184
184
|
|
|
185
185
|
Creates:
|
|
@@ -194,9 +194,9 @@ Creates:
|
|
|
194
194
|
### 6.2 generate individual files
|
|
195
195
|
|
|
196
196
|
```bash
|
|
197
|
-
bundle exec
|
|
198
|
-
bundle exec
|
|
199
|
-
bundle exec
|
|
197
|
+
bundle exec serrano generate controller Comments
|
|
198
|
+
bundle exec serrano generate service Reports::Monthly
|
|
199
|
+
bundle exec serrano generate repository Comment
|
|
200
200
|
```
|
|
201
201
|
|
|
202
202
|
---
|
data/README.md
CHANGED
|
@@ -44,16 +44,20 @@ See [EXAMPLES.md](./EXAMPLES.md) for full request/response demos.
|
|
|
44
44
|
|
|
45
45
|
---
|
|
46
46
|
|
|
47
|
-
## Installation (
|
|
47
|
+
## Installation (gem)
|
|
48
48
|
|
|
49
49
|
- Ruby `>= 3.2`
|
|
50
|
+
- Published gem:
|
|
51
|
+
|
|
52
|
+
- `serrano-vk` on RubyGems (`~> 0.1.2`)
|
|
53
|
+
|
|
50
54
|
- Add to your app Gemfile:
|
|
51
55
|
|
|
52
56
|
```ruby
|
|
53
57
|
# Gemfile
|
|
54
|
-
|
|
58
|
+
source "https://rubygems.org"
|
|
55
59
|
|
|
56
|
-
gem 'serrano',
|
|
60
|
+
gem 'serrano-vk', '~> 0.1.2'
|
|
57
61
|
```
|
|
58
62
|
|
|
59
63
|
Run:
|
|
@@ -106,11 +110,11 @@ The CLI is optional and depends on the core runtime.
|
|
|
106
110
|
### Available commands
|
|
107
111
|
|
|
108
112
|
```bash
|
|
109
|
-
bundle exec
|
|
110
|
-
bundle exec
|
|
111
|
-
bundle exec
|
|
112
|
-
bundle exec
|
|
113
|
-
bundle exec
|
|
113
|
+
bundle exec serrano new APP_NAME [--minimal] [--db=sqlite|postgres|mysql]
|
|
114
|
+
bundle exec serrano generate resource Article title:string content:text
|
|
115
|
+
bundle exec serrano generate controller Name
|
|
116
|
+
bundle exec serrano generate service Namespace::Name
|
|
117
|
+
bundle exec serrano generate repository Name
|
|
114
118
|
```
|
|
115
119
|
|
|
116
120
|
- `new` creates project files (minimal mode and DB options are orthogonal)
|
|
@@ -166,5 +170,5 @@ bundle exec rake test
|
|
|
166
170
|
|
|
167
171
|
## Version
|
|
168
172
|
|
|
169
|
-
Current version: `0.1.
|
|
170
|
-
Ruby requirement: `>= 3.2`
|
|
173
|
+
Current version: `0.1.2` (gem: serrano-vk)
|
|
174
|
+
Ruby requirement: `>= 3.2`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
source "https://rubygems.org"
|
|
2
|
-
|
|
3
|
-
gem "serrano"
|
|
4
|
-
gem "rackup"
|
|
5
|
-
gem "sequel"
|
|
6
|
-
gem "sqlite3"
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
gem "serrano-vk"
|
|
4
|
+
gem "rackup"
|
|
5
|
+
gem "sequel"
|
|
6
|
+
gem "sqlite3"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
source "https://rubygems.org"
|
|
2
|
-
|
|
3
|
-
gem "serrano"
|
|
4
|
-
gem "rackup"
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
gem "serrano-vk"
|
|
4
|
+
gem "rackup"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
source "https://rubygems.org"
|
|
2
|
-
|
|
3
|
-
gem "serrano"
|
|
4
|
-
gem "rackup"
|
|
5
|
-
<% if db_enabled? -%>
|
|
6
|
-
gem "sequel"
|
|
7
|
-
gem "<%= db_gem_name %>"
|
|
8
|
-
<% end -%>
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
gem "serrano-vk"
|
|
4
|
+
gem "rackup"
|
|
5
|
+
<% if db_enabled? -%>
|
|
6
|
+
gem "sequel"
|
|
7
|
+
gem "<%= db_gem_name %>"
|
|
8
|
+
<% end -%>
|
data/lib/serrano/dispatcher.rb
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
3
5
|
module Serrano
|
|
4
6
|
class Dispatcher
|
|
5
7
|
def initialize(router)
|
|
6
8
|
@router = router
|
|
7
9
|
end
|
|
8
10
|
|
|
9
|
-
def call(env)
|
|
10
|
-
request = Request.new(env)
|
|
11
|
-
route = @router.resolve(request.method, request.path)
|
|
11
|
+
def call(env)
|
|
12
|
+
request = Request.new(env)
|
|
13
|
+
route = @router.resolve(request.method, request.path)
|
|
12
14
|
|
|
13
15
|
unless route
|
|
14
16
|
allowed_methods = @router.allowed_methods(request.path)
|
|
@@ -19,13 +21,13 @@ module Serrano
|
|
|
19
21
|
|
|
20
22
|
controller = route[:controller].new
|
|
21
23
|
request.set_path_params(route[:path_params] || {})
|
|
22
|
-
result = controller.public_send(route[:action], request)
|
|
23
|
-
Response.normalize(result)
|
|
24
|
-
rescue StandardError
|
|
24
|
+
result = controller.public_send(route[:action], request)
|
|
25
|
+
Response.normalize(result)
|
|
26
|
+
rescue StandardError => error
|
|
25
27
|
Response.new(
|
|
26
28
|
status: 500,
|
|
27
29
|
headers: { 'content-type' => 'application/json' },
|
|
28
|
-
body:
|
|
30
|
+
body: JSON.generate(error: user_friendly_error_message(error))
|
|
29
31
|
).to_rack
|
|
30
32
|
end
|
|
31
33
|
|
|
@@ -49,5 +51,20 @@ module Serrano
|
|
|
49
51
|
body: '{"error":"Not Found"}'
|
|
50
52
|
).to_rack
|
|
51
53
|
end
|
|
54
|
+
|
|
55
|
+
def user_friendly_error_message(error)
|
|
56
|
+
migration_hint(error.message) || "#{error.class}: #{error.message}"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def migration_hint(message)
|
|
60
|
+
return nil if message.nil?
|
|
61
|
+
|
|
62
|
+
normalized = message.downcase
|
|
63
|
+
return 'Database schema is missing required table/column. Run migrations.' if normalized.match?(%r{
|
|
64
|
+
no\ such\ table|no\ such\ column|doesn't\ exist|relation\ .*\ does\ not\ exist|table\ .*\ does\ not\ exist|unknown\ column
|
|
65
|
+
}x)
|
|
66
|
+
|
|
67
|
+
nil
|
|
68
|
+
end
|
|
52
69
|
end
|
|
53
70
|
end
|
data/lib/serrano/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: serrano-vk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jesus Martinez
|
|
@@ -30,25 +30,19 @@ dependencies:
|
|
|
30
30
|
- !ruby/object:Gem::Version
|
|
31
31
|
version: 4.0.0
|
|
32
32
|
- !ruby/object:Gem::Dependency
|
|
33
|
-
name:
|
|
33
|
+
name: thor
|
|
34
34
|
requirement: !ruby/object:Gem::Requirement
|
|
35
35
|
requirements:
|
|
36
36
|
- - ">="
|
|
37
37
|
- !ruby/object:Gem::Version
|
|
38
|
-
version:
|
|
39
|
-
- - "<"
|
|
40
|
-
- !ruby/object:Gem::Version
|
|
41
|
-
version: 3.0.0
|
|
38
|
+
version: '0'
|
|
42
39
|
type: :runtime
|
|
43
40
|
prerelease: false
|
|
44
41
|
version_requirements: !ruby/object:Gem::Requirement
|
|
45
42
|
requirements:
|
|
46
43
|
- - ">="
|
|
47
44
|
- !ruby/object:Gem::Version
|
|
48
|
-
version:
|
|
49
|
-
- - "<"
|
|
50
|
-
- !ruby/object:Gem::Version
|
|
51
|
-
version: 3.0.0
|
|
45
|
+
version: '0'
|
|
52
46
|
- !ruby/object:Gem::Dependency
|
|
53
47
|
name: rubocop
|
|
54
48
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -64,7 +58,7 @@ dependencies:
|
|
|
64
58
|
- !ruby/object:Gem::Version
|
|
65
59
|
version: '0'
|
|
66
60
|
- !ruby/object:Gem::Dependency
|
|
67
|
-
name:
|
|
61
|
+
name: minitest
|
|
68
62
|
requirement: !ruby/object:Gem::Requirement
|
|
69
63
|
requirements:
|
|
70
64
|
- - ">="
|
|
@@ -78,7 +72,7 @@ dependencies:
|
|
|
78
72
|
- !ruby/object:Gem::Version
|
|
79
73
|
version: '0'
|
|
80
74
|
- !ruby/object:Gem::Dependency
|
|
81
|
-
name:
|
|
75
|
+
name: rake
|
|
82
76
|
requirement: !ruby/object:Gem::Requirement
|
|
83
77
|
requirements:
|
|
84
78
|
- - ">="
|
|
@@ -92,49 +86,27 @@ dependencies:
|
|
|
92
86
|
- !ruby/object:Gem::Version
|
|
93
87
|
version: '0'
|
|
94
88
|
- !ruby/object:Gem::Dependency
|
|
95
|
-
name:
|
|
89
|
+
name: rackup
|
|
96
90
|
requirement: !ruby/object:Gem::Requirement
|
|
97
91
|
requirements:
|
|
98
92
|
- - ">="
|
|
99
93
|
- !ruby/object:Gem::Version
|
|
100
|
-
version:
|
|
101
|
-
|
|
102
|
-
prerelease: false
|
|
103
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
104
|
-
requirements:
|
|
105
|
-
- - ">="
|
|
106
|
-
- !ruby/object:Gem::Version
|
|
107
|
-
version: '0'
|
|
108
|
-
- !ruby/object:Gem::Dependency
|
|
109
|
-
name: webrick
|
|
110
|
-
requirement: !ruby/object:Gem::Requirement
|
|
111
|
-
requirements:
|
|
112
|
-
- - ">="
|
|
94
|
+
version: 2.3.0
|
|
95
|
+
- - "<"
|
|
113
96
|
- !ruby/object:Gem::Version
|
|
114
|
-
version:
|
|
97
|
+
version: 3.0.0
|
|
115
98
|
type: :development
|
|
116
99
|
prerelease: false
|
|
117
100
|
version_requirements: !ruby/object:Gem::Requirement
|
|
118
101
|
requirements:
|
|
119
102
|
- - ">="
|
|
120
103
|
- !ruby/object:Gem::Version
|
|
121
|
-
version:
|
|
122
|
-
-
|
|
123
|
-
name: minitest
|
|
124
|
-
requirement: !ruby/object:Gem::Requirement
|
|
125
|
-
requirements:
|
|
126
|
-
- - ">="
|
|
127
|
-
- !ruby/object:Gem::Version
|
|
128
|
-
version: '0'
|
|
129
|
-
type: :development
|
|
130
|
-
prerelease: false
|
|
131
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
132
|
-
requirements:
|
|
133
|
-
- - ">="
|
|
104
|
+
version: 2.3.0
|
|
105
|
+
- - "<"
|
|
134
106
|
- !ruby/object:Gem::Version
|
|
135
|
-
version:
|
|
107
|
+
version: 3.0.0
|
|
136
108
|
- !ruby/object:Gem::Dependency
|
|
137
|
-
name:
|
|
109
|
+
name: webrick
|
|
138
110
|
requirement: !ruby/object:Gem::Requirement
|
|
139
111
|
requirements:
|
|
140
112
|
- - ">="
|