demo_mode 3.8.1 → 3.10.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.
- checksums.yaml +4 -4
- data/app/controllers/demo_mode/sessions_controller.rb +1 -1
- data/lib/demo_mode/clever_sequence/postgres_backend.rb +3 -1
- data/lib/demo_mode/version.rb +1 -1
- data/lib/generators/demo_mode/clever_sequence_generator.rb +84 -0
- data/lib/generators/templates/clever_sequence_migration.rb.tt +27 -0
- metadata +18 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 903d797309941f76ac1671ee66586425a0d16a3643289093a36fd9c37b31464f
|
|
4
|
+
data.tar.gz: d1169c7af02e5ddb4d545ddf26ddec2c86c3ed127d1dec8481d4b129e13afa8e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 29e45ab3ab1d7ffd14fd218cfbcb3df4761af30d039775f09491d69c68002e2846c0bac892a63aee4034d2a1fa4456ef4e2f30c468a4005d6514cb2db21ff544
|
|
7
|
+
data.tar.gz: de12093c6e85f72283d05146689a8daa34e096e358e1dd4fda4bd04388128abffec5f0b9df12670b6396139a0d94dad58e22bfcfda2ef188097e40e51ffdfa21
|
|
@@ -13,7 +13,9 @@ class CleverSequence
|
|
|
13
13
|
@attribute = attribute
|
|
14
14
|
|
|
15
15
|
super(
|
|
16
|
-
"Sequence '#{sequence_name}' not found for #{klass.name}##{attribute}. "
|
|
16
|
+
"Sequence '#{sequence_name}' not found for #{klass.name}##{attribute}. " \
|
|
17
|
+
"Generate a migration to create it with: " \
|
|
18
|
+
"bin/rails generate demo_mode:clever_sequence #{klass.name} #{attribute}"
|
|
17
19
|
)
|
|
18
20
|
end
|
|
19
21
|
end
|
data/lib/demo_mode/version.rb
CHANGED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails/generators/base'
|
|
4
|
+
require 'rails/generators/active_record'
|
|
5
|
+
require 'demo_mode/clever_sequence/postgres_backend'
|
|
6
|
+
|
|
7
|
+
module DemoMode
|
|
8
|
+
# Generates a migration that creates the PostgreSQL sequence backing a
|
|
9
|
+
# CleverSequence, in response to
|
|
10
|
+
# CleverSequence::PostgresBackend::SequenceNotFoundError.
|
|
11
|
+
#
|
|
12
|
+
# bundle exec rails generate demo_mode:clever_sequence Widget integer_column
|
|
13
|
+
#
|
|
14
|
+
# By default the migration is written to the app's primary db/migrate path.
|
|
15
|
+
# Use --database to target a connection's migrations_paths (from
|
|
16
|
+
# config/database.yml), or --migrations-path to write to an explicit
|
|
17
|
+
# directory (e.g. an engine's migrate dir in a monorepo).
|
|
18
|
+
class CleverSequenceGenerator < Rails::Generators::Base
|
|
19
|
+
include ActiveRecord::Generators::Migration
|
|
20
|
+
|
|
21
|
+
desc 'Creates a migration that creates the PostgreSQL sequence backing a CleverSequence.'
|
|
22
|
+
source_root File.expand_path('../templates', __dir__)
|
|
23
|
+
|
|
24
|
+
argument :model, type: :string, banner: 'Model'
|
|
25
|
+
argument :attribute, type: :string, banner: 'attribute'
|
|
26
|
+
|
|
27
|
+
class_option :database, type: :string, aliases: %w(--db),
|
|
28
|
+
desc: "The database whose migrations_paths to use (from config/database.yml)."
|
|
29
|
+
class_option :migrations_path, type: :string,
|
|
30
|
+
desc: 'Explicit directory to write the migration into (overrides --database and the default).'
|
|
31
|
+
|
|
32
|
+
def create_sequence_migration
|
|
33
|
+
migration_template(
|
|
34
|
+
'clever_sequence_migration.rb.tt',
|
|
35
|
+
File.join(target_migrate_path, "create_clever_sequence_#{sequence_name}.rb"),
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
no_tasks do
|
|
40
|
+
def sequence_name
|
|
41
|
+
CleverSequence::PostgresBackend.sequence_name(model_class, attribute)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def migration_class_name
|
|
45
|
+
"CreateCleverSequence#{sequence_name.camelize}"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def migration_version
|
|
49
|
+
"[#{ActiveRecord::Migration.current_version}]"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def table_name
|
|
53
|
+
model_class.table_name
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# The DB column the sequence advances past. Resolves attribute aliases
|
|
57
|
+
# the same way CleverSequence::PostgresBackend does.
|
|
58
|
+
def column_name
|
|
59
|
+
model_class.attribute_aliases.fetch(attribute.to_s, attribute.to_s)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Whether the backing column is an integer, so seeding the sequence
|
|
63
|
+
# past MAX(column) is meaningful. Other columns (e.g. a string column)
|
|
64
|
+
# are created at their default start; runtime adjustment handles
|
|
65
|
+
# advancing them.
|
|
66
|
+
def integer_column?
|
|
67
|
+
model_class.columns_hash[column_name]&.type == :integer
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
private
|
|
71
|
+
|
|
72
|
+
# Where the migration is written. An explicit --migrations-path wins;
|
|
73
|
+
# otherwise fall back to Rails' resolution (db_migrate_path), which
|
|
74
|
+
# honors --database via config/database.yml's migrations_paths.
|
|
75
|
+
def target_migrate_path
|
|
76
|
+
options[:migrations_path].presence || db_migrate_path
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def model_class
|
|
80
|
+
@model_class ||= model.camelize.constantize
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Creates the PostgreSQL sequence backing CleverSequence for
|
|
4
|
+
# <%= model %>#<%= attribute %> (sequence: <%= sequence_name %>).
|
|
5
|
+
#
|
|
6
|
+
# Generated in response to
|
|
7
|
+
# CleverSequence::PostgresBackend::SequenceNotFoundError.
|
|
8
|
+
class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version %>
|
|
9
|
+
def up
|
|
10
|
+
execute("CREATE SEQUENCE IF NOT EXISTS <%= sequence_name %>")
|
|
11
|
+
<% if integer_column? -%>
|
|
12
|
+
|
|
13
|
+
# Advance the sequence past any existing data so demo-generated records
|
|
14
|
+
# don't collide with real rows. Mirrors the runtime adjustment in
|
|
15
|
+
# CleverSequence::PostgresBackend#adjust_sequence_if_needed.
|
|
16
|
+
max_value = select_value(
|
|
17
|
+
"SELECT COALESCE(MAX(<%= column_name %>), 0) FROM <%= table_name %>",
|
|
18
|
+
).to_i
|
|
19
|
+
|
|
20
|
+
execute("SELECT setval('<%= sequence_name %>', #{max_value})") if max_value >= 1
|
|
21
|
+
<% end -%>
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def down
|
|
25
|
+
execute("DROP SEQUENCE IF EXISTS <%= sequence_name %>")
|
|
26
|
+
end
|
|
27
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: demo_mode
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nathan Griffith
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-08-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: actionpack
|
|
@@ -16,7 +16,7 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '8.0'
|
|
20
20
|
- - "<"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
22
|
version: '8.2'
|
|
@@ -26,7 +26,7 @@ dependencies:
|
|
|
26
26
|
requirements:
|
|
27
27
|
- - ">="
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: '
|
|
29
|
+
version: '8.0'
|
|
30
30
|
- - "<"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
32
|
version: '8.2'
|
|
@@ -36,7 +36,7 @@ dependencies:
|
|
|
36
36
|
requirements:
|
|
37
37
|
- - ">="
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '
|
|
39
|
+
version: '8.0'
|
|
40
40
|
- - "<"
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
42
|
version: '8.2'
|
|
@@ -46,7 +46,7 @@ dependencies:
|
|
|
46
46
|
requirements:
|
|
47
47
|
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: '
|
|
49
|
+
version: '8.0'
|
|
50
50
|
- - "<"
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
52
|
version: '8.2'
|
|
@@ -56,7 +56,7 @@ dependencies:
|
|
|
56
56
|
requirements:
|
|
57
57
|
- - ">="
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: '
|
|
59
|
+
version: '8.0'
|
|
60
60
|
- - "<"
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
62
|
version: '8.2'
|
|
@@ -66,7 +66,7 @@ dependencies:
|
|
|
66
66
|
requirements:
|
|
67
67
|
- - ">="
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: '
|
|
69
|
+
version: '8.0'
|
|
70
70
|
- - "<"
|
|
71
71
|
- !ruby/object:Gem::Version
|
|
72
72
|
version: '8.2'
|
|
@@ -76,7 +76,7 @@ dependencies:
|
|
|
76
76
|
requirements:
|
|
77
77
|
- - ">="
|
|
78
78
|
- !ruby/object:Gem::Version
|
|
79
|
-
version: '
|
|
79
|
+
version: '8.0'
|
|
80
80
|
- - "<"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: '8.2'
|
|
@@ -86,7 +86,7 @@ dependencies:
|
|
|
86
86
|
requirements:
|
|
87
87
|
- - ">="
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
89
|
+
version: '8.0'
|
|
90
90
|
- - "<"
|
|
91
91
|
- !ruby/object:Gem::Version
|
|
92
92
|
version: '8.2'
|
|
@@ -110,7 +110,7 @@ dependencies:
|
|
|
110
110
|
requirements:
|
|
111
111
|
- - ">="
|
|
112
112
|
- !ruby/object:Gem::Version
|
|
113
|
-
version: '
|
|
113
|
+
version: '8.0'
|
|
114
114
|
- - "<"
|
|
115
115
|
- !ruby/object:Gem::Version
|
|
116
116
|
version: '8.2'
|
|
@@ -120,7 +120,7 @@ dependencies:
|
|
|
120
120
|
requirements:
|
|
121
121
|
- - ">="
|
|
122
122
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: '
|
|
123
|
+
version: '8.0'
|
|
124
124
|
- - "<"
|
|
125
125
|
- !ruby/object:Gem::Version
|
|
126
126
|
version: '8.2'
|
|
@@ -144,7 +144,7 @@ dependencies:
|
|
|
144
144
|
requirements:
|
|
145
145
|
- - ">="
|
|
146
146
|
- !ruby/object:Gem::Version
|
|
147
|
-
version: '
|
|
147
|
+
version: '8.0'
|
|
148
148
|
- - "<"
|
|
149
149
|
- !ruby/object:Gem::Version
|
|
150
150
|
version: '8.2'
|
|
@@ -154,7 +154,7 @@ dependencies:
|
|
|
154
154
|
requirements:
|
|
155
155
|
- - ">="
|
|
156
156
|
- !ruby/object:Gem::Version
|
|
157
|
-
version: '
|
|
157
|
+
version: '8.0'
|
|
158
158
|
- - "<"
|
|
159
159
|
- !ruby/object:Gem::Version
|
|
160
160
|
version: '8.2'
|
|
@@ -369,7 +369,9 @@ files:
|
|
|
369
369
|
- lib/demo_mode/persona.rb
|
|
370
370
|
- lib/demo_mode/tasks.rb
|
|
371
371
|
- lib/demo_mode/version.rb
|
|
372
|
+
- lib/generators/demo_mode/clever_sequence_generator.rb
|
|
372
373
|
- lib/generators/demo_mode/install_generator.rb
|
|
374
|
+
- lib/generators/templates/clever_sequence_migration.rb.tt
|
|
373
375
|
- lib/generators/templates/initializer.rb
|
|
374
376
|
- lib/generators/templates/sample_persona.rb
|
|
375
377
|
- public/demo_mode/assets/demo_mode.css
|
|
@@ -394,14 +396,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
394
396
|
requirements:
|
|
395
397
|
- - ">="
|
|
396
398
|
- !ruby/object:Gem::Version
|
|
397
|
-
version: '3.
|
|
399
|
+
version: '3.3'
|
|
398
400
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
399
401
|
requirements:
|
|
400
402
|
- - ">="
|
|
401
403
|
- !ruby/object:Gem::Version
|
|
402
404
|
version: '0'
|
|
403
405
|
requirements: []
|
|
404
|
-
rubygems_version: 3.
|
|
406
|
+
rubygems_version: 3.5.22
|
|
405
407
|
signing_key:
|
|
406
408
|
specification_version: 4
|
|
407
409
|
summary: A configurable demo mode for your Rails app.
|