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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 588a6ba96d25153b2afd982b7776df82258c0dc55c815db4e7c5215d8bbe6269
4
- data.tar.gz: 80a56253e100646aea7291728b7fa3306e6c6e231502198f35bb465c6855ca79
3
+ metadata.gz: 6a3f9a5c639bfa422a1441b9399fe91bb858f072787b6ff882f13dbbb706d1e1
4
+ data.tar.gz: 50a6aec6958948a931bbfd6bfbd55208adb241dca6c2d79cf3bc7329c79cebb4
5
5
  SHA512:
6
- metadata.gz: 4dcbd11db6b2b6a5d37b888c1d197320d388242bb585e1048fbf071f6dd06674596b3d5d5894792fcc9dd5a76b1d280140f5cffb09769dab90a262c03829b937
7
- data.tar.gz: 1806376a8178418d87ececdf9430ad64257d71a43f244ee477236d2e8c2127bdd0534af46bfd5a23aa2b8f117e068e0d394fdc16d5964d9a96294518a099bc25
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 ruby bin/serrano new my_app
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 ruby bin/serrano new my_app --db=sqlite
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 ruby bin/serrano new my_app --minimal
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 ruby bin/serrano new my_app --minimal --db=postgres
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 ruby bin/serrano generate resource Article title:string content:text required:required
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 ruby bin/serrano generate controller Comments
198
- bundle exec ruby bin/serrano generate service Reports::Monthly
199
- bundle exec ruby bin/serrano generate repository Comment
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 (local development)
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
- ruby '3.4.0'
58
+ source "https://rubygems.org"
55
59
 
56
- gem 'serrano', path: '../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 ruby bin/serrano new APP_NAME [--minimal] [--db=sqlite|postgres|mysql]
110
- bundle exec ruby bin/serrano generate resource Article title:string content:text
111
- bundle exec ruby bin/serrano generate controller Name
112
- bundle exec ruby bin/serrano generate service Namespace::Name
113
- bundle exec ruby bin/serrano generate repository Name
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.0` (gem: serrano-vk)
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 -%>
@@ -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: '{"error":"Internal Server Error"}'
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Serrano
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.2"
5
5
  end
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.0
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: rackup
33
+ name: thor
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
36
  - - ">="
37
37
  - !ruby/object:Gem::Version
38
- version: 2.3.0
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: 2.3.0
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: thor
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: sequel
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: sqlite3
89
+ name: rackup
96
90
  requirement: !ruby/object:Gem::Requirement
97
91
  requirements:
98
92
  - - ">="
99
93
  - !ruby/object:Gem::Version
100
- version: '0'
101
- type: :development
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: '0'
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: '0'
122
- - !ruby/object:Gem::Dependency
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: '0'
107
+ version: 3.0.0
136
108
  - !ruby/object:Gem::Dependency
137
- name: rake
109
+ name: webrick
138
110
  requirement: !ruby/object:Gem::Requirement
139
111
  requirements:
140
112
  - - ">="