demo_mode 2.0.1 → 2.3.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/README.md +5 -9
- data/Rakefile +6 -0
- data/app/controllers/demo_mode/sessions_controller.rb +1 -1
- data/app/models/demo_mode/session.rb +4 -4
- data/app/views/layouts/demo_mode/application.html.erb +11 -4
- 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 +11 -3
- data/lib/demo_mode/version.rb +1 -1
- data/lib/demo_mode.rb +4 -4
- metadata +17 -31
- /data/public/{assets/demo_mode → demo_mode/assets}/demo_mode.css +0 -0
- /data/public/{assets/demo_mode → demo_mode/assets}/demo_mode.js +0 -0
- /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: bd6c9ac4c3457ca727a5869cfb4ee13dd9d189a8cbb1bfee91bed6d71c5103b4
|
4
|
+
data.tar.gz: 6ccf2279207588ee5cd1efcca188766badb00ed85a2e15bae373f4fc2eb1796d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5f8a1e8e0f04c228e748e1f149c8c4f4a6e9ace74c9a58e243c23e47b3ab2c74b37f172af9a69ca15e79e6b1f0be8048e81236bfdea120fd17a02a0db461aa2
|
7
|
+
data.tar.gz: 3bab26eddd3379a276c0df342c2b895168b570af6bca36f448fd85b007874692f87c91d4ce12c9910a3a414f86f40006da0f25a30735a802b28a7e8cacd5a26b
|
data/README.md
CHANGED
@@ -278,6 +278,9 @@ generation), and the default persona icon:
|
|
278
278
|
|
279
279
|
```ruby
|
280
280
|
DemoMode.configure do
|
281
|
+
stylesheets.unshift 'first.css'
|
282
|
+
stylesheets.push 'last.css'
|
283
|
+
|
281
284
|
logo { image_tag('my-company-logo.svg') }
|
282
285
|
loader { render partial: 'shared/loading_spinner' }
|
283
286
|
|
@@ -311,19 +314,12 @@ DemoMode.add_persona do
|
|
311
314
|
end
|
312
315
|
```
|
313
316
|
|
314
|
-
|
315
|
-
file at `app/assets/stylesheets/demo_mode/application.css`:
|
317
|
+
The styles use these CSS variables, which you can override.
|
316
318
|
|
317
319
|
```css
|
318
|
-
/*
|
319
|
-
*= require demo_mode/normalize
|
320
|
-
*= require demo_mode/default
|
321
|
-
*= require_self
|
322
|
-
*/
|
323
|
-
|
324
320
|
/* Use CSS variables to override the default font and colors: */
|
325
321
|
:root {
|
326
|
-
--font-family: Papyrus, fantasy;
|
322
|
+
--font-family: Papyrus, fantasy;
|
327
323
|
--primary-color: red;
|
328
324
|
}
|
329
325
|
```
|
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
|
@@ -11,10 +11,10 @@ module DemoMode
|
|
11
11
|
before_create :set_password!
|
12
12
|
|
13
13
|
delegate :begin_demo,
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
:custom_sign_in?,
|
15
|
+
:display_credentials?,
|
16
|
+
to: :persona,
|
17
|
+
allow_nil: true
|
18
18
|
|
19
19
|
def signinable_username
|
20
20
|
signinable.public_send(DemoMode.signinable_username_method)
|
@@ -5,10 +5,17 @@
|
|
5
5
|
<meta charset="UTF-8">
|
6
6
|
<title>Demo Mode</title>
|
7
7
|
<%= favicon_link_tag '/favicon.ico' %>
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
|
9
|
+
<% DemoMode.stylesheets.each do |stylesheet| %>
|
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 %>
|
15
|
+
<% end %>
|
16
|
+
|
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>
|
12
19
|
<%= csrf_meta_tags %>
|
13
20
|
<meta name="viewport" content="width=device-width, initial-scale=1.0 maximum-scale=1.0, user-scalable=0">
|
14
21
|
</head>
|
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
@@ -14,6 +14,7 @@ module DemoMode
|
|
14
14
|
configurable_value(:personas_path) { 'config/personas' }
|
15
15
|
configurable_value(:session_timeout) { 30.minutes }
|
16
16
|
configurable_boolean(:display_credentials)
|
17
|
+
configurations << :stylesheets
|
17
18
|
configurations << :logo
|
18
19
|
configurations << :loader
|
19
20
|
configurations << :icon
|
@@ -27,6 +28,13 @@ module DemoMode
|
|
27
28
|
Rails.application.class.module_parent.name
|
28
29
|
end
|
29
30
|
|
31
|
+
def stylesheets
|
32
|
+
@stylesheets ||= [
|
33
|
+
"/demo_mode/assets/vendor/normalize-v8.0.1.css",
|
34
|
+
"/demo_mode/assets/demo_mode.css?v=#{VERSION}",
|
35
|
+
]
|
36
|
+
end
|
37
|
+
|
30
38
|
def logo(&block)
|
31
39
|
if block
|
32
40
|
@logo = block
|
@@ -39,7 +47,7 @@ module DemoMode
|
|
39
47
|
if block
|
40
48
|
@loader = block
|
41
49
|
else
|
42
|
-
@loader ||= ->(_) { image_tag("/assets/
|
50
|
+
@loader ||= ->(_) { image_tag("/demo_mode/assets/loader.png?v=#{VERSION}") }
|
43
51
|
end
|
44
52
|
end
|
45
53
|
|
@@ -56,8 +64,8 @@ module DemoMode
|
|
56
64
|
end
|
57
65
|
|
58
66
|
WORDS = %w(area book business case child company country day eye fact family government group home job life lot money month night number
|
59
|
-
|
60
|
-
|
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
|
61
69
|
|
62
70
|
def password(&block)
|
63
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
|
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: 2.0
|
4
|
+
version: 2.3.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-12 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
|
- - ">="
|
@@ -350,14 +336,14 @@ files:
|
|
350
336
|
- lib/generators/demo_mode/install_generator.rb
|
351
337
|
- lib/generators/templates/initializer.rb
|
352
338
|
- 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/
|
339
|
+
- public/demo_mode/assets/demo_mode.css
|
340
|
+
- public/demo_mode/assets/demo_mode.js
|
341
|
+
- public/demo_mode/assets/icon--tophat.png
|
342
|
+
- public/demo_mode/assets/icon--user.png
|
343
|
+
- public/demo_mode/assets/icon--users.png
|
344
|
+
- public/demo_mode/assets/loader.png
|
345
|
+
- public/demo_mode/assets/vendor/normalize-v8.0.1.css
|
346
|
+
- public/demo_mode/assets/vendor/typed-v2.1.0.js
|
361
347
|
homepage: http://github.com/betterment/demo_mode
|
362
348
|
licenses:
|
363
349
|
- MIT
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|