Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fda5bcf3f6 | |||
| 01005fdccf |
@@ -45,6 +45,5 @@ jobs:
|
|||||||
tags: ${{ env.DEPLOY_NAME }}
|
tags: ${{ env.DEPLOY_NAME }}
|
||||||
cache-from: type=local,src=/tmp/.buildx-cache
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
cache-to: type=local,dest=/tmp/.buildx-cache
|
cache-to: type=local,dest=/tmp/.buildx-cache
|
||||||
platforms: linux/amd64, linux/arm64
|
|
||||||
- name: Image digest
|
- name: Image digest
|
||||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
run: echo ${{ steps.docker_build.outputs.digest }}
|
||||||
|
|||||||
+1
-2
@@ -32,8 +32,7 @@ COPY --from=builder /usr/local/bundle/ /usr/local/bundle/
|
|||||||
|
|
||||||
RUN apk add \
|
RUN apk add \
|
||||||
bash \
|
bash \
|
||||||
git \
|
git
|
||||||
libc6-compat
|
|
||||||
|
|
||||||
VOLUME /wiki
|
VOLUME /wiki
|
||||||
WORKDIR /wiki
|
WORKDIR /wiki
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ Gem::Specification.new do |s|
|
|||||||
s.rdoc_options = ['--charset=UTF-8']
|
s.rdoc_options = ['--charset=UTF-8']
|
||||||
s.extra_rdoc_files = %w[README.md LICENSE]
|
s.extra_rdoc_files = %w[README.md LICENSE]
|
||||||
|
|
||||||
s.add_dependency 'rdoc', '~> 6'
|
|
||||||
s.add_dependency 'gollum-lib', '~> 5.1'
|
s.add_dependency 'gollum-lib', '~> 5.1'
|
||||||
s.add_dependency 'kramdown', '~> 2.3'
|
s.add_dependency 'kramdown', '~> 2.3'
|
||||||
s.add_dependency 'kramdown-parser-gfm', '~> 1.1.0'
|
s.add_dependency 'kramdown-parser-gfm', '~> 1.1.0'
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
en:
|
|
||||||
pagination:
|
|
||||||
aria:
|
|
||||||
label: Pagination
|
|
||||||
next_page: Next page
|
|
||||||
previous_page: Previous page
|
|
||||||
next: Next
|
|
||||||
previous: Previous
|
|
||||||
precious/views/compare:
|
|
||||||
back_to_page_history: Back to Page History
|
|
||||||
back_to_top: Back to Top
|
|
||||||
comparison_of: Comparison of
|
|
||||||
comparing_versions_of: Comparing versions of
|
|
||||||
comparing_from: "Comparing %{before} to %{after}"
|
|
||||||
revert: Revert Changes
|
|
||||||
precious/views/error:
|
|
||||||
error: Error
|
|
||||||
precious/views/history:
|
|
||||||
browse_in_history_description: Browse the page at this point in the history
|
|
||||||
compare_revisions: Compare Revisions
|
|
||||||
history_for: History for
|
|
||||||
precious/views/latest_changes:
|
|
||||||
title: Latest Changes (Globally)
|
|
||||||
precious/views/layout:
|
|
||||||
title: Home
|
|
||||||
precious/views/overview:
|
|
||||||
back_to_top: Back to Top
|
|
||||||
delete_confirmation: "Are you sure you want to delete %{name}?"
|
|
||||||
no_pages_in: There are no pages in
|
|
||||||
on: "on"
|
|
||||||
title: "Overview of %{ref}"
|
|
||||||
precious/views/search:
|
|
||||||
aria:
|
|
||||||
show_all: "Show all %{count} hits in this page"
|
|
||||||
back_to_top: Back to Top
|
|
||||||
no_results: There are no results for your search
|
|
||||||
search_results_for: Search results for
|
|
||||||
title: "Search results for %{query}"
|
|
||||||
@@ -4,84 +4,55 @@
|
|||||||
|
|
||||||
<h1 class="header-title text-center text-md-left py-4">
|
<h1 class="header-title text-center text-md-left py-4">
|
||||||
<span class="f1-light text-gray-light">
|
<span class="f1-light text-gray-light">
|
||||||
{{t.comparing_versions_of}}
|
Comparing versions of
|
||||||
</span>
|
</span>
|
||||||
{{name}}
|
{{name}}
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{#message}}
|
{{#message}}
|
||||||
<p>{{message}}</p>
|
<p>{{message}}</p>
|
||||||
{{/message}}
|
{{/message}}
|
||||||
|
|
||||||
<div id="compare-content">
|
<div id="compare-content">
|
||||||
|
|
||||||
<div class="py-4" id="actions">
|
<div class="py-4" id="actions">
|
||||||
{{#show_revert}}
|
{{#show_revert}}
|
||||||
{{#allow_editing}}
|
{{#allow_editing}}
|
||||||
<form name="gollum-revert" action="{{revert_path}}/{{escaped_url_path}}/{{before}}/{{after}}" method="post" id="gollum-revert-form"></form>
|
<form name="gollum-revert" action="{{revert_path}}/{{escaped_url_path}}/{{before}}/{{after}}" method="post" id="gollum-revert-form"></form>
|
||||||
<span class="pb-4">
|
<span class="pb-4">
|
||||||
<button
|
<button class="btn btn-sm" type="submit" onclick="$('#gollum-revert-form').submit()">Revert Changes</button>
|
||||||
class="btn btn-sm"
|
</span>
|
||||||
onclick="$('#gollum-revert-form').submit()"
|
{{/allow_editing}}
|
||||||
type="submit"
|
{{/show_revert}}
|
||||||
>
|
<a href="{{history_path}}/{{escaped_url_path}}" class="btn btn-sm action-page-history">Back to Page History</a>
|
||||||
{{t.revert}}
|
</div>
|
||||||
</button>
|
|
||||||
</span>
|
|
||||||
{{/allow_editing}}
|
|
||||||
{{/show_revert}}
|
|
||||||
|
|
||||||
<a
|
<div class="Box data highlight">
|
||||||
class="btn btn-sm action-page-history"
|
<div class="Box-header Box--condensed Box-header--gray">{{path}} <span class="px-2 float-right">Comparing {{before}} to {{after}}</span></div>
|
||||||
href="{{history_path}}/{{escaped_url_path}}"
|
<table >
|
||||||
>
|
{{#lines}}
|
||||||
{{t.back_to_page_history}}
|
<tr>
|
||||||
</a>
|
<td class="line_numbers">{{ldln}}</td>
|
||||||
</div>
|
<td class="line_numbers">{{rdln}}</td>
|
||||||
|
<td>
|
||||||
|
<div class="{{class}} pl-2">{{line}}</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{/lines}}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="Box data highlight">
|
<div class="pt-4" id="footer">
|
||||||
<div class="Box-header Box--condensed Box-header--gray">
|
{{#show_revert}}
|
||||||
{{path}}
|
{{#allow_editing}}
|
||||||
|
<span class="pt-4"><button class="btn btn-sm gollum-revert-button" type="submit" onclick="$('#gollum-revert-form').submit()">Revert Changes</button></span>
|
||||||
<span class="px-2 float-right">
|
{{/allow_editing}}
|
||||||
{{t.comparing_from}}
|
{{/show_revert}}
|
||||||
</span>
|
<div class="pt-4">
|
||||||
</div>
|
<a href="#">Back to Top</a>
|
||||||
|
</div>
|
||||||
<table>
|
</div>
|
||||||
{{#lines}}
|
|
||||||
<tr>
|
|
||||||
<td class="line_numbers">{{ldln}}</td>
|
|
||||||
<td class="line_numbers">{{rdln}}</td>
|
|
||||||
<td>
|
|
||||||
<div class="{{class}} pl-2">{{line}}</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{{/lines}}
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="pt-4" id="footer">
|
|
||||||
{{#show_revert}}
|
|
||||||
{{#allow_editing}}
|
|
||||||
<span class="pt-4">
|
|
||||||
<button
|
|
||||||
class="btn btn-sm gollum-revert-button"
|
|
||||||
onclick="$('#gollum-revert-form').submit()"
|
|
||||||
type="submit"
|
|
||||||
>
|
|
||||||
{{t.revert}}
|
|
||||||
</button>
|
|
||||||
</span>
|
|
||||||
{{/allow_editing}}
|
|
||||||
{{/show_revert}}
|
|
||||||
|
|
||||||
<div class="pt-4">
|
|
||||||
<a href="#">
|
|
||||||
{{t.back_to_top}}
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<div id="wiki-wrapper" class="error">
|
<div id="wiki-wrapper" class="error">
|
||||||
<div id="error">
|
<div id="error">
|
||||||
<h1>{{t.error}}</h1>
|
<h1>Error</h1>
|
||||||
<p>
|
<p>
|
||||||
{{message}}
|
{{message}}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<h1 class="header-title text-center text-md-left py-4">
|
<h1 class="header-title text-center text-md-left py-4">
|
||||||
<span class="f1-light text-gray-light">
|
<span class="f1-light text-gray-light">
|
||||||
{{t.history_for}}
|
History for
|
||||||
</span>
|
</span>
|
||||||
{{name}}
|
{{name}}
|
||||||
</h1>
|
</h1>
|
||||||
@@ -14,41 +14,32 @@
|
|||||||
|
|
||||||
{{>pagination}}
|
{{>pagination}}
|
||||||
|
|
||||||
<form name="selection-form" id="selection-form" method="get" action="{{compare_path}}/{{escaped_url_path}}"></form>
|
<form name="selection-form" id="selection-form" method="get" action="{{compare_path}}/{{escaped_url_path}}"></form>
|
||||||
|
|
||||||
<div id="page-history-list" class="Box Box--condensed flex-auto">
|
<div id="page-history-list" class="Box Box--condensed flex-auto">
|
||||||
<form id="version-form">
|
<form id="version-form">
|
||||||
<ul>
|
<ul>
|
||||||
{{#versions}}
|
{{#versions}}
|
||||||
<li class="Box-row border-top Box-row--hover-gray d-flex flex-items-center">
|
<li class="Box-row border-top Box-row--hover-gray d-flex flex-items-center">
|
||||||
<span class="pr-2"><input class="checkbox" type="checkbox" name="versions[]" value="{{id}}"></span>
|
<span class="pr-2"><input class="checkbox" type="checkbox" name="versions[]" value="{{id}}"></span>
|
||||||
<span class="float-left col-2" id="user-icons">{{>author_template}}</span>
|
<span class="float-left col-2" id="user-icons">{{>author_template}}</span>
|
||||||
<time class="flex-auto col-1 text-gray-light" datetime="{{datetime}}" data-format="{{date_format}}">{{date}}</time>
|
<time class="flex-auto col-1 text-gray-light" datetime="{{datetime}}" data-format="{{date_format}}">{{date}}</time>
|
||||||
<span class="flex-auto col-5">{{message}}</span>
|
<span class="flex-auto col-5">{{message}}</span>
|
||||||
<span class="pl-4 float-right">
|
<span class="pl-4 float-right">
|
||||||
<a href="{{href}}" class="btn btn-outline text-mono">{{id7}}</a>
|
<a href="{{href}}" class="btn btn-outline text-mono">{{id7}}</a>
|
||||||
<a
|
<a href="{{href_page}}" title="Browse the page at this point in the history" class="btn btn-outline">{{#octicon}}code{{/octicon}}</a>
|
||||||
class="btn btn-outline"
|
</span>
|
||||||
href="{{href_page}}"
|
</li>
|
||||||
title="{{t.browse_in_history_description}}"
|
{{/versions}}
|
||||||
>
|
</ul>
|
||||||
{{#octicon}}code{{/octicon}}
|
</form>
|
||||||
</a>
|
</div>
|
||||||
</span>
|
|
||||||
</li>
|
|
||||||
{{/versions}}
|
|
||||||
</ul>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="footer">
|
|
||||||
<div class="pt-4">
|
|
||||||
<button
|
<div id="footer">
|
||||||
class="btn btn-sm action-compare-revision"
|
<div class="pt-4">
|
||||||
type="submit"
|
<button class="btn btn-sm action-compare-revision" type="submit">Compare Revisions</button>
|
||||||
>
|
</div>
|
||||||
{{t.compare_revisions}}
|
</div>
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -21,16 +21,8 @@
|
|||||||
<span class="pr-2">{{{icon}}}</span>
|
<span class="pr-2">{{{icon}}}</span>
|
||||||
<span><a href="{{url}}">{{name}}</a></span>
|
<span><a href="{{url}}">{{name}}</a></span>
|
||||||
{{#allow_editing}}
|
{{#allow_editing}}
|
||||||
{{#is_file}}
|
{{#is_file}}<button class="btn btn-sm float-right delete-file" data-file-path="{{file_path}}" data-confirm="Are you sure you want to delete {{name}}?">{{#octicon}}trash{{/octicon}}</button>{{/is_file}}
|
||||||
<button
|
{{/allow_editing}}
|
||||||
class="btn btn-sm float-right delete-file"
|
|
||||||
data-confirm="{{t.delete_confirmation}}"
|
|
||||||
data-file-path="{{file_path}}"
|
|
||||||
>
|
|
||||||
{{#octicon}}trash{{/octicon}}
|
|
||||||
</button>
|
|
||||||
{{/is_file}}
|
|
||||||
{{/allow_editing}}
|
|
||||||
</li>
|
</li>
|
||||||
{{/files_folders}}
|
{{/files_folders}}
|
||||||
</ul>
|
</ul>
|
||||||
@@ -41,18 +33,13 @@
|
|||||||
|
|
||||||
{{#no_results}}
|
{{#no_results}}
|
||||||
<p id="no-results">
|
<p id="no-results">
|
||||||
{{t.no_pages_in}}
|
There are no pages in <strong>{{current_path}}</strong> on <strong>{{ref}}</strong>.
|
||||||
<strong>{{current_path}}</strong>
|
|
||||||
{{t.on}}
|
|
||||||
<strong>{{ref}}</strong>.
|
|
||||||
</p>
|
</p>
|
||||||
{{/no_results}}
|
{{/no_results}}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="pt-4" id="footer">
|
<div class="pt-4" id="footer">
|
||||||
<a href="#">
|
<a href="#">Back to Top</a>
|
||||||
{{t.back_to_top}}
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,6 @@
|
|||||||
<nav class="paginate-container" aria-label="{{tt.pagination.aria.label}}">
|
<nav class="paginate-container" aria-label="Pagination">
|
||||||
<div class="pagination" id="pagination">
|
<div class="pagination" id="pagination">
|
||||||
<a
|
<a id="prev" href="?page_num={{previous_page}}{{query_string}}" class="previous_page {{^previous_page}}disabled{{/previous_page}}">Previous</span>
|
||||||
aria-label="{{td.pagination.aria.previous_page}}"
|
<a id="next" href="?page_num={{next_page}}{{query_string}}" class="next_page {{^next_page}}disabled{{/next_page}}" rel="next" aria-label="Next Page">Next</a>
|
||||||
class="previous_page {{^previous_page}}disabled{{/previous_page}}"
|
|
||||||
href="?page_num={{previous_page}}{{query_string}}"
|
|
||||||
id="prev"
|
|
||||||
rel="prev"
|
|
||||||
>
|
|
||||||
{{tt.pagination.previous}}
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<a
|
|
||||||
aria-label="{{td.pagination.aria.next_page}}"
|
|
||||||
class="next_page {{^next_page}}disabled{{/next_page}}"
|
|
||||||
href="?page_num={{next_page}}{{query_string}}"
|
|
||||||
id="next"
|
|
||||||
rel="next"
|
|
||||||
>
|
|
||||||
{{tt.pagination.next}}
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<h1 class="header-title text-center text-md-left py-4">
|
<h1 class="header-title text-center text-md-left py-4">
|
||||||
<span class="f1-light text-gray-light">
|
<span class="f1-light text-gray-light">
|
||||||
{{t.search_results_for}}
|
Search results for
|
||||||
</span>
|
</span>
|
||||||
{{name}}
|
{{name}}
|
||||||
</h1>
|
</h1>
|
||||||
@@ -21,12 +21,7 @@
|
|||||||
<li class="Box-row Box-row--gray">
|
<li class="Box-row Box-row--gray">
|
||||||
<span class="Counter Counter--gray tooltipped tooltipped-w" aria-label="{{filename_count}} hits in filename - {{count}} hits in content">{{filename_count}} - {{count}}</span>
|
<span class="Counter Counter--gray tooltipped tooltipped-w" aria-label="{{filename_count}} hits in filename - {{count}} hits in content">{{filename_count}} - {{count}}</span>
|
||||||
<span class="text-bold"><a href="{{href}}">{{name}}</a></span>
|
<span class="text-bold"><a href="{{href}}">{{name}}</a></span>
|
||||||
<button
|
<button class="btn-link tooltipped tooltipped-w float-right toggle-context" aria-label="Show all {{count}} hits in this page">{{#octicon}}search{{/octicon}}</button>
|
||||||
class="btn-link tooltipped tooltipped-w float-right toggle-context"
|
|
||||||
aria-label="{{t.aria.show_all}}"
|
|
||||||
>
|
|
||||||
{{#octicon}}search{{/octicon}}
|
|
||||||
</button>
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<div class="search-context">
|
<div class="search-context">
|
||||||
@@ -34,6 +29,7 @@
|
|||||||
<li class="Box-row border-0"><span class="text-italic">{{.}}</span></li>
|
<li class="Box-row border-0"><span class="text-italic">{{.}}</span></li>
|
||||||
{{/context}}
|
{{/context}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{/results}}
|
{{/results}}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -41,12 +37,12 @@
|
|||||||
|
|
||||||
{{#no_results}}
|
{{#no_results}}
|
||||||
<p id="no-results">
|
<p id="no-results">
|
||||||
{{t.no_results}} <strong>{{query}}</strong>.
|
There are no results for your search <strong>{{query}}</strong>.
|
||||||
</p>
|
</p>
|
||||||
{{/no_results}}
|
{{/no_results}}
|
||||||
|
|
||||||
<div id="footer" class="mt-4">
|
<div id="footer" class="mt-4">
|
||||||
<a class="btn" href="#">{{t.back_to_top}}</a>
|
<a class="btn" href="#">Back to Top</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ module Precious
|
|||||||
attr_reader :page, :diff, :versions, :message, :allow_editing
|
attr_reader :page, :diff, :versions, :message, :allow_editing
|
||||||
|
|
||||||
def title
|
def title
|
||||||
[t[:comparison_of], @page.title].join(" ")
|
"Comparison of #{@page.title}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def before
|
def before
|
||||||
|
|||||||
@@ -21,13 +21,6 @@ module Precious
|
|||||||
autofill I18n.t(locale_klass_name)
|
autofill I18n.t(locale_klass_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns all I18n translation strings from the root of an I18n YAML file.
|
|
||||||
# Otherwise, it works exactly like the `#t` method that's also defined in
|
|
||||||
# this file.
|
|
||||||
def tt
|
|
||||||
autofill I18n.t('.')
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# Recursively looks up I18n translation values and autofills any YAML
|
# Recursively looks up I18n translation values and autofills any YAML
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ module Precious
|
|||||||
attr_reader :wiki
|
attr_reader :wiki
|
||||||
|
|
||||||
def title
|
def title
|
||||||
t[:title]
|
"Latest Changes (Globally)"
|
||||||
end
|
end
|
||||||
|
|
||||||
def versions
|
def versions
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ module Precious
|
|||||||
end
|
end
|
||||||
|
|
||||||
def title
|
def title
|
||||||
t[:title]
|
"Home"
|
||||||
end
|
end
|
||||||
|
|
||||||
def has_path
|
def has_path
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ require 'pathname'
|
|||||||
module Precious
|
module Precious
|
||||||
module Views
|
module Views
|
||||||
class Overview < Layout
|
class Overview < Layout
|
||||||
attr_reader :name, :results, :ref, :allow_editing, :newable
|
attr_reader :results, :ref, :allow_editing, :newable
|
||||||
HIDDEN_PATHS = ['.gitkeep']
|
HIDDEN_PATHS = ['.gitkeep']
|
||||||
|
|
||||||
def title
|
def title
|
||||||
t[:title]
|
"Overview of #{@ref}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# def editable
|
# def editable
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ module Precious
|
|||||||
end
|
end
|
||||||
|
|
||||||
def title
|
def title
|
||||||
t[:title]
|
"Search results for " + @query
|
||||||
end
|
end
|
||||||
|
|
||||||
def search
|
def search
|
||||||
|
|||||||
@@ -15,13 +15,12 @@ describe Precious::Views::LocaleHelpers do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
I18n.available_locales = [:en, :de]
|
::I18n.available_locales = [:en, :de]
|
||||||
I18n.load_path = Dir[File.expand_path("test/support/locales" + "/*.yml")]
|
::I18n.load_path = Dir[File.expand_path("test/support/locales" + "/*.yml")]
|
||||||
end
|
end
|
||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
I18n.locale = :en
|
I18n.locale = :en
|
||||||
I18n.load_path = Dir[::File.expand_path("lib/gollum/locales") + "/*.yml"]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:dummy_instance) { TestClass.new }
|
let(:dummy_instance) { TestClass.new }
|
||||||
@@ -132,99 +131,4 @@ describe Precious::Views::LocaleHelpers do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#tt" do
|
|
||||||
describe "mustache usage" do
|
|
||||||
let(:subject) { dummy_instance.render(mustache_template) }
|
|
||||||
|
|
||||||
let(:mustache_template) { "{{ tt.test_class.hello_world }}" }
|
|
||||||
|
|
||||||
describe "in the default locale" do
|
|
||||||
it "returns the translation string" do
|
|
||||||
_(subject).must_equal "Hello world"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "in the configured locale" do
|
|
||||||
it "returns the translation string" do
|
|
||||||
I18n.locale = :de
|
|
||||||
|
|
||||||
_(subject).must_equal "Hallo Welt"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "translations with YAML arguments" do
|
|
||||||
let(:mustache_template) { "{{ tt.test_class.author_info.full }}" }
|
|
||||||
|
|
||||||
describe "in the default locale" do
|
|
||||||
it "autofills YAML arguments" do
|
|
||||||
_(subject).must_equal "Author J.R.R. is from Bloemfontein"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "in the configured locale" do
|
|
||||||
it "autofills YAML arguments" do
|
|
||||||
I18n.locale = :de
|
|
||||||
|
|
||||||
_(subject).must_equal "Autor J.R.R. ist vom Bloemfontein"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "translations with invalid arguments" do
|
|
||||||
let(:mustache_template) { "{{ tt.test_class.has_invalid_argument }}" }
|
|
||||||
|
|
||||||
it "fails gracefully with embedded error message" do
|
|
||||||
expected_string = "Welcome to " \
|
|
||||||
"[#{TestClass::NO_METHOD_MESSAGE}: no_matching_method]"
|
|
||||||
|
|
||||||
_(subject).must_equal expected_string
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "missing translations" do
|
|
||||||
let(:mustache_template) {
|
|
||||||
"{{ tt.test_class.nested.nonexistent_key }}"
|
|
||||||
}
|
|
||||||
|
|
||||||
it "outputs an empty string" do
|
|
||||||
_(subject).must_be_empty
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "usage" do
|
|
||||||
let(:subject) { dummy_instance.tt }
|
|
||||||
|
|
||||||
it "returns a hash" do
|
|
||||||
_(subject).must_be_kind_of Hash
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns all present translation keys" do
|
|
||||||
i18n_keys = I18n.t(".").keys
|
|
||||||
|
|
||||||
_(subject.keys).must_equal i18n_keys
|
|
||||||
end
|
|
||||||
|
|
||||||
it "returns nested keys" do
|
|
||||||
nested_keys = subject[:test_class][:author_info].keys
|
|
||||||
|
|
||||||
_(nested_keys).must_equal [:full]
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "auto-filled YAML arguments" do
|
|
||||||
let(:subject) { dummy_instance.tt[:test_class][:author_info][:full] }
|
|
||||||
|
|
||||||
it "auto-fills in the default locale" do
|
|
||||||
_(subject).must_equal "Author J.R.R. is from Bloemfontein"
|
|
||||||
end
|
|
||||||
|
|
||||||
it "auto-fills in a configured locale" do
|
|
||||||
I18n.locale = :de
|
|
||||||
|
|
||||||
_(subject).must_equal "Autor J.R.R. ist vom Bloemfontein"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user