Skip to content

Commit 76f4aed

Browse files
committed
uuids and text replacements
1 parent 9f506ef commit 76f4aed

File tree

3 files changed

+46
-12
lines changed

3 files changed

+46
-12
lines changed

app/controllers/conversation_controller.rb

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ def export
1414
description = open_characters_persona_params.fetch('description', '')
1515

1616
add_character_hash = base_open_characters_export.merge({
17+
"uuid": deterministic_uuid(@character.id),
1718
"name": name,
18-
"roleInstruction": "You are to act as #{name}, whos personality is detailed below:\n\n#{description}",
19+
"roleInstruction": "You are to act as #{name}, whose personality is detailed below:\n\n#{description}",
1920
"reminderMessage": "#{personality}\n\nDo not break character!",
2021
})
2122

@@ -32,15 +33,22 @@ def export
3233

3334
private
3435

36+
def deterministic_uuid(id)
37+
static_prefix = "notebook-"
38+
hashed_id = Digest::SHA1.hexdigest(static_prefix + id.to_s)
39+
uuid = "#{hashed_id[0..7]}-#{hashed_id[8..11]}-#{hashed_id[12..15]}-#{hashed_id[16..19]}-#{hashed_id[20..31]}"
40+
uuid
41+
end
42+
3543
def personality_for_character
3644
name = @character.name
37-
gender = @character.get_field_value('Overview', 'Gender')
38-
role = @character.get_field_value('Overview', 'Role')
39-
age = @character.get_field_value('Overview', 'Age')
40-
aliases = @character.get_field_value('Overview', 'Aliases')
41-
hobbies = @character.get_field_value('Nature', 'Hobbies')
45+
gender = @character.get_field_value('Overview', 'Gender').try(:strip)
46+
role = @character.get_field_value('Overview', 'Role').try(:strip)
47+
age = @character.get_field_value('Overview', 'Age').try(:strip)
48+
aliases = @character.get_field_value('Overview', 'Aliases').try(:strip)
49+
hobbies = @character.get_field_value('Nature', 'Hobbies').try(:strip)
4250

43-
[
51+
final_text = [
4452
name,
4553
" is a ",
4654
gender.downcase,
@@ -50,6 +58,8 @@ def personality_for_character
5058
aliases.present? ? "(also known as #{aliases})" : nil,
5159
hobbies.present? ? " into #{hobbies}." : "."
5260
].compact.join
61+
62+
ContentFormatterService.plaintext_show(text: final_text, viewing_user: current_user)
5363
end
5464

5565
def description_for_character
@@ -72,7 +82,7 @@ def description_for_character
7282
description_parts.concat ["TALENTS", talents, nil] if talents.present?
7383
description_parts.concat ["HOBBIES", hobbies, nil] if hobbies.present?
7484

75-
description_parts.join("\n")
85+
ContentFormatterService.plaintext_show(text: description_parts.join("\n"), viewing_user: current_user)
7686
end
7787

7888
def set_character

app/services/content_formatter_service.rb

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@ class ContentFormatterService < Service
2121
# https://s3.amazonaws.com/raw.paste.esk.io/Llb%2F64DJHK?versionId=19Lb_TtukDbo1J_IoCpkr.d.pwpW_vmH
2222
VALID_LINK_CLASSES = Rails.application.config.content_type_names[:all] + %w(Timeline Document)
2323

24+
def self.plaintext_show(text:, viewing_user: User.new)
25+
formatted_text = markdown.render(text || '').html_safe
26+
27+
tokens_to_replace(text).each do |token|
28+
text.gsub!(token[:matched_string], replacement_for_token(token, viewing_user, true))
29+
end
30+
31+
text
32+
end
33+
2434
def self.show(text:, viewing_user: User.new)
2535
# We want to evaluate markdown first, because the markdown engine also happens
2636
# to strip out HTML tags. So: markdown, _then_ insert content links.
@@ -67,7 +77,7 @@ def self.links_to_replace(text)
6777
end
6878
end
6979

70-
def self.replacement_for_token(token, viewing_user)
80+
def self.replacement_for_token(token, viewing_user, plaintext=false)
7181
return unknown_link_template(token) unless token.key?(:content_type) && token.key?(:content_id)
7282
begin
7383
content_class = token[:content_type].titleize.constantize
@@ -81,9 +91,17 @@ def self.replacement_for_token(token, viewing_user)
8191
return unknown_link_template(token) unless content_model.present?
8292

8393
if content_model.readable_by?(viewing_user)
84-
link_template(content_model)
94+
if plaintext
95+
plaintext_replacement_template(content_model)
96+
else
97+
link_template(content_model)
98+
end
8599
else
86-
private_link_template(content_model)
100+
if plaintext
101+
plaintext_replacement_template(content_model)
102+
else
103+
private_link_template(content_model)
104+
end
87105
end
88106
end
89107

@@ -95,6 +113,10 @@ def self.private_link_template(content_model)
95113
inline_template(content_model.class) { link_to(content_model.name, link_for(content_model), class: 'grey-text content_link disabled') }
96114
end
97115

116+
def self.plaintext_replacement_template(content_model)
117+
content_model.name
118+
end
119+
98120
def self.unknown_link_template(attempted_key)
99121
attempted_key[:matched_string]
100122
end

app/views/conversation/character_landing.html.erb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
<div class="col s12 m3">
33
<%= image_tag @character.random_image_including_private %>
44

5-
<%= link_to "Back to #{@character.name}", @character %>
5+
<div>
6+
<%= link_to "Back to #{@character.name}", @character %>
7+
</div>
68
</div>
79
<div class="col s12 m9">
810
<h1 style="font-size: 1.4em">

0 commit comments

Comments
 (0)