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.
Files changed (139) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-version +1 -0
  3. data/CHANGELOG.md +5 -0
  4. data/CODE_OF_CONDUCT.md +84 -0
  5. data/Gemfile +8 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +49 -0
  8. data/Rakefile +4 -0
  9. data/bin/console +15 -0
  10. data/bin/setup +8 -0
  11. data/lib/.env +4 -0
  12. data/lib/.rspec +1 -0
  13. data/lib/.rubocop.yml +288 -0
  14. data/lib/.rubocop_disabled.yml +31 -0
  15. data/lib/.rubocop_enabled.yml +0 -0
  16. data/lib/Capfile +46 -0
  17. data/lib/Gemfile +51 -0
  18. data/lib/config/database.yml +24 -0
  19. data/lib/config/deploy/development.rb +85 -0
  20. data/lib/config/deploy/production.rb +63 -0
  21. data/lib/config/deploy/staging.rb +56 -0
  22. data/lib/config/deploy.rb +7 -0
  23. data/lib/config/initializers/devise.rb +315 -0
  24. data/lib/config/locales/devise.en.yml +65 -0
  25. data/lib/config/locales/en.yml +33 -0
  26. data/lib/config/locales/errors.en.yml +57 -0
  27. data/lib/config/routes.rb +26 -0
  28. data/lib/config/settings.yml +22 -0
  29. data/lib/controllers/api/admin/base_controller.rb +5 -0
  30. data/lib/controllers/api/admin/sessions_controller.rb +39 -0
  31. data/lib/controllers/api/admin/users_controller.rb +9 -0
  32. data/lib/controllers/api/v1/base_controller.rb +5 -0
  33. data/lib/controllers/api/v1/sessions_controller.rb +39 -0
  34. data/lib/controllers/api/v1/users_controller.rb +7 -0
  35. data/lib/controllers/application_controller.rb +30 -0
  36. data/lib/controllers/concerns/.DS_Store +0 -0
  37. data/lib/controllers/concerns/.keep +0 -0
  38. data/lib/controllers/concerns/base_concern.rb +9 -0
  39. data/lib/controllers/concerns/json_renderer.rb +76 -0
  40. data/lib/controllers/concerns/pagination.rb +32 -0
  41. data/lib/controllers/concerns/rescue_exception.rb +73 -0
  42. data/lib/db/migrate/20220721091426_devise_create_users.rb +46 -0
  43. data/lib/db/migrate/20230113072522_create_devices.rb +13 -0
  44. data/lib/db/migrate/20230227135020_create_posts.rb +15 -0
  45. data/lib/db/migrate/20230303165318_devise_create_admins.rb +46 -0
  46. data/lib/db/schema.rb +62 -0
  47. data/lib/db/seeds.rb +7 -0
  48. data/lib/generators/n_base_rails/install_generator.rb +42 -0
  49. data/lib/lib/.DS_Store +0 -0
  50. data/lib/lib/active_record_validation/error.rb +33 -0
  51. data/lib/lib/api/error.rb +63 -0
  52. data/lib/lib/json_web_token.rb +13 -0
  53. data/lib/log/.keep +0 -0
  54. data/lib/log/capistrano.log +28367 -0
  55. data/lib/log/development.log +30201 -0
  56. data/lib/log/test.log +11768 -0
  57. data/lib/models/admin.rb +10 -0
  58. data/lib/models/application_record.rb +5 -0
  59. data/lib/models/concerns/.keep +0 -0
  60. data/lib/models/device.rb +11 -0
  61. data/lib/models/post.rb +5 -0
  62. data/lib/models/user.rb +9 -0
  63. data/lib/n_base_rails/version.rb +5 -0
  64. data/lib/n_base_rails.rb +9 -0
  65. data/lib/public/404.html +67 -0
  66. data/lib/public/422.html +67 -0
  67. data/lib/public/500.html +66 -0
  68. data/lib/public/apple-touch-icon-precomposed.png +0 -0
  69. data/lib/public/apple-touch-icon.png +0 -0
  70. data/lib/public/docs/api/admin/definitions/users.yaml +15 -0
  71. data/lib/public/docs/api/admin/paths/index.yaml +29 -0
  72. data/lib/public/docs/api/admin/paths/sessions.yaml +121 -0
  73. data/lib/public/docs/api/admin/paths/users.yaml +39 -0
  74. data/lib/public/docs/api/shared/meta_infos.yaml +41 -0
  75. data/lib/public/docs/api/shared/unauthorized_response.yaml +31 -0
  76. data/lib/public/docs/api/v1/definitions/users.yaml +13 -0
  77. data/lib/public/docs/api/v1/paths/example.yaml +431 -0
  78. data/lib/public/docs/api/v1/paths/index.yaml +28 -0
  79. data/lib/public/docs/api/v1/paths/sessions.yaml +121 -0
  80. data/lib/public/docs/api/v1/paths/users.yaml +24 -0
  81. data/lib/public/favicon.ico +0 -0
  82. data/lib/public/robots.txt +1 -0
  83. data/lib/public/swagger/admin/admin-swagger-initializer.js +24 -0
  84. data/lib/public/swagger/admin/admin.html +19 -0
  85. data/lib/public/swagger/favicon-16x16.png +0 -0
  86. data/lib/public/swagger/favicon-32x32.png +0 -0
  87. data/lib/public/swagger/index.css +16 -0
  88. data/lib/public/swagger/oauth2-redirect.html +79 -0
  89. data/lib/public/swagger/swagger-ui-bundle.js +3 -0
  90. data/lib/public/swagger/swagger-ui-bundle.js.map +1 -0
  91. data/lib/public/swagger/swagger-ui-es-bundle-core.js +2 -0
  92. data/lib/public/swagger/swagger-ui-es-bundle-core.js.map +1 -0
  93. data/lib/public/swagger/swagger-ui-es-bundle.js +3 -0
  94. data/lib/public/swagger/swagger-ui-es-bundle.js.map +1 -0
  95. data/lib/public/swagger/swagger-ui-standalone-preset.js +3 -0
  96. data/lib/public/swagger/swagger-ui-standalone-preset.js.map +1 -0
  97. data/lib/public/swagger/swagger-ui.css +4 -0
  98. data/lib/public/swagger/swagger-ui.css.map +1 -0
  99. data/lib/public/swagger/swagger-ui.js +2 -0
  100. data/lib/public/swagger/swagger-ui.js.map +1 -0
  101. data/lib/public/swagger/v1/app.html +19 -0
  102. data/lib/public/swagger/v1/swagger-initializer.js +25 -0
  103. data/lib/serializers/.DS_Store +0 -0
  104. data/lib/serializers/action_not_allowed_serializer.rb +18 -0
  105. data/lib/serializers/api/.DS_Store +0 -0
  106. data/lib/serializers/api/admin/base_serializer.rb +14 -0
  107. data/lib/serializers/api/admin/hash_serializer.rb +22 -0
  108. data/lib/serializers/api/admin/user_serializer.rb +9 -0
  109. data/lib/serializers/api/v1/base_serializer.rb +14 -0
  110. data/lib/serializers/api/v1/hash_serializer.rb +22 -0
  111. data/lib/serializers/api/v1/user_serializer.rb +9 -0
  112. data/lib/serializers/record_not_found_serializer.rb +28 -0
  113. data/lib/serializers/validation_error_serializer.rb +45 -0
  114. data/lib/services/api/admin/generate_access_token_service.rb +34 -0
  115. data/lib/services/api/admin/generate_refresh_token_service.rb +24 -0
  116. data/lib/services/api/authorize_request_service.rb +35 -0
  117. data/lib/services/api/v1/generate_access_token_service.rb +34 -0
  118. data/lib/services/api/v1/generate_refresh_token_service.rb +24 -0
  119. data/lib/spec/controllers/api/admin/sessions_controller_spec.rb +125 -0
  120. data/lib/spec/controllers/api/admin/users_controller_spec.rb +35 -0
  121. data/lib/spec/controllers/api/v1/sessions_controller_spec.rb +125 -0
  122. data/lib/spec/controllers/api/v1/users_controller_spec.rb +23 -0
  123. data/lib/spec/factories/admins.rb +8 -0
  124. data/lib/spec/factories/devices.rb +7 -0
  125. data/lib/spec/factories/posts.rb +6 -0
  126. data/lib/spec/factories/users.rb +8 -0
  127. data/lib/spec/helpers/request_helpers.rb +7 -0
  128. data/lib/spec/models/admin_spec.rb +9 -0
  129. data/lib/spec/models/device_spec.rb +13 -0
  130. data/lib/spec/models/post_spec.rb +6 -0
  131. data/lib/spec/models/user_spec.rb +9 -0
  132. data/lib/spec/rails_helper.rb +66 -0
  133. data/lib/spec/serializers/api/admin/user_serializer.rb +20 -0
  134. data/lib/spec/serializers/api/v1/user_serializer.rb +20 -0
  135. data/lib/spec/spec_helper.rb +94 -0
  136. data/lib/spec/supports/shared_context.rb +19 -0
  137. data/lib/spec/supports/shared_example/admin_authentication.rb +47 -0
  138. data/lib/spec/supports/shared_example/user_authentication.rb +47 -0
  139. 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