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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b196c5819bc10bf1250a85f86945116322e6b5c6b80ab5aa5203f53bdb51703e
4
- data.tar.gz: 4ff919a389d224246010c59644c400608afb1e0d55a80fe5f049ba0cc86280f0
3
+ metadata.gz: bd6c9ac4c3457ca727a5869cfb4ee13dd9d189a8cbb1bfee91bed6d71c5103b4
4
+ data.tar.gz: 6ccf2279207588ee5cd1efcca188766badb00ed85a2e15bae373f4fc2eb1796d
5
5
  SHA512:
6
- metadata.gz: 1b82b5aef0976ca6267cbf9bcce2aabc49e157c0bbba42623819f30559e3edd8d6486b5ec1caa02df20fbd61995bdf1759aef00d3361d1a264ef2c2ff59b57df
7
- data.tar.gz: 02ba40ba00c3247bb9652b4fafad550b23821ca1326fa380384042d21bc2c5c33eba7b246cc634bdef0681b69d9e1e80492905bb208c4c82ba06ae7cc0e4beb3
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
- To customize or override the CSS entirely, create your own application.css
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
- :custom_sign_in?,
15
- :display_credentials?,
16
- to: :persona,
17
- allow_nil: true
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
- <link rel="stylesheet" href="/assets/demo_mode/vendor/normalize-v8.0.1.css">
9
- <link rel="stylesheet" href="/assets/demo_mode/demo_mode.css?v=<%= DemoMode::VERSION %>">
10
- <script src="/assets/demo_mode/vendor/typed-v2.1.0.js"></script>
11
- <script src="/assets/demo_mode/demo_mode.js?v=<%= DemoMode::VERSION %>"></script>
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('What next?') do |handler|
31
- handler.option("I'm done") do
32
- puts "good bye"
33
- end
34
- handler.option('Keep going') do
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 # rubocop:disable Metrics/AbcSize
38
+ def prompt_persona
41
39
  CLI::UI::Frame.open("{{*}} Generate an Account! {{*}}") do
42
- CLI::UI::Prompt.ask('Which persona should we use?') do |handler|
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
- CLI::UI::Spinner.spin("generating account...") do |spinner|
56
- SemanticLogger.push_named_tags(named_tags) if defined?(SemanticLogger)
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 variant_for(persona, persona_label)
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/AbcSize, Metrics/PerceivedComplexity
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)
@@ -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/demo_mode/loader.png?v=#{VERSION}") }
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
- office people phone place point problem program question right room school state story student study system thing time water
60
- way week word work world year).freeze
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DemoMode
4
- VERSION = '2.0.1'
4
+ VERSION = '2.3.0'
5
5
  end
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/demo_mode/icon--tophat.png?v=#{VERSION}",
13
- user: "/assets/demo_mode/icon--user.png?v=#{VERSION}",
14
- users: "/assets/demo_mode/icon--users.png?v=#{VERSION}",
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.1
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-06 00:00:00.000000000 Z
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: '0'
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: '0'
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: sprockets-rails
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: sqlite3
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: uncruft
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/demo_mode.css
354
- - public/assets/demo_mode/demo_mode.js
355
- - public/assets/demo_mode/icon--tophat.png
356
- - public/assets/demo_mode/icon--user.png
357
- - public/assets/demo_mode/icon--users.png
358
- - public/assets/demo_mode/loader.png
359
- - public/assets/demo_mode/vendor/normalize-v8.0.1.css
360
- - public/assets/demo_mode/vendor/typed-v2.1.0.js
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