kuhsaft 0.0.6 → 0.0.7
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/README +9 -0
- data/app/controllers/kuhsaft/admin/admin_controller.rb +18 -0
- data/app/controllers/kuhsaft/admin/assets_controller.rb +1 -4
- data/app/controllers/kuhsaft/admin/pages_controller.rb +17 -17
- data/app/models/kuhsaft/localized_page.rb +22 -3
- data/app/models/kuhsaft/page.rb +22 -18
- data/app/models/kuhsaft/page_part.rb +1 -1
- data/app/models/kuhsaft/page_part/content.rb +55 -0
- data/app/models/kuhsaft/page_part/markdown.rb +8 -0
- data/app/models/kuhsaft/publish_state.rb +29 -0
- data/app/stylesheets/kuhsaft/admin/partials/_generic.sass +29 -10
- data/app/stylesheets/kuhsaft/admin/partials/_pages.sass +6 -2
- data/app/views/kuhsaft/admin/kuhsaft/page_part/markdowns/_markdown.html.haml +1 -0
- data/app/views/kuhsaft/admin/pages/_form.html.haml +22 -11
- data/app/views/kuhsaft/admin/pages/edit.html.haml +7 -1
- data/app/views/kuhsaft/admin/pages/index.html.haml +0 -13
- data/app/views/kuhsaft/admin/pages/new.html.haml +3 -1
- data/app/views/layouts/kuhsaft/admin.html.haml +3 -1
- data/config/initializers/page_parts.rb +16 -0
- data/config/locales/kuhsaft.en.yml +2 -0
- data/config/routes.rb +6 -1
- data/kuhsaft.gemspec +4 -4
- data/lib/generators/kuhsaft/install/migrations_generator.rb +5 -1
- data/lib/kuhsaft/version.rb +1 -1
- data/lib/templates/kuhsaft/install/add_fulltext_to_localized_page.rb +9 -0
- data/lib/templates/kuhsaft/install/add_page_type_to_localized_pages.rb +9 -0
- data/lib/templates/kuhsaft/install/add_published_at_to_localized_pages.rb +9 -0
- data/lib/templates/kuhsaft/install/add_type_to_page_part_contents.rb +9 -0
- data/public/javascripts/kuhsaft/admin/application.js +17 -0
- data/public/javascripts/kuhsaft/admin/jquery-ui-1.8.12.custom.min.js +192 -0
- data/spec/controllers/admin_pages_controller_spec.rb +33 -6
- data/spec/dummy/config/database.yml +2 -2
- data/spec/dummy/config/locales/en.yml +3 -1
- data/spec/factories.rb +0 -9
- data/spec/models/localized_page_spec.rb +103 -15
- data/spec/models/page_part_content_spec.rb +59 -17
- data/spec/models/page_part_spec.rb +1 -1
- data/spec/models/page_spec.rb +34 -29
- data/spec/models/publish_state_spec.rb +45 -0
- data/spec/routing/pages_routing_spec.rb +28 -21
- metadata +38 -21
- data/app/models/kuhsaft/page_parts/base.rb +0 -26
- data/app/models/kuhsaft/page_parts/content.rb +0 -8
- data/app/models/kuhsaft/page_parts/markdown.rb +0 -7
- data/public/javascripts/kuhsaft/admin/jquery-ui-1.8.10.custom.min.js +0 -110
data/spec/factories.rb
CHANGED
@@ -1,9 +1,3 @@
|
|
1
|
-
Factory.define :page_part, :class => Kuhsaft::PagePart::Content do |p|
|
2
|
-
p.position 1
|
3
|
-
p.content Kuhsaft::PagePart::Markdown.new(:text => 'h1. Hello world!')
|
4
|
-
p.association :localized_page
|
5
|
-
end
|
6
|
-
|
7
1
|
Factory.define :localized_page, :class => Kuhsaft::LocalizedPage do |p|
|
8
2
|
p.locale 'en'
|
9
3
|
p.title 'English title'
|
@@ -11,9 +5,6 @@ Factory.define :localized_page, :class => Kuhsaft::LocalizedPage do |p|
|
|
11
5
|
p.body 'hi'
|
12
6
|
p.url ''
|
13
7
|
p.association :page
|
14
|
-
p.after_create do |page|
|
15
|
-
page.page_parts << Factory.build(:page_part, :localized_page => page)
|
16
|
-
end
|
17
8
|
end
|
18
9
|
|
19
10
|
Factory.define :page, :class => Kuhsaft::Page do |p|
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Kuhsaft::LocalizedPage do
|
4
|
-
|
5
4
|
before :each do
|
6
|
-
@localized_page = Factory.
|
5
|
+
@localized_page = Factory.create(:localized_page)
|
7
6
|
end
|
8
7
|
|
9
8
|
it 'should have a symbolized locale' do
|
@@ -11,7 +10,11 @@ describe Kuhsaft::LocalizedPage do
|
|
11
10
|
end
|
12
11
|
|
13
12
|
it 'should be published' do
|
14
|
-
|
13
|
+
@localized_page.published?.should be_true
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should have a fulltext field' do
|
17
|
+
@localized_page.should respond_to(:fulltext)
|
15
18
|
end
|
16
19
|
|
17
20
|
it 'should not be published when set to false' do
|
@@ -34,35 +37,120 @@ describe Kuhsaft::LocalizedPage do
|
|
34
37
|
end
|
35
38
|
|
36
39
|
it 'should generate the slug from the title' do
|
37
|
-
|
40
|
+
@localized_page.slug.should eq(@localized_page.title.parameterize)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should have page_parts' do
|
44
|
+
@localized_page.should respond_to(:page_parts)
|
38
45
|
end
|
39
46
|
|
40
47
|
it 'should not generate the slug if the user has set it' do
|
41
48
|
Factory.create(:localized_page, :slug => 'my-slug').slug.should == 'my-slug'
|
42
49
|
end
|
43
50
|
|
44
|
-
|
45
|
-
|
51
|
+
after :each do
|
52
|
+
@localized_page.destroy
|
46
53
|
end
|
47
54
|
|
48
|
-
|
49
|
-
|
55
|
+
describe 'page_type' do
|
56
|
+
it 'should have a page_type' do
|
57
|
+
@localized_page.should respond_to(:page_type)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should generate the url with an empty page_type' do
|
61
|
+
page = Factory.create :page
|
62
|
+
page.translation.url.should eq('en/english-title')
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should take the users url with a "redirect" page_type' do
|
66
|
+
page = Factory.create :page
|
67
|
+
page.translation.page_type = 'redirect'
|
68
|
+
page.translation.url = '/en/news'
|
69
|
+
page.save
|
70
|
+
page.translation.url.should eq('/en/news')
|
71
|
+
end
|
50
72
|
end
|
51
73
|
|
52
74
|
describe 'validations' do
|
53
|
-
|
54
|
-
|
55
|
-
@
|
56
|
-
@
|
57
|
-
@page.slug = nil
|
75
|
+
before do
|
76
|
+
@localized_page = Factory.create :localized_page
|
77
|
+
@localized_page.title = nil
|
78
|
+
@localized_page.slug = nil
|
58
79
|
end
|
59
80
|
|
60
81
|
it 'should have a title' do
|
61
|
-
@
|
82
|
+
@localized_page.should have(1).error_on(:title)
|
62
83
|
end
|
63
84
|
|
64
85
|
it 'should have a slug' do
|
65
|
-
@
|
86
|
+
@localized_page.should have(1).error_on(:slug)
|
87
|
+
end
|
88
|
+
|
89
|
+
after do
|
90
|
+
@localized_page.destroy
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe 'fulltext' do
|
95
|
+
before do
|
96
|
+
@page = Factory.create :page
|
97
|
+
@page.translation.keywords = 'key words'
|
98
|
+
@page.translation.description = 'descrip tion'
|
99
|
+
@page.translation.title = 'my title'
|
100
|
+
@page.translation.page_parts << Kuhsaft::PagePart::Markdown.new(:text => 'oh la la1')
|
101
|
+
@page.translation.page_parts << Kuhsaft::PagePart::Markdown.new(:text => 'oh la la2')
|
102
|
+
@page.translation.page_parts << Kuhsaft::PagePart::Markdown.new(:text => 'oh la la3')
|
103
|
+
@page.translation.page_parts << Kuhsaft::PagePart::Markdown.new(:text => nil)
|
104
|
+
@page.save
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'should collect the fulltext when saved' do
|
108
|
+
@page.translation.should_receive(:collect_fulltext)
|
109
|
+
@page.save
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'should contain the title' do
|
113
|
+
@page.fulltext.should include('my title')
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should contain the keywords' do
|
117
|
+
@page.fulltext.should include('key words')
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'should contain the description' do
|
121
|
+
@page.fulltext.should include('descrip tion')
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should contain the page part content' do
|
125
|
+
@page.fulltext.should include('oh la la')
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should convert all data to strings' do
|
129
|
+
expect { @page.translation.collect_fulltext }.to_not raise_error
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe 'search' do
|
134
|
+
before do
|
135
|
+
Factory.create :page
|
136
|
+
Factory.create :page
|
137
|
+
Factory.create :page
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'should find any containing the search term' do
|
141
|
+
Kuhsaft::LocalizedPage.search('hi').should have_at_least(0).items
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'should find with "English Title"' do
|
145
|
+
Kuhsaft::LocalizedPage.search('English Title').should have_at_least(1).item
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'should only find results with the current locale' do
|
149
|
+
Kuhsaft::LocalizedPage.search('English Title').should be_all { |p| p.locale == Kuhsaft::Page.current_translation_locale }
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'should only find published results' do
|
153
|
+
Kuhsaft::LocalizedPage.search('English Title').should be_all { |p| p.published? == true }
|
66
154
|
end
|
67
155
|
end
|
68
156
|
end
|
@@ -1,22 +1,64 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
3
|
+
describe 'PagePart' do
|
4
|
+
describe 'Content' do
|
5
|
+
before do
|
6
|
+
@content = Kuhsaft::PagePart::Content.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should belong to a LocalizedPage' do
|
10
|
+
@content.should respond_to(:localized_page)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should have a content to store serialized data' do
|
14
|
+
@content.should respond_to(:content)
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'class' do
|
18
|
+
it 'should keep a list of the serializeable attributes' do
|
19
|
+
Kuhsaft::PagePart::Content.serializeable_attributes.should be_a(Array)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should keep a list of searchable attributes' do
|
23
|
+
Kuhsaft::PagePart::Content.searchable_attributes.should be_a(Array)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should have a list of page_part_types' do
|
27
|
+
Kuhsaft::PagePart::Content.page_part_types.should be_all { |p| p.superclass.should eq Kuhsaft::PagePart::Content }
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should have the Markdown PagePart by default' do
|
31
|
+
Kuhsaft::PagePart::Content.descendants.should include(Kuhsaft::PagePart::Markdown)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should convert to_name' do
|
35
|
+
Kuhsaft::PagePart::Markdown.to_name.should eq('Markdown')
|
36
|
+
end
|
37
|
+
end
|
17
38
|
end
|
18
39
|
|
19
|
-
|
20
|
-
|
40
|
+
describe 'Markdown' do
|
41
|
+
before do
|
42
|
+
@m = Kuhsaft::PagePart::Markdown.new
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should have text' do
|
46
|
+
@m.should respond_to(:text)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should have searchable text' do
|
50
|
+
Kuhsaft::PagePart::Markdown.searchable_attributes.should include(:text)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should store text' do
|
54
|
+
@m.text = 'hi'
|
55
|
+
@m.text.should eq('hi')
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should restore the serialized attributes when loaded' do
|
59
|
+
m = Kuhsaft::PagePart::Markdown.create(:text => 'hi')
|
60
|
+
m2 = Kuhsaft::PagePart::Markdown.find(m.id)
|
61
|
+
m2.text.should eq('hi')
|
62
|
+
end
|
21
63
|
end
|
22
|
-
end
|
64
|
+
end
|
data/spec/models/page_spec.rb
CHANGED
@@ -2,6 +2,14 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Kuhsaft::Page do
|
4
4
|
|
5
|
+
before do
|
6
|
+
set_lang :en
|
7
|
+
end
|
8
|
+
|
9
|
+
after do
|
10
|
+
reset_lang
|
11
|
+
end
|
12
|
+
|
5
13
|
before :each do
|
6
14
|
destroy_all_pages
|
7
15
|
@page = Factory.create :page
|
@@ -111,11 +119,19 @@ describe Kuhsaft::Page do
|
|
111
119
|
page = Factory.create :page
|
112
120
|
child = Factory.create :page
|
113
121
|
page.childs << child
|
114
|
-
page.body = nil
|
122
|
+
page.translation.body = nil
|
115
123
|
page.save
|
116
124
|
page.link.should == child.link
|
117
125
|
end
|
118
126
|
|
127
|
+
it 'should not modify the url when it\'s a redirect' do
|
128
|
+
page = Factory.create :page
|
129
|
+
page.translation.page_type = 'redirect'
|
130
|
+
page.translation.url = '/en/news'
|
131
|
+
page.save
|
132
|
+
page.link.should eq('/en/news')
|
133
|
+
end
|
134
|
+
|
119
135
|
it 'should find its translated content by url' do
|
120
136
|
destroy_all_pages
|
121
137
|
page = Factory.create(:page)
|
@@ -140,38 +156,27 @@ describe Kuhsaft::Page do
|
|
140
156
|
Kuhsaft::Page.translation_locales.first.should be(:de)
|
141
157
|
end
|
142
158
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'should delegate the url to the translation' do
|
159
|
-
@page.url.should == @page.translation.url
|
160
|
-
end
|
161
|
-
|
162
|
-
it 'should delegate the keywords to the translation' do
|
163
|
-
@page.keywords = 'my keywords are superb'
|
164
|
-
@page.translation.keywords.should == 'my keywords are superb'
|
159
|
+
it 'should have a translation' do
|
160
|
+
@page.translation.should be_a(Kuhsaft::LocalizedPage)
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'accepts a page_part_type to determine which page_part needs to be added' do
|
164
|
+
@page.should respond_to(:page_part_type)
|
165
|
+
end
|
166
|
+
|
167
|
+
describe 'should delegate' do
|
168
|
+
it 'slug, title, keywords and description to the translation' do
|
169
|
+
[:slug, :title, :keywords, :description].each do |attr|
|
170
|
+
@page.send(attr).should eq(@page.translation.send(attr))
|
171
|
+
end
|
165
172
|
end
|
166
173
|
|
167
|
-
it '
|
168
|
-
@page.
|
169
|
-
@page.translation.description.should == 'my description'
|
174
|
+
it 'url to the translation' do
|
175
|
+
@page.url.should eq(@page.translation.url)
|
170
176
|
end
|
171
177
|
|
172
|
-
it '
|
173
|
-
@page.locale
|
174
|
-
@page.translation.locale.should == :de
|
178
|
+
it 'locale to the translation' do
|
179
|
+
@page.locale.should be(@page.translation.locale)
|
175
180
|
end
|
176
181
|
end
|
177
182
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Kuhsaft::PublishState do
|
4
|
+
context 'unpublished' do
|
5
|
+
before do
|
6
|
+
@publish_state = Kuhsaft::PublishState.new(:name => 'unpublished', :value => Kuhsaft::PublishState::UNPUBLISHED)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should be UNPUBLISHED' do
|
10
|
+
@publish_state.value.should be(Kuhsaft::PublishState::UNPUBLISHED)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should have a translated name' do
|
14
|
+
@publish_state.human_name.should eq(I18n.translate('unpublished'))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'published' do
|
19
|
+
before do
|
20
|
+
@publish_state = Kuhsaft::PublishState.new(:name => 'published', :value => Kuhsaft::PublishState::PUBLISHED)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should be PUBLISHED' do
|
24
|
+
@publish_state.value.should be(Kuhsaft::PublishState::PUBLISHED)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should have a translated name' do
|
28
|
+
@publish_state.human_name.should eq(I18n.translate('published'))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context 'published_at' do
|
33
|
+
before do
|
34
|
+
@publish_state = Kuhsaft::PublishState.new(:name => 'published_at', :value => Kuhsaft::PublishState::PUBLISHED_AT)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should be PUBLISHED_AT' do
|
38
|
+
@publish_state.value.should be(Kuhsaft::PublishState::PUBLISHED_AT)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should have a translated name' do
|
42
|
+
@publish_state.human_name.should eq(I18n.translate('published_at'))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -11,56 +11,63 @@ describe 'routing to Kuhsaft::PagesController' do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
describe 'routing to Kuhsaft::Admin::PagesController' do
|
14
|
-
it 'routes /admin/pages to admin/pages#index' do
|
15
|
-
{ :get => '/admin/pages' }.should route_to(
|
14
|
+
it 'routes /en/admin/pages to admin/pages#index' do
|
15
|
+
{ :get => '/en/admin/pages' }.should route_to(
|
16
16
|
:controller => 'kuhsaft/admin/pages',
|
17
|
-
:action => 'index'
|
17
|
+
:action => 'index',
|
18
|
+
:locale => 'en'
|
18
19
|
)
|
19
20
|
end
|
20
21
|
|
21
|
-
it 'routes POST /admin/pages to admin/pages#create' do
|
22
|
-
{ :post => '/admin/pages' }.should route_to(
|
22
|
+
it 'routes POST /en/admin/pages to admin/pages#create' do
|
23
|
+
{ :post => '/en/admin/pages' }.should route_to(
|
23
24
|
:controller => 'kuhsaft/admin/pages',
|
24
|
-
:action => 'create'
|
25
|
+
:action => 'create',
|
26
|
+
:locale => 'en'
|
25
27
|
)
|
26
28
|
end
|
27
29
|
|
28
|
-
it 'routes PUT /admin/pages/:id to admin/pages#update' do
|
29
|
-
{ :put => '/admin/pages/1' }.should route_to(
|
30
|
+
it 'routes PUT /en/admin/pages/:id to admin/pages#update' do
|
31
|
+
{ :put => '/en/admin/pages/1' }.should route_to(
|
30
32
|
:controller => 'kuhsaft/admin/pages',
|
31
33
|
:action => 'update',
|
32
|
-
:id => '1'
|
34
|
+
:id => '1',
|
35
|
+
:locale => 'en'
|
33
36
|
)
|
34
37
|
end
|
35
38
|
|
36
|
-
it 'routes DELETE /admin/pages/:id to admin/pages#destroy' do
|
37
|
-
{ :delete => '/admin/pages/1' }.should route_to(
|
39
|
+
it 'routes DELETE /en/admin/pages/:id to admin/pages#destroy' do
|
40
|
+
{ :delete => '/en/admin/pages/1' }.should route_to(
|
38
41
|
:controller => 'kuhsaft/admin/pages',
|
39
42
|
:action => 'destroy',
|
40
|
-
:id => '1'
|
43
|
+
:id => '1',
|
44
|
+
:locale => 'en'
|
41
45
|
)
|
42
46
|
end
|
43
47
|
|
44
|
-
it 'routes /admin/pages/:id to admin/pages#show' do
|
45
|
-
{ :get => '/admin/pages/1' }.should route_to(
|
48
|
+
it 'routes /en/admin/pages/:id to admin/pages#show' do
|
49
|
+
{ :get => '/en/admin/pages/1' }.should route_to(
|
46
50
|
:controller => 'kuhsaft/admin/pages',
|
47
51
|
:action => 'show',
|
48
|
-
:id => '1'
|
52
|
+
:id => '1',
|
53
|
+
:locale => 'en'
|
49
54
|
)
|
50
55
|
end
|
51
56
|
|
52
|
-
it 'routes /admin/pages/new to admin/pages#new' do
|
53
|
-
{ :get => '/admin/pages/new' }.should route_to(
|
57
|
+
it 'routes /en/admin/pages/new to admin/pages#new' do
|
58
|
+
{ :get => '/en/admin/pages/new' }.should route_to(
|
54
59
|
:controller => 'kuhsaft/admin/pages',
|
55
|
-
:action => 'new'
|
60
|
+
:action => 'new',
|
61
|
+
:locale => 'en'
|
56
62
|
)
|
57
63
|
end
|
58
64
|
|
59
|
-
it 'routes /admin/pages/:id/edit to admin/pages#edit' do
|
60
|
-
{ :get => '/admin/pages/1/edit' }.should route_to(
|
65
|
+
it 'routes /en/admin/pages/:id/edit to admin/pages#edit' do
|
66
|
+
{ :get => '/en/admin/pages/1/edit' }.should route_to(
|
61
67
|
:controller => 'kuhsaft/admin/pages',
|
62
68
|
:action => 'edit',
|
63
|
-
:id => '1'
|
69
|
+
:id => '1',
|
70
|
+
:locale => 'en'
|
64
71
|
)
|
65
72
|
end
|
66
73
|
end
|