riddick 0.0.3 → 0.0.4

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.
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  Gemfile.lock
2
2
  /pkg
3
+ .ruby-version
data/Gemfile CHANGED
@@ -1,2 +1,3 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
+
2
3
  gemspec
data/README.md CHANGED
@@ -6,7 +6,7 @@ Friendly GUI for managing your I18n translations.
6
6
 
7
7
  By default it uses Redis as I18n backend for translations, but you can add your own key-value backend.
8
8
 
9
- ![Screenshot](http://timeworkers-assets.s3.amazonaws.com/riddick.png)
9
+ ![Screenshot](https://raw.github.com/kostia/riddick/master/screenshot.png)
10
10
 
11
11
  ## Installation
12
12
 
@@ -70,7 +70,7 @@ riddick:
70
70
  default: 'Edit'
71
71
  delete: 'Delete'
72
72
  confirm: 'Are you sure?'
73
- notice
73
+ notice:
74
74
  empty: 'You have no translations yet.'
75
75
  set:
76
76
  success: 'Translation successfully stored!'
@@ -191,6 +191,22 @@ __Details__: Normally your using a proxy server like NGinx or Apache in front of
191
191
  Unfortunately the assets from a mounted Sinatra app will not be served because
192
192
  they aren't in the `public` directory of your app.
193
193
 
194
+ ### You are using redis not only for storing translations
195
+
196
+ If your are using redis to store other stuff you can separate your I18n translations in namespace. Please use redis-namespace gem.
197
+ ```ruby
198
+ # Gemfile
199
+ gem 'redis-namespace'
200
+ ```
201
+
202
+ Change your configuration in i18n.rb
203
+ ```ruby
204
+ # config/initializers/i18n.rb
205
+ I18n.backend = I18n::Backend::Chain.new I18n::Backend::KeyValue.new(Redis::Namespace.new(:riddick)), I18n.backend
206
+ ```
207
+
208
+ Your I18n translations will be stored in `riddick` namespace.
209
+
194
210
  ## Internals
195
211
 
196
212
  Take a look at http://railscasts.com/episodes/256-i18n-backends
data/TODO-0.0.4 CHANGED
@@ -1,3 +1,5 @@
1
+ * Pagination (see Sidekiq for details)
2
+ * Change from Erb to Slim
1
3
  * API for writing own backends + examples for ActiveRecordBackend in README
2
4
  * Split Riddick::Server in Riddick::GuiServer and Riddick::ApiServer (JSON)
3
5
  * Build Rails-Engine
@@ -7,3 +9,5 @@
7
9
  * Simple URL-Helpers for:
8
10
  * Generating URL for editing, updating and deleting translations
9
11
  * Generating JS and HTML snippet for editing a translation
12
+
13
+ - Sprockets // Will not be implemented for it's then too complicated in production
@@ -41,11 +41,20 @@ module Riddick
41
41
  url('del') + "?k=#{URI.escape k}"
42
42
  end
43
43
 
44
+ # Shortcut for namepspaces localization
45
+ def t(path, default = nil)
46
+ I18n.t "riddick.#{path}", default: default
47
+ end
48
+
44
49
  # Truncate a string with default length 30. Truncation string is '...' by default
45
50
  # and can be changed by changing the appropriate translation (see README for further details).
46
51
  def truncate(v, l = 30)
47
52
  s = v.to_s
48
- s.size > l ? s.first(l) + I18n.t('riddick.truncation', default: '...') : s
53
+ s.size > l ? s.first(l) + t('truncation', '...') : s
54
+ end
55
+
56
+ def h(text)
57
+ Rack::Utils.escape_html(text)
49
58
  end
50
59
  end
51
60
 
@@ -77,11 +86,9 @@ module Riddick
77
86
  k, v = params[:k], params[:v]
78
87
  if k && v && !k.empty? && !v.empty?
79
88
  Riddick::Backends.store_translation k, v
80
- session[:flash_success] = I18n.t('riddick.notice.set.success',
81
- default: 'Translation successfully stored!')
89
+ session[:flash_success] = t('notice.set.success', 'Translation successfully stored!')
82
90
  else
83
- session[:flash_error] = I18n.t('riddick.notice.set.error',
84
- default: 'Error: either path or translation is empty!')
91
+ session[:flash_error] = t('notice.set.error', 'Error: either path or translation is empty!')
85
92
  end
86
93
  redirect my_url
87
94
  end
@@ -93,11 +100,9 @@ module Riddick
93
100
  k = params[:k]
94
101
  if k && !k.empty?
95
102
  Riddick::Backends.delete_translation k
96
- session[:flash_success] = I18n.t('riddick.notice.del.success',
97
- default: 'Translation successfully deleted!')
103
+ session[:flash_success] = t('notice.del.success', 'Translation successfully deleted!')
98
104
  else
99
- session[:flash_error] = I18n.t('riddick.notice.del.error',
100
- default: 'Error: no such key or key empty!')
105
+ session[:flash_error] = t('notice.del.error', 'Error: no such key or key empty!')
101
106
  end
102
107
  redirect(request.referer || root_url)
103
108
  end
@@ -1,5 +1,5 @@
1
1
  module Riddick
2
2
  def self.version
3
- '0.0.3'
3
+ '0.0.4'
4
4
  end
5
5
  end
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
- <title><%= I18n.t 'riddick.head.title', default: 'Welcome to Riddick!' %></title>
4
+ <title><%= t 'head.title', 'Welcome to Riddick!' %></title>
5
5
  <meta charset="utf-8">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
7
  <!--[if IE ]><meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"><![endif]-->
@@ -17,14 +17,14 @@
17
17
  <div class="container">
18
18
  <div class="navbar">
19
19
  <div class="navbar-inner">
20
- <a href="<%= root_url %>" class="brand"><%= I18n.t 'riddick.nav.brand', default: 'Riddick' %></a>
20
+ <a href="<%= root_url %>" class="brand"><%= t 'nav.brand', 'Riddick' %></a>
21
21
  <ul class="nav">
22
22
  <li class="<%= 'active' if request.path == root_url %>">
23
- <a href="<%= root_url %>"><%= I18n.t 'riddick.nav.all', default: 'All translations' %></a></li>
23
+ <a href="<%= root_url %>"><%= t 'nav.all', 'All translations' %></a></li>
24
24
  <li class="<%= 'active' if request.path == my_url %>">
25
- <a href="<%= my_url %>"><%= I18n.t 'riddick.nav.my', default: 'My translations' %></a></li>
25
+ <a href="<%= my_url %>"><%= t 'nav.my', 'My translations' %></a></li>
26
26
  <li class="<%= 'active' if request.path == default_url %>">
27
- <a href="<%= default_url %>"><%= I18n.t 'riddick.nav.default', default: 'Default translations' %></a></li>
27
+ <a href="<%= default_url %>"><%= t 'nav.default', 'Default translations' %></a></li>
28
28
  </ul>
29
29
  </div>
30
30
  </div>
@@ -32,15 +32,15 @@
32
32
  <!-- Form for posting new and changing existing translations. -->
33
33
  <form action="<%= set_url %>" method="post" class="form-horizontal well">
34
34
  <select name="k" data-chosen="chosen" data-for="textarea[name=v]"
35
- data-placeholder="<%= I18n.t 'riddick.form.select.placeholder', default: 'en.greeting' %>">
35
+ data-placeholder="<%= t 'form.select.placeholder', 'en.greeting' %>">
36
36
  <option></option>
37
37
  <% @translations.each do |k, v| %>
38
- <option value="<%= k %>" data-v='<%= v %>'><%= k %></option>
38
+ <option value="<%= h(k) %>" data-v='<%= h(v) %>'><%= h(k) %></option>
39
39
  <% end %>
40
40
  </select>
41
- <button type="submit" class="btn btn-success"><%= I18n.t 'riddick.form.button', default: 'Change' %></button><br />
42
- <textarea name="v" type="text"
43
- placeholder="<%= I18n.t 'riddick.form.textarea.placeholder', default: 'Hello World!' %>"></textarea>
41
+ <button type="submit" class="btn btn-success"><%= t 'form.button', 'Change' %></button><br />
42
+ <textarea name="v" type="text" rows="6"
43
+ placeholder="<%= t 'form.textarea.placeholder', 'Hello World!' %>"></textarea>
44
44
  </form>
45
45
 
46
46
  <!-- Flash notifications. -->
@@ -54,42 +54,46 @@
54
54
  <% if @translations.any? %>
55
55
  <table class="table table-striped">
56
56
  <tr>
57
- <th><%= I18n.t 'riddick.table.header.path', default: 'Path' %></th>
58
- <th><%= I18n.t 'riddick.table.header.translation', default: 'Translation' %></th>
59
- <th><%= I18n.t 'riddick.table.header.actions', default: 'Actions' %></th>
57
+ <th><%= t 'table.header.path', 'Path' %></th>
58
+ <th><%= t 'table.header.translation', 'Translation' %></th>
59
+ <th><%= t 'table.header.actions', 'Actions' %></th>
60
60
  </tr>
61
61
  <% @translations.each_pair do |k, v| %>
62
62
  <tr>
63
63
  <% if v.kind_of? Riddick::Backends::KeyValue::Value %>
64
64
  <!-- Details for custom translation. -->
65
65
  <td><span class="badge badge-success"><%= k %></span></td>
66
- <td><code>
67
- <a rel="popover" data-title="<%= I18n.t 'riddick.table.popover.my', default: 'My translation' %>"
68
- data-content='<%= v %>' data-trigger="hover"><%= truncate v %></a>
69
- </code></td>
70
66
  <td>
71
- <a href="#custom-translations" data-choose="<%= k %>" data-v='<%= v %>'
72
- class="btn btn-mini"><%= I18n.t 'riddick.table.edit.my', default: 'Edit' %></a>
73
- <a href="<%= del_url k %>" data-confirm="<%= I18n.t 'riddick.table.confirm', default: 'Are you sure?' %>"
74
- class="btn btn-mini btn-danger"><%= I18n.t 'riddick.table.delete', default: 'Delete' %></a>
67
+ <code>
68
+ <a rel="popover" data-title="<%= t 'table.popover.my', 'My translation' %>"
69
+ data-content='<%= h(v) %>' data-trigger="hover"><%= h(truncate(v)) %></a>
70
+ </code>
71
+ </td>
72
+ <td>
73
+ <a href="#custom-translations" data-choose="<%= h(k) %>" data-v='<%= h(v) %>'
74
+ class="btn btn-mini"><%= t 'table.edit.my', 'Edit' %></a>
75
+ <a href="<%= del_url k %>" data-confirm="<%= t 'table.confirm', 'Are you sure?' %>"
76
+ class="btn btn-mini btn-danger"><%= t 'table.delete', 'Delete' %></a>
75
77
  </td>
76
78
  <% else %>
77
79
  <!-- Details for default translation. -->
78
80
  <td><span class="badge"><%= k %></span></td>
79
- <td><code>
80
- <a rel="popover" data-title="<%= I18n.t 'riddick.table.popover.default', default: 'Default translation' %>"
81
- data-content='<%= v %>' data-trigger="hover"><%= truncate v %></a>
82
- </code></td>
83
81
  <td>
84
- <a href="#custom-translations" data-choose="<%= k %>" data-v='<%= v %>'
85
- class="btn btn-mini"><%= I18n.t 'riddick.table.edit.default', default: 'Edit' %></a>
82
+ <code>
83
+ <a rel="popover" data-title="<%= t 'table.popover.default', 'Default translation' %>"
84
+ data-content='<%= h(v) %>' data-trigger="hover"><%= h(truncate(v)) %></a>
85
+ </code>
86
+ </td>
87
+ <td>
88
+ <a href="#custom-translations" data-choose="<%= h(k) %>" data-v='<%= h(v) %>'
89
+ class="btn btn-mini"><%= t 'table.edit.default', 'Edit' %></a>
86
90
  </td>
87
91
  <% end %>
88
92
  </tr>
89
93
  <% end %>
90
94
  </table>
91
95
  <% else %>
92
- <div class="alert alert-info"><%= I18n.t 'riddick.notice.empty', default: 'You have no translations yet.' %></div>
96
+ <div class="alert alert-info"><%= t 'notice.empty', 'You have no translations yet.' %></div>
93
97
  <% end %>
94
98
 
95
99
  <div class="well"><a href="https://github.com/kostia/riddick">https://github.com/kostia/riddick</a></div>
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.add_dependency 'i18n'
19
19
  gem.add_dependency 'redis'
20
20
  gem.add_dependency 'sinatra'
21
+ gem.add_development_dependency 'activesupport', '>= 3.0.0'
21
22
  gem.add_development_dependency 'capybara'
22
23
  gem.add_development_dependency 'pry'
23
24
  gem.add_development_dependency 'rack-test'
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riddick
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-02 00:00:00.000000000 Z
12
+ date: 2013-03-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: i18n
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: activesupport
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 3.0.0
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 3.0.0
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: capybara
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -165,7 +181,6 @@ extensions: []
165
181
  extra_rdoc_files: []
166
182
  files:
167
183
  - .gitignore
168
- - .rbenv-version
169
184
  - .rspec
170
185
  - Gemfile
171
186
  - README.md
@@ -191,6 +206,7 @@ files:
191
206
  - lib/riddick/version.rb
192
207
  - lib/riddick/views/index.erb
193
208
  - riddick.gemspec
209
+ - screenshot.png
194
210
  - spec/backends/key_value_spec.rb
195
211
  - spec/backends/redis_spec.rb
196
212
  - spec/backends/simple_spec.rb
@@ -216,9 +232,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
232
  - - ! '>='
217
233
  - !ruby/object:Gem::Version
218
234
  version: '0'
235
+ segments:
236
+ - 0
237
+ hash: -4598769758788901426
219
238
  requirements: []
220
239
  rubyforge_project:
221
- rubygems_version: 1.8.23
240
+ rubygems_version: 1.8.25
222
241
  signing_key:
223
242
  specification_version: 3
224
243
  summary: Friendly GUI for managing your I18n translations
@@ -1 +0,0 @@
1
- 1.9.3-p0