ru.Bee 1.3.3 → 1.5.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 +36 -4
- data/lib/app/views/app.tsx +27 -0
- data/lib/app/views/apples_.erb +1 -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 +9 -0
- data/lib/config/routes.rb +1 -0
- data/lib/esbuild.config.js +33 -0
- 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/controllers/base_controller.rb +14 -0
- data/lib/rubee.rb +100 -21
- data/lib/tests/rubee_generator_test.rb +190 -0
- data/lib/tests/rubeeapp_test.rb +12 -0
- data/lib/tests/test.db +0 -0
- data/lib/tests/user_model_test.rb +5 -0
- data/readme.md +288 -64
- metadata +172 -3
data/lib/rubee.rb
CHANGED
@@ -10,9 +10,11 @@ end
|
|
10
10
|
|
11
11
|
module Rubee
|
12
12
|
APP_ROOT = File.expand_path(Dir.pwd) unless defined?(APP_ROOT)
|
13
|
-
IMAGE_DIR = File.join(APP_ROOT, 'images') unless defined?(IMAGE_DIR)
|
14
13
|
PROJECT_NAME = File.basename(APP_ROOT) unless defined?(PROJECT_NAME)
|
15
|
-
|
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'
|
16
18
|
|
17
19
|
class Application
|
18
20
|
include Singleton
|
@@ -23,12 +25,21 @@ module Rubee
|
|
23
25
|
# register images paths
|
24
26
|
request = Rack::Request.new(env)
|
25
27
|
# Add default path for images
|
26
|
-
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
|
27
33
|
# define route
|
28
34
|
route = Router.route_for(request)
|
29
|
-
#
|
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
|
30
41
|
return [404, { 'content-type' => 'text/plain' }, ['Route not found']] unless route
|
31
|
-
|
42
|
+
# init controller class
|
32
43
|
controller_class = if route[:namespace]
|
33
44
|
"#{route[:namespace]}::#{route[:controller].capitalize}Controller"
|
34
45
|
else
|
@@ -68,6 +79,15 @@ module Rubee
|
|
68
79
|
@configuraiton[args[:env].to_sym][:async_adapter] = args[:async_adapter]
|
69
80
|
end
|
70
81
|
|
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
|
+
|
71
91
|
def method_missing(method_name, *_args)
|
72
92
|
return unless method_name.to_s.start_with?('get_')
|
73
93
|
|
@@ -152,9 +172,8 @@ module Rubee
|
|
152
172
|
require_relative file unless black_list.include?("#{file}.rb")
|
153
173
|
end
|
154
174
|
# app config and routes
|
155
|
-
lib = PROJECT_NAME == 'rubee' ? 'lib/' : ''
|
156
175
|
unless black_list.include?('base_configuration.rb')
|
157
|
-
require_relative File.join(APP_ROOT,
|
176
|
+
require_relative File.join(APP_ROOT, LIB,
|
158
177
|
'config/base_configuration')
|
159
178
|
end
|
160
179
|
# This is necessary prerequisitedb init step
|
@@ -164,7 +183,7 @@ module Rubee
|
|
164
183
|
end
|
165
184
|
end
|
166
185
|
|
167
|
-
require_relative File.join(APP_ROOT,
|
186
|
+
require_relative File.join(APP_ROOT, LIB, 'config/routes') unless black_list.include?('routes.rb')
|
168
187
|
# rubee extensions
|
169
188
|
Dir[File.join(root_directory, 'rubee/extensions/**', '*.rb')].each do |file|
|
170
189
|
require_relative file unless black_list.include?("#{file}.rb")
|
@@ -194,12 +213,13 @@ module Rubee
|
|
194
213
|
end
|
195
214
|
|
196
215
|
class Generator
|
197
|
-
def initialize(model_name,
|
216
|
+
def initialize(model_name, model_attributes, controller_name, action_name, **options)
|
198
217
|
@model_name = model_name&.downcase
|
199
|
-
@
|
218
|
+
@model_attributes = model_attributes || []
|
200
219
|
@plural_name = controller_name.to_s.gsub('Controller', '').downcase.to_s
|
201
220
|
@action_name = action_name
|
202
221
|
@controller_name = controller_name
|
222
|
+
@react = options[:react] || {}
|
203
223
|
end
|
204
224
|
|
205
225
|
def call
|
@@ -212,7 +232,7 @@ module Rubee
|
|
212
232
|
private
|
213
233
|
|
214
234
|
def generate_model
|
215
|
-
model_file = File.join("app/models/#{@model_name}.rb")
|
235
|
+
model_file = File.join(Rubee::APP_ROOT, Rubee::LIB, "app/models/#{@model_name}.rb")
|
216
236
|
if File.exist?(model_file)
|
217
237
|
puts "Model #{@model_name} already exists. Remove it if you want to regenerate"
|
218
238
|
return
|
@@ -220,7 +240,7 @@ module Rubee
|
|
220
240
|
|
221
241
|
content = <<~RUBY
|
222
242
|
class #{@model_name.capitalize} < Rubee::SequelObject
|
223
|
-
attr_accessor
|
243
|
+
#{'attr_accessor' + @model_attributes.map { |hash| ":#{hash[:name]}" }.join(', ') unless @model_attributes.empty?}
|
224
244
|
end
|
225
245
|
RUBY
|
226
246
|
|
@@ -229,7 +249,7 @@ module Rubee
|
|
229
249
|
end
|
230
250
|
|
231
251
|
def generate_controller
|
232
|
-
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")
|
233
253
|
if File.exist?(controller_file)
|
234
254
|
puts "Controller #{@plural_name} already exists. Remove it if you want to regenerate"
|
235
255
|
return
|
@@ -248,22 +268,41 @@ module Rubee
|
|
248
268
|
end
|
249
269
|
|
250
270
|
def generate_view
|
251
|
-
|
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
|
+
|
252
295
|
if File.exist?(view_file)
|
253
|
-
puts "View #{
|
296
|
+
puts "View #{name} already exists. Remove it if you want to regenerate"
|
254
297
|
return
|
255
298
|
end
|
256
299
|
|
257
|
-
content = <<~ERB
|
258
|
-
<h1>#{@plural_name}_#{@action_name} View</h1>
|
259
|
-
ERB
|
260
|
-
|
261
300
|
File.open(view_file, 'w') { |file| file.write(content) }
|
262
|
-
color_puts("View #{
|
301
|
+
color_puts("View #{name} created", color: :green)
|
263
302
|
end
|
264
303
|
|
265
304
|
def generate_db_file
|
266
|
-
db_file = File.join("db/create_#{@plural_name}.rb")
|
305
|
+
db_file = File.join(Rubee::APP_ROOT, Rubee::LIB, "db/create_#{@plural_name}.rb")
|
267
306
|
if File.exist?(db_file)
|
268
307
|
puts "DB file for #{@plural_name} already exists. Remove it if you want to regenerate"
|
269
308
|
return
|
@@ -272,6 +311,11 @@ module Rubee
|
|
272
311
|
content = <<~RUBY
|
273
312
|
class Create#{@plural_name.capitalize}
|
274
313
|
def call
|
314
|
+
return if Rubee::SequelObject::DB.tables.include?(:#{@plural_name})
|
315
|
+
|
316
|
+
Rubee::SequelObject::DB.create_table(:#{@plural_name}) do
|
317
|
+
#{@model_attributes.map { |attribute| generate_sequel_schema(attribute) }.join("\n\t\t\t")}
|
318
|
+
end
|
275
319
|
end
|
276
320
|
end
|
277
321
|
RUBY
|
@@ -279,5 +323,40 @@ module Rubee
|
|
279
323
|
File.open(db_file, 'w') { |file| file.write(content) }
|
280
324
|
color_puts("DB file for #{@plural_name} created", color: :green)
|
281
325
|
end
|
326
|
+
|
327
|
+
def generate_sequel_schema(attribute)
|
328
|
+
type = attribute[:type]
|
329
|
+
name = if attribute[:name].is_a?(Array)
|
330
|
+
attribute[:name].map { |nom| ":#{nom}" }.join(", ").prepend('[') + ']'
|
331
|
+
else
|
332
|
+
":#{attribute[:name]}"
|
333
|
+
end
|
334
|
+
table = attribute[:table] || 'replace_with_table_name'
|
335
|
+
options = attribute[:options] || {}
|
336
|
+
|
337
|
+
lookup_hash = {
|
338
|
+
primary: "primary_key #{name}",
|
339
|
+
string: "String #{name}",
|
340
|
+
text: "String #{name}, text: true",
|
341
|
+
integer: "Integer #{name}",
|
342
|
+
date: "Date #{name}",
|
343
|
+
datetime: "DateTime #{name}",
|
344
|
+
time: "Time #{name}",
|
345
|
+
boolean: "TrueClass #{name}",
|
346
|
+
bigint: "Bignum #{name}",
|
347
|
+
decimal: "BigDecimal #{name}",
|
348
|
+
foreign_key: "foreign_key #{name}, :#{table}",
|
349
|
+
index: "index #{name}",
|
350
|
+
unique: "unique #",
|
351
|
+
}
|
352
|
+
|
353
|
+
statement = lookup_hash[type.to_sym]
|
354
|
+
|
355
|
+
options.keys.each do |key|
|
356
|
+
statement += ", #{key}: '#{options[key]}'"
|
357
|
+
end
|
358
|
+
|
359
|
+
statement
|
360
|
+
end
|
282
361
|
end
|
283
362
|
end
|
@@ -0,0 +1,190 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe 'Rubee::Generator' do
|
4
|
+
describe 'generates Sequel schema lines' do
|
5
|
+
after do
|
6
|
+
File.delete('lib/app/models/apple.rb') if File.exist?('lib/app/models/apple.rb')
|
7
|
+
File.delete('lib/db/create_apples.rb') if File.exist?('lib/db/create_apples.rb')
|
8
|
+
end
|
9
|
+
it 'for string with just name' do
|
10
|
+
generator = Rubee::Generator.new(nil, nil, nil, nil)
|
11
|
+
|
12
|
+
attribute = { name: 'something', type: :string }
|
13
|
+
|
14
|
+
text = generator.send(:generate_sequel_schema, attribute)
|
15
|
+
|
16
|
+
_(text).must_equal('String :something')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'for string name and options' do
|
20
|
+
generator = Rubee::Generator.new(nil, nil, nil, nil)
|
21
|
+
|
22
|
+
attribute = { name: 'something', type: :string, options: { curse: 'squirrel' } }
|
23
|
+
|
24
|
+
text = generator.send(:generate_sequel_schema, attribute)
|
25
|
+
|
26
|
+
_(text).must_equal("String :something, curse: 'squirrel'")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe 'generates Sequel file' do
|
31
|
+
after do
|
32
|
+
File.delete('lib/app/models/apple.rb') if File.exist?('lib/app/models/apple.rb')
|
33
|
+
File.delete('lib/db/create_apples.rb') if File.exist?('lib/db/create_apples.rb')
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'not without a model' do
|
37
|
+
generator = Rubee::Generator.new(nil, nil, nil, nil)
|
38
|
+
generator.call
|
39
|
+
|
40
|
+
_(File.exist?('lib/db/create_apples.rb')).must_equal false
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'with a model only' do
|
44
|
+
generator = Rubee::Generator.new('apple', nil, 'apples', nil)
|
45
|
+
generator.call
|
46
|
+
|
47
|
+
_(File.exist?('lib/db/create_apples.rb')).must_equal true
|
48
|
+
|
49
|
+
lines = File.readlines('lib/db/create_apples.rb').map(&:chomp).join("\n")
|
50
|
+
|
51
|
+
_(lines.include?('class CreateApples')).must_equal true
|
52
|
+
_(lines.include?('def call')).must_equal true
|
53
|
+
_(lines.include?('return if Rubee::SequelObject::DB.tables.include?(:apples)')).must_equal true
|
54
|
+
_(lines.include?('Rubee::SequelObject::DB.create_table(:apples) do')).must_equal true
|
55
|
+
_(lines.include?('String')).must_equal false
|
56
|
+
_(lines.include?('end')).must_equal true
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'with a model with attributes' do
|
60
|
+
generator = Rubee::Generator.new('apple', [{ name: 'title', type: :string }, {name: 'content', type: :text }], 'apples', nil)
|
61
|
+
generator.call
|
62
|
+
|
63
|
+
_(File.exist?('lib/db/create_apples.rb')).must_equal true
|
64
|
+
|
65
|
+
lines = File.readlines('lib/db/create_apples.rb').map(&:chomp).join("\n")
|
66
|
+
|
67
|
+
_(lines.include?('class CreateApples')).must_equal true
|
68
|
+
_(lines.include?('def call')).must_equal true
|
69
|
+
_(lines.include?('return if Rubee::SequelObject::DB.tables.include?(:apples)')).must_equal true
|
70
|
+
_(lines.include?('Rubee::SequelObject::DB.create_table(:apples) do')).must_equal true
|
71
|
+
_(lines.include?('String :title')).must_equal true
|
72
|
+
_(lines.include?('String :content, text: true')).must_equal true
|
73
|
+
_(lines.include?('end')).must_equal true
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'with a model with different attributes' do
|
77
|
+
generator = Rubee::Generator.new('apple', [{name: 'id', type: :bigint}, {name: 'colour', type: :string }, {name: 'weight', type: :integer }], 'apples', nil)
|
78
|
+
generator.call
|
79
|
+
|
80
|
+
_(File.exist?('lib/db/create_apples.rb')).must_equal true
|
81
|
+
|
82
|
+
lines = File.readlines('lib/db/create_apples.rb').map(&:chomp).join("\n")
|
83
|
+
|
84
|
+
_(lines.include?('class CreateApples')).must_equal true
|
85
|
+
_(lines.include?('def call')).must_equal true
|
86
|
+
_(lines.include?('return if Rubee::SequelObject::DB.tables.include?(:apples)')).must_equal true
|
87
|
+
_(lines.include?('Rubee::SequelObject::DB.create_table(:apples) do')).must_equal true
|
88
|
+
_(lines.include?('Bignum :id')).must_equal true
|
89
|
+
_(lines.include?('String :colour')).must_equal true
|
90
|
+
_(lines.include?('Integer :weight')).must_equal true
|
91
|
+
_(lines.include?('end')).must_equal true
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'with a model with an attribute with multiple names' do
|
95
|
+
generator = Rubee::Generator.new('apple', [{ name: ['blue_id', 'shoe_id'], type: :foreign_key, table: 'blue_and_shoe_join_tb' }], 'apples', nil)
|
96
|
+
generator.call
|
97
|
+
|
98
|
+
_(File.exist?('lib/db/create_apples.rb')).must_equal true
|
99
|
+
|
100
|
+
lines = File.readlines('lib/db/create_apples.rb').map(&:chomp).join("\n")
|
101
|
+
|
102
|
+
_(lines.include?('class CreateApples')).must_equal true
|
103
|
+
_(lines.include?('def call')).must_equal true
|
104
|
+
_(lines.include?('return if Rubee::SequelObject::DB.tables.include?(:apples)')).must_equal true
|
105
|
+
_(lines.include?('Rubee::SequelObject::DB.create_table(:apples) do')).must_equal true
|
106
|
+
_(lines.include?('foreign_key [:blue_id, :shoe_id]')).must_equal true
|
107
|
+
_(lines.include?(':blue_and_shoe_join_tb')).must_equal true
|
108
|
+
_(lines.include?('end')).must_equal true
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'with a model with a foreign_key without table' do
|
112
|
+
generator = Rubee::Generator.new('apple', [{ name: 'blue_id', type: :foreign_key }], 'apples', nil)
|
113
|
+
generator.call
|
114
|
+
|
115
|
+
_(File.exist?('lib/db/create_apples.rb')).must_equal true
|
116
|
+
|
117
|
+
lines = File.readlines('lib/db/create_apples.rb').map(&:chomp).join("\n")
|
118
|
+
|
119
|
+
_(lines.include?('class CreateApples')).must_equal true
|
120
|
+
_(lines.include?('def call')).must_equal true
|
121
|
+
_(lines.include?('return if Rubee::SequelObject::DB.tables.include?(:apples)')).must_equal true
|
122
|
+
_(lines.include?('Rubee::SequelObject::DB.create_table(:apples) do')).must_equal true
|
123
|
+
_(lines.include?('foreign_key :blue_id')).must_equal true
|
124
|
+
_(lines.include?(':replace_with_table_name')).must_equal true
|
125
|
+
_(lines.include?('end')).must_equal true
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
describe 'generates Model file' do
|
130
|
+
after do
|
131
|
+
File.delete('lib/app/models/apple.rb') if File.exist?('lib/app/models/apple.rb')
|
132
|
+
File.delete('lib/db/create_apples.rb') if File.exist?('lib/db/create_apples.rb')
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'not without a model' do
|
136
|
+
generator = Rubee::Generator.new(nil, nil, nil, nil)
|
137
|
+
generator.call
|
138
|
+
|
139
|
+
_(File.exist?('lib/app/models/apple.rb')).must_equal false
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'with a model only' do
|
143
|
+
generator = Rubee::Generator.new('apple', nil, 'apples', nil)
|
144
|
+
generator.call
|
145
|
+
|
146
|
+
_(File.exist?('lib/app/models/apple.rb')).must_equal true
|
147
|
+
|
148
|
+
lines = File.readlines('lib/app/models/apple.rb').map(&:chomp).join("\n")
|
149
|
+
|
150
|
+
_(lines.include?('class Apple < Rubee::SequelObject')).must_equal true
|
151
|
+
_(lines.include?('attr_accessor')).must_equal false
|
152
|
+
_(lines.include?('end')).must_equal true
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'with a model with attributes' do
|
156
|
+
generator = Rubee::Generator.new('apple', [{ name: 'title', type: :string }, {name: 'content', type: :text }], 'apples', nil)
|
157
|
+
generator.call
|
158
|
+
|
159
|
+
_(File.exist?('lib/app/models/apple.rb')).must_equal true
|
160
|
+
|
161
|
+
lines = File.readlines('lib/app/models/apple.rb').map(&:chomp).join("\n")
|
162
|
+
|
163
|
+
_(lines.include?('class Apple < Rubee::SequelObject')).must_equal true
|
164
|
+
_(lines.include?('attr_accessor')).must_equal true
|
165
|
+
_(lines.include?(':title, :content')).must_equal true
|
166
|
+
_(lines.include?('end')).must_equal true
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'with a model with different attributes' do
|
170
|
+
generator = Rubee::Generator.new('apple', [{name: 'id', type: :bigInt}, {name: 'colour', type: :string }, {name: 'weight', type: :integer }], 'apples', nil)
|
171
|
+
generator.call
|
172
|
+
|
173
|
+
_(File.exist?('lib/app/models/apple.rb')).must_equal true
|
174
|
+
|
175
|
+
lines = File.readlines('lib/app/models/apple.rb').map(&:chomp).join("\n")
|
176
|
+
|
177
|
+
_(lines.include?('class Apple < Rubee::SequelObject')).must_equal true
|
178
|
+
_(lines.include?('attr_accessor')).must_equal true
|
179
|
+
_(lines.include?(':id, :colour, :weight')).must_equal true
|
180
|
+
_(lines.include?('end')).must_equal true
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
describe 'generates View file' do
|
185
|
+
|
186
|
+
end
|
187
|
+
|
188
|
+
describe 'generates Controller file' do
|
189
|
+
end
|
190
|
+
end
|
data/lib/tests/rubeeapp_test.rb
CHANGED
@@ -19,4 +19,16 @@ class RubeeAppTest < Minitest::Test
|
|
19
19
|
|
20
20
|
assert_equal(404, last_response.status)
|
21
21
|
end
|
22
|
+
|
23
|
+
def test_react_home
|
24
|
+
Rubee::Configuration.setup(env = :test) { _1.react = { on: true, env: } }
|
25
|
+
|
26
|
+
get('/home')
|
27
|
+
|
28
|
+
assert_equal(200, last_response.status)
|
29
|
+
assert_includes(last_response.body, '<div id="app">')
|
30
|
+
assert_includes(last_response.body, 'bundle.js')
|
31
|
+
|
32
|
+
Rubee::Configuration.setup(env = :test) { _1.react = { on: false, env: } }
|
33
|
+
end
|
22
34
|
end
|
data/lib/tests/test.db
CHANGED
Binary file
|
@@ -153,8 +153,13 @@ describe 'User model' do
|
|
153
153
|
User.destroy_all(cascade: true)
|
154
154
|
end
|
155
155
|
|
156
|
+
before do
|
157
|
+
User.destroy_all(cascade: true)
|
158
|
+
end
|
159
|
+
|
156
160
|
describe 'when there are records' do
|
157
161
|
it 'returns all records' do
|
162
|
+
# skip "This is Flaky test that blcoks dev, need to be fixed"
|
158
163
|
user = User.new(email: 'ok-test@test.com', password: '123')
|
159
164
|
user2 = User.new(email: 'ok-test2@test.com', password: '123')
|
160
165
|
user.save
|