weeler 0.0.4 → 1.0.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 +4 -4
- data/.gitignore +3 -1
- data/.rspec +1 -1
- data/.travis.yml +7 -2
- data/CHANGELOG.md +149 -1
- data/LICENSE.txt +2 -2
- data/README.md +83 -1
- data/app/.DS_Store +0 -0
- data/app/assets/javascripts/weeler/init.js.coffee +13 -2
- data/app/assets/javascripts/weeler/lib/notify.js +18 -0
- data/app/assets/javascripts/weeler/lib/sortable.js +9 -0
- data/app/assets/stylesheets/weeler/init.css.erb +2 -1
- data/app/assets/stylesheets/weeler/style.css.scss +22 -0
- data/app/controllers/concerns/weeler/section_seo.rb +16 -0
- data/app/controllers/weeler/administration_controller.rb +11 -0
- data/app/controllers/weeler/application_controller.rb +5 -0
- data/app/controllers/weeler/base_controller.rb +16 -12
- data/app/controllers/weeler/configuration_controller.rb +9 -0
- data/app/controllers/weeler/content_controller.rb +12 -0
- data/app/controllers/weeler/home_controller.rb +5 -2
- data/app/controllers/weeler/seo_items_controller.rb +24 -0
- data/app/controllers/weeler/settings_controller.rb +21 -0
- data/app/controllers/weeler/static_sections_controller.rb +19 -0
- data/app/controllers/weeler/translations_controller.rb +36 -18
- data/app/models/concerns/weeler/seoable.rb +61 -0
- data/app/models/concerns/weeler/sluger.rb +32 -0
- data/app/models/settings.rb +2 -0
- data/app/models/weeler/seo.rb +9 -0
- data/app/views/kaminari/{_first_page.html.erb → weeler/_first_page.html.erb} +1 -1
- data/app/views/kaminari/{_gap.html.erb → weeler/_gap.html.erb} +1 -1
- data/app/views/kaminari/{_last_page.html.erb → weeler/_last_page.html.erb} +1 -1
- data/app/views/kaminari/{_next_page.html.erb → weeler/_next_page.html.erb} +1 -1
- data/app/views/kaminari/{_page.html.erb → weeler/_page.html.erb} +0 -0
- data/app/views/kaminari/{_paginator.html.erb → weeler/_paginator.html.erb} +1 -1
- data/app/views/kaminari/{_prev_page.html.erb → weeler/_prev_page.html.erb} +1 -1
- data/app/views/layouts/weeler/base.html.haml +22 -0
- data/{lib/generators/weeler/templates/views/weeler/example/index.html.erb → app/views/weeler/administration/_filter.html.haml} +0 -0
- data/app/views/weeler/administration/_header_row.html.haml +5 -0
- data/app/views/weeler/administration/_row.html.haml +5 -0
- data/app/views/weeler/administration/_side_navbar.html.haml +8 -0
- data/app/views/weeler/administration/index.html.haml +17 -0
- data/app/views/weeler/administration/welcome.html.haml +5 -0
- data/app/views/weeler/base/_flash.html.haml +3 -0
- data/app/views/weeler/base/_footer.html.haml +2 -0
- data/app/views/weeler/base/_header_navbar.html.haml +19 -0
- data/app/views/weeler/base/_side_navbar.html.haml +2 -0
- data/app/views/weeler/configuration/_side_navbar.html.haml +12 -0
- data/app/views/weeler/configuration/index.html.haml +3 -0
- data/app/views/weeler/content/_error_messages.html.haml +5 -0
- data/app/views/weeler/content/_form.html.haml +6 -0
- data/app/views/weeler/content/_list.html.haml +23 -0
- data/app/views/weeler/content/_object_seo.html.haml +31 -0
- data/app/views/weeler/content/_side_navbar.html.haml +17 -0
- data/app/views/weeler/content/_sortable_list.html.haml +24 -0
- data/app/views/weeler/content/edit.html.haml +2 -0
- data/app/views/weeler/content/index.html.haml +10 -0
- data/app/views/weeler/content/new.html.haml +2 -0
- data/app/views/weeler/content/welcome.html.haml +3 -0
- data/app/views/weeler/home/_side_navbar.html.haml +8 -0
- data/app/views/weeler/home/about.html.haml +15 -0
- data/app/views/weeler/home/index.html.haml +3 -0
- data/app/views/weeler/seo_items/edit.html.haml +28 -0
- data/app/views/weeler/seo_items/index.html.haml +15 -0
- data/app/views/weeler/settings/index.html.haml +19 -0
- data/app/views/weeler/static_sections/show.html.haml +26 -0
- data/app/views/weeler/translations/_form.html.haml +27 -0
- data/app/views/weeler/translations/_translation.html.haml +11 -0
- data/app/views/weeler/translations/edit.html.haml +14 -0
- data/app/views/weeler/translations/index.html.haml +76 -0
- data/app/views/weeler/translations/new.html.haml +13 -0
- data/lib/.DS_Store +0 -0
- data/lib/generators/weeler/.DS_Store +0 -0
- data/lib/generators/weeler/install_generator.rb +30 -26
- data/lib/generators/weeler/templates/assets/javascripts/weeler/app/index.js +2 -0
- data/lib/generators/weeler/templates/assets/stylesheets/weeler/app/index.css +4 -0
- data/lib/generators/weeler/templates/controllers/weeler/application_controller.rb +6 -0
- data/lib/generators/weeler/templates/initializers/weeler.rb +30 -2
- data/lib/generators/weeler/templates/migrations/create_weeler_seos.rb +14 -0
- data/lib/generators/weeler/templates/migrations/create_weeler_settings.rb +17 -0
- data/lib/generators/weeler/templates/migrations/translate_weeler_seos.rb +15 -0
- data/lib/generators/weeler/templates/views/weeler/.keep +0 -0
- data/lib/i18n/backend/weeler.rb +102 -22
- data/lib/i18n/backend/weeler/dedupe.rb +31 -0
- data/lib/i18n/backend/weeler/exporter.rb +67 -5
- data/lib/i18n/backend/weeler/html_checker.rb +41 -0
- data/lib/i18n/backend/weeler/importer.rb +30 -13
- data/lib/i18n/backend/weeler/translation.rb +12 -7
- data/lib/i18n/humanize_missing_translations.rb +1 -0
- data/lib/i18n/weeler.rb +8 -2
- data/lib/tasks/weeler.rake +8 -0
- data/lib/weeler.rb +80 -7
- data/lib/weeler/.DS_Store +0 -0
- data/lib/weeler/action_controller/acts/restful.rb +185 -0
- data/lib/weeler/action_dispatch/routing/mapper.rb +87 -0
- data/lib/weeler/action_view/helpers/form_helper.rb +13 -0
- data/lib/weeler/action_view/helpers/image_form_helper.rb +84 -0
- data/lib/weeler/action_view/helpers/translation_helper.rb +15 -0
- data/lib/weeler/deprecator.rb +9 -0
- data/lib/weeler/engine.rb +18 -4
- data/lib/weeler/version.rb +7 -1
- data/rspec.html +426 -147
- data/spec/.DS_Store +0 -0
- data/spec/controllers/translations_controller_spec.rb +76 -5
- data/spec/dummy/app/controllers/weeler/posts_controller.rb +3 -7
- data/spec/dummy/app/models/post.rb +17 -0
- data/spec/dummy/app/models/translation.rb +2 -0
- data/spec/dummy/config/locales/en.yml +4 -1
- data/spec/dummy/config/routes.rb +3 -3
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20140123083704_create_weeler_seos.rb +14 -0
- data/spec/dummy/db/migrate/20140123083705_create_weeler_settings.rb +17 -0
- data/spec/dummy/db/migrate/{20131015144900_create_weeler_translations.rb → 20140123083706_create_weeler_translations.rb} +0 -0
- data/spec/dummy/db/migrate/20140123083707_translate_weeler_seos.rb +15 -0
- data/spec/dummy/db/migrate/20140718103237_create_posts.rb +12 -0
- data/spec/dummy/db/migrate/20140726151210_create_translations.rb +12 -0
- data/spec/dummy/db/schema.rb +59 -1
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +221 -0
- data/spec/factories/dummy_posts.rb +6 -0
- data/spec/fixtures/.DS_Store +0 -0
- data/spec/routing/routes_spec.rb +4 -4
- data/spec/spec_helper.rb +14 -3
- data/spec/weeler/action_controller/acts/restful_spec.rb +155 -0
- data/spec/weeler/action_view/helpers/form_helper_spec.rb +26 -0
- data/spec/weeler/action_view/helpers/translation_helper_spec.rb +16 -0
- data/spec/weeler/i18n/backend/weeler/dedupe_spec.rb +21 -0
- data/spec/weeler/i18n/backend/weeler/exporter_spec.rb +2 -4
- data/spec/weeler/i18n/backend/weeler/importer_spec.rb +5 -2
- data/spec/weeler/i18n/backend/weeler_spec.rb +121 -23
- data/weeler.gemspec +15 -7
- metadata +207 -85
- data/.DS_Store +0 -0
- data/app/assets/stylesheets/weeler/vendor/bootstrap.css +0 -6086
- data/app/views/layouts/weeler/base.html.erb +0 -40
- data/app/views/weeler/home/about.html.erb +0 -16
- data/app/views/weeler/home/index.html.erb +0 -4
- data/app/views/weeler/shared/_flash.html.erb +0 -17
- data/app/views/weeler/shared/_footer.html.erb +0 -3
- data/app/views/weeler/shared/_header_navbar.html.erb +0 -18
- data/app/views/weeler/shared/_side_navbar.html.erb +0 -14
- data/app/views/weeler/translations/_form.html.erb +0 -43
- data/app/views/weeler/translations/_translation.html.erb +0 -11
- data/app/views/weeler/translations/edit.html.erb +0 -19
- data/app/views/weeler/translations/index.html.erb +0 -103
- data/app/views/weeler/translations/new.html.erb +0 -19
- data/lib/generators/weeler/templates/controllers/weeler/example_controller.rb.example +0 -7
- data/lib/i18n/backend/weeler/exporter/active_record.rb +0 -37
- data/lib/i18n/backend/weeler/exporter/active_record_relation.rb +0 -38
- data/lib/i18n/backend/weeler/store_procs.rb +0 -39
- data/lib/weeler/route_mapper.rb +0 -41
- data/spec/dummy/db/production.sqlite3 +0 -0
- data/spec/dummy/log/test.log +0 -88454
data/spec/fixtures/.DS_Store
CHANGED
|
Binary file
|
data/spec/routing/routes_spec.rb
CHANGED
|
@@ -28,14 +28,14 @@ describe Weeler::Engine.routes do
|
|
|
28
28
|
before do
|
|
29
29
|
routes.draw do
|
|
30
30
|
mount_weeler_at '/admin' do
|
|
31
|
-
weeler_resources :mini_posts, include_in_weeler_menu: true
|
|
31
|
+
weeler_resources :mini_posts, include_in_weeler_menu: true
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
it "adds resource to weeler menu item" do
|
|
37
|
-
expect(Weeler.
|
|
38
|
-
expect(Weeler.
|
|
37
|
+
expect(Weeler.content_menu_items.size).to eq(1)
|
|
38
|
+
expect(Weeler.content_menu_items[0][:name]).to eq("Mini_posts")
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
@@ -137,4 +137,4 @@ describe Weeler::Engine.routes do
|
|
|
137
137
|
end
|
|
138
138
|
end
|
|
139
139
|
end
|
|
140
|
-
end
|
|
140
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
require 'simplecov'
|
|
1
2
|
require 'coveralls'
|
|
2
|
-
|
|
3
|
+
|
|
4
|
+
# SimpleCov.formatters = [SimpleCov::Formatter::HTMLFormatter, Coveralls::SimpleCov::Formatter]
|
|
5
|
+
|
|
6
|
+
SimpleCov.start do
|
|
7
|
+
add_filter '/spec/'
|
|
8
|
+
minimum_coverage(90)
|
|
9
|
+
end
|
|
3
10
|
|
|
4
11
|
ENV['RAILS_ENV'] ||= 'test'
|
|
5
12
|
|
|
@@ -24,12 +31,12 @@ RSpec.configure do |config|
|
|
|
24
31
|
config.infer_base_class_for_anonymous_controllers = false
|
|
25
32
|
config.order = "random"
|
|
26
33
|
|
|
27
|
-
config.color_enabled = true
|
|
34
|
+
# config.color_enabled = true
|
|
28
35
|
|
|
29
36
|
config.add_formatter(:progress)
|
|
30
37
|
config.add_formatter(:html, 'rspec.html')
|
|
31
38
|
|
|
32
|
-
|
|
39
|
+
config.include Rails.application.routes.url_helpers
|
|
33
40
|
|
|
34
41
|
# FactoryGirl
|
|
35
42
|
config.include FactoryGirl::Syntax::Methods
|
|
@@ -44,6 +51,10 @@ RSpec.configure do |config|
|
|
|
44
51
|
DatabaseCleaner.start
|
|
45
52
|
end
|
|
46
53
|
|
|
54
|
+
config.before(:all) do
|
|
55
|
+
I18n.available_locales = [:en, :lv]
|
|
56
|
+
end
|
|
57
|
+
|
|
47
58
|
config.after do
|
|
48
59
|
# Timecop.return
|
|
49
60
|
DatabaseCleaner.clean
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Weeler::ActionController::Acts::Restful, :type => :controller do
|
|
4
|
+
|
|
5
|
+
before(:each) do
|
|
6
|
+
FactoryGirl.create_list(:dummy_post, 2)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
before(:all) do
|
|
10
|
+
Dummy::Application.reload_routes!
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "acts_as_restful", :type => :controller do
|
|
14
|
+
|
|
15
|
+
context "permited title with array" do
|
|
16
|
+
controller(Weeler::ContentController) do
|
|
17
|
+
acts_as_restful Post, permit_params: [:title]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "model" do
|
|
21
|
+
it "returns current controller model" do
|
|
22
|
+
expect(controller.model).to eq(Post)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "actions" do
|
|
27
|
+
describe "GET #index" do
|
|
28
|
+
it "returns success" do
|
|
29
|
+
get "index"
|
|
30
|
+
response.should be_success
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "assigns posts" do
|
|
34
|
+
get "index"
|
|
35
|
+
expect(assigns(:items).size).to eq(2)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe "POST #create" do
|
|
40
|
+
it "redirects to edit path" do
|
|
41
|
+
post "create", post: attributes_for(:dummy_post)
|
|
42
|
+
post = Post.last
|
|
43
|
+
expect(response).to redirect_to("http://test.host/anonymous/#{post.id}/edit")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "sets only permited params" do
|
|
47
|
+
post "create", post: attributes_for(:dummy_post, body: "Heila")
|
|
48
|
+
post = Post.last
|
|
49
|
+
expect(post.title).to eq("Foo bar")
|
|
50
|
+
expect(post.body).to eq(nil)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe "GET #edit" do
|
|
55
|
+
it "returns success status" do
|
|
56
|
+
get "edit", id: Post.last.id
|
|
57
|
+
response.should be_success
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe "GET #new" do
|
|
62
|
+
it "returns success status" do
|
|
63
|
+
get "new"
|
|
64
|
+
response.should be_success
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe "PUT #update" do
|
|
69
|
+
it "sets only permited params" do
|
|
70
|
+
post = Post.last
|
|
71
|
+
put "update", id: post.id, post: {title: "Shivauva", body: "Another world!"}
|
|
72
|
+
post.reload
|
|
73
|
+
expect(post.title).to eq("Shivauva")
|
|
74
|
+
expect(post.body).to eq("Foo baar bazaar")
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe "DELETE #destroy" do
|
|
79
|
+
it "destroys item" do
|
|
80
|
+
post = Post.last
|
|
81
|
+
delete "destroy", id: post.id
|
|
82
|
+
expect { post.reload }.to raise_error(ActiveRecord::RecordNotFound)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
specify "POST #order" do
|
|
87
|
+
routes.draw { post "order" => "anonymous#order" }
|
|
88
|
+
|
|
89
|
+
post "order", orders: "order[]=2&order[]=1"
|
|
90
|
+
post1 = Post.order(sequence: :asc).first
|
|
91
|
+
post2 = Post.order(sequence: :asc).last
|
|
92
|
+
expect(post1.sequence).to eq(0)
|
|
93
|
+
expect(post2.sequence).to eq(1)
|
|
94
|
+
expect(response.body).to eq("all ok")
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
context "no permited params" do
|
|
100
|
+
controller(Weeler::ContentController) do
|
|
101
|
+
acts_as_restful Post
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
describe "actions" do
|
|
105
|
+
describe "POST #create" do
|
|
106
|
+
it "sets only permited params" do
|
|
107
|
+
post "create", post: attributes_for(:dummy_post, title: "Foo lala", body: "Heila")
|
|
108
|
+
post = Post.last
|
|
109
|
+
expect(post.title).to eq(nil)
|
|
110
|
+
expect(post.body).to eq(nil)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "warns developer" do
|
|
114
|
+
controller.should_receive(:warn).with("[UNPERMITED PARAMS] To permiting {\"title\"=>\"Foo lala\", \"body\"=>\"Heila\"} params, add 'permit_params: [:title, :body]' option to 'acts_as_restful'")
|
|
115
|
+
post "create", post: attributes_for(:dummy_post, title: "Foo lala", body: "Heila")
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context "permited all with block" do
|
|
122
|
+
controller(Weeler::ContentController) do
|
|
123
|
+
acts_as_restful Post, permit_params: -> (params) { params.require(:post).permit! }
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe "actions" do
|
|
127
|
+
describe "POST #create" do
|
|
128
|
+
it "sets only permited params" do
|
|
129
|
+
post "create", post: attributes_for(:dummy_post, title: "Foo lala", body: "Heila")
|
|
130
|
+
post = Post.last
|
|
131
|
+
expect(post.title).to eq("Foo lala")
|
|
132
|
+
expect(post.body).to eq("Heila")
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
context "permited all with block" do
|
|
140
|
+
controller(Weeler::ContentController) do
|
|
141
|
+
acts_as_restful Post, order_by: {id: :desc}, permit_params: [:title]
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
describe "GET #index" do
|
|
145
|
+
it "users order by for ordering" do
|
|
146
|
+
get "index"
|
|
147
|
+
expect(assigns(:items).first.id).to eq(2)
|
|
148
|
+
expect(assigns(:items).last.id).to eq(1)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
end
|
|
155
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Weeler::ActionView::Helpers::FormHelper, :type => :helper do
|
|
4
|
+
|
|
5
|
+
let(:resource) { FactoryGirl.build :dummy_post }
|
|
6
|
+
let(:helper) { ActionView::Helpers::FormBuilder.new(:post, resource, self, {})}
|
|
7
|
+
|
|
8
|
+
describe :image_upload_field do
|
|
9
|
+
let(:output) {
|
|
10
|
+
helper.image_upload_field :image
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
it 'create file field' do
|
|
14
|
+
expect(output).to include '<input class="form-control" id="post_image" name="post[image]" type="file" />'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'creates a label' do
|
|
18
|
+
expect(output).to include '<label'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "creates img preview tag" do
|
|
22
|
+
expect(output).to include '<img alt="Original" src="/images/original.jpg" style="height: 80px;" />'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Weeler::ActionView::Helpers::TranslationHelper, :type => :helper do
|
|
4
|
+
|
|
5
|
+
describe :translate do
|
|
6
|
+
|
|
7
|
+
let(:output) {
|
|
8
|
+
helper.translate "not.existing.key"
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
it 'dont renders key' do
|
|
12
|
+
expect(output).to eq('<span class="translation_missing" title="translation missing: en.not.existing.key">Key</span>')
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe I18n::Backend::Weeler::Dedupe do
|
|
4
|
+
|
|
5
|
+
describe "#dedupe" do
|
|
6
|
+
|
|
7
|
+
context "empty db" do
|
|
8
|
+
before(:each) do
|
|
9
|
+
3.times { I18n::Backend::Weeler::Translation.create(locale: :en, key: "weeler.dublicate") }
|
|
10
|
+
I18n::Backend::Weeler::Translation.dedupe
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "translation stores all translation in each locale" do
|
|
14
|
+
expect(I18n::Backend::Weeler::Translation.locale(:en).where(key: "weeler.dublicate").size).to eq(1)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
@@ -44,10 +44,8 @@ describe I18n::Backend::Weeler::Exporter do
|
|
|
44
44
|
I18n.backend.store_translations(:en, foo: {two: nil })
|
|
45
45
|
I18n.backend.store_translations(:lv, foo: {two: "some"})
|
|
46
46
|
|
|
47
|
-
translations = I18n::Backend::Weeler::Translation.where(key: "foo.one")
|
|
48
|
-
translations.size
|
|
47
|
+
translations = I18n::Backend::Weeler::Translation.where(key: "foo.one")
|
|
49
48
|
@other_rows = translations.as_xlsx_package.workbook.worksheets[0].rows
|
|
50
|
-
|
|
51
49
|
end
|
|
52
50
|
|
|
53
51
|
it "should have 2 rows" do
|
|
@@ -69,4 +67,4 @@ describe I18n::Backend::Weeler::Exporter do
|
|
|
69
67
|
|
|
70
68
|
end
|
|
71
69
|
|
|
72
|
-
end
|
|
70
|
+
end
|
|
@@ -3,7 +3,7 @@ require "spec_helper"
|
|
|
3
3
|
describe I18n::Backend::Weeler::Importer do
|
|
4
4
|
|
|
5
5
|
# This is file with 10 translations and 3 locales.
|
|
6
|
-
let(:file_path) {File.dirname(__FILE__) + '/../../../../fixtures/test.xlsx'}
|
|
6
|
+
let(:file_path) { Rack::Test::UploadedFile.new(File.dirname(__FILE__) + '/../../../../fixtures/test.xlsx') }
|
|
7
7
|
|
|
8
8
|
describe :import do
|
|
9
9
|
|
|
@@ -31,12 +31,15 @@ describe I18n::Backend::Weeler::Importer do
|
|
|
31
31
|
context "full db" do
|
|
32
32
|
before(:each) do
|
|
33
33
|
I18n::Backend::Weeler::Translation.delete_all
|
|
34
|
+
I18n.backend.backends[0].reload_cache
|
|
34
35
|
I18n.backend.store_translations(:en, welcome: {title: 'fooo'})
|
|
35
36
|
end
|
|
36
37
|
|
|
37
38
|
it "file import overrides value" do
|
|
38
39
|
expect(I18n.t(:"welcome.title", :locale => :en)).to eq("fooo")
|
|
39
40
|
I18n::Backend::Weeler::Translation.import file_path
|
|
41
|
+
Settings.i18n_updated_at = Time.now
|
|
42
|
+
|
|
40
43
|
expect(I18n.t(:"welcome.title", :locale => :en)).to eq("EN welcome")
|
|
41
44
|
end
|
|
42
45
|
|
|
@@ -44,4 +47,4 @@ describe I18n::Backend::Weeler::Importer do
|
|
|
44
47
|
|
|
45
48
|
end
|
|
46
49
|
|
|
47
|
-
end
|
|
50
|
+
end
|
|
@@ -13,17 +13,38 @@ describe I18n::Backend::Weeler do
|
|
|
13
13
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
before do
|
|
17
|
+
# isolate each test cases
|
|
18
|
+
Weeler.i18n_cache.clear
|
|
19
|
+
end
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
describe "#reload_cache" do
|
|
22
|
+
it "clears translations cache" do
|
|
23
|
+
Weeler.i18n_cache.should_receive(:clear)
|
|
24
|
+
I18n.backend.backends[0].reload_cache
|
|
20
25
|
end
|
|
21
26
|
|
|
22
|
-
it "
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
+
it "writes last translations update timestamp to cache" do
|
|
28
|
+
Settings.i18n_updated_at = Time.now
|
|
29
|
+
I18n.backend.backends[0].reload_cache
|
|
30
|
+
expect(Weeler.i18n_cache.read('UPDATED_AT')).to eq(Settings.i18n_updated_at)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "loads all translated data to cache" do
|
|
34
|
+
I18n::Backend::Weeler::Translation.create(:key => 'weeler.test.value', :value => "testējam", :locale => :lv)
|
|
35
|
+
I18n::Backend::Weeler::Translation.create(:key => 'weeler.test.value', :value => "testing", :locale => :en)
|
|
36
|
+
|
|
37
|
+
I18n.backend.backends[0].reload_cache
|
|
38
|
+
|
|
39
|
+
expect(Weeler.i18n_cache.read(["lv", "weeler.test.value"]).value).to eq("testējam")
|
|
40
|
+
expect(Weeler.i18n_cache.read(["en", "weeler.test.value"]).value).to eq("testing")
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "#available_locales" do
|
|
45
|
+
|
|
46
|
+
it "finds one locale" do
|
|
47
|
+
expect(I18n.available_locales.count).to be(2)
|
|
27
48
|
end
|
|
28
49
|
|
|
29
50
|
end
|
|
@@ -46,11 +67,31 @@ describe I18n::Backend::Weeler do
|
|
|
46
67
|
|
|
47
68
|
end
|
|
48
69
|
|
|
49
|
-
describe "#
|
|
50
|
-
|
|
51
|
-
I18n::Backend::Weeler::Translation.
|
|
52
|
-
I18n::Backend::Weeler::Translation.
|
|
70
|
+
describe "#html?" do
|
|
71
|
+
before(:all) do
|
|
72
|
+
@html_key_translation = I18n::Backend::Weeler::Translation.create(:key => 'methods.body_html', :value => "Super duper", :locale => :en)
|
|
73
|
+
@html_value_translation = I18n::Backend::Weeler::Translation.create(:key => 'methods.body', :value => "Super <b>duper</b>", :locale => :en)
|
|
74
|
+
@html_fake_value_translation = I18n::Backend::Weeler::Translation.create(:key => 'methods.body_fake', :value => "Super < b", :locale => :en)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "is true if key is html" do
|
|
78
|
+
expect(@html_key_translation.html?).to be(true)
|
|
53
79
|
end
|
|
80
|
+
|
|
81
|
+
it "is true if value contains html" do
|
|
82
|
+
expect(@html_value_translation.html?).to be(true)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "is false if value not contains html" do
|
|
86
|
+
|
|
87
|
+
expect(@html_fake_value_translation.html?).to be(false)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
describe "#lookup" do
|
|
93
|
+
|
|
94
|
+
|
|
54
95
|
end
|
|
55
96
|
|
|
56
97
|
describe "groups" do
|
|
@@ -75,14 +116,17 @@ describe I18n::Backend::Weeler do
|
|
|
75
116
|
describe "#store_translations" do
|
|
76
117
|
it "store_translations does not allow ambiguous keys (1)" do
|
|
77
118
|
I18n::Backend::Weeler::Translation.delete_all
|
|
78
|
-
|
|
79
|
-
I18n.backend.store_translations(:en,
|
|
80
|
-
I18n.backend.store_translations(:en, :
|
|
119
|
+
|
|
120
|
+
I18n.backend.store_translations(:en, foo: 'foo')
|
|
121
|
+
I18n.backend.store_translations(:en, foo: { bar: 'bar' })
|
|
122
|
+
I18n.backend.store_translations(:en, foo: { baz: 'baz' })
|
|
123
|
+
|
|
124
|
+
I18n.backend.backends[0].reload_cache
|
|
81
125
|
|
|
82
126
|
translations = I18n::Backend::Weeler::Translation.locale(:en).lookup('foo')
|
|
83
127
|
expect(translations.map(&:value)).to eq(%w(bar baz))
|
|
84
128
|
|
|
85
|
-
expect(I18n.t(:foo)).to eq(
|
|
129
|
+
expect(I18n.t(:foo)).to eq("Foo") # no translation
|
|
86
130
|
end
|
|
87
131
|
|
|
88
132
|
it "store_translations does not allow ambiguous keys (2)" do
|
|
@@ -92,29 +136,81 @@ describe I18n::Backend::Weeler do
|
|
|
92
136
|
I18n.backend.store_translations(:en, :foo => 'foo')
|
|
93
137
|
|
|
94
138
|
translations = I18n::Backend::Weeler::Translation.locale(:en).lookup('foo')
|
|
95
|
-
expect(translations.map(&:value)).to eq(%w(foo))
|
|
139
|
+
expect(translations.map(&:value)).to eq(%w(foo))
|
|
96
140
|
|
|
97
|
-
expect(I18n.t(:foo)).to eq('foo')
|
|
141
|
+
expect(I18n.t(:foo)).to eq('foo')
|
|
98
142
|
end
|
|
99
143
|
|
|
100
144
|
it "can store translations with keys that are translations containing special chars" do
|
|
101
|
-
I18n.backend.store_translations(:
|
|
102
|
-
expect(I18n.t(:"Pagina's", :locale => :
|
|
145
|
+
I18n.backend.store_translations(:en, :"Pagina's" => "Pagina's" )
|
|
146
|
+
expect(I18n.t(:"Pagina's", :locale => :en)).to eq("Pagina's")
|
|
103
147
|
end
|
|
104
148
|
end
|
|
105
149
|
|
|
106
150
|
describe "#lookup" do
|
|
107
151
|
|
|
152
|
+
it "show warning" do
|
|
153
|
+
I18n::Backend::Weeler::Translation.should_receive(:warn).with("[DEPRECATION] Giving a separator to Translation.lookup is deprecated. You can change the internal separator by overwriting FLATTEN_SEPARATOR.")
|
|
154
|
+
I18n::Backend::Weeler::Translation.lookup("foo", "|")
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
context "cache" do
|
|
158
|
+
context "differs from settings timestamp" do
|
|
159
|
+
before do
|
|
160
|
+
Settings.i18n_updated_at = Time.now
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it "reloads cache" do
|
|
164
|
+
I18n.backend.backends[0].should_receive(:reload_cache)
|
|
165
|
+
I18n.t("cancel", scope: "admin.content")
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
context "is same as updates timestamp" do
|
|
170
|
+
before do
|
|
171
|
+
Weeler.i18n_cache.write('UPDATED_AT', Settings.i18n_updated_at)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it "does not reload cache" do
|
|
175
|
+
I18n.backend.backends[0].should_not_receive(:reload_cache)
|
|
176
|
+
I18n.t("cancel", scope: "admin.content")
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
108
181
|
it "returns translation" do
|
|
109
182
|
FactoryGirl.create(:translation)
|
|
183
|
+
I18n.backend.backends[0].reload_cache
|
|
110
184
|
expect(I18n.t("title")).to eq("This is weeler")
|
|
111
185
|
end
|
|
112
186
|
|
|
113
187
|
context "missing translations" do
|
|
114
188
|
|
|
115
|
-
|
|
189
|
+
context "exist in yml" do
|
|
190
|
+
|
|
191
|
+
context "new translation" do
|
|
192
|
+
|
|
193
|
+
it "persist it" do
|
|
194
|
+
I18n.t('hello')
|
|
195
|
+
expect(I18n::Backend::Weeler::Translation.locale(:en).find_by_key('hello').value).to eq(I18n.t('hello'))
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
context "already stored" do
|
|
201
|
+
before(:all) do
|
|
202
|
+
FactoryGirl.create(:translation, key: "weeler.test.cms_title", locale: "en", value: nil)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it "saves the fallback backend value" do
|
|
206
|
+
I18n.t('weeler.test.cms_title')
|
|
207
|
+
expect(I18n::Backend::Weeler::Translation.locale(:en).find_by_key('weeler.test.cms_title').value).to eq("Weeler is cool")
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
it "persists the key" do
|
|
116
213
|
I18n.t('hello')
|
|
117
|
-
|
|
118
214
|
expect(I18n::Backend::Weeler::Translation.count).to eq(1)
|
|
119
215
|
expect(I18n::Backend::Weeler::Translation.locale(:en).find_by_key('hello')).to_not be(nil)
|
|
120
216
|
end
|
|
@@ -146,6 +242,7 @@ describe I18n::Backend::Weeler do
|
|
|
146
242
|
it "creates a stub when a custom separator is used" do
|
|
147
243
|
I18n.t('foo|baz', :separator => '|')
|
|
148
244
|
I18n::Backend::Weeler::Translation.locale(:en).lookup("foo.baz").first.update_attributes!(:value => 'baz!')
|
|
245
|
+
I18n.backend.backends[0].reload_cache
|
|
149
246
|
expect(I18n.t('foo|baz', :separator => '|')).to eq('baz!')
|
|
150
247
|
end
|
|
151
248
|
|
|
@@ -159,6 +256,7 @@ describe I18n::Backend::Weeler do
|
|
|
159
256
|
key = 'foo|baz.zab'
|
|
160
257
|
I18n.t(key, :separator => '|')
|
|
161
258
|
I18n::Backend::Weeler::Translation.locale(:en).lookup("foo.baz\001zab").first.update_attributes!(:value => 'baz!')
|
|
259
|
+
I18n.backend.backends[0].reload_cache
|
|
162
260
|
expect(I18n.t(key, :separator => '|')).to eq('baz!')
|
|
163
261
|
end
|
|
164
262
|
|
|
@@ -166,4 +264,4 @@ describe I18n::Backend::Weeler do
|
|
|
166
264
|
|
|
167
265
|
end
|
|
168
266
|
|
|
169
|
-
end
|
|
267
|
+
end
|