demo_mode 2.1.0 → 3.0.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/Rakefile +6 -0
- data/app/controllers/demo_mode/sessions_controller.rb +4 -3
- data/app/jobs/demo_mode/account_generation_job.rb +4 -2
- data/app/models/demo_mode/session.rb +19 -4
- data/app/views/demo_mode/sessions/show.html.erb +5 -1
- data/app/views/layouts/demo_mode/application.html.erb +7 -3
- data/db/migrate/20250210222933_add_demo_mode_sessions_status.rb +13 -0
- data/lib/demo_mode/cli.rb +40 -33
- data/lib/demo_mode/clis/multi_word_search_patch.rb +1 -1
- data/lib/demo_mode/config.rb +5 -5
- data/lib/demo_mode/version.rb +1 -1
- data/lib/demo_mode.rb +4 -4
- data/public/{assets/demo_mode → demo_mode/assets}/demo_mode.css +4 -0
- data/public/{assets/demo_mode → demo_mode/assets}/demo_mode.js +50 -37
- metadata +18 -31
- /data/public/{assets/demo_mode → demo_mode/assets}/icon--tophat.png +0 -0
- /data/public/{assets/demo_mode → demo_mode/assets}/icon--user.png +0 -0
- /data/public/{assets/demo_mode → demo_mode/assets}/icon--users.png +0 -0
- /data/public/{assets/demo_mode → demo_mode/assets}/loader.png +0 -0
- /data/public/{assets/demo_mode → demo_mode/assets}/vendor/normalize-v8.0.1.css +0 -0
- /data/public/{assets/demo_mode → demo_mode/assets}/vendor/typed-v2.1.0.js +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68c310d6d0797c6f17fb85f41ec11f72305619323bf7bf2174d6b6a44c2954f4
|
4
|
+
data.tar.gz: fd5fe9b737d929072e50576ffedfe93d5e516414adb384a4e6d2b4cdc856868a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a235b3dd997af98b44b1947fc3a8832f33793ef0600a027a935cf8cfc0d6c40f9232b2fe969dc146845e319ae9c150001d33308568e6876b9667a4968f8279d1
|
7
|
+
data.tar.gz: f848277ff5fa0a11e27e2c6f0d701069a17b818eceba5e0d86a7e9ce12c5592dfa0b7fe86da1248f07f07122824ccb84a2e3090cb6d0909fbb702f65824a0acf
|
data/Rakefile
CHANGED
@@ -8,6 +8,9 @@ end
|
|
8
8
|
|
9
9
|
Bundler::GemHelper.install_tasks
|
10
10
|
|
11
|
+
APP_RAKEFILE = File.expand_path('spec/dummy/Rakefile', __dir__)
|
12
|
+
load 'rails/tasks/engine.rake'
|
13
|
+
|
11
14
|
require 'rubocop/rake_task'
|
12
15
|
RuboCop::RakeTask.new
|
13
16
|
|
@@ -15,6 +18,9 @@ require 'rspec/core'
|
|
15
18
|
require 'rspec/core/rake_task'
|
16
19
|
RSpec::Core::RakeTask.new(:spec)
|
17
20
|
|
21
|
+
desc 'Create a persona'
|
22
|
+
task create_user: 'app:persona:create'
|
23
|
+
|
18
24
|
def default_task
|
19
25
|
if ENV.fetch('APPRAISAL_INITIALIZED', nil) || ENV.fetch('CI', nil)
|
20
26
|
%i(rubocop spec)
|
@@ -28,7 +28,7 @@ module DemoMode
|
|
28
28
|
@session.save_and_generate_account_later!(**options_params.to_unsafe_h.deep_symbolize_keys)
|
29
29
|
session[:demo_session] = { 'id' => @session.id, 'last_request_at' => Time.zone.now }
|
30
30
|
respond_to do |f|
|
31
|
-
f.html { redirect_to @session }
|
31
|
+
f.html { redirect_to @session, status: :see_other }
|
32
32
|
f.json { render_signinable_json }
|
33
33
|
end
|
34
34
|
end
|
@@ -50,11 +50,12 @@ module DemoMode
|
|
50
50
|
|
51
51
|
def render_signinable_json
|
52
52
|
if @session.signinable.blank?
|
53
|
-
render json: { id: @session.id, processing:
|
53
|
+
render json: { id: @session.id, processing: @session.processing?, status: @session.status }
|
54
54
|
else
|
55
55
|
render json: {
|
56
56
|
id: @session.id,
|
57
|
-
processing:
|
57
|
+
processing: @session.processing?,
|
58
|
+
status: @session.status,
|
58
59
|
username: @session.signinable_username,
|
59
60
|
password: @session.signinable_password,
|
60
61
|
}
|
@@ -8,9 +8,11 @@ module DemoMode
|
|
8
8
|
raise "Unknown persona: #{session.persona_name}" if persona.blank?
|
9
9
|
|
10
10
|
signinable = persona.generate!(variant: session.variant, password: session.signinable_password, options: options)
|
11
|
-
session.update!(signinable: signinable)
|
11
|
+
session.update!(signinable: signinable, status: 'successful')
|
12
12
|
end
|
13
|
-
|
13
|
+
rescue StandardError => e
|
14
|
+
session.update!(status: 'failed')
|
15
|
+
raise e
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
@@ -4,17 +4,26 @@ module DemoMode
|
|
4
4
|
class Session < ActiveRecord::Base
|
5
5
|
attribute :variant, default: :default
|
6
6
|
|
7
|
+
if ActiveRecord.gem_version >= Gem::Version.new('7.2')
|
8
|
+
enum :status, { processing: 'processing', successful: 'successful', failed: 'failed' }, default: 'processing'
|
9
|
+
else
|
10
|
+
attribute :status, default: :processing
|
11
|
+
enum status: { processing: 'processing', successful: 'successful', failed: 'failed' }
|
12
|
+
end
|
13
|
+
|
7
14
|
validates :persona_name, :variant, presence: true
|
8
15
|
validates :persona, presence: { message: :required }, on: :create, if: :persona_name?
|
16
|
+
validate :successful_status_requires_signinable
|
17
|
+
|
9
18
|
belongs_to :signinable, polymorphic: true, optional: true
|
10
19
|
|
11
20
|
before_create :set_password!
|
12
21
|
|
13
22
|
delegate :begin_demo,
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
23
|
+
:custom_sign_in?,
|
24
|
+
:display_credentials?,
|
25
|
+
to: :persona,
|
26
|
+
allow_nil: true
|
18
27
|
|
19
28
|
def signinable_username
|
20
29
|
signinable.public_send(DemoMode.signinable_username_method)
|
@@ -44,5 +53,11 @@ module DemoMode
|
|
44
53
|
def set_password!
|
45
54
|
self.signinable_password ||= DemoMode.current_password
|
46
55
|
end
|
56
|
+
|
57
|
+
def successful_status_requires_signinable
|
58
|
+
if status == 'successful' && signinable.blank?
|
59
|
+
errors.add(:status, 'cannot be successful if signinable is not present')
|
60
|
+
end
|
61
|
+
end
|
47
62
|
end
|
48
63
|
end
|
@@ -17,10 +17,14 @@
|
|
17
17
|
</article>
|
18
18
|
<% else %>
|
19
19
|
<article class="middle center" data-polling-refresh-url='<%= session_path(@session, format: :json) %>'>
|
20
|
-
<figure>
|
20
|
+
<figure id="LoadingMessage" class="<%= 'hidden' if @session.failed? %>">
|
21
21
|
<%= instance_eval(&DemoMode.loader) %>
|
22
22
|
<h4><span id="DemoTypedText"></span></h4>
|
23
23
|
</figure>
|
24
|
+
<div id="ErrorMessage" class="<%= 'hidden' unless @session.failed? %>">
|
25
|
+
<div>Unable to generate persona.</div>
|
26
|
+
<%= link_to "Go back to persona selection", new_session_path, aria: { label: 'Homepage' } %>
|
27
|
+
</div>
|
24
28
|
|
25
29
|
<script type="text/javascript">
|
26
30
|
new Typed('#DemoTypedText', {
|
@@ -7,11 +7,15 @@
|
|
7
7
|
<%= favicon_link_tag '/favicon.ico' %>
|
8
8
|
|
9
9
|
<% DemoMode.stylesheets.each do |stylesheet| %>
|
10
|
-
|
10
|
+
<% if stylesheet.respond_to?(:call) %>
|
11
|
+
<%= stylesheet_link_tag(instance_exec(&stylesheet), media: 'all') %>
|
12
|
+
<% else %>
|
13
|
+
<%= stylesheet_link_tag(stylesheet, media: 'all') %>
|
14
|
+
<% end %>
|
11
15
|
<% end %>
|
12
16
|
|
13
|
-
<script src="/assets/
|
14
|
-
<script src="/assets/demo_mode
|
17
|
+
<script src="/demo_mode/assets/vendor/typed-v2.1.0.js"></script>
|
18
|
+
<script src="/demo_mode/assets/demo_mode.js?v=<%= DemoMode::VERSION %>"></script>
|
15
19
|
<%= csrf_meta_tags %>
|
16
20
|
<meta name="viewport" content="width=device-width, initial-scale=1.0 maximum-scale=1.0, user-scalable=0">
|
17
21
|
</head>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AddDemoModeSessionsStatus < ActiveRecord::Migration[5.1]
|
4
|
+
def change
|
5
|
+
add_column :demo_mode_sessions, :status, :string, null: false, default: 'processing'
|
6
|
+
|
7
|
+
reversible do |dir|
|
8
|
+
dir.up do
|
9
|
+
execute "UPDATE demo_mode_sessions SET status = 'successful'"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/demo_mode/cli.rb
CHANGED
@@ -27,58 +27,65 @@ class DemoMode::Cli
|
|
27
27
|
private
|
28
28
|
|
29
29
|
def ask_next_step
|
30
|
-
CLI::UI::Prompt.ask(
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
prompt_persona
|
36
|
-
end
|
30
|
+
case CLI::UI::Prompt.ask("What next?", options: ["I'm done", "Keep going"])
|
31
|
+
in "I'm done"
|
32
|
+
puts "good bye"
|
33
|
+
in "Keep going"
|
34
|
+
prompt_persona
|
37
35
|
end
|
38
36
|
end
|
39
37
|
|
40
|
-
def prompt_persona
|
38
|
+
def prompt_persona
|
41
39
|
CLI::UI::Frame.open("{{*}} Generate an Account! {{*}}") do
|
42
|
-
|
43
|
-
DemoMode.personas.sort_by { |p| p.name.to_s }.each do |persona|
|
44
|
-
persona_label = persona.name.to_s.titleize
|
45
|
-
|
46
|
-
handler.option(persona_label) do
|
47
|
-
persona.features.each do |feature|
|
48
|
-
puts "👉 #{feature}"
|
49
|
-
end
|
50
|
-
|
51
|
-
named_tags = SemanticLogger.named_tags if defined?(SemanticLogger)
|
52
|
-
|
53
|
-
variant = variant_for(persona, persona_label)
|
40
|
+
personas = DemoMode.personas.sort_by { |p| p.name.to_s }
|
54
41
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
session = DemoMode::Session.new(persona_name: persona.name, variant: variant)
|
59
|
-
session.save_and_generate_account!
|
60
|
-
spinner.update_title('done!')
|
61
|
-
created_sessions << session
|
62
|
-
end
|
63
|
-
end
|
42
|
+
persona_id = CLI::UI::Prompt.ask('Which persona should we use?') do |handler|
|
43
|
+
personas.each.with_index do |persona, i|
|
44
|
+
handler.option(persona_label(persona)) { i.to_s }
|
64
45
|
end
|
65
46
|
end
|
47
|
+
|
48
|
+
execute_persona(personas[persona_id.to_i])
|
66
49
|
end
|
50
|
+
|
67
51
|
display_personas
|
68
52
|
ask_next_step
|
69
53
|
end
|
70
54
|
|
71
|
-
def
|
55
|
+
def execute_persona(persona)
|
56
|
+
persona.features.each do |feature|
|
57
|
+
puts "👉 #{feature}"
|
58
|
+
end
|
59
|
+
|
60
|
+
named_tags = SemanticLogger.named_tags if defined?(SemanticLogger)
|
61
|
+
|
62
|
+
variant = variant_for(persona)
|
63
|
+
|
64
|
+
CLI::UI::Spinner.spin("generating account...") do |spinner|
|
65
|
+
SemanticLogger.push_named_tags(named_tags) if defined?(SemanticLogger)
|
66
|
+
|
67
|
+
session = DemoMode::Session.new(persona_name: persona.name, variant: variant)
|
68
|
+
session.save_and_generate_account!
|
69
|
+
spinner.update_title('done!')
|
70
|
+
created_sessions << session
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def variant_for(persona)
|
72
75
|
if persona.variants.keys == ['default']
|
73
76
|
:default
|
74
77
|
else
|
75
78
|
CLI::UI::Prompt.ask(
|
76
|
-
"Which variant should we use for #{persona_label}?",
|
77
|
-
options: persona.variants.keys,
|
78
|
-
)
|
79
|
+
"Which variant should we use for #{persona_label(persona)}?",
|
80
|
+
options: persona.variants.keys.map(&:to_s),
|
81
|
+
).to_sym
|
79
82
|
end
|
80
83
|
end
|
81
84
|
|
85
|
+
def persona_label(persona)
|
86
|
+
persona.name.to_s.titleize
|
87
|
+
end
|
88
|
+
|
82
89
|
def display_personas
|
83
90
|
created_sessions.each do |session|
|
84
91
|
CLI::UI::Frame.open("{{*}} #{session.persona_name} {{*}}") do
|
@@ -19,7 +19,7 @@ module DemoMode::Clis
|
|
19
19
|
CLI::UI::Prompt.const_get(:InteractiveOptions)
|
20
20
|
end
|
21
21
|
|
22
|
-
def presented_options(recalculate: false) # rubocop:disable Metrics/
|
22
|
+
def presented_options(recalculate: false) # rubocop:disable Metrics/PerceivedComplexity
|
23
23
|
return @presented_options unless recalculate
|
24
24
|
|
25
25
|
@presented_options = @options.zip(1..Float::INFINITY)
|
data/lib/demo_mode/config.rb
CHANGED
@@ -30,8 +30,8 @@ module DemoMode
|
|
30
30
|
|
31
31
|
def stylesheets
|
32
32
|
@stylesheets ||= [
|
33
|
-
"/assets/
|
34
|
-
"/assets/demo_mode
|
33
|
+
"/demo_mode/assets/vendor/normalize-v8.0.1.css",
|
34
|
+
"/demo_mode/assets/demo_mode.css?v=#{VERSION}",
|
35
35
|
]
|
36
36
|
end
|
37
37
|
|
@@ -47,7 +47,7 @@ module DemoMode
|
|
47
47
|
if block
|
48
48
|
@loader = block
|
49
49
|
else
|
50
|
-
@loader ||= ->(_) { image_tag("/assets/
|
50
|
+
@loader ||= ->(_) { image_tag("/demo_mode/assets/loader.png?v=#{VERSION}") }
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -64,8 +64,8 @@ module DemoMode
|
|
64
64
|
end
|
65
65
|
|
66
66
|
WORDS = %w(area book business case child company country day eye fact family government group home job life lot money month night number
|
67
|
-
|
68
|
-
|
67
|
+
office people phone place point problem program question right room school state story student study system thing time water
|
68
|
+
way week word work world year).freeze
|
69
69
|
|
70
70
|
def password(&block)
|
71
71
|
if block
|
data/lib/demo_mode/version.rb
CHANGED
data/lib/demo_mode.rb
CHANGED
@@ -9,16 +9,16 @@ require 'demo_mode/persona'
|
|
9
9
|
|
10
10
|
module DemoMode
|
11
11
|
ICONS = {
|
12
|
-
tophat: "/assets/
|
13
|
-
user: "/assets/
|
14
|
-
users: "/assets/
|
12
|
+
tophat: "/demo_mode/assets/icon--tophat.png?v=#{VERSION}",
|
13
|
+
user: "/demo_mode/assets/icon--user.png?v=#{VERSION}",
|
14
|
+
users: "/demo_mode/assets/icon--users.png?v=#{VERSION}",
|
15
15
|
}.freeze
|
16
16
|
|
17
17
|
class << self
|
18
18
|
delegate(*Config.configurations, to: :configuration)
|
19
19
|
|
20
20
|
def enabled?
|
21
|
-
ActiveModel::Type::Boolean::FALSE_VALUES.exclude?(ENV.fetch('DEMO_MODE', false)).tap do |enabled|
|
21
|
+
ActiveModel::Type::Boolean::FALSE_VALUES.exclude?(ENV.fetch('DEMO_MODE', 'false')).tap do |enabled|
|
22
22
|
webvalve_check! if enabled && defined?(WebValve)
|
23
23
|
end
|
24
24
|
end
|
@@ -1,15 +1,24 @@
|
|
1
|
-
(function(document, performance, location) {
|
1
|
+
(function (document, performance, location) {
|
2
2
|
function* getJSON(url) {
|
3
|
-
while(true) {
|
3
|
+
while (true) {
|
4
|
+
yield fetch(url).then((resp) => resp.json());
|
5
|
+
}
|
4
6
|
}
|
5
7
|
|
6
8
|
function pollURL(url, minInterval, success, func) {
|
7
9
|
const then = performance.now();
|
8
|
-
if(!minInterval) {
|
9
|
-
|
10
|
+
if (!minInterval) {
|
11
|
+
minInterval = 1000;
|
12
|
+
}
|
13
|
+
if (!func) {
|
14
|
+
func = getJSON(url);
|
15
|
+
}
|
10
16
|
|
11
17
|
func.next().value.then((resp) => {
|
12
|
-
if(resp.
|
18
|
+
if (resp.status === 'failed') {
|
19
|
+
document.querySelector("#LoadingMessage").classList.add("hidden");
|
20
|
+
document.querySelector("#ErrorMessage").classList.remove("hidden");
|
21
|
+
} else if (resp.status === 'processing') {
|
13
22
|
setTimeout(
|
14
23
|
() => pollURL(url, minInterval, success, func),
|
15
24
|
Math.max(0, minInterval - (performance.now() - then))
|
@@ -20,50 +29,54 @@
|
|
20
29
|
});
|
21
30
|
}
|
22
31
|
|
23
|
-
document.addEventListener(
|
24
|
-
[...document.querySelectorAll(
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
32
|
+
document.addEventListener("DOMContentLoaded", (event) => {
|
33
|
+
[...document.querySelectorAll("[data-polling-refresh-url]")].forEach(
|
34
|
+
(elem) => {
|
35
|
+
pollURL(
|
36
|
+
elem.getAttribute("data-polling-refresh-url"),
|
37
|
+
elem.getAttribute("data-polling-refresh-interval") * 1000,
|
38
|
+
() => location.reload()
|
39
|
+
);
|
40
|
+
}
|
41
|
+
);
|
31
42
|
});
|
32
|
-
}(document, performance, location)
|
43
|
+
})(document, performance, location);
|
33
44
|
|
34
|
-
(function() {
|
35
|
-
var TableFilter = (function() {
|
45
|
+
(function () {
|
46
|
+
var TableFilter = (function () {
|
36
47
|
var input;
|
37
48
|
var inputValue;
|
38
49
|
|
39
50
|
function onInputEvent(e) {
|
40
51
|
input = e.target;
|
41
|
-
inputValue = input.value.toLowerCase().replace(/[^0-9a-zA-Z ]/g,
|
42
|
-
updateTable()
|
43
|
-
updateHistory()
|
52
|
+
inputValue = input.value.toLowerCase().replace(/[^0-9a-zA-Z ]/g, "");
|
53
|
+
updateTable();
|
54
|
+
updateHistory();
|
44
55
|
}
|
45
56
|
|
46
57
|
function updateTable() {
|
47
58
|
var table = document.querySelector(`.${input.dataset.table}`);
|
48
59
|
if (table) {
|
49
|
-
Array.prototype.forEach.call(table.tBodies, function(tbody) {
|
60
|
+
Array.prototype.forEach.call(table.tBodies, function (tbody) {
|
50
61
|
Array.prototype.forEach.call(tbody.rows, filter);
|
51
62
|
});
|
52
63
|
} else {
|
53
|
-
alert(
|
64
|
+
alert("TableFilter cannot find its table");
|
54
65
|
}
|
55
66
|
}
|
56
67
|
|
57
68
|
function updateHistory() {
|
58
|
-
var searchParams = new URLSearchParams(window.location.search)
|
69
|
+
var searchParams = new URLSearchParams(window.location.search);
|
59
70
|
searchParams.set("search", inputValue);
|
60
|
-
var newRelativePathQuery =
|
61
|
-
|
71
|
+
var newRelativePathQuery =
|
72
|
+
window.location.pathname + "?" + searchParams.toString();
|
73
|
+
history.pushState(null, "", newRelativePathQuery);
|
62
74
|
}
|
63
75
|
|
64
76
|
function filter(row) {
|
65
|
-
var text = row.textContent.toLowerCase().replace(/[^0-9a-zA-Z ]/g,
|
66
|
-
row.style.display =
|
77
|
+
var text = row.textContent.toLowerCase().replace(/[^0-9a-zA-Z ]/g, "");
|
78
|
+
row.style.display =
|
79
|
+
text.indexOf(inputValue) === -1 ? "none" : "table-row";
|
67
80
|
}
|
68
81
|
|
69
82
|
function debounce(func, threshold) {
|
@@ -76,7 +89,7 @@
|
|
76
89
|
function delayed() {
|
77
90
|
func.apply(obj, args);
|
78
91
|
timeout = null;
|
79
|
-
}
|
92
|
+
}
|
80
93
|
|
81
94
|
if (timeout) {
|
82
95
|
clearTimeout(timeout);
|
@@ -86,32 +99,32 @@
|
|
86
99
|
}
|
87
100
|
|
88
101
|
return {
|
89
|
-
init: function() {
|
90
|
-
var input = document.querySelector(
|
102
|
+
init: function () {
|
103
|
+
var input = document.querySelector("input[data-behavior=table-filter]");
|
91
104
|
if (!input) return;
|
92
105
|
|
93
106
|
input.oninput = debounce(onInputEvent, 250);
|
94
107
|
var urlParams = new URLSearchParams(window.location.search);
|
95
|
-
var search = urlParams.get(
|
108
|
+
var search = urlParams.get("search");
|
96
109
|
if (search) {
|
97
|
-
input.value = search
|
98
|
-
input.dispatchEvent(new InputEvent(
|
110
|
+
input.value = search;
|
111
|
+
input.dispatchEvent(new InputEvent("input", { data: search }));
|
99
112
|
}
|
100
113
|
|
101
|
-
window.addEventListener(
|
114
|
+
window.addEventListener("popstate", (event) => {
|
102
115
|
var urlParams = new URLSearchParams(window.location.search);
|
103
|
-
var search = urlParams.get(
|
116
|
+
var search = urlParams.get("search");
|
104
117
|
if (search) {
|
105
118
|
input.value = search;
|
106
119
|
inputValue = search;
|
107
|
-
updateTable()
|
120
|
+
updateTable();
|
108
121
|
}
|
109
122
|
});
|
110
|
-
}
|
123
|
+
},
|
111
124
|
};
|
112
125
|
})();
|
113
126
|
|
114
|
-
document.addEventListener(
|
127
|
+
document.addEventListener("DOMContentLoaded", (event) => {
|
115
128
|
TableFilter.init();
|
116
129
|
});
|
117
130
|
})();
|
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:
|
4
|
+
version: 3.0.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: 2025-02-
|
11
|
+
date: 2025-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -94,16 +94,16 @@ dependencies:
|
|
94
94
|
name: cli-ui
|
95
95
|
requirement: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- - "
|
97
|
+
- - "~>"
|
98
98
|
- !ruby/object:Gem::Version
|
99
|
-
version: '
|
99
|
+
version: '2.3'
|
100
100
|
type: :runtime
|
101
101
|
prerelease: false
|
102
102
|
version_requirements: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
|
-
- - "
|
104
|
+
- - "~>"
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
version: '
|
106
|
+
version: '2.3'
|
107
107
|
- !ruby/object:Gem::Dependency
|
108
108
|
name: railties
|
109
109
|
requirement: !ruby/object:Gem::Requirement
|
@@ -186,20 +186,6 @@ dependencies:
|
|
186
186
|
- - ">="
|
187
187
|
- !ruby/object:Gem::Version
|
188
188
|
version: '0'
|
189
|
-
- !ruby/object:Gem::Dependency
|
190
|
-
name: combustion
|
191
|
-
requirement: !ruby/object:Gem::Requirement
|
192
|
-
requirements:
|
193
|
-
- - ">="
|
194
|
-
- !ruby/object:Gem::Version
|
195
|
-
version: '0'
|
196
|
-
type: :development
|
197
|
-
prerelease: false
|
198
|
-
version_requirements: !ruby/object:Gem::Requirement
|
199
|
-
requirements:
|
200
|
-
- - ">="
|
201
|
-
- !ruby/object:Gem::Version
|
202
|
-
version: '0'
|
203
189
|
- !ruby/object:Gem::Dependency
|
204
190
|
name: cuprite
|
205
191
|
requirement: !ruby/object:Gem::Requirement
|
@@ -257,7 +243,7 @@ dependencies:
|
|
257
243
|
- !ruby/object:Gem::Version
|
258
244
|
version: '0'
|
259
245
|
- !ruby/object:Gem::Dependency
|
260
|
-
name:
|
246
|
+
name: sorbet-runtime
|
261
247
|
requirement: !ruby/object:Gem::Requirement
|
262
248
|
requirements:
|
263
249
|
- - ">="
|
@@ -271,7 +257,7 @@ dependencies:
|
|
271
257
|
- !ruby/object:Gem::Version
|
272
258
|
version: '0'
|
273
259
|
- !ruby/object:Gem::Dependency
|
274
|
-
name:
|
260
|
+
name: sprockets-rails
|
275
261
|
requirement: !ruby/object:Gem::Requirement
|
276
262
|
requirements:
|
277
263
|
- - ">="
|
@@ -285,7 +271,7 @@ dependencies:
|
|
285
271
|
- !ruby/object:Gem::Version
|
286
272
|
version: '0'
|
287
273
|
- !ruby/object:Gem::Dependency
|
288
|
-
name:
|
274
|
+
name: sqlite3
|
289
275
|
requirement: !ruby/object:Gem::Requirement
|
290
276
|
requirements:
|
291
277
|
- - ">="
|
@@ -336,6 +322,7 @@ files:
|
|
336
322
|
- db/migrate/20190503143021_add_demo_mode_sessions.rb
|
337
323
|
- db/migrate/20201111000000_add_demo_mode_sessions_variant.rb
|
338
324
|
- db/migrate/20210505000000_add_demo_mode_sessions_password.rb
|
325
|
+
- db/migrate/20250210222933_add_demo_mode_sessions_status.rb
|
339
326
|
- lib/demo_mode.rb
|
340
327
|
- lib/demo_mode/clever_sequence.rb
|
341
328
|
- lib/demo_mode/cli.rb
|
@@ -350,14 +337,14 @@ files:
|
|
350
337
|
- lib/generators/demo_mode/install_generator.rb
|
351
338
|
- lib/generators/templates/initializer.rb
|
352
339
|
- lib/generators/templates/sample_persona.rb
|
353
|
-
- public/assets/demo_mode
|
354
|
-
- public/assets/demo_mode
|
355
|
-
- public/assets/
|
356
|
-
- public/assets/
|
357
|
-
- public/assets/
|
358
|
-
- public/assets/
|
359
|
-
- public/assets/
|
360
|
-
- public/assets/
|
340
|
+
- public/demo_mode/assets/demo_mode.css
|
341
|
+
- public/demo_mode/assets/demo_mode.js
|
342
|
+
- public/demo_mode/assets/icon--tophat.png
|
343
|
+
- public/demo_mode/assets/icon--user.png
|
344
|
+
- public/demo_mode/assets/icon--users.png
|
345
|
+
- public/demo_mode/assets/loader.png
|
346
|
+
- public/demo_mode/assets/vendor/normalize-v8.0.1.css
|
347
|
+
- public/demo_mode/assets/vendor/typed-v2.1.0.js
|
361
348
|
homepage: http://github.com/betterment/demo_mode
|
362
349
|
licenses:
|
363
350
|
- MIT
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|