ops_backups 0.1.0 → 0.1.2

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 (29) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +18 -115
  3. data/app/controllers/ops_backups/application_controller.rb +4 -0
  4. data/app/helpers/{ops → ops_backups}/application_helper.rb +1 -1
  5. data/app/jobs/ops_backups/application_job.rb +4 -0
  6. data/app/jobs/{ops/backups → ops_backups}/backup_db_job.rb +7 -4
  7. data/app/jobs/{ops/backups → ops_backups}/cleanup_limit_job.rb +2 -2
  8. data/app/jobs/{ops/backups → ops_backups}/cleanup_tiered_job.rb +2 -2
  9. data/app/mailers/ops_backups/application_mailer.rb +6 -0
  10. data/app/models/ops_backups/application_record.rb +5 -0
  11. data/app/models/{ops/backups → ops_backups}/backup.rb +24 -12
  12. data/app/views/layouts/{ops → ops_backups}/application.html.erb +2 -2
  13. data/config/routes.rb +1 -1
  14. data/lib/generators/ops_backups/activeadmin/activeadmin_generator.rb +10 -0
  15. data/lib/generators/ops_backups/activeadmin/templates/backup.rb +42 -0
  16. data/lib/generators/ops_backups/install/USAGE +8 -0
  17. data/lib/generators/ops_backups/install/install_generator.rb +57 -0
  18. data/lib/ops_backups/engine.rb +11 -0
  19. data/lib/ops_backups/version.rb +3 -0
  20. data/lib/ops_backups.rb +6 -0
  21. data/lib/tasks/{ops_tasks.rake → ops_backups_tasks.rake} +1 -1
  22. metadata +21 -16
  23. data/app/controllers/ops/backups/application_controller.rb +0 -6
  24. data/app/jobs/ops/backups/application_job.rb +0 -6
  25. data/app/models/ops/backups/application_record.rb +0 -8
  26. data/lib/ops/backups/backups.rb +0 -8
  27. data/lib/ops/backups/engine.rb +0 -7
  28. data/lib/ops/backups/version.rb +0 -5
  29. /data/app/assets/stylesheets/{ops → ops_backups}/application.css +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c11d46d1083b3b1b45c330e4b74db480d82d80ebd49356a74934dd63409f2c01
4
- data.tar.gz: d41344f6c9066beac9ba54ab9e96165fec31b33335b85af0ec26beebf2fba875
3
+ metadata.gz: 3024502438b6655823c65f47d783165f1d91718f98ee68b1b0ff945f20497ffe
4
+ data.tar.gz: d5dfa0b6d4b128a557213e30591d7121245b1544cf1f58a7617cfb102de61584
5
5
  SHA512:
6
- metadata.gz: 64d6bb17c0bc7e78cf236d4a2077aa3cbb0cf520576544e8b75c16a9745c19e1b2a4886ad548c8446ac6405f1e366c17873ac540a9ec641e98a45002cf5b4571
7
- data.tar.gz: 93ba27887a32e0a361187ef94189c6a574849f65fe5542a0f09fe329c1bfb42121675258ed97a8ce9b85136a9634902028869eb9e945b7c4163307556e3b7150
6
+ metadata.gz: 420151cb8f9cd51361d45525f80409ea535957f9c54702826ef93f5e32f370515a4ffd3e799a8e9c4731db9b8f2fa616a40702ca0421d5e334d313cdcb0aa5a5
7
+ data.tar.gz: 329f8fbbbcda7b9052cc4760afce2141ddb9120ad77dfd08c5fcc066cfdcb5b71f0e1e10b3a27157ade75dd3e8ece8635adf59db1a5b141f821c3efd751b23e2
data/README.md CHANGED
@@ -1,132 +1,35 @@
1
- # Ops
1
+ # OpsBackups
2
2
 
3
- ## Description
4
- Ops is a Ruby gem designed to enhance and to backup your PostgreSQL database.
3
+ A Ruby gem that provides a simple way to backup (self)-hosted postgres databases to
4
+ ActiveStorage services like S3, Google Cloud Storage, etc.
5
5
 
6
6
  ## Usage
7
7
 
8
- ### Configuration
9
-
10
- To configure the Ops gem, you need to set up the following environment variables:
11
- - `DATABASE_URL`: The URL of the PostgreSQL database to backup.
12
-
13
- Set up Active Storage for backups (e.g., Amazon S3 for production). We expect a service named `:backup_storage` to be configured.
14
-
15
- ```yaml
16
- backup_storage:
17
- service: S3
18
- access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
19
- secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
20
- region: <%= ENV['AWS_REGION'] %>
21
- bucket: backups
22
- ```
23
- ### Backup Method
24
-
25
- The `Ops::Backup` class provides a method to perform a PostgreSQL database backup:
26
-
27
- - `db_pg_backup(exclude_tables: [], tag: nil)`: This method performs a full backup of the database, optionally excluding specified tables. The backup is tagged and saved as an attachment.
28
-
29
- example:
8
+ ## Installation
30
9
 
31
- ```ruby
32
- Ops::Backup.new.db_pg_backup(exclude_tables: ["versions"], tag: "db_pg_unveresioned")
10
+ ```bash
11
+ bundle add ops_backups
12
+ # install migrations
13
+ # configure solid queu recurring job for a basic backup
14
+ rails generate ops_backups:install
33
15
  ```
34
16
 
35
- ### Backup Retention Strategies
36
-
37
- Ops gem provides two backup retention strategies:
38
-
39
- 1. **Tiered Cleanup Policy**:
40
- - Keeps all backups from the last day.
41
- - Keeps the last backup of each day from the last week (except the last day).
42
- - Keeps the last backup of each week from the last month (except the last week).
43
- - Keeps the last backup of each month before the last month.
44
-
45
- example:
46
- ```ruby
47
- Ops::CleanupTiered.new.cleanup("db_pg_unversioned")
48
- ```
49
-
50
- This policy can be applied using the `Ops::CleanupTieredJob`.
51
-
52
- 2. **Limit Cleanup Policy**:
53
- - Keeps the last N backups, where N is specified by the `limit` parameter.
54
-
55
- example:
56
- ```ruby
57
- Ops::CleanupLimit.new.cleanup("db_pg_unversioned", limit: 14)
58
- ```
59
-
60
- This policy can be applied using the `Ops::CleanupLimitJob`.
61
-
62
- ### Using SolidQueue Schedule
17
+ # ActiveAdmin Integration
63
18
 
64
- 1. Schedule the backup job using SolidQueue:
65
- ```ruby
66
- SolidQueue.schedule(Ops::BackupDbJob.new, cron: '0 0 * * *', args: { tag: "db_pg_full", exclude_tables: [], cleanup: "retain_last_limit" }) # This schedules the backup job to run daily at midnight
67
- ```
19
+ If you are using ActiveAdmin, you can manage your backups through the admin interface. The generator rails generate ops_backups:activeadmin will create the necessary example configuration.
68
20
 
69
- 2. Schedule the cleanup job with a tiered policy:
70
- ```ruby
71
- SolidQueue.schedule(Ops::CleanupTieredJob.new, cron: '0 1 * * *', args: { tag: "db_pg_full" }) # This schedules the tiered cleanup job to run daily at 1 AM
72
- ```
73
-
74
- 3. Schedule the cleanup job with a limit policy:
75
- ```ruby
76
- SolidQueue.schedule(Ops::CleanupLimitJob.new, cron: '0 2 * * *', args: { tag: "db_pg_full", limit: 14 }) # This schedules the limit cleanup job to run daily at 2 AM
77
- ```
78
-
79
- ### Using `recurring.yml` from SolidQueue
80
-
81
- Alternatively, you can configure recurring tasks using `recurring.yml` in your SolidQueue configuration:
82
-
83
- 1. Create or update the `recurring.yml` file in your application's config directory:
84
- ```yaml
85
- # filepath: config/recurring.yml
86
- backup_db_job:
87
- cron: "0 0 * * *"
88
- class: "Ops::BackupDbJob"
89
- args:
90
- tag: "db_pg_full"
91
- exclude_tables: []
92
- cleanup: "retain_last_limit"
93
-
94
- cleanup_tiered_job:
95
- cron: "0 1 * * *"
96
- class: "Ops::CleanupTieredJob"
97
- args:
98
- tag: "db_pg_full"
99
-
100
- cleanup_limit_job:
101
- cron: "0 2 * * *"
102
- class: "Ops::CleanupLimitJob"
103
- args:
104
- tag: "db_pg_full"
105
- limit: 14
106
- ```
107
-
108
-
109
-
110
- ## Installation
111
- Add this line to your application's Gemfile:
112
-
113
- ```ruby
114
- gem "ops"
115
- ```
116
-
117
- And then execute:
118
21
  ```bash
119
- $ bundle
22
+ # add an active admin resource
23
+ rails generate ops_backups:activeadmin
120
24
  ```
121
25
 
122
- Or install it yourself as:
123
- ```bash
124
- $ gem install ops
125
- ```
26
+ ## Available Actions
27
+
28
+ - Download Backup: Download the backup file.
29
+ - Create Versioned Backup: Create a new versioned backup.
30
+ - Create Unversioned Backup: Create a new unversioned backup, excluding specific tables.
126
31
 
127
- ## Contributing
128
32
 
129
- Bug reports and pull requests are welcome on GitHub at https://github.com/koenhandekyn/ops.
130
33
 
131
34
  ## License
132
35
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,4 @@
1
+ module OpsBackups
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -1,4 +1,4 @@
1
- module Ops
1
+ module OpsBackups
2
2
  module ApplicationHelper
3
3
  end
4
4
  end
@@ -0,0 +1,4 @@
1
+ module OpsBackups
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -1,15 +1,18 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- class Ops::Backups::BackupDbJob < ApplicationJob
4
+ class OpsBackups::BackupDbJob < ApplicationJob
5
5
  queue_as :operations
6
6
 
7
7
  # perform a full backup of the database
8
8
  # @param tag [String] the tag to assign to the backup
9
9
  # @param exclude_tables [Array<String>] the list of tables to exclude from the backup
10
10
  # @param cleanup_policy [String] the cleanup policy to apply to the backup, one of "retain_tiered_cleanup_policy" or "retain_last_limit_cleanup_policy"
11
- def perform(tag: "db_pg_full", exclude_tables: [], cleanup: nil)
12
- Ops::Backup.new.db_pg_backup(tag:, exclude_tables:)
13
- Ops::Backup.send("#{cleanup}_cleanup_policy", tag: tag) if cleanup.present?
11
+ def perform(options = {})
12
+ exclude_tables = options[:exclude_tables] || []
13
+ tag = options[:tag] || (exclude_tables.empty? ? "db_pg_full" : "db_pg_partial")
14
+ cleanup = options[:cleanup]
15
+ OpsBackups::Backup.new.db_pg_backup(exclude_tables:, tag:)
16
+ OpsBackups::Backup.send("#{cleanup}_cleanup_policy", tag: tag) if cleanup.present?
14
17
  end
15
18
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Cleanup job for limit backup policy
4
- class Ops::Backups::CleanupLimitJob < ApplicationJob
4
+ class OpsBackups::CleanupLimitJob < ApplicationJob
5
5
  queue_as :operations
6
6
 
7
7
  # @param [String] tag
@@ -10,6 +10,6 @@ class Ops::Backups::CleanupLimitJob < ApplicationJob
10
10
  #
11
11
  # @example Tasks::CleanupLimit.perform_now(tag: "db_pg_full", limit: 14)
12
12
  def perform(tag: "db_pg_full", limit: 14)
13
- Ops::Backup.retain_last_limit_cleanup_policy(tag: tag, limit: limit)
13
+ OpsBackups::Backup.retain_last_limit_cleanup_policy(tag: tag, limit: limit)
14
14
  end
15
15
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Cleanup job for tiered backup policy
4
- class Ops::Backups::CleanupTieredJob < ApplicationJob
4
+ class OpsBackups::CleanupTieredJob < ApplicationJob
5
5
  queue_as :operations
6
6
 
7
7
  # @param [String] tag
@@ -9,6 +9,6 @@ class Ops::Backups::CleanupTieredJob < ApplicationJob
9
9
  #
10
10
  # @example Tasks::CleanupTiered.perform_now(tag: "db_pg_full")
11
11
  def perform(tag: "db_pg_full")
12
- Ops::Backup.retain_tiered_cleanup_policy(tag: tag)
12
+ OpsBackups::Backup.retain_tiered_cleanup_policy(tag: tag)
13
13
  end
14
14
  end
@@ -0,0 +1,6 @@
1
+ module OpsBackups
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: "from@example.com"
4
+ layout "mailer"
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module OpsBackups
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -1,24 +1,36 @@
1
- module Ops
2
- puts "Ops module loaded"
3
-
4
- class Ops::Backups::Backup < ApplicationRecord
1
+ module OpsBackups
2
+ class Backup < ActiveRecord::Base
5
3
  # has_one_attached :backup_file, service: :backup_storage
6
- has_one_attached :backup_file
4
+ has_one_attached :backup_file, service: :backups
5
+ self.table_name = "ops_backups"
7
6
 
8
7
  default_scope { order(updated_at: :desc) }
9
8
 
10
- def db_pg_backup(exclude_tables: [], tag: nil)
11
- tag ||= exclude_tables.empty? ? "db_pg_full" : "db_pg_partial"
12
- Rails.logger.info("Backing up database, skipping tables: \#{exclude_tables.join(", ")}")
9
+ def self.ransackable_attributes(auth_object = nil)
10
+ [ "created_at", "id", "name", "new_id", "tag", "updated_at" ]
11
+ end
12
+
13
+ def self.test
14
+ "self.test"
15
+ end
16
+
17
+ def hoho
18
+ "hihi"
19
+ end
20
+
21
+ def db_pg_backup(tag: nil, exclude_tables: [])
13
22
  db_url = ENV["DATABASE_URL"]
23
+ tag ||= exclude_tables.empty? ? "db_pg_full" : "db_pg_partial" # if tag.empty?
14
24
  self.tag = tag
15
- self.name = filename = "pg_\#{db_url.split('/').last}_backup_\#{Time.now.to_i}.dump"
25
+ self.name = "pg_#{db_url.split('/').last}_backup_#{Time.now.to_i}.dump"
16
26
  save!
17
-
18
- Tempfile.new("pgbackup") do |tempfile|
27
+ Rails.logger.info("Backing up database")
28
+ # exclude_tables = []
29
+ filename = self.name
30
+ Tempfile.open("pgbackup") do |tempfile|
19
31
  begin
20
32
  excluded_tables_param = exclude_tables.map { |table| "--exclude-table-data=\#{table}" }.join(" ")
21
- command = ["pg_dump", "--no-owner", excluded_tables_param, "-v", "-Fc", "-f", tempfile.path, db_url]
33
+ command = [ "pg_dump", "--no-owner", excluded_tables_param, "-v", "-Fc", "-f", tempfile.path, db_url ].reject(&:empty?)
22
34
 
23
35
  stdout, stderr, status = Open3.capture3(*command)
24
36
 
@@ -1,13 +1,13 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <title>Ops</title>
4
+ <title>Ops backups</title>
5
5
  <%= csrf_meta_tags %>
6
6
  <%= csp_meta_tag %>
7
7
 
8
8
  <%= yield :head %>
9
9
 
10
- <%= stylesheet_link_tag "ops/application", media: "all" %>
10
+ <%= stylesheet_link_tag "ops_backups/application", media: "all" %>
11
11
  </head>
12
12
  <body>
13
13
 
data/config/routes.rb CHANGED
@@ -1,2 +1,2 @@
1
- Ops::Backups::Engine.routes.draw do
1
+ OpsBackups::Engine.routes.draw do
2
2
  end
@@ -0,0 +1,10 @@
1
+ class OpsBackups::ActiveadminGenerator < Rails::Generators::Base
2
+ source_root File.expand_path("templates", __dir__)
3
+
4
+ desc "Copies the ActiveAdmin backup configuration to your application."
5
+
6
+ def copy_admin_backup
7
+ copy_file "backup.rb", Rails.root.join("app", "admin", "ops_backups", "backup.rb")
8
+ say "Copied admin/backup.rb to app/admin/ops_backups/backup.rb.", :green
9
+ end
10
+ end
@@ -0,0 +1,42 @@
1
+ ActiveAdmin.register OpsBackups::Backup do
2
+ menu parent: "Ops", label: I18n.t("admin.ops.backup")
3
+
4
+ # Set the default sort order
5
+ config.sort_order = "updated_at DESC"
6
+
7
+ actions :index, :destroy
8
+
9
+ filter :name
10
+ filter :tag
11
+
12
+ index title: I18n.t("admin.ops.backup") do
13
+ selectable_column
14
+ column :name do |backup|
15
+ link_to(backup.name, download_backup_admin_ops_backups_backup_path(backup), class: "member_link")
16
+ end
17
+ column :tag
18
+ column :size do |backup|
19
+ backup.backup_file.attached? ? number_to_human_size(backup.backup_file.byte_size) : "N/A"
20
+ end
21
+ column :updated_at
22
+ column :duration do |backup|
23
+ Time.at((backup.updated_at - backup.created_at)).utc.strftime("%H:%M:%S")
24
+ end
25
+ actions
26
+ end
27
+
28
+ member_action :download_backup, method: :get do
29
+ redirect_to resource.backup_file.url(disposition: :attachment), allow_other_host: true
30
+ end
31
+
32
+ # an action that creates a new backup
33
+ collection_action :backup_db, method: :post do
34
+ OpsBackups::BackupDbJob.perform_later(tag: "db_pg_full")
35
+ redirect_to admin_ops_backups_backups_path, notice: I18n.t("admin.ops.backup_scheduled")
36
+ end
37
+
38
+ # add a button to the top of the index page
39
+ action_item :backup_db, only: :index do
40
+ link_to(I18n.t("admin.ops.backup_db"), backup_db_admin_ops_backups_backups_path, method: :post, class: "action-item-button")
41
+ end
42
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ bin/rails generate install Thing
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,57 @@
1
+ class OpsBackups::InstallGenerator < Rails::Generators::Base
2
+ source_root File.expand_path("templates", __dir__)
3
+
4
+ desc "Copies migrations and adds a storage service configuration to storage.yml"
5
+
6
+ def copy_migrations
7
+ rake "railties:install:migrations FROM=ops_backups"
8
+ say "Migrations copied to your application.", :green
9
+ end
10
+
11
+ def add_storage_service
12
+ storage_file = Rails.root.join("config", "storage.yml")
13
+
14
+ if File.exist?(storage_file)
15
+ service_config = <<~YAML
16
+
17
+ backups:
18
+ service: Disk
19
+ root: <%= Rails.root.join("storage") %>
20
+ # service: S3
21
+ # access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
22
+ # secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
23
+ # region: <%= ENV['AWS_REGION'] %>
24
+ # bucket: allcrux-backups
25
+ YAML
26
+
27
+ append_to_file storage_file, service_config
28
+ say "Added 'backups' service to storage.yml.", :green
29
+ else
30
+ say "config/storage.yml not found. Please create it and re-run this generator.", :red
31
+ end
32
+ end
33
+
34
+ def add_recurring_jobs
35
+ recurring_file = Rails.root.join("config", "recurring.yml")
36
+
37
+ if File.exist?(recurring_file)
38
+ recurring_config = <<~YAML.lines.map { |line| " #{line}" }.join
39
+ backup_db:
40
+ class: OpsBackups::BackupDbJob
41
+ args: [tag: "db_pg_backup", cleanup: "retain_tiered_cleanup_policy"]
42
+ schedule: every hour
43
+ YAML
44
+
45
+ append_to_file recurring_file, recurring_config
46
+ say "Added 'recurring' jobs to recurring.yml.", :green
47
+ else
48
+ say "config/recurring.yml not found. Please create it and re-run this generator.", :red
49
+ end
50
+
51
+ # # copy the admin/backup.rb file to app/admin/ops_backups/backup.rb
52
+ # def copy_admin_backup
53
+ # copy_file "admin/backup.rb", Rails.root.join("app", "admin", "ops_backups", "backup.rb")
54
+ # say "Copied admin/backup.rb to app/admin/ops_backups/backup.rb.", :green
55
+ # end
56
+ end
57
+ end
@@ -0,0 +1,11 @@
1
+ module OpsBackups
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace OpsBackups
4
+
5
+ initializer :append_migrations do |app|
6
+ unless app.root.to_s.match? root.to_s
7
+ app.config.paths["db/migrate"].concat(config.paths["db/migrate"].expanded)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module OpsBackups
2
+ VERSION = "0.1.2"
3
+ end
@@ -0,0 +1,6 @@
1
+ require "ops_backups/version"
2
+ require "ops_backups/engine"
3
+
4
+ module OpsBackups
5
+ # Your code goes here...
6
+ end
@@ -1,4 +1,4 @@
1
1
  # desc "Explaining what the task does"
2
- # task :ops do
2
+ # task :ops_backups do
3
3
  # # Task goes here
4
4
  # end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_backups
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koen Handekyn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-17 00:00:00.000000000 Z
11
+ date: 2024-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -35,22 +35,27 @@ files:
35
35
  - MIT-LICENSE
36
36
  - README.md
37
37
  - Rakefile
38
- - app/assets/stylesheets/ops/application.css
39
- - app/controllers/ops/backups/application_controller.rb
40
- - app/helpers/ops/application_helper.rb
41
- - app/jobs/ops/backups/application_job.rb
42
- - app/jobs/ops/backups/backup_db_job.rb
43
- - app/jobs/ops/backups/cleanup_limit_job.rb
44
- - app/jobs/ops/backups/cleanup_tiered_job.rb
45
- - app/models/ops/backups/application_record.rb
46
- - app/models/ops/backups/backup.rb
47
- - app/views/layouts/ops/application.html.erb
38
+ - app/assets/stylesheets/ops_backups/application.css
39
+ - app/controllers/ops_backups/application_controller.rb
40
+ - app/helpers/ops_backups/application_helper.rb
41
+ - app/jobs/ops_backups/application_job.rb
42
+ - app/jobs/ops_backups/backup_db_job.rb
43
+ - app/jobs/ops_backups/cleanup_limit_job.rb
44
+ - app/jobs/ops_backups/cleanup_tiered_job.rb
45
+ - app/mailers/ops_backups/application_mailer.rb
46
+ - app/models/ops_backups/application_record.rb
47
+ - app/models/ops_backups/backup.rb
48
+ - app/views/layouts/ops_backups/application.html.erb
48
49
  - config/routes.rb
49
50
  - db/migrate/20241114173612_create_ops_backups.rb
50
- - lib/ops/backups/backups.rb
51
- - lib/ops/backups/engine.rb
52
- - lib/ops/backups/version.rb
53
- - lib/tasks/ops_tasks.rake
51
+ - lib/generators/ops_backups/activeadmin/activeadmin_generator.rb
52
+ - lib/generators/ops_backups/activeadmin/templates/backup.rb
53
+ - lib/generators/ops_backups/install/USAGE
54
+ - lib/generators/ops_backups/install/install_generator.rb
55
+ - lib/ops_backups.rb
56
+ - lib/ops_backups/engine.rb
57
+ - lib/ops_backups/version.rb
58
+ - lib/tasks/ops_backups_tasks.rake
54
59
  homepage: https://github.com/koenhandekyn/ops-backups
55
60
  licenses:
56
61
  - MIT
@@ -1,6 +0,0 @@
1
- module Ops
2
- module Backups
3
- class ApplicationController < ActionController::Base
4
- end
5
- end
6
- end
@@ -1,6 +0,0 @@
1
- module Ops
2
- module Backups
3
- class ApplicationJob < ActiveJob::Base
4
- end
5
- end
6
- end
@@ -1,8 +0,0 @@
1
- module Ops
2
- module Backups
3
- class ApplicationRecord < ActiveRecord::Base
4
- self.abstract_class = true
5
- self.table_name_prefix = "ops_"
6
- end
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- require "ops/backups/version"
2
- require "ops/backups/engine"
3
-
4
- module Ops
5
- module Backups
6
- # Your code goes here...
7
- end
8
- end
@@ -1,7 +0,0 @@
1
- module Ops
2
- module Backups
3
- class Engine < ::Rails::Engine
4
- isolate_namespace Ops::Backups
5
- end
6
- end
7
- end
@@ -1,5 +0,0 @@
1
- module Ops
2
- module Backups
3
- VERSION = "0.1.0"
4
- end
5
- end