pixelforce_recipes 3.9.2 → 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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/app/controllers/admin/api/admin_base_controller.rb +97 -0
  4. data/app/controllers/admin/api/v1/app_versions_controller.rb +28 -0
  5. data/app/controllers/admin/api/v1/available_modules_controller.rb +22 -0
  6. data/app/controllers/admin/api/v1/users_controller.rb +66 -0
  7. data/app/controllers/api/base_controller.rb +74 -0
  8. data/app/controllers/api/v1/health_check_controller.rb +11 -0
  9. data/app/controllers/application_controller.rb +10 -0
  10. data/app/controllers/auth/passwords_controller.rb +7 -0
  11. data/app/controllers/concerns/.keep +0 -0
  12. data/app/controllers/concerns/exception_handler.rb +54 -0
  13. data/app/controllers/concerns/request_header_handler.rb +35 -0
  14. data/app/controllers/concerns/response_handler.rb +31 -0
  15. data/app/controllers/pages_controller.rb +36 -0
  16. data/app/controllers/users_controller.rb +3 -0
  17. data/lib/pixelforce_recipes/engine.rb +5 -0
  18. data/lib/pixelforce_recipes/railtie.rb +4 -0
  19. data/lib/pixelforce_recipes/version.rb +1 -1
  20. data/lib/pixelforce_recipes.rb +7 -9
  21. data/pixelforce_recipes.gemspec +1 -1
  22. data/recipes.rb +4 -0
  23. metadata +46 -36
  24. data/lib/pixelforce_recipes/legacy_recipes/base.rb +0 -24
  25. data/lib/pixelforce_recipes/legacy_recipes/logrotate.rb +0 -14
  26. data/lib/pixelforce_recipes/legacy_recipes/puma.rb +0 -26
  27. data/lib/pixelforce_recipes/legacy_recipes/resque.rb +0 -22
  28. data/lib/pixelforce_recipes/legacy_recipes/resque_scheduler.rb +0 -22
  29. data/lib/pixelforce_recipes/legacy_recipes/sidekiq.rb +0 -23
  30. data/lib/pixelforce_recipes/legacy_recipes/unicorn.rb +0 -29
  31. /data/lib/{pixelforce_recipes/capistrano_3_recipes → recipes/capistrano_recipes}/base.rb +0 -0
  32. /data/lib/{pixelforce_recipes/capistrano_3_recipes → recipes/capistrano_recipes}/elbas.rb +0 -0
  33. /data/lib/{pixelforce_recipes/capistrano_3_recipes → recipes/capistrano_recipes}/logrotate.rb +0 -0
  34. /data/lib/{pixelforce_recipes/capistrano_3_recipes → recipes/capistrano_recipes}/puma.rb +0 -0
  35. /data/lib/{pixelforce_recipes/capistrano_3_recipes → recipes/capistrano_recipes}/resque.rb +0 -0
  36. /data/lib/{pixelforce_recipes/capistrano_3_recipes → recipes/capistrano_recipes}/resque_scheduler.rb +0 -0
  37. /data/lib/{pixelforce_recipes/capistrano_3_recipes → recipes/capistrano_recipes}/sidekiq.rb +0 -0
  38. /data/lib/{pixelforce_recipes/capistrano_3_recipes → recipes/capistrano_recipes}/supervisor.rb +0 -0
  39. /data/lib/{pixelforce_recipes/capistrano_3_recipes → recipes/capistrano_recipes}/unicorn.rb +0 -0
  40. /data/lib/{pixelforce_recipes → recipes}/templates/logrotate.erb +0 -0
  41. /data/lib/{pixelforce_recipes → recipes}/templates/nginx_config.erb +0 -0
  42. /data/lib/{pixelforce_recipes → recipes}/templates/nginx_puma_config.erb +0 -0
  43. /data/lib/{pixelforce_recipes → recipes}/templates/puma.rb.erb +0 -0
  44. /data/lib/{pixelforce_recipes → recipes}/templates/puma_systemd.erb +0 -0
  45. /data/lib/{pixelforce_recipes → recipes}/templates/resque_init.erb +0 -0
  46. /data/lib/{pixelforce_recipes → recipes}/templates/resque_scheduler_init.erb +0 -0
  47. /data/lib/{pixelforce_recipes → recipes}/templates/resque_scheduler_supervisor.erb +0 -0
  48. /data/lib/{pixelforce_recipes → recipes}/templates/resque_supervisor.erb +0 -0
  49. /data/lib/{pixelforce_recipes → recipes}/templates/sidekiq_init.erb +0 -0
  50. /data/lib/{pixelforce_recipes → recipes}/templates/sidekiq_supervisor.erb +0 -0
  51. /data/lib/{pixelforce_recipes → recipes}/templates/sidekiq_systemd.erb +0 -0
  52. /data/lib/{pixelforce_recipes → recipes}/templates/supervisor.erb +0 -0
  53. /data/lib/{pixelforce_recipes → recipes}/templates/unicorn_init.erb +0 -0
  54. /data/lib/{pixelforce_recipes → recipes}/templates/unicorn_supervisor.erb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a764d72cb9b7327a363e11a1d7072a024210e7b1982caf2b1f250947ba9247f5
4
- data.tar.gz: b6b145951cabd3a24d6f8b5fcabd40d9f5113855d2278554a89ed8b4a7bd7f63
3
+ metadata.gz: fdb07c77204b3a75b2c73d4322c0d27fdfc2937cafe090283d190645d7616346
4
+ data.tar.gz: b28395f2db9c1a2e049cb666a6fb54c4e5e099f15fcbdb81399c98c22678ac42
5
5
  SHA512:
6
- metadata.gz: 022a8ee0b5db8f7e1b75cf9f5c7b3dc11492fd72bd5acc6d94ea4826543a5310996c97f62a5a7e491291b169fb57f0ad4c3417dc2c83eb373fd57546cb8c1bb1
7
- data.tar.gz: e958d348959954184ee4e85e9d6e9e1a7dc20b0bc5b01a8b7d401a082638709a137c9731c5bfcf989f0d1baf73d07d7c5cdb15f1fc750e5f77f7664168b706f1
6
+ metadata.gz: c126f24f3eeec6f4426a21ae7cb0808607c6e37d5044e305ead5cf358232c4c024dbdc6edd70248f24ee7a66d4d1722cccc7b43086487edfd6b0c1a05175dc22
7
+ data.tar.gz: e93d0a39728da785197ef83ebe7937061e5b35ac5f4b5e3df76ce5dffc44682b406587de2afe9541e24fcffdc85fd2218657c33fe068424b3735ab7323739386
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  /pkg
2
+ .DS_Store
@@ -0,0 +1,97 @@
1
+ module Admin
2
+ module Api
3
+ class AdminBaseController < ApplicationController
4
+ include DeviseTokenAuth::Concerns::SetUserByToken
5
+ include ResponseHandler
6
+ include RequestHeaderHandler
7
+ include ExceptionHandler
8
+
9
+ before_action :authenticate_admin_user!
10
+ before_action :format_params
11
+ before_action :prepare_pagination_params
12
+
13
+ def authenticate_admin_user!
14
+ authenticate_admin_api_v1_admin_user!
15
+ end
16
+
17
+ private
18
+
19
+ def render_error(status, message, validation_errors = nil)
20
+ errors = {}
21
+ errors['root'] = { 'serverError': message } if message.present?
22
+ if validation_errors.is_a?(ActiveModel::Errors)
23
+ data = {}
24
+ validation_errors.to_hash.each do |key, value|
25
+ data[key] = value.join(', ')
26
+ end
27
+
28
+ errors.merge!(data) if data.present?
29
+ end
30
+
31
+ response = {
32
+ errors:
33
+ }
34
+ render status:, json: response
35
+ end
36
+
37
+ def set_response_format
38
+ if request.format.to_s != 'text/csv'
39
+ request.format = :json
40
+ self.content_type = 'application/json'
41
+ end
42
+ end
43
+
44
+ def pagination_headers(collection, item_name)
45
+ headers['Content-Range'] = "#{item_name} #{collection.offset_value}-#{collection.offset_value + collection.limit_value - 1}/#{collection.total_count}"
46
+ headers['Access-Control-Expose-Headers'] = 'Content-Range'
47
+ end
48
+
49
+ def pagination_headers_for_dropdown(item_name)
50
+ headers['Content-Range'] = "#{item_name} 0-999/1000"
51
+ headers['Access-Control-Expose-Headers'] = 'Content-Range'
52
+ end
53
+
54
+ def default_per_page
55
+ 10
56
+ end
57
+
58
+ def keywords
59
+ keyword = params[:filter].try(:[], :keyword)
60
+ if keyword.present?
61
+ @keywords = keyword.split(/,| */).reject(&:blank?).map { |value| "%#{value.strip}%" }
62
+ else
63
+ []
64
+ end
65
+ end
66
+
67
+ def export_resource_csv(resources, headers)
68
+ resources = resources.except(:limit, :offset)
69
+ table_name = resources.table_name
70
+ csv_data = CSV.generate(headers: true) do |csv|
71
+ csv << headers.map(&:titleize)
72
+ resources.find_each do |resource|
73
+ csv << headers.map { |header| resource.send(header.parameterize.to_sym) }
74
+ end
75
+ end
76
+ send_data csv_data, filename: "#{table_name}-#{Date.today}.csv"
77
+ end
78
+
79
+ def prepare_pagination_params
80
+ if params[:range].present? && params[:range].is_a?(Array) && params[:range].length == 2
81
+ beginning_offset = params[:range][0].to_i
82
+ end_offset = params[:range][1].to_i
83
+ per_page = end_offset - beginning_offset + 1
84
+ params[:perPage] = per_page
85
+ params[:page] = (beginning_offset / per_page) + 1
86
+ end
87
+ end
88
+
89
+ def format_params
90
+ if request.method_symbol == :get
91
+ params[:filter] = ActionController::Parameters.new(JSON.parse(params[:filter])) if params[:filter].present? && params[:filter].is_a?(String)
92
+ params[:range] = JSON.parse(params[:range]) if params[:range].present? && params[:range].is_a?(String)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,28 @@
1
+ module Admin
2
+ module Api
3
+ module V1
4
+ class AppVersionsController < Admin::Api::AdminBaseController
5
+ def show
6
+ app_version = AppVersion.last
7
+ app_version ||= AppVersion.create!
8
+ render json: app_version.as_json(only: %i[id ios_minimum_version_number android_minimum_version_number])
9
+ end
10
+
11
+ def update
12
+ app_version = AppVersion.find(params[:id])
13
+ if app_version.update(app_version_params)
14
+ render json: app_version.as_json(only: %i[id ios_minimum_version_number android_minimum_version_number])
15
+ else
16
+ render_error(400, nil, app_version.errors)
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def app_version_params
23
+ params.permit(:ios_minimum_version_number, :android_minimum_version_number)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ module Admin
2
+ module Api
3
+ module V1
4
+ class AvailableModulesController < AdminBaseController
5
+ def index
6
+ render json: [
7
+ {
8
+ "id": 1,
9
+ "name": 'Dashboard',
10
+ "path": '/dashboard'
11
+ },
12
+ {
13
+ "id": 2,
14
+ "name": 'Users',
15
+ "path": '/users'
16
+ }
17
+ ]
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,66 @@
1
+ module Admin
2
+ module Api
3
+ module V1
4
+ class UsersController < Admin::Api::AdminBaseController
5
+ def index
6
+ users = User.all.order(id: :desc).page(params[:page]).per(params[:perPage] || default_per_page)
7
+ if keywords.present?
8
+ users = users.where('first_name ILIKE ANY ( array[?] ) OR last_name ILIKE ANY ( array[?] ) OR email ILIKE ANY ( array[?] ) or id = ?', @keywords, @keywords, @keywords, @keywords.first.delete('%').to_i)
9
+ end
10
+ pagination_headers(users, 'users')
11
+
12
+ respond_to do |format|
13
+ format.json do
14
+ render json: users.as_json(only: %i[id first_name last_name email], methods: :status, for_admin: true)
15
+ end
16
+ format.csv do
17
+ export_resource_csv(users, %w[id first_name last_name status email])
18
+ end
19
+ end
20
+ end
21
+
22
+ def create
23
+ user = User.new user_params
24
+ if user.save
25
+ render json: user.as_json(only: %i[id first_name last_name email dob gender])
26
+ else
27
+ render_error(400, nil, user.errors)
28
+ end
29
+ end
30
+
31
+ def show
32
+ @user = User.find(params[:id])
33
+ render json: @user.as_json(only: %i[id first_name last_name email dob gender])
34
+ end
35
+
36
+ def update
37
+ user = User.find(params[:id])
38
+ if user.update(user_params)
39
+ render json: user.as_json(only: %i[id], for_admin: true)
40
+ else
41
+ render_error(400, nil, user.errors)
42
+ end
43
+ end
44
+
45
+ def destroy
46
+ user = User.find(params[:id])
47
+ user.destroy
48
+
49
+ render_success
50
+ end
51
+
52
+ def genders
53
+ pagination_headers_for_dropdown('genders')
54
+ render json: User.genders.keys.map { |k| { id: k, name: k } }
55
+ end
56
+
57
+ private
58
+
59
+ def user_params
60
+ permitted = params.permit(:first_name, :last_name, :dob, :email, :gender, :password)
61
+ permitted.presence || raise(ActionController::ParameterMissing, 'Parameters missing')
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,74 @@
1
+ module Api
2
+ class BaseController < ApplicationController
3
+ include DeviseTokenAuth::Concerns::SetUserByToken
4
+ include ResponseHandler
5
+ include RequestHeaderHandler
6
+ include ExceptionHandler
7
+
8
+ protect_from_forgery with: :null_session
9
+
10
+ before_action :authenticate_user!
11
+ before_action :minimum_version_check!
12
+ before_action :set_user_timezone
13
+ before_action :create_user_devices!
14
+
15
+ after_action :track_request
16
+
17
+ private
18
+
19
+ def create_user_devices!
20
+ if current_user.present? && device_headers[:device_token].present?
21
+ user_device = UserDevice.find_or_initialize_by(device_token: device_headers[:device_token])
22
+
23
+ if user_device.persisted? && user_device.user_id != current_user.id
24
+ user_device.destroy!
25
+ user_device = UserDevice.new(device_token: device_headers[:device_token])
26
+ end
27
+
28
+ user_device.user_id = current_user.id
29
+ user_device.app_version = device_headers[:app_version]
30
+ user_device.platform = device_headers[:platform]
31
+ user_device.device_model = device_headers[:device_model]
32
+ user_device.os_version = device_headers[:os_version]
33
+ user_device.app_build_version = device_headers[:app_build_version]
34
+ user_device.save!
35
+ end
36
+ end
37
+
38
+ def set_user_timezone
39
+ if user_timezone && current_user && current_user.timezone != user_timezone
40
+ current_user.update(timezone: user_timezone)
41
+ end
42
+ end
43
+
44
+ def user_timezone
45
+ @user_timezone ||= device_headers[:user_timezone]
46
+ end
47
+
48
+ def minimum_version_check!
49
+ app_version = device_headers[:app_version]
50
+ platform = device_headers[:platform]
51
+
52
+ if app_version.present? && platform.present?
53
+ current_app_version = AppVersion.order(id: :desc).first
54
+
55
+ if current_app_version.present?
56
+ minimum_version = current_app_version.minimum_version(platform)
57
+
58
+ if minimum_version.present? && Gem::Version.new(app_version) < Gem::Version.new(minimum_version)
59
+ render_error(426, I18n.t('api.errors.upgrade_app_version'))
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ def track_request
66
+ api_version = request.path.split('/')[2]
67
+ ahoy.track "ApiRequest::#{api_version}", {
68
+ params: request.filtered_parameters,
69
+ url: request.original_url,
70
+ response: response.status
71
+ }
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,11 @@
1
+ module Api
2
+ module V1
3
+ class HealthCheckController < Api::BaseController
4
+ skip_before_action :authenticate_user!
5
+
6
+ def index
7
+ render_success
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery with: :null_session
3
+ skip_before_action :verify_authenticity_token, if: :json_request?
4
+
5
+ private
6
+
7
+ def json_request?
8
+ request.format.json?
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ class Auth::PasswordsController < Devise::PasswordsController
2
+ protected
3
+
4
+ def after_resetting_password_path_for(_resource)
5
+ reset_password_success_path
6
+ end
7
+ end
File without changes
@@ -0,0 +1,54 @@
1
+ module ExceptionHandler
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ rescue_from StandardError do |e|
6
+ notify_error(e, airbrake_notify: true)
7
+ render_error(500, I18n.t('errors.server_error'))
8
+ end
9
+
10
+ rescue_from ActiveRecord::RecordNotFound do |e|
11
+ notify_error(e)
12
+ render_error(404, I18n.t('errors.record_not_found'))
13
+ end
14
+
15
+ rescue_from ActiveRecord::RecordInvalid do |e|
16
+ notify_error(e)
17
+ render_error(422, I18n.t('errors.record_invalid'))
18
+ end
19
+
20
+ rescue_from ActionController::ParameterMissing do |e|
21
+ notify_error(e)
22
+ render_error(404, I18n.t('errors.record_invalid'))
23
+ end
24
+
25
+ rescue_from JSON::ParserError do |e|
26
+ notify_error(e)
27
+ render_error(404, I18n.t('errors.record_invalid'))
28
+ end
29
+
30
+ rescue_from ActiveRecord::RecordNotUnique do |e|
31
+ notify_error(e)
32
+ render_error(404, I18n.t('errors.record_not_unique'))
33
+ end
34
+
35
+ private
36
+
37
+ def notify_error(error, airbrake_notify: false)
38
+ airbrake_notify(error) if airbrake_notify
39
+ raise_error(error)
40
+ end
41
+
42
+ def raise_error(error)
43
+ if Rails.env.test? || Rails.env.development?
44
+ raise error
45
+ end
46
+ end
47
+
48
+ def airbrake_notify(error)
49
+ if Rails.env.production? || Rails.env.staging?
50
+ Airbrake.notify(error)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,35 @@
1
+ module RequestHeaderHandler
2
+ extend ActiveSupport::Concern
3
+
4
+ def cloudfront_headers
5
+ @cloudfront_headers ||= {
6
+ cloudfront_viewer_address: request.headers['CloudFront-Viewer-Address'],
7
+ cloudfront_viewer_country: request.headers['CloudFront-Viewer-Country'],
8
+ cloudfront_is_ios_viewer: request.headers['CloudFront-Is-Ios-Viewer'],
9
+ cloudfront_is_tablet_viewer: request.headers['CloudFront-Is-Tablet-Viewer'],
10
+ cloudfront_viewer_country_name: request.headers['CloudFront-Viewer-Country-Name'],
11
+ cloudfront_is_mobile_viewer: request.headers['CloudFront-Is-Mobile-Viewer'],
12
+ cloudfront_is_smarttv_viewer: request.headers['CloudFront-Is-Smarttv-Viewer'],
13
+ cloudfront_viewer_country_region: request.headers['CloudFront-Viewer-Country-Region'],
14
+ cloudfront_is_android_viewer: request.headers['CloudFront-Is-Android-Viewer'],
15
+ cloudfront_viewer_country_region_name: request.headers['CloudFront-Viewer-Country-Region-Name'],
16
+ cloudfront_viewer_city: request.headers['CloudFront-Viewer-City'],
17
+ cloudfront_viewer_latitude: request.headers['CloudFront-Viewer-Latitude'],
18
+ cloudfront_viewer_longitude: request.headers['CloudFront-Viewer-Longitude'],
19
+ cloudfront_viewer_postal_code: request.headers['CloudFront-Viewer-Postal-Code'],
20
+ cloudfront_is_desktop_viewer: request.headers['CloudFront-Is-Desktop-Viewer']
21
+ }
22
+ end
23
+
24
+ def device_headers
25
+ @device_headers ||= {
26
+ app_version: request.headers['HTTP_X_APP_VERSION'],
27
+ platform: request.headers['HTTP_X_PLATFORM'],
28
+ device_model: request.headers['HTTP_X_DEVICE_MODEL'],
29
+ os_version: request.headers['HTTP_X_OS_VERSION'],
30
+ app_build_version: request.headers['HTTP_X_APP_BUILD_VERSION'],
31
+ device_token: request.headers['HTTP_X_DEVICE_TOKEN'],
32
+ user_timezone: request.headers['HTTP_X_USER_TIMEZONE']
33
+ }
34
+ end
35
+ end
@@ -0,0 +1,31 @@
1
+ module ResponseHandler
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ before_action :config_default_response_settings
6
+ end
7
+
8
+ def config_default_response_settings
9
+ set_response_format
10
+ end
11
+
12
+ def set_response_format
13
+ self.content_type = 'application/json'
14
+ end
15
+
16
+ def render_success
17
+ render json: {}, status: :ok
18
+ end
19
+
20
+ def render_no_content
21
+ render json: {}, status: :no_content
22
+ end
23
+
24
+ def render_error(status, message, data = nil)
25
+ response = {
26
+ errors: [message]
27
+ }
28
+ response = response.merge(data) if data
29
+ render json: response, status: status
30
+ end
31
+ end
@@ -0,0 +1,36 @@
1
+ class PagesController < ApplicationController
2
+ layout 'rails_template'
3
+
4
+ def index; end
5
+
6
+ def fonts_page; end
7
+
8
+ def spinners_page; end
9
+
10
+ def animations_page; end
11
+
12
+ def global_notice_page
13
+ flash.now[:notice] = 'Here is a notice flash message!'
14
+ flash.now[:success] = 'Here is a success flash message!'
15
+ flash.now[:warning] = 'Here is a warning flash message!'
16
+ flash.now[:error] = 'Here is an error flash message!'
17
+ end
18
+
19
+ def new
20
+ @template_model = TemplateModel.new
21
+ end
22
+
23
+ def create
24
+ @template_model = TemplateModel.new(template_model_params)
25
+ if @template_model.save
26
+ flash[:success] = 'Template has been created successfully.'
27
+ redirect_to new_template_model_path
28
+ else
29
+ render :new
30
+ end
31
+ end
32
+
33
+ def template_model_params
34
+ params.require(:template_model).permit(:first_name, :last_name, :email, :dob, :gender, :message, :level, :active)
35
+ end
36
+ end
@@ -0,0 +1,3 @@
1
+ class UsersController < ApplicationController
2
+ def reset_password_success; end
3
+ end
@@ -0,0 +1,5 @@
1
+ module PixelforceRecipes
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace PixelforceRecipes
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ module PixelforceRecipes
2
+ class Railtie < ::Rails::Railtie
3
+ end
4
+ end
@@ -1,3 +1,3 @@
1
1
  module PixelforceRecipes
2
- VERSION = '3.9.2'
2
+ VERSION = '4.0'
3
3
  end
@@ -1,10 +1,8 @@
1
- require "pixelforce_recipes/version"
2
- require "capistrano"
1
+ require 'rails'
2
+ require_relative 'pixelforce_recipes/railtie'
3
+ require_relative 'pixelforce_recipes/engine'
4
+ require_relative 'pixelforce_recipes/version'
3
5
 
4
- if defined?(Capistrano::VERSION)
5
- if Capistrano::VERSION.to_s.split('.').first.to_i >= 3
6
- Dir[File.expand_path("#{File.dirname(__FILE__)}/pixelforce_recipes/capistrano_3_recipes/*.rb")].each {|file| require file }
7
- else
8
- Dir[File.expand_path("#{File.dirname(__FILE__)}/pixelforce_recipes/legacy_recipes/*.rb")].each {|file| require file }
9
- end
10
- end
6
+ module PixelforceRecipes
7
+
8
+ end
@@ -23,5 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rake", "~> 13.0"
24
24
  spec.add_development_dependency "rspec", "~> 3.0"
25
25
  spec.add_development_dependency "elbas"
26
- spec.add_dependency(%q<capistrano>, ["> 2.0.0"])
26
+ spec.add_dependency(%q<capistrano>, ["> 3.0.0"])
27
27
  end
data/recipes.rb ADDED
@@ -0,0 +1,4 @@
1
+ require "pixelforce_recipes/version"
2
+ require "capistrano"
3
+
4
+ Dir[File.expand_path("#{File.dirname(__FILE__)}/recipes/capistrano_recipes/*.rb")].each {|file| require file }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pixelforce_recipes
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.9.2
4
+ version: '4.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Zhang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-13 00:00:00.000000000 Z
11
+ date: 2024-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - ">"
74
74
  - !ruby/object:Gem::Version
75
- version: 2.0.0
75
+ version: 3.0.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">"
81
81
  - !ruby/object:Gem::Version
82
- version: 2.0.0
82
+ version: 3.0.0
83
83
  description: Write a longer description or delete this line.
84
84
  email:
85
85
  - bzbnhang@gmail.com
@@ -94,42 +94,52 @@ files:
94
94
  - LICENSE.txt
95
95
  - README.md
96
96
  - Rakefile
97
+ - app/controllers/admin/api/admin_base_controller.rb
98
+ - app/controllers/admin/api/v1/app_versions_controller.rb
99
+ - app/controllers/admin/api/v1/available_modules_controller.rb
100
+ - app/controllers/admin/api/v1/users_controller.rb
101
+ - app/controllers/api/base_controller.rb
102
+ - app/controllers/api/v1/health_check_controller.rb
103
+ - app/controllers/application_controller.rb
104
+ - app/controllers/auth/passwords_controller.rb
105
+ - app/controllers/concerns/.keep
106
+ - app/controllers/concerns/exception_handler.rb
107
+ - app/controllers/concerns/request_header_handler.rb
108
+ - app/controllers/concerns/response_handler.rb
109
+ - app/controllers/pages_controller.rb
110
+ - app/controllers/users_controller.rb
97
111
  - bin/console
98
112
  - bin/setup
99
113
  - lib/pixelforce_recipes.rb
100
- - lib/pixelforce_recipes/capistrano_3_recipes/base.rb
101
- - lib/pixelforce_recipes/capistrano_3_recipes/elbas.rb
102
- - lib/pixelforce_recipes/capistrano_3_recipes/logrotate.rb
103
- - lib/pixelforce_recipes/capistrano_3_recipes/puma.rb
104
- - lib/pixelforce_recipes/capistrano_3_recipes/resque.rb
105
- - lib/pixelforce_recipes/capistrano_3_recipes/resque_scheduler.rb
106
- - lib/pixelforce_recipes/capistrano_3_recipes/sidekiq.rb
107
- - lib/pixelforce_recipes/capistrano_3_recipes/supervisor.rb
108
- - lib/pixelforce_recipes/capistrano_3_recipes/unicorn.rb
109
- - lib/pixelforce_recipes/legacy_recipes/base.rb
110
- - lib/pixelforce_recipes/legacy_recipes/logrotate.rb
111
- - lib/pixelforce_recipes/legacy_recipes/puma.rb
112
- - lib/pixelforce_recipes/legacy_recipes/resque.rb
113
- - lib/pixelforce_recipes/legacy_recipes/resque_scheduler.rb
114
- - lib/pixelforce_recipes/legacy_recipes/sidekiq.rb
115
- - lib/pixelforce_recipes/legacy_recipes/unicorn.rb
116
- - lib/pixelforce_recipes/templates/logrotate.erb
117
- - lib/pixelforce_recipes/templates/nginx_config.erb
118
- - lib/pixelforce_recipes/templates/nginx_puma_config.erb
119
- - lib/pixelforce_recipes/templates/puma.rb.erb
120
- - lib/pixelforce_recipes/templates/puma_systemd.erb
121
- - lib/pixelforce_recipes/templates/resque_init.erb
122
- - lib/pixelforce_recipes/templates/resque_scheduler_init.erb
123
- - lib/pixelforce_recipes/templates/resque_scheduler_supervisor.erb
124
- - lib/pixelforce_recipes/templates/resque_supervisor.erb
125
- - lib/pixelforce_recipes/templates/sidekiq_init.erb
126
- - lib/pixelforce_recipes/templates/sidekiq_supervisor.erb
127
- - lib/pixelforce_recipes/templates/sidekiq_systemd.erb
128
- - lib/pixelforce_recipes/templates/supervisor.erb
129
- - lib/pixelforce_recipes/templates/unicorn_init.erb
130
- - lib/pixelforce_recipes/templates/unicorn_supervisor.erb
114
+ - lib/pixelforce_recipes/engine.rb
115
+ - lib/pixelforce_recipes/railtie.rb
131
116
  - lib/pixelforce_recipes/version.rb
117
+ - lib/recipes/capistrano_recipes/base.rb
118
+ - lib/recipes/capistrano_recipes/elbas.rb
119
+ - lib/recipes/capistrano_recipes/logrotate.rb
120
+ - lib/recipes/capistrano_recipes/puma.rb
121
+ - lib/recipes/capistrano_recipes/resque.rb
122
+ - lib/recipes/capistrano_recipes/resque_scheduler.rb
123
+ - lib/recipes/capistrano_recipes/sidekiq.rb
124
+ - lib/recipes/capistrano_recipes/supervisor.rb
125
+ - lib/recipes/capistrano_recipes/unicorn.rb
126
+ - lib/recipes/templates/logrotate.erb
127
+ - lib/recipes/templates/nginx_config.erb
128
+ - lib/recipes/templates/nginx_puma_config.erb
129
+ - lib/recipes/templates/puma.rb.erb
130
+ - lib/recipes/templates/puma_systemd.erb
131
+ - lib/recipes/templates/resque_init.erb
132
+ - lib/recipes/templates/resque_scheduler_init.erb
133
+ - lib/recipes/templates/resque_scheduler_supervisor.erb
134
+ - lib/recipes/templates/resque_supervisor.erb
135
+ - lib/recipes/templates/sidekiq_init.erb
136
+ - lib/recipes/templates/sidekiq_supervisor.erb
137
+ - lib/recipes/templates/sidekiq_systemd.erb
138
+ - lib/recipes/templates/supervisor.erb
139
+ - lib/recipes/templates/unicorn_init.erb
140
+ - lib/recipes/templates/unicorn_supervisor.erb
132
141
  - pixelforce_recipes.gemspec
142
+ - recipes.rb
133
143
  homepage: https://github.com/BenZhang/pixelforce_recipes
134
144
  licenses:
135
145
  - MIT
@@ -149,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
159
  - !ruby/object:Gem::Version
150
160
  version: '0'
151
161
  requirements: []
152
- rubygems_version: 3.1.6
162
+ rubygems_version: 3.2.33
153
163
  signing_key:
154
164
  specification_version: 4
155
165
  summary: Write a short summary, because Rubygems requires one.
@@ -1,24 +0,0 @@
1
- if Capistrano::Configuration.instance(false)
2
-
3
- Capistrano::Configuration.instance(true).load do |instance|
4
-
5
- def template(from, to)
6
- erb = File.read(File.expand_path("../../templates/#{from}", __FILE__))
7
- put ERB.new(erb).result(binding), to
8
- end
9
-
10
- def set_default(name, *args, &block)
11
- set(name, *args, &block) unless exists?(name)
12
- end
13
-
14
- namespace :deploy do
15
- desc "Install everything onto the server"
16
- task :install do
17
- run "#{sudo} apt-get -y update"
18
- run "#{sudo} apt-get -y install curl git-core python-software-properties build-essential openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion"
19
- end
20
- end
21
-
22
- end
23
-
24
- end
@@ -1,14 +0,0 @@
1
- if Capistrano::Configuration.instance(false)
2
-
3
- Capistrano::Configuration.instance(true).load do |instance|
4
-
5
- namespace :logrotate do
6
-
7
- desc "Setup logrotate configuration for this application"
8
- task :setup, roles: :app do
9
- template "logrotate.erb", "/tmp/logrotate"
10
- run "#{sudo} mv /tmp/logrotate /etc/logrotate.d/#{application}"
11
- end
12
- end
13
- end
14
- end
@@ -1,26 +0,0 @@
1
- if Capistrano::Configuration.instance(false)
2
-
3
- Capistrano::Configuration.instance(true).load do |instance|
4
-
5
- namespace :puma do
6
-
7
- desc "Setup puma configuration for this application"
8
- task :setup, roles: :web do
9
- template "puma_init.erb", "/tmp/puma"
10
- run "#{sudo} mv /tmp/puma /etc/init.d/#{application}"
11
- run "#{sudo} chmod +x /etc/init.d/#{application}"
12
- run "#{sudo} update-rc.d #{application} defaults"
13
- template "nginx_puma_config.erb", "/tmp/nginx_puma_config"
14
- run "#{sudo} mv /tmp/nginx_puma_config /etc/nginx/sites-enabled/#{application}"
15
- end
16
- # after "deploy:setup", "nginx:setup"
17
-
18
- %w[start stop restart].each do |command|
19
- desc "#{command} puma"
20
- task command, roles: :web do
21
- run "/etc/init.d/#{application} #{command}"
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,22 +0,0 @@
1
- if Capistrano::Configuration.instance(false)
2
- Capistrano::Configuration.instance(true).load do |instance|
3
- namespace :resque do
4
- desc "Install resque"
5
-
6
- desc "Setup resque configuration for this application"
7
- task :setup, roles: :resque do
8
- template "resque_init.erb", "/tmp/resque"
9
- run "#{sudo} mv /tmp/resque /etc/init.d/resque"
10
- run "#{sudo} chmod +x /etc/init.d/resque"
11
- run "#{sudo} update-rc.d resque defaults"
12
- end
13
-
14
- %w[start stop restart].each do |command|
15
- desc "#{command} resque"
16
- task command do
17
- run "/etc/init.d/resque #{command}"
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- if Capistrano::Configuration.instance(false)
2
- Capistrano::Configuration.instance(true).load do |instance|
3
- namespace :resque_scheduler do
4
- desc "Install resque scheduler"
5
-
6
- desc "Setup resque scheduler configuration for this application"
7
- task :setup, roles: :resque do
8
- template "resque_scheduler_init.erb", "/tmp/resque_scheduler"
9
- run "#{sudo} mv /tmp/resque_scheduler /etc/init.d/resque_scheduler"
10
- run "#{sudo} chmod +x /etc/init.d/resque_scheduler"
11
- run "#{sudo} update-rc.d resque_scheduler defaults"
12
- end
13
-
14
- %w[start stop restart].each do |command|
15
- desc "#{command} resque scheduler"
16
- task command do
17
- run "/etc/init.d/resque_scheduler #{command}"
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,23 +0,0 @@
1
- if Capistrano::Configuration.instance(false)
2
- Capistrano::Configuration.instance(true).load do |instance|
3
- namespace :sidekiq do
4
- desc "Install sidekiq"
5
-
6
- desc "Setup sidekiq configuration for this application"
7
- task :setup, roles: :sidekiq do
8
- template "sidekiq_init.erb", "/tmp/sidekiq"
9
- run "#{sudo} mv /tmp/sidekiq /etc/init.d/sidekiq"
10
- run "#{sudo} chmod +x /etc/init.d/sidekiq"
11
- run "#{sudo} update-rc.d sidekiq defaults"
12
- end
13
- # after "deploy:setup", "nginx:setup"
14
-
15
- %w[start stop restart].each do |command|
16
- desc "#{command} sidekiq"
17
- task command do
18
- run "/etc/init.d/sidekiq #{command}"
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,29 +0,0 @@
1
- if Capistrano::Configuration.instance(false)
2
-
3
- Capistrano::Configuration.instance(true).load do |instance|
4
-
5
- namespace :unicorn do
6
- desc "Install unicorn"
7
-
8
- desc "Setup unicorn configuration for this application"
9
- task :setup, roles: :web do
10
- template "unicorn_init.erb", "/tmp/unicorn"
11
- run "#{sudo} mv /tmp/unicorn /etc/init.d/#{application}"
12
- run "#{sudo} chmod +x /etc/init.d/#{application}"
13
- run "#{sudo} update-rc.d #{application} defaults"
14
- template "nginx_config.erb", "/tmp/nginx_config"
15
- run "#{sudo} mv /tmp/nginx_config /etc/nginx/sites-enabled/#{application}"
16
- end
17
- # after "deploy:setup", "nginx:setup"
18
-
19
- %w[start stop restart].each do |command|
20
- desc "#{command} unicorn"
21
- task command, roles: :web do
22
- run "/etc/init.d/#{application} #{command}"
23
- end
24
- end
25
- end
26
-
27
- end
28
-
29
- end