ru.Bee 1.3.2 → 1.4.0
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/bin/rubee +114 -88
- data/lib/app/views/app.tsx +27 -0
- data/lib/app/views/index.html +47 -0
- data/lib/app/views/layout.erb +3 -3
- data/lib/app/views/utils/redirectToBackend.tsx +9 -0
- data/lib/app/views/welcome_show.erb +1 -1
- data/lib/config/base_configuration.rb +15 -6
- data/lib/config/routes.rb +2 -1
- data/lib/db/create_accounts.rb +8 -8
- data/lib/db/create_comments.rb +7 -7
- data/lib/db/create_posts.rb +8 -8
- data/lib/db/create_users.rb +8 -8
- data/lib/db/structure.rb +42 -42
- data/lib/esbuild.config.js +33 -0
- data/lib/inits/print_colors.rb +1 -1
- data/lib/js/app.js +13 -0
- data/lib/js/app.js.map +7 -0
- data/lib/js/bundle.js +26157 -0
- data/lib/js/bundle.js.map +7 -0
- data/lib/node_modules/@types/cookie/LICENSE +21 -0
- data/lib/node_modules/@types/cookie/README.md +15 -0
- data/lib/node_modules/@types/cookie/index.d.ts +154 -0
- data/lib/node_modules/@types/cookie/package.json +30 -0
- data/lib/node_modules/cookie/LICENSE +24 -0
- data/lib/node_modules/cookie/README.md +248 -0
- data/lib/node_modules/cookie/dist/index.d.ts +114 -0
- data/lib/node_modules/cookie/dist/index.js +239 -0
- data/lib/node_modules/cookie/dist/index.js.map +1 -0
- data/lib/node_modules/cookie/package.json +42 -0
- data/lib/node_modules/js-tokens/CHANGELOG.md +151 -0
- data/lib/node_modules/js-tokens/LICENSE +21 -0
- data/lib/node_modules/js-tokens/README.md +240 -0
- data/lib/node_modules/js-tokens/index.js +23 -0
- data/lib/node_modules/js-tokens/package.json +30 -0
- data/lib/node_modules/loose-envify/LICENSE +21 -0
- data/lib/node_modules/loose-envify/README.md +45 -0
- data/lib/node_modules/loose-envify/cli.js +16 -0
- data/lib/node_modules/loose-envify/custom.js +4 -0
- data/lib/node_modules/loose-envify/index.js +3 -0
- data/lib/node_modules/loose-envify/loose-envify.js +36 -0
- data/lib/node_modules/loose-envify/package.json +36 -0
- data/lib/node_modules/loose-envify/replace.js +65 -0
- data/lib/node_modules/react/LICENSE +21 -0
- data/lib/node_modules/react/README.md +37 -0
- data/lib/node_modules/react/cjs/react-jsx-dev-runtime.development.js +1315 -0
- data/lib/node_modules/react/cjs/react-jsx-dev-runtime.production.min.js +10 -0
- data/lib/node_modules/react/cjs/react-jsx-dev-runtime.profiling.min.js +10 -0
- data/lib/node_modules/react/cjs/react-jsx-runtime.development.js +1333 -0
- data/lib/node_modules/react/cjs/react-jsx-runtime.production.min.js +11 -0
- data/lib/node_modules/react/cjs/react-jsx-runtime.profiling.min.js +11 -0
- data/lib/node_modules/react/cjs/react.development.js +2740 -0
- data/lib/node_modules/react/cjs/react.production.min.js +26 -0
- data/lib/node_modules/react/cjs/react.shared-subset.development.js +20 -0
- data/lib/node_modules/react/cjs/react.shared-subset.production.min.js +10 -0
- data/lib/node_modules/react/index.js +7 -0
- data/lib/node_modules/react/jsx-dev-runtime.js +7 -0
- data/lib/node_modules/react/jsx-runtime.js +7 -0
- data/lib/node_modules/react/package.json +47 -0
- data/lib/node_modules/react/react.shared-subset.js +7 -0
- data/lib/node_modules/react/umd/react.development.js +3343 -0
- data/lib/node_modules/react/umd/react.production.min.js +31 -0
- data/lib/node_modules/react/umd/react.profiling.min.js +31 -0
- data/lib/node_modules/react-dom/LICENSE +21 -0
- data/lib/node_modules/react-dom/README.md +60 -0
- data/lib/node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js +7029 -0
- data/lib/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js +93 -0
- data/lib/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js +7093 -0
- data/lib/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.min.js +101 -0
- data/lib/node_modules/react-dom/cjs/react-dom-server.browser.development.js +7014 -0
- data/lib/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js +96 -0
- data/lib/node_modules/react-dom/cjs/react-dom-server.node.development.js +7070 -0
- data/lib/node_modules/react-dom/cjs/react-dom-server.node.production.min.js +102 -0
- data/lib/node_modules/react-dom/cjs/react-dom-test-utils.development.js +1763 -0
- data/lib/node_modules/react-dom/cjs/react-dom-test-utils.production.min.js +40 -0
- data/lib/node_modules/react-dom/cjs/react-dom.development.js +29923 -0
- data/lib/node_modules/react-dom/cjs/react-dom.production.min.js +322 -0
- data/lib/node_modules/react-dom/cjs/react-dom.profiling.min.js +366 -0
- data/lib/node_modules/react-dom/client.js +25 -0
- data/lib/node_modules/react-dom/index.js +38 -0
- data/lib/node_modules/react-dom/package.json +62 -0
- data/lib/node_modules/react-dom/profiling.js +38 -0
- data/lib/node_modules/react-dom/server.browser.js +17 -0
- data/lib/node_modules/react-dom/server.js +3 -0
- data/lib/node_modules/react-dom/server.node.js +17 -0
- data/lib/node_modules/react-dom/test-utils.js +7 -0
- data/lib/node_modules/react-dom/umd/react-dom-server-legacy.browser.development.js +7026 -0
- data/lib/node_modules/react-dom/umd/react-dom-server-legacy.browser.production.min.js +75 -0
- data/lib/node_modules/react-dom/umd/react-dom-server.browser.development.js +7011 -0
- data/lib/node_modules/react-dom/umd/react-dom-server.browser.production.min.js +76 -0
- data/lib/node_modules/react-dom/umd/react-dom-test-utils.development.js +1759 -0
- data/lib/node_modules/react-dom/umd/react-dom-test-utils.production.min.js +33 -0
- data/lib/node_modules/react-dom/umd/react-dom.development.js +29924 -0
- data/lib/node_modules/react-dom/umd/react-dom.production.min.js +267 -0
- data/lib/node_modules/react-dom/umd/react-dom.profiling.min.js +285 -0
- data/lib/node_modules/react-router/CHANGELOG.md +1526 -0
- data/lib/node_modules/react-router/LICENSE.md +23 -0
- data/lib/node_modules/react-router/README.md +7 -0
- data/lib/node_modules/react-router/dist/development/chunk-KNED5TY2.mjs +10476 -0
- data/lib/node_modules/react-router/dist/development/dom-export.d.mts +23 -0
- data/lib/node_modules/react-router/dist/development/dom-export.d.ts +23 -0
- data/lib/node_modules/react-router/dist/development/dom-export.js +6111 -0
- data/lib/node_modules/react-router/dist/development/dom-export.mjs +234 -0
- data/lib/node_modules/react-router/dist/development/fog-of-war-1hWhK5ey.d.mts +1690 -0
- data/lib/node_modules/react-router/dist/development/fog-of-war-oa9CGk10.d.ts +1690 -0
- data/lib/node_modules/react-router/dist/development/future-ldDp5FKH.d.mts +21 -0
- data/lib/node_modules/react-router/dist/development/future-ldDp5FKH.d.ts +21 -0
- data/lib/node_modules/react-router/dist/development/index.d.mts +841 -0
- data/lib/node_modules/react-router/dist/development/index.d.ts +841 -0
- data/lib/node_modules/react-router/dist/development/index.js +10624 -0
- data/lib/node_modules/react-router/dist/development/index.mjs +242 -0
- data/lib/node_modules/react-router/dist/development/lib/types/route-module.d.mts +209 -0
- data/lib/node_modules/react-router/dist/development/lib/types/route-module.d.ts +209 -0
- data/lib/node_modules/react-router/dist/development/lib/types/route-module.js +28 -0
- data/lib/node_modules/react-router/dist/development/lib/types/route-module.mjs +10 -0
- data/lib/node_modules/react-router/dist/development/route-data-5OzAzQtT.d.mts +1716 -0
- data/lib/node_modules/react-router/dist/development/route-data-5OzAzQtT.d.ts +1716 -0
- data/lib/node_modules/react-router/dist/production/chunk-ZIM7OIE3.mjs +10476 -0
- data/lib/node_modules/react-router/dist/production/dom-export.d.mts +23 -0
- data/lib/node_modules/react-router/dist/production/dom-export.d.ts +23 -0
- data/lib/node_modules/react-router/dist/production/dom-export.js +6111 -0
- data/lib/node_modules/react-router/dist/production/dom-export.mjs +234 -0
- data/lib/node_modules/react-router/dist/production/fog-of-war-1hWhK5ey.d.mts +1690 -0
- data/lib/node_modules/react-router/dist/production/fog-of-war-oa9CGk10.d.ts +1690 -0
- data/lib/node_modules/react-router/dist/production/future-ldDp5FKH.d.mts +21 -0
- data/lib/node_modules/react-router/dist/production/future-ldDp5FKH.d.ts +21 -0
- data/lib/node_modules/react-router/dist/production/index.d.mts +841 -0
- data/lib/node_modules/react-router/dist/production/index.d.ts +841 -0
- data/lib/node_modules/react-router/dist/production/index.js +10624 -0
- data/lib/node_modules/react-router/dist/production/index.mjs +242 -0
- data/lib/node_modules/react-router/dist/production/lib/types/route-module.d.mts +209 -0
- data/lib/node_modules/react-router/dist/production/lib/types/route-module.d.ts +209 -0
- data/lib/node_modules/react-router/dist/production/lib/types/route-module.js +28 -0
- data/lib/node_modules/react-router/dist/production/lib/types/route-module.mjs +10 -0
- data/lib/node_modules/react-router/dist/production/route-data-5OzAzQtT.d.mts +1716 -0
- data/lib/node_modules/react-router/dist/production/route-data-5OzAzQtT.d.ts +1716 -0
- data/lib/node_modules/react-router/package.json +116 -0
- data/lib/node_modules/react-router-dom/LICENSE.md +23 -0
- data/lib/node_modules/react-router-dom/README.md +6 -0
- data/lib/node_modules/react-router-dom/dist/index.d.mts +2 -0
- data/lib/node_modules/react-router-dom/dist/index.d.ts +2 -0
- data/lib/node_modules/react-router-dom/dist/index.js +45 -0
- data/lib/node_modules/react-router-dom/dist/index.mjs +18 -0
- data/lib/node_modules/react-router-dom/package.json +82 -0
- data/lib/node_modules/scheduler/LICENSE +21 -0
- data/lib/node_modules/scheduler/README.md +9 -0
- data/lib/node_modules/scheduler/cjs/scheduler-unstable_mock.development.js +700 -0
- data/lib/node_modules/scheduler/cjs/scheduler-unstable_mock.production.min.js +20 -0
- data/lib/node_modules/scheduler/cjs/scheduler-unstable_post_task.development.js +207 -0
- data/lib/node_modules/scheduler/cjs/scheduler-unstable_post_task.production.min.js +14 -0
- data/lib/node_modules/scheduler/cjs/scheduler.development.js +634 -0
- data/lib/node_modules/scheduler/cjs/scheduler.production.min.js +19 -0
- data/lib/node_modules/scheduler/index.js +7 -0
- data/lib/node_modules/scheduler/package.json +36 -0
- data/lib/node_modules/scheduler/umd/scheduler-unstable_mock.development.js +699 -0
- data/lib/node_modules/scheduler/umd/scheduler-unstable_mock.production.min.js +19 -0
- data/lib/node_modules/scheduler/umd/scheduler.development.js +152 -0
- data/lib/node_modules/scheduler/umd/scheduler.production.min.js +146 -0
- data/lib/node_modules/scheduler/umd/scheduler.profiling.min.js +146 -0
- data/lib/node_modules/scheduler/unstable_mock.js +7 -0
- data/lib/node_modules/scheduler/unstable_post_task.js +7 -0
- data/lib/node_modules/set-cookie-parser/LICENSE +21 -0
- data/lib/node_modules/set-cookie-parser/README.md +202 -0
- data/lib/node_modules/set-cookie-parser/lib/set-cookie.js +224 -0
- data/lib/node_modules/set-cookie-parser/package.json +45 -0
- data/lib/node_modules/turbo-stream/LICENSE +7 -0
- data/lib/node_modules/turbo-stream/README.md +31 -0
- data/lib/node_modules/turbo-stream/dist/flatten.d.ts +2 -0
- data/lib/node_modules/turbo-stream/dist/flatten.js +203 -0
- data/lib/node_modules/turbo-stream/dist/turbo-stream.d.ts +13 -0
- data/lib/node_modules/turbo-stream/dist/turbo-stream.js +207 -0
- data/lib/node_modules/turbo-stream/dist/turbo-stream.mjs +673 -0
- data/lib/node_modules/turbo-stream/dist/unflatten.d.ts +2 -0
- data/lib/node_modules/turbo-stream/dist/unflatten.js +243 -0
- data/lib/node_modules/turbo-stream/dist/utils.d.ts +44 -0
- data/lib/node_modules/turbo-stream/dist/utils.js +55 -0
- data/lib/node_modules/turbo-stream/package.json +50 -0
- data/lib/package-lock.json +133 -0
- data/lib/package.json +12 -0
- data/lib/rubee/async/asyncable.rb +2 -2
- data/lib/rubee/async/sidekiq_async.rb +11 -11
- data/lib/rubee/async/thread_async.rb +1 -1
- data/lib/rubee/async/thread_pool.rb +2 -2
- data/lib/rubee/controllers/base_controller.rb +44 -21
- data/lib/rubee/controllers/extensions/auth_tokenable.rb +10 -8
- data/lib/rubee/controllers/extensions/middlewarable.rb +1 -1
- data/lib/rubee/controllers/middlewares/auth_token_middleware.rb +12 -8
- data/lib/rubee/extensions/hookable.rb +3 -6
- data/lib/rubee/extensions/serializable.rb +3 -3
- data/lib/rubee/models/database_objectable.rb +11 -12
- data/lib/rubee/models/sequel_object.rb +23 -24
- data/lib/rubee.rb +106 -55
- data/lib/tests/account_model_test.rb +4 -4
- data/lib/tests/auth_tokenable_test.rb +6 -6
- data/lib/tests/comment_model_test.rb +7 -7
- data/lib/tests/example_models/account.rb +1 -0
- data/lib/tests/example_models/comment.rb +1 -0
- data/lib/tests/example_models/post.rb +1 -0
- data/lib/tests/example_models/user.rb +1 -0
- data/lib/tests/rubeeapp_test.rb +21 -6
- data/lib/tests/test.db +0 -0
- data/lib/tests/test_helper.rb +3 -5
- data/lib/tests/user_model_test.rb +71 -54
- data/readme.md +104 -2
- metadata +170 -3
data/lib/rubee.rb
CHANGED
@@ -1,14 +1,20 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'singleton'
|
2
|
+
require 'bundler/setup'
|
3
3
|
require 'bundler'
|
4
4
|
|
5
|
-
|
5
|
+
begin
|
6
|
+
Bundler.require(:default)
|
7
|
+
rescue StandardError
|
8
|
+
nil
|
9
|
+
end
|
6
10
|
|
7
11
|
module Rubee
|
8
12
|
APP_ROOT = File.expand_path(Dir.pwd) unless defined?(APP_ROOT)
|
9
|
-
IMAGE_DIR = File.join(APP_ROOT, 'images') unless defined?(IMAGE_DIR)
|
10
13
|
PROJECT_NAME = File.basename(APP_ROOT) unless defined?(PROJECT_NAME)
|
11
|
-
|
14
|
+
LIB = PROJECT_NAME == 'rubee' ? 'lib/' : '' unless defined?(LIB)
|
15
|
+
IMAGE_DIR = File.join(APP_ROOT, LIB, 'images') unless defined?(IMAGE_DIR)
|
16
|
+
JS_DIR = File.join(APP_ROOT, LIB, 'js') unless defined?(JS_DIR)
|
17
|
+
VERSION = '1.4.0'
|
12
18
|
|
13
19
|
class Application
|
14
20
|
include Singleton
|
@@ -19,16 +25,25 @@ module Rubee
|
|
19
25
|
# register images paths
|
20
26
|
request = Rack::Request.new(env)
|
21
27
|
# Add default path for images
|
22
|
-
Router.draw
|
28
|
+
Router.draw do |route|
|
29
|
+
route.get('/images/{path}', to: 'base#image', namespace: 'Rubee')
|
30
|
+
route.get('/js/{path}', to: 'base#js', namespace: 'Rubee')
|
31
|
+
route.get('/css/{path}', to: 'base#css', namespace: 'Rubee')
|
32
|
+
end
|
23
33
|
# define route
|
24
34
|
route = Router.route_for(request)
|
35
|
+
# if react is the view so we would like to delegate not cauth by rubee routes to it.
|
36
|
+
if Rubee::Configuration.react[:on] && !route
|
37
|
+
index = File.read File.join(Rubee::APP_ROOT, Rubee::LIB, 'app/views', 'index.html')
|
38
|
+
return [200, { 'content-type' => 'text/html' }, [index]]
|
39
|
+
end
|
40
|
+
# if not found return 404
|
41
|
+
return [404, { 'content-type' => 'text/plain' }, ['Route not found']] unless route
|
25
42
|
# init controller class
|
26
|
-
|
27
|
-
|
28
|
-
if route[:namespace]
|
29
|
-
controller_class = "#{route[:namespace]}::#{route[:controller].capitalize}Controller"
|
43
|
+
controller_class = if route[:namespace]
|
44
|
+
"#{route[:namespace]}::#{route[:controller].capitalize}Controller"
|
30
45
|
else
|
31
|
-
|
46
|
+
"#{route[:controller].capitalize}Controller"
|
32
47
|
end
|
33
48
|
# instantiate controller
|
34
49
|
controller = Object.const_get(controller_class).new(request, route)
|
@@ -44,15 +59,15 @@ module Rubee
|
|
44
59
|
|
45
60
|
@configuraiton = {
|
46
61
|
development: {
|
47
|
-
database_url:
|
48
|
-
port: 7000
|
62
|
+
database_url: '',
|
63
|
+
port: 7000,
|
49
64
|
},
|
50
65
|
production: {},
|
51
|
-
test: {}
|
66
|
+
test: {},
|
52
67
|
}
|
53
68
|
|
54
69
|
class << self
|
55
|
-
def setup(
|
70
|
+
def setup(_env)
|
56
71
|
yield(self)
|
57
72
|
end
|
58
73
|
|
@@ -64,10 +79,19 @@ module Rubee
|
|
64
79
|
@configuraiton[args[:env].to_sym][:async_adapter] = args[:async_adapter]
|
65
80
|
end
|
66
81
|
|
67
|
-
def
|
68
|
-
|
69
|
-
|
70
|
-
|
82
|
+
def react=(args)
|
83
|
+
@configuraiton[args[:env].to_sym][:react] ||= { on: false }
|
84
|
+
@configuraiton[args[:env].to_sym][:react].merge!(on: args[:on])
|
85
|
+
end
|
86
|
+
|
87
|
+
def react
|
88
|
+
@configuraiton[ENV['RACK_ENV']&.to_sym || :development][:react] || {}
|
89
|
+
end
|
90
|
+
|
91
|
+
def method_missing(method_name, *_args)
|
92
|
+
return unless method_name.to_s.start_with?('get_')
|
93
|
+
|
94
|
+
@configuraiton[ENV['RACK_ENV']&.to_sym || :development]&.[](method_name.to_s.delete_prefix('get_').to_sym)
|
71
95
|
end
|
72
96
|
|
73
97
|
def envs
|
@@ -79,7 +103,7 @@ module Rubee
|
|
79
103
|
class Router
|
80
104
|
include Singleton
|
81
105
|
|
82
|
-
HTTP_METHODS = [
|
106
|
+
HTTP_METHODS = %i[get post put patch delete head connect options trace].freeze
|
83
107
|
|
84
108
|
attr_reader :request, :routes
|
85
109
|
|
@@ -92,19 +116,19 @@ module Rubee
|
|
92
116
|
|
93
117
|
def route_for(request)
|
94
118
|
puts request.request_method
|
95
|
-
method = (request.params[
|
119
|
+
method = (request.params['_method'] || request.request_method).downcase.to_sym
|
96
120
|
@routes.find do |route|
|
97
121
|
return route if request.path == route[:path] && request.request_method&.downcase&.to_sym == route[:method]
|
98
122
|
|
99
123
|
pattern = route[:path].gsub(/{.*?}/, '([^/]+)')
|
100
|
-
regex =
|
124
|
+
regex = /^#{pattern}$/
|
101
125
|
regex.match?(request.path) && method.to_s == route[:method].to_s
|
102
126
|
end
|
103
127
|
end
|
104
128
|
|
105
129
|
def set_route(path, to:, method: __method__, **args)
|
106
|
-
controller, action = to.split(
|
107
|
-
@routes.delete_if { |route| route[:path] == path && route[:method]
|
130
|
+
controller, action = to.split('#')
|
131
|
+
@routes.delete_if { |route| route[:path] == path && route[:method] == method }
|
108
132
|
@routes << { path:, controller:, action:, method:, **args }
|
109
133
|
end
|
110
134
|
|
@@ -116,10 +140,9 @@ module Rubee
|
|
116
140
|
end
|
117
141
|
end
|
118
142
|
|
119
|
-
|
120
143
|
class Autoload
|
121
144
|
class << self
|
122
|
-
def call(black_list=[])
|
145
|
+
def call(black_list = [])
|
123
146
|
# autoload all rbs
|
124
147
|
root_directory = File.dirname(__FILE__)
|
125
148
|
priority_order_require(root_directory, black_list)
|
@@ -149,20 +172,20 @@ module Rubee
|
|
149
172
|
require_relative file unless black_list.include?("#{file}.rb")
|
150
173
|
end
|
151
174
|
# app config and routes
|
152
|
-
|
153
|
-
|
175
|
+
unless black_list.include?('base_configuration.rb')
|
176
|
+
require_relative File.join(APP_ROOT, LIB,
|
177
|
+
'config/base_configuration')
|
178
|
+
end
|
154
179
|
# This is necessary prerequisitedb init step
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
config.database_url = { url: "sqlite://lib/tests/test.db", env: }
|
159
|
-
end
|
180
|
+
if !defined?(Rubee::SequelObject::DB) && (PROJECT_NAME == 'rubee')
|
181
|
+
Rubee::Configuration.setup(env = :test) do |config|
|
182
|
+
config.database_url = { url: 'sqlite://lib/tests/test.db', env: }
|
160
183
|
end
|
161
184
|
end
|
162
185
|
|
163
|
-
require_relative File.join(APP_ROOT,
|
186
|
+
require_relative File.join(APP_ROOT, LIB, 'config/routes') unless black_list.include?('routes.rb')
|
164
187
|
# rubee extensions
|
165
|
-
Dir[File.join(root_directory,
|
188
|
+
Dir[File.join(root_directory, 'rubee/extensions/**', '*.rb')].each do |file|
|
166
189
|
require_relative file unless black_list.include?("#{file}.rb")
|
167
190
|
end
|
168
191
|
# rubee controllers
|
@@ -172,21 +195,31 @@ module Rubee
|
|
172
195
|
Dir[File.join(root_directory, 'rubee/controllers/extensions/**', '*.rb')].each do |file|
|
173
196
|
require_relative file unless black_list.include?("#{file}.rb")
|
174
197
|
end
|
175
|
-
|
198
|
+
unless black_list.include?('base_controller.rb')
|
199
|
+
require_relative File.join(root_directory,
|
200
|
+
'rubee/controllers/base_controller')
|
201
|
+
end
|
176
202
|
# rubee models
|
177
|
-
|
178
|
-
|
203
|
+
unless black_list.include?('database_objectable.rb')
|
204
|
+
require_relative File.join(root_directory,
|
205
|
+
'rubee/models/database_objectable')
|
206
|
+
end
|
207
|
+
return if black_list.include?('sequel_object.rb')
|
208
|
+
|
209
|
+
require_relative File.join(root_directory,
|
210
|
+
'rubee/models/sequel_object')
|
179
211
|
end
|
180
212
|
end
|
181
213
|
end
|
182
214
|
|
183
215
|
class Generator
|
184
|
-
def initialize(model_name, attributes, controller_name, action_name)
|
216
|
+
def initialize(model_name, attributes, controller_name, action_name, **options)
|
185
217
|
@model_name = model_name&.downcase
|
186
218
|
@attributes = attributes
|
187
|
-
@plural_name =
|
219
|
+
@plural_name = controller_name.to_s.gsub('Controller', '').downcase.to_s
|
188
220
|
@action_name = action_name
|
189
221
|
@controller_name = controller_name
|
222
|
+
@react = options[:react] || {}
|
190
223
|
end
|
191
224
|
|
192
225
|
def call
|
@@ -199,7 +232,7 @@ module Rubee
|
|
199
232
|
private
|
200
233
|
|
201
234
|
def generate_model
|
202
|
-
model_file = File.join("app/models/#{@model_name}.rb")
|
235
|
+
model_file = File.join(Rubee::APP_ROOT, Rubee::LIB, "app/models/#{@model_name}.rb")
|
203
236
|
if File.exist?(model_file)
|
204
237
|
puts "Model #{@model_name} already exists. Remove it if you want to regenerate"
|
205
238
|
return
|
@@ -207,16 +240,16 @@ module Rubee
|
|
207
240
|
|
208
241
|
content = <<~RUBY
|
209
242
|
class #{@model_name.capitalize} < Rubee::SequelObject
|
210
|
-
attr_accessor #{@attributes.map { |hash| ":#{hash[:name]}"
|
243
|
+
attr_accessor #{@attributes.map { |hash| ":#{hash[:name]}" }.join(', ')}
|
211
244
|
end
|
212
245
|
RUBY
|
213
246
|
|
214
247
|
File.open(model_file, 'w') { |file| file.write(content) }
|
215
|
-
color_puts
|
248
|
+
color_puts("Model #{@model_name} created", color: :green)
|
216
249
|
end
|
217
250
|
|
218
251
|
def generate_controller
|
219
|
-
controller_file = File.join("app/controllers/#{@plural_name}_controller.rb")
|
252
|
+
controller_file = File.join(Rubee::APP_ROOT, Rubee::LIB, "app/controllers/#{@plural_name}_controller.rb")
|
220
253
|
if File.exist?(controller_file)
|
221
254
|
puts "Controller #{@plural_name} already exists. Remove it if you want to regenerate"
|
222
255
|
return
|
@@ -231,26 +264,45 @@ module Rubee
|
|
231
264
|
RUBY
|
232
265
|
|
233
266
|
File.open(controller_file, 'w') { |file| file.write(content) }
|
234
|
-
color_puts
|
267
|
+
color_puts("Controller #{@plural_name} created", color: :green)
|
235
268
|
end
|
236
269
|
|
237
270
|
def generate_view
|
238
|
-
|
271
|
+
if @react[:view_name]
|
272
|
+
view_file = File.join(Rubee::APP_ROOT, Rubee::LIB, "app/views/#{@react[:view_name]}")
|
273
|
+
content = <<~JS
|
274
|
+
import React, { useEffect, useState } from "react";
|
275
|
+
// 1. Add your logic that fetches data
|
276
|
+
// 2. Do not forget to add respective react route
|
277
|
+
export function User() {
|
278
|
+
|
279
|
+
return (
|
280
|
+
<div>
|
281
|
+
<h2>#{@react[:view_name]} view</h2>
|
282
|
+
</div>
|
283
|
+
);
|
284
|
+
}
|
285
|
+
JS
|
286
|
+
else
|
287
|
+
view_file = File.join(Rubee::APP_ROOT, Rubee::LIB, "app/views/#{@plural_name}_#{@action_name}.erb")
|
288
|
+
content = <<~ERB
|
289
|
+
<h1>#{@plural_name}_#{@action_name} View</h1>
|
290
|
+
ERB
|
291
|
+
end
|
292
|
+
|
293
|
+
name = @react[:view_name] || "#{@plural_name}_#{@action_name}"
|
294
|
+
|
239
295
|
if File.exist?(view_file)
|
240
|
-
puts "View #{
|
296
|
+
puts "View #{name} already exists. Remove it if you want to regenerate"
|
241
297
|
return
|
242
298
|
end
|
243
299
|
|
244
|
-
content = <<~ERB
|
245
|
-
<h1>#{@plural_name}_#{@action_name} View</h1>
|
246
|
-
ERB
|
247
|
-
|
248
300
|
File.open(view_file, 'w') { |file| file.write(content) }
|
249
|
-
color_puts
|
301
|
+
color_puts("View #{name} created", color: :green)
|
250
302
|
end
|
251
303
|
|
252
304
|
def generate_db_file
|
253
|
-
db_file = File.join("db/create_#{@plural_name}.rb")
|
305
|
+
db_file = File.join(Rubee::APP_ROOT, Rubee::LIB, "db/create_#{@plural_name}.rb")
|
254
306
|
if File.exist?(db_file)
|
255
307
|
puts "DB file for #{@plural_name} already exists. Remove it if you want to regenerate"
|
256
308
|
return
|
@@ -264,8 +316,7 @@ module Rubee
|
|
264
316
|
RUBY
|
265
317
|
|
266
318
|
File.open(db_file, 'w') { |file| file.write(content) }
|
267
|
-
color_puts
|
319
|
+
color_puts("DB file for #{@plural_name} created", color: :green)
|
268
320
|
end
|
269
321
|
end
|
270
322
|
end
|
271
|
-
|
@@ -3,16 +3,16 @@ require_relative 'test_helper'
|
|
3
3
|
describe 'Account model' do
|
4
4
|
describe 'holds :user' do
|
5
5
|
after do
|
6
|
-
Account.destroy_all
|
6
|
+
Account.destroy_all(cascade: true)
|
7
7
|
end
|
8
8
|
|
9
9
|
describe 'when it holds user_id' do
|
10
10
|
it 'returns associated User record' do
|
11
|
-
user = User.new(email:
|
11
|
+
user = User.new(email: 'ok-test@test.com', password: '123')
|
12
12
|
user.save
|
13
|
-
account = Account.new(user_id: user.id, addres:
|
13
|
+
account = Account.new(user_id: user.id, addres: 'test')
|
14
14
|
account.save
|
15
|
-
_(account.user.id).must_equal
|
15
|
+
_(account.user.id).must_equal(user.id)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -13,17 +13,17 @@ class RubeeAppTest < Minitest::Test
|
|
13
13
|
|
14
14
|
def teardown
|
15
15
|
# detach auth methods
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
return unless WelcomeController.instance_variable_defined?(:@auth_methods)
|
17
|
+
|
18
|
+
WelcomeController.send(:remove_instance_variable, :@auth_methods)
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_welcome_controller_included_auth_tokenable
|
22
22
|
WelcomeController.include(Rubee::AuthTokenable)
|
23
|
-
WelcomeController.auth_methods
|
23
|
+
WelcomeController.auth_methods(:show)
|
24
24
|
|
25
|
-
get
|
25
|
+
get('/')
|
26
26
|
|
27
|
-
assert_equal
|
27
|
+
assert_equal(last_response.status, 401)
|
28
28
|
end
|
29
29
|
end
|
@@ -3,32 +3,32 @@ require_relative 'test_helper'
|
|
3
3
|
describe 'Comment model' do
|
4
4
|
describe 'owns_many :users, over: :posts' do
|
5
5
|
before do
|
6
|
-
comment = Comment.new(text:
|
6
|
+
comment = Comment.new(text: 'test')
|
7
7
|
comment.save
|
8
|
-
user = User.new(email:
|
8
|
+
user = User.new(email: 'ok-test@test.com', password: '123')
|
9
9
|
user.save
|
10
10
|
post = Post.new(user_id: user.id, comment_id: comment.id)
|
11
11
|
post.save
|
12
12
|
end
|
13
13
|
|
14
14
|
after do
|
15
|
-
Comment.destroy_all
|
15
|
+
Comment.destroy_all(cascade: true)
|
16
16
|
end
|
17
17
|
|
18
18
|
describe 'when there are associated comment records' do
|
19
19
|
it 'returns all records' do
|
20
|
-
_(Comment.where(text:
|
21
|
-
_(Comment.where(text:
|
20
|
+
_(Comment.where(text: 'test').last.users.count).must_equal(1)
|
21
|
+
_(Comment.where(text: 'test').last.users.first.email).must_equal('ok-test@test.com')
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
describe 'sequel dataset query' do
|
26
26
|
it 'returns all records' do
|
27
27
|
result = Comment.dataset.join(:posts, comment_id: :id)
|
28
|
-
.where(comment_id: Comment.where(text:
|
28
|
+
.where(comment_id: Comment.where(text: 'test').last.id)
|
29
29
|
.then { |dataset| Comment.serialize(dataset) }
|
30
30
|
|
31
|
-
_(result.first.text).must_equal
|
31
|
+
_(result.first.text).must_equal('test')
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
data/lib/tests/rubeeapp_test.rb
CHANGED
@@ -7,18 +7,33 @@ class RubeeAppTest < Minitest::Test
|
|
7
7
|
Rubee::Application.instance
|
8
8
|
end
|
9
9
|
|
10
|
+
def setup
|
11
|
+
Rubee::Configuration.setup(env = :test) { _1.react = { on: false, env: } }
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown
|
15
|
+
Rubee::Configuration.setup(env = :test) { _1.react = { on: false, env: } }
|
16
|
+
end
|
10
17
|
|
11
18
|
def test_welcome_route
|
12
|
-
get
|
19
|
+
get('/')
|
13
20
|
|
14
|
-
assert_equal
|
15
|
-
assert_includes
|
21
|
+
assert_equal(200, last_response.status, "Unexpected response: #{last_response.body}")
|
22
|
+
assert_includes(last_response.body, 'All set up and running!')
|
16
23
|
end
|
17
24
|
|
18
|
-
|
19
25
|
def test_not_found_route
|
20
|
-
get
|
26
|
+
get('/random')
|
27
|
+
|
28
|
+
assert_equal(404, last_response.status)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_react_home
|
32
|
+
Rubee::Configuration.setup(env = :test) { _1.react = { on: true, env: } }
|
33
|
+
get('/home')
|
21
34
|
|
22
|
-
assert_equal
|
35
|
+
assert_equal(200, last_response.status)
|
36
|
+
assert_includes(last_response.body, '<div id="app">')
|
37
|
+
assert_includes(last_response.body, 'bundle.js')
|
23
38
|
end
|
24
39
|
end
|
data/lib/tests/test.db
CHANGED
Binary file
|
data/lib/tests/test_helper.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'bundler/setup'
|
2
2
|
Bundler.require(:test)
|
3
3
|
|
4
4
|
require 'minitest/autorun'
|
@@ -6,9 +6,7 @@ require 'rack/test'
|
|
6
6
|
require_relative '../../lib/rubee'
|
7
7
|
|
8
8
|
Rubee::Autoload.call
|
9
|
-
Rubee::Configuration.setup(env
|
10
|
-
config.database_url = { url:
|
9
|
+
Rubee::Configuration.setup(env = :test) do |config|
|
10
|
+
config.database_url = { url: 'sqlite://lib/tests/test.db', env: }
|
11
11
|
end
|
12
12
|
Rubee::SequelObject.reconnect!
|
13
|
-
|
14
|
-
|