n_base_rails 0.1.1
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 +7 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +8 -0
- data/LICENSE.txt +21 -0
- data/README.md +49 -0
- data/Rakefile +4 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/lib/.env +4 -0
- data/lib/.rspec +1 -0
- data/lib/.rubocop.yml +288 -0
- data/lib/.rubocop_disabled.yml +31 -0
- data/lib/.rubocop_enabled.yml +0 -0
- data/lib/Capfile +46 -0
- data/lib/Gemfile +51 -0
- data/lib/config/database.yml +24 -0
- data/lib/config/deploy/development.rb +85 -0
- data/lib/config/deploy/production.rb +63 -0
- data/lib/config/deploy/staging.rb +56 -0
- data/lib/config/deploy.rb +7 -0
- data/lib/config/initializers/devise.rb +315 -0
- data/lib/config/locales/devise.en.yml +65 -0
- data/lib/config/locales/en.yml +33 -0
- data/lib/config/locales/errors.en.yml +57 -0
- data/lib/config/routes.rb +26 -0
- data/lib/config/settings.yml +22 -0
- data/lib/controllers/api/admin/base_controller.rb +5 -0
- data/lib/controllers/api/admin/sessions_controller.rb +39 -0
- data/lib/controllers/api/admin/users_controller.rb +9 -0
- data/lib/controllers/api/v1/base_controller.rb +5 -0
- data/lib/controllers/api/v1/sessions_controller.rb +39 -0
- data/lib/controllers/api/v1/users_controller.rb +7 -0
- data/lib/controllers/application_controller.rb +30 -0
- data/lib/controllers/concerns/.DS_Store +0 -0
- data/lib/controllers/concerns/.keep +0 -0
- data/lib/controllers/concerns/base_concern.rb +9 -0
- data/lib/controllers/concerns/json_renderer.rb +76 -0
- data/lib/controllers/concerns/pagination.rb +32 -0
- data/lib/controllers/concerns/rescue_exception.rb +73 -0
- data/lib/db/migrate/20220721091426_devise_create_users.rb +46 -0
- data/lib/db/migrate/20230113072522_create_devices.rb +13 -0
- data/lib/db/migrate/20230227135020_create_posts.rb +15 -0
- data/lib/db/migrate/20230303165318_devise_create_admins.rb +46 -0
- data/lib/db/schema.rb +62 -0
- data/lib/db/seeds.rb +7 -0
- data/lib/generators/n_base_rails/install_generator.rb +42 -0
- data/lib/lib/.DS_Store +0 -0
- data/lib/lib/active_record_validation/error.rb +33 -0
- data/lib/lib/api/error.rb +63 -0
- data/lib/lib/json_web_token.rb +13 -0
- data/lib/log/.keep +0 -0
- data/lib/log/capistrano.log +28367 -0
- data/lib/log/development.log +30201 -0
- data/lib/log/test.log +11768 -0
- data/lib/models/admin.rb +10 -0
- data/lib/models/application_record.rb +5 -0
- data/lib/models/concerns/.keep +0 -0
- data/lib/models/device.rb +11 -0
- data/lib/models/post.rb +5 -0
- data/lib/models/user.rb +9 -0
- data/lib/n_base_rails/version.rb +5 -0
- data/lib/n_base_rails.rb +9 -0
- data/lib/public/404.html +67 -0
- data/lib/public/422.html +67 -0
- data/lib/public/500.html +66 -0
- data/lib/public/apple-touch-icon-precomposed.png +0 -0
- data/lib/public/apple-touch-icon.png +0 -0
- data/lib/public/docs/api/admin/definitions/users.yaml +15 -0
- data/lib/public/docs/api/admin/paths/index.yaml +29 -0
- data/lib/public/docs/api/admin/paths/sessions.yaml +121 -0
- data/lib/public/docs/api/admin/paths/users.yaml +39 -0
- data/lib/public/docs/api/shared/meta_infos.yaml +41 -0
- data/lib/public/docs/api/shared/unauthorized_response.yaml +31 -0
- data/lib/public/docs/api/v1/definitions/users.yaml +13 -0
- data/lib/public/docs/api/v1/paths/example.yaml +431 -0
- data/lib/public/docs/api/v1/paths/index.yaml +28 -0
- data/lib/public/docs/api/v1/paths/sessions.yaml +121 -0
- data/lib/public/docs/api/v1/paths/users.yaml +24 -0
- data/lib/public/favicon.ico +0 -0
- data/lib/public/robots.txt +1 -0
- data/lib/public/swagger/admin/admin-swagger-initializer.js +24 -0
- data/lib/public/swagger/admin/admin.html +19 -0
- data/lib/public/swagger/favicon-16x16.png +0 -0
- data/lib/public/swagger/favicon-32x32.png +0 -0
- data/lib/public/swagger/index.css +16 -0
- data/lib/public/swagger/oauth2-redirect.html +79 -0
- data/lib/public/swagger/swagger-ui-bundle.js +3 -0
- data/lib/public/swagger/swagger-ui-bundle.js.map +1 -0
- data/lib/public/swagger/swagger-ui-es-bundle-core.js +2 -0
- data/lib/public/swagger/swagger-ui-es-bundle-core.js.map +1 -0
- data/lib/public/swagger/swagger-ui-es-bundle.js +3 -0
- data/lib/public/swagger/swagger-ui-es-bundle.js.map +1 -0
- data/lib/public/swagger/swagger-ui-standalone-preset.js +3 -0
- data/lib/public/swagger/swagger-ui-standalone-preset.js.map +1 -0
- data/lib/public/swagger/swagger-ui.css +4 -0
- data/lib/public/swagger/swagger-ui.css.map +1 -0
- data/lib/public/swagger/swagger-ui.js +2 -0
- data/lib/public/swagger/swagger-ui.js.map +1 -0
- data/lib/public/swagger/v1/app.html +19 -0
- data/lib/public/swagger/v1/swagger-initializer.js +25 -0
- data/lib/serializers/.DS_Store +0 -0
- data/lib/serializers/action_not_allowed_serializer.rb +18 -0
- data/lib/serializers/api/.DS_Store +0 -0
- data/lib/serializers/api/admin/base_serializer.rb +14 -0
- data/lib/serializers/api/admin/hash_serializer.rb +22 -0
- data/lib/serializers/api/admin/user_serializer.rb +9 -0
- data/lib/serializers/api/v1/base_serializer.rb +14 -0
- data/lib/serializers/api/v1/hash_serializer.rb +22 -0
- data/lib/serializers/api/v1/user_serializer.rb +9 -0
- data/lib/serializers/record_not_found_serializer.rb +28 -0
- data/lib/serializers/validation_error_serializer.rb +45 -0
- data/lib/services/api/admin/generate_access_token_service.rb +34 -0
- data/lib/services/api/admin/generate_refresh_token_service.rb +24 -0
- data/lib/services/api/authorize_request_service.rb +35 -0
- data/lib/services/api/v1/generate_access_token_service.rb +34 -0
- data/lib/services/api/v1/generate_refresh_token_service.rb +24 -0
- data/lib/spec/controllers/api/admin/sessions_controller_spec.rb +125 -0
- data/lib/spec/controllers/api/admin/users_controller_spec.rb +35 -0
- data/lib/spec/controllers/api/v1/sessions_controller_spec.rb +125 -0
- data/lib/spec/controllers/api/v1/users_controller_spec.rb +23 -0
- data/lib/spec/factories/admins.rb +8 -0
- data/lib/spec/factories/devices.rb +7 -0
- data/lib/spec/factories/posts.rb +6 -0
- data/lib/spec/factories/users.rb +8 -0
- data/lib/spec/helpers/request_helpers.rb +7 -0
- data/lib/spec/models/admin_spec.rb +9 -0
- data/lib/spec/models/device_spec.rb +13 -0
- data/lib/spec/models/post_spec.rb +6 -0
- data/lib/spec/models/user_spec.rb +9 -0
- data/lib/spec/rails_helper.rb +66 -0
- data/lib/spec/serializers/api/admin/user_serializer.rb +20 -0
- data/lib/spec/serializers/api/v1/user_serializer.rb +20 -0
- data/lib/spec/spec_helper.rb +94 -0
- data/lib/spec/supports/shared_context.rb +19 -0
- data/lib/spec/supports/shared_example/admin_authentication.rb +47 -0
- data/lib/spec/supports/shared_example/user_authentication.rb +47 -0
- metadata +181 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
|
|
2
|
+
require 'rails/generators/base'
|
|
3
|
+
|
|
4
|
+
module NBaseRails
|
|
5
|
+
module Generators
|
|
6
|
+
class InstallGenerator < Rails::Generators::Base
|
|
7
|
+
source_root File.expand_path("../../../", __FILE__)
|
|
8
|
+
|
|
9
|
+
def initializer_file
|
|
10
|
+
directory('controllers', 'app/controllers', force: true)
|
|
11
|
+
directory('models', 'app/models', force: true)
|
|
12
|
+
directory('services', 'app/services', force: true)
|
|
13
|
+
directory('serializers', 'app/serializers', force: true)
|
|
14
|
+
directory('config', 'config', force: true)
|
|
15
|
+
directory('lib', 'lib', force: true)
|
|
16
|
+
directory('log', 'log', force: true)
|
|
17
|
+
directory('db', 'db', force: true)
|
|
18
|
+
directory('public', 'public', force: true)
|
|
19
|
+
directory('spec', 'spec', force: true)
|
|
20
|
+
copy_file('.env', '.env')
|
|
21
|
+
copy_file('.rspec', '.rspec')
|
|
22
|
+
copy_file('.rubocop_disabled.yml', '.rubocop_disabled.yml')
|
|
23
|
+
copy_file('.rubocop_enabled.yml', '.rubocop_enabled.yml')
|
|
24
|
+
copy_file('.rubocop.yml', '.rubocop.yml')
|
|
25
|
+
copy_file('Capfile', 'Capfile')
|
|
26
|
+
copy_file('Gemfile', 'Gemfile', force: true)
|
|
27
|
+
insert_into_file 'config/environments/development.rb', before: /^end/ do
|
|
28
|
+
" config.hosts << ENV.fetch('ALLOW_HOST')\n"
|
|
29
|
+
end
|
|
30
|
+
insert_into_file 'config/application.rb', before: /\n\s*end\n\s*end\n\z/ do
|
|
31
|
+
"
|
|
32
|
+
config.autoload_paths << Rails.root.join('lib')
|
|
33
|
+
config.time_zone = 'Asia/Tokyo'
|
|
34
|
+
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
|
|
35
|
+
config.i18n.available_locales = [:en]
|
|
36
|
+
config.i18n.default_locale = :en
|
|
37
|
+
"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
data/lib/lib/.DS_Store
ADDED
|
Binary file
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module ActiveRecordValidation
|
|
4
|
+
class Error
|
|
5
|
+
attr_reader :record
|
|
6
|
+
|
|
7
|
+
def initialize(record)
|
|
8
|
+
@record = record
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def serialize(full_message: true)
|
|
12
|
+
return unless record
|
|
13
|
+
|
|
14
|
+
full_messages = record.errors.to_hash full_message
|
|
15
|
+
record.errors.details.map do |field, details|
|
|
16
|
+
detail = details.first
|
|
17
|
+
message = full_messages[field].first
|
|
18
|
+
convert_to_serializer field, detail, message
|
|
19
|
+
end.flatten
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def convert_to_serializer(field, detail, message)
|
|
23
|
+
ValidationErrorSerializer.new(record, field, detail, message).serialize
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def to_hash
|
|
27
|
+
{
|
|
28
|
+
success: false,
|
|
29
|
+
errors: serialize
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Api
|
|
4
|
+
class BaseError < StandardError
|
|
5
|
+
attr_reader :code, :message
|
|
6
|
+
|
|
7
|
+
def initialize(error)
|
|
8
|
+
@code = error[:code]
|
|
9
|
+
@message = error[:message]
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def serialize
|
|
13
|
+
[{code: @code, message: @message}]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_hash
|
|
17
|
+
{
|
|
18
|
+
success: false,
|
|
19
|
+
errors: serialize
|
|
20
|
+
}
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class ExecuteFailed < BaseError
|
|
25
|
+
attr_reader :type, :file_path, :i18n_scope
|
|
26
|
+
|
|
27
|
+
def initialize(error_detail)
|
|
28
|
+
error = I18n.t error_detail, scope: %i[errors action]
|
|
29
|
+
@code = error[:code]
|
|
30
|
+
@message = error[:message]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
module Error
|
|
35
|
+
# TODO: define custom error class (extends the BaseError) here.
|
|
36
|
+
class Runtime < ExecuteFailed
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class RecordNotFound < BaseError
|
|
40
|
+
attr_reader :error
|
|
41
|
+
|
|
42
|
+
def initialize(error)
|
|
43
|
+
@error = error
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def to_hash
|
|
47
|
+
RecordNotFoundSerializer.new(error).serialize
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class ActionNotAllowed < BaseError
|
|
52
|
+
attr_reader :error
|
|
53
|
+
|
|
54
|
+
def initialize(error)
|
|
55
|
+
@error = error
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def to_hash
|
|
59
|
+
ActionNotAllowedSerializer.new(error).serialize
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module JsonWebToken
|
|
4
|
+
RAILS_SECRET = ENV["RAILS_SECRET_KEY"]
|
|
5
|
+
|
|
6
|
+
def self.encode(payload)
|
|
7
|
+
JWT.encode(payload, RAILS_SECRET)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.decode(payload)
|
|
11
|
+
JWT.decode(payload, RAILS_SECRET)[0].transform_keys(&:to_sym)
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/log/.keep
ADDED
|
File without changes
|