Skip to content

Commit a21dbd2

Browse files
committed
Add system spec for syntax highlight preview
1 parent a0d062c commit a21dbd2

File tree

8 files changed

+58
-24
lines changed

8 files changed

+58
-24
lines changed

app/controllers/concerns/syntax_highlighting.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ module SyntaxHighlighting
66
end
77

88
def find_syntax_highlight
9-
@syntax_highlight ||= preview_syntax_highlight || session_syntax_highlight || default_syntax_highlight
9+
@syntax_highlight ||= preview_syntax_highlight || default_syntax_highlight
1010
end
1111

12-
def preview_syntax_highlight_id = params.fetch(:settings, {}).permit(:syntax_highlight)[:syntax_highlight]
12+
def preview_syntax_highlight_name = params.fetch(:settings, {}).permit(:syntax_highlight_name)[:syntax_highlight_name]
1313

14-
def session_syntax_highlight_id = session[:syntax_highlight]
14+
def session_syntax_highlight_name = session[:syntax_highlight]
1515

16-
def preview_syntax_highlight = @preview_syntax_highlight ||= preview_syntax_highlight_id && Settings::SyntaxHighlight.find(preview_syntax_highlight_id)
16+
def preview_syntax_highlight = @preview_syntax_highlight ||= preview_syntax_highlight_name && Settings::SyntaxHighlight.find(preview_syntax_highlight_name)
1717

18-
def session_syntax_highlight = @session_syntax_highlight ||= session_syntax_highlight_id && Settings::SyntaxHighlight.find(session_syntax_highlight_id)
18+
def session_syntax_highlight = @session_syntax_highlight ||= session_syntax_highlight_name && Settings::SyntaxHighlight.find(session_syntax_highlight_name)
1919

2020
def default_syntax_highlight = @default_syntax_highlight ||= Settings::SyntaxHighlight.default
2121
end

app/controllers/settings/syntax_highlights_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Settings::SyntaxHighlightsController < ApplicationController
22
def show
33
render Settings::SyntaxHighlights::ShowView.new(
4-
current_highlight: find_syntax_highlight,
4+
settings: Settings.new(syntax_highlight: find_syntax_highlight),
55
available_highlights: Settings::SyntaxHighlight.curated
66
)
77
end

app/models/settings.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
class Settings
22
include ActiveModel::Model
33

4-
attr_accessor :color_scheme
4+
attr_accessor :color_scheme, :syntax_highlight
55

6-
def initialize(color_scheme:)
6+
def initialize(color_scheme: nil, syntax_highlight: nil)
77
@color_scheme = color_scheme
8+
@syntax_highlight = syntax_highlight
89
end
910

1011
def color_scheme_id = color_scheme.id
12+
13+
def syntax_highlight_name = syntax_highlight.name
1114
end

app/models/settings/syntax_highlight.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ def initialize(name:, mode:, **)
3131
@mode = mode
3232
end
3333

34+
def display_name
35+
name.titleize
36+
end
37+
3438
def ==(other)
3539
return false if other.nil? || !other.is_a?(self.class)
3640

app/views/application/_footer.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<%= link_to "Settings", settings_color_scheme_path %>
1919
</li>
2020
<li class="">
21-
<%= link_to "Syntax Highlight", settings_syntax_highlight_path %>
21+
<%= link_to "Syntax Highlighting", settings_syntax_highlight_path %>
2222
</li>
2323
<!--
2424
<li>

app/views/settings/syntax_highlights/form.rb

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ class Settings::SyntaxHighlights::Form < ApplicationView
55
include Phlex::Rails::Helpers::ContentFor
66
include Phlex::Rails::Helpers::StylesheetLinkTag
77

8-
def initialize(current_highlight:, available_highlights:)
9-
@current_highlight = current_highlight
8+
def initialize(settings:, available_highlights:)
9+
@settings = settings
10+
@current_highlight = settings.syntax_highlight
1011
@available_highlights = available_highlights
1112
end
1213

@@ -17,22 +18,23 @@ def view_template
1718
p do
1819
plain %(Current syntax highlight style:)
1920
whitespace
20-
strong { @current_highlight.name }
21+
strong { @current_highlight.display_name }
2122
end
2223
form_with(
23-
model: @current_highlight,
24+
model: @settings,
2425
url: settings_syntax_highlight_path,
2526
method: :get
2627
) do |form|
2728
fieldset do
28-
form.label :name, "Choose a syntax highlight style:"
29-
form.select :name,
30-
syntax_highlight_options_for_select,
31-
{
32-
selected: @current_highlight.name
33-
},
34-
name: "settings[syntax_highlight]",
35-
onchange: "this.form.requestSubmit()"
29+
flex_block do
30+
form.label :syntax_highlight_name, "Choose a syntax highlight style to preview:"
31+
form.select :syntax_highlight_name,
32+
syntax_highlight_options_for_select,
33+
{
34+
selected: @current_highlight.name
35+
},
36+
onchange: "this.form.requestSubmit()"
37+
end
3638
end
3739
end
3840

@@ -76,6 +78,10 @@ def each(&)
7678

7779
private
7880

81+
def flex_block(options = {}, &)
82+
div(class: "flex items-start flex-col space-col-4 grid-cols-12 md:items-center md:flex-row md:space-row-4 #{options[:class]}", &)
83+
end
84+
7985
def syntax_highlight_options_for_select
8086
@available_highlights
8187
.group_by { |sh| sh.mode }

app/views/settings/syntax_highlights/show_view.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
class Settings::SyntaxHighlights::ShowView < ApplicationView
22
include Phlex::Rails::Helpers::TurboFrameTag
33

4-
def initialize(current_highlight:, available_highlights:)
5-
@current_highlight = current_highlight
4+
def initialize(settings:, available_highlights:)
5+
@settings = settings
66
@available_highlights = available_highlights
77
end
88

@@ -12,7 +12,7 @@ def view_template
1212
section(class: %(secton-content container py-gap)) do
1313
turbo_frame_tag "syntax-highlight-form", data: {turbo_action: "advance"} do
1414
render Settings::SyntaxHighlights::Form.new(
15-
current_highlight: @current_highlight,
15+
settings: @settings,
1616
available_highlights: @available_highlights
1717
)
1818
end
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# frozen_string_literal: true
2+
3+
require "rails_helper"
4+
5+
RSpec.describe "Customize Syntax Highlighting", type: :system do
6+
it "user can selected a curated syntax highlight" do
7+
visit root_path
8+
9+
click_link "Syntax Highlighting"
10+
11+
expect(page).to have_content("Choose a syntax highlight style to preview")
12+
expect(page).to have_content("Current syntax highlight style: Dracula")
13+
14+
select "Fruity", from: "settings[syntax_highlight_name]"
15+
16+
expect(page).to have_content("Current syntax highlight style: Fruity")
17+
expect(page).not_to have_content("Current syntax highlight style: Dracula")
18+
19+
expect(page).to have_css("link[data-syntax-highlight*=fruity]", visible: false)
20+
end
21+
end

0 commit comments

Comments
 (0)