Class: Plum::ConfigSync
- Inherits:
-
Object
- Object
- Plum::ConfigSync
- Defined in:
- app/services/plum/config_sync.rb
Overview
Config-as-code (phase 1): the content model lives as YAML files in the host repo and syncs into the database, like db:migrate for content types.
plum/content_types/posts.yml -> Plum::ContentType (blueprint)
plum/fieldsets/seo.yml -> Plum::Fieldset
Files are the source of truth; apply upserts the DB from them, export
writes the DB back out (bootstrap + CP write-back later), and check
reports drift for CI. Content (entries, terms, assets) is never touched.
Defined Under Namespace
Classes: DriftError, Result, UnsafePruneError
Constant Summary collapse
- CONTENT_TYPE_DIR =
"content_types".freeze
- FIELDSET_DIR =
"fieldsets".freeze
Class Method Summary collapse
- .apply(site:, dir:, prune: false, force: false) ⇒ Object
- .check(site:, dir:) ⇒ Object
- .export(site:, dir:) ⇒ Object
Instance Method Summary collapse
-
#apply(prune: false, force: false) ⇒ Object
Files -> DB.
-
#check ⇒ Object
Returns human-readable drift lines; empty means files and DB agree.
-
#export ⇒ Object
DB -> files.
-
#initialize(site:, dir:) ⇒ ConfigSync
constructor
A new instance of ConfigSync.
Constructor Details
#initialize(site:, dir:) ⇒ ConfigSync
Returns a new instance of ConfigSync.
38 39 40 41 |
# File 'app/services/plum/config_sync.rb', line 38 def initialize(site:, dir:) @site = site @dir = Pathname(dir) end |
Class Method Details
.apply(site:, dir:, prune: false, force: false) ⇒ Object
30 31 32 |
# File 'app/services/plum/config_sync.rb', line 30 def self.apply(site:, dir:, prune: false, force: false) new(site: site, dir: dir).apply(prune: prune, force: force) end |
.check(site:, dir:) ⇒ Object
34 35 36 |
# File 'app/services/plum/config_sync.rb', line 34 def self.check(site:, dir:) new(site: site, dir: dir).check end |
.export(site:, dir:) ⇒ Object
26 27 28 |
# File 'app/services/plum/config_sync.rb', line 26 def self.export(site:, dir:) new(site: site, dir: dir).export end |
Instance Method Details
#apply(prune: false, force: false) ⇒ Object
Files -> DB. Upserts by handle inside a transaction. Deleting requires prune: true, and deleting a content type that still has entries additionally requires force: true.
55 56 57 58 59 60 61 62 63 64 65 |
# File 'app/services/plum/config_sync.rb', line 55 def apply(prune: false, force: false) result = Result.new(created: [], updated: [], unchanged: [], deleted: []) site.transaction do apply_content_types(result) apply_fieldsets(result) prune_missing(result, force: force) if prune end result end |
#check ⇒ Object
Returns human-readable drift lines; empty means files and DB agree.
68 69 70 71 72 73 |
# File 'app/services/plum/config_sync.rb', line 68 def check drift = [] drift += check_kind(CONTENT_TYPE_DIR, content_types) drift += check_kind(FIELDSET_DIR, fieldsets) drift end |
#export ⇒ Object
DB -> files. Mirrors the database exactly: stale files for handles that no longer exist are removed.
45 46 47 48 49 50 |
# File 'app/services/plum/config_sync.rb', line 45 def export written = [] written += export_kind(CONTENT_TYPE_DIR, content_types.order(:handle)) { |record| content_type_config(record) } written += export_kind(FIELDSET_DIR, fieldsets.order(:handle)) { |record| fieldset_config(record) } written end |