typus 0.9.29 → 0.9.30

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.
Files changed (51) hide show
  1. data/README.rdoc +4 -54
  2. data/VERSION +1 -1
  3. data/app/controllers/admin/master_controller.rb +36 -18
  4. data/app/helpers/admin/form_helper.rb +40 -7
  5. data/app/helpers/admin/table_helper.rb +6 -17
  6. data/app/views/admin/resources/show.html.erb +1 -2
  7. data/app/views/admin/templates/_file.html.erb +2 -40
  8. data/app/views/layouts/admin.html.erb +3 -0
  9. data/config/locales/de.yml +0 -1
  10. data/config/locales/es.yml +0 -1
  11. data/config/locales/fr.yml +0 -1
  12. data/config/locales/language.yml.template +0 -1
  13. data/config/locales/pt-BR.yml +0 -1
  14. data/config/locales/ru.yml +0 -1
  15. data/generators/typus/templates/public/stylesheets/admin/screen.css +1 -1
  16. data/generators/typus/typus_generator.rb +1 -1
  17. data/lib/typus/preview.rb +66 -2
  18. data/tasks/typus_tasks.rake +0 -2
  19. data/test/config/working/application.yml +9 -3
  20. data/test/config/working/application_roles.yml +3 -1
  21. data/test/fixtures/app/views/admin/{comments → posts}/_edit.html.erb +0 -0
  22. data/test/fixtures/app/views/admin/{comments → posts}/_index.html.erb +0 -0
  23. data/test/fixtures/app/views/admin/{comments → posts}/_new.html.erb +0 -0
  24. data/test/fixtures/app/views/admin/{comments → posts}/_show.html.erb +0 -0
  25. data/test/fixtures/app/views/admin/{comments → posts}/_sidebar.html.erb +0 -0
  26. data/test/functional/admin/{assets_controller_test.rb → master_controller_assets_relationships.rb} +23 -13
  27. data/test/functional/admin/master_controller_categories_lists_test.rb +64 -0
  28. data/test/functional/admin/master_controller_posts_before_test.rb +10 -0
  29. data/test/functional/admin/master_controller_posts_crud_test.rb +97 -0
  30. data/test/functional/admin/master_controller_posts_formats_test.rb +59 -0
  31. data/test/functional/admin/master_controller_posts_permissions_test.rb +127 -0
  32. data/test/functional/admin/master_controller_posts_relationships_test.rb +86 -0
  33. data/test/functional/admin/master_controller_posts_roles.rb +50 -0
  34. data/test/functional/admin/master_controller_posts_toggle_test.rb +35 -0
  35. data/test/functional/admin/master_controller_posts_views_test.rb +209 -0
  36. data/test/functional/admin/{status_controller_test.rb → master_controller_tableless_resource_test.rb} +5 -11
  37. data/test/functional/admin/{typus_users_controller_test.rb → master_controller_typus_users_test.rb} +10 -37
  38. data/test/functional/typus_controller_test.rb +154 -136
  39. data/test/helpers/admin/form_helper_test.rb +49 -27
  40. data/test/helpers/admin/sidebar_helper_test.rb +4 -7
  41. data/test/lib/active_record_test.rb +8 -8
  42. data/test/lib/typus_test.rb +1 -1
  43. data/test/models.rb +8 -1
  44. data/test/schema.rb +6 -0
  45. data/test/unit/typus_user_roles_test.rb +4 -4
  46. data/typus.gemspec +31 -21
  47. metadata +31 -21
  48. data/test/functional/admin/categories_controller_test.rb +0 -105
  49. data/test/functional/admin/comments_controller_test.rb +0 -121
  50. data/test/functional/admin/master_controller_test.rb +0 -51
  51. data/test/functional/admin/posts_controller_test.rb +0 -300
data/lib/typus/preview.rb CHANGED
@@ -2,9 +2,73 @@ module Typus
2
2
 
3
3
  module InstanceMethods
4
4
 
5
- def typus_preview(attachment)
5
+ include ActionView::Helpers::UrlHelper
6
+
7
+ # OPTIMIZE
8
+ def typus_preview_on_table(attribute)
9
+
10
+ attachment = attribute.split('_file_name').first
6
11
  file_preview = Typus::Configuration.options[:file_preview]
7
- return "<img src=\"#{send(attachment).url(file_preview)}\" />"
12
+ file_thumbnail = Typus::Configuration.options[:file_thumbnail]
13
+
14
+ if send(attachment).styles.member?(file_preview) && send("#{attachment}_content_type") =~ /^image\/.+/
15
+ <<-HTML
16
+ <script type="text/javascript" charset="utf-8">
17
+ $(document).ready(function() { $("##{to_dom}").fancybox(); });
18
+ </script>
19
+ <a id="#{to_dom}" href="#{send(attachment).url(file_preview)}">#{send(attribute)}</a>
20
+ HTML
21
+ else
22
+ <<-HTML
23
+ <a href="#{send(attachment).url}">#{send(attribute)}</a>
24
+ HTML
25
+ end
26
+ end
27
+
28
+ # OPTIMIZE
29
+ def typus_preview(attribute)
30
+
31
+ attachment = attribute.split('_file_name').first
32
+
33
+ case send("#{attachment}_content_type")
34
+ when /^image\/.+/
35
+ file_preview = Typus::Configuration.options[:file_preview]
36
+ file_thumbnail = Typus::Configuration.options[:file_thumbnail]
37
+ if send(attachment).styles.member?(file_preview) && send(attachment).styles.member?(file_thumbnail)
38
+ <<-HTML
39
+ <script type="text/javascript" charset="utf-8">
40
+ $(document).ready(function() { $("##{to_dom}").fancybox(); });
41
+ </script>
42
+ <a id="#{to_dom}" href="#{send(attachment).url(file_preview)}" title="#{typus_name}">
43
+ <img src="#{send(attachment).url(file_thumbnail)}" />
44
+ </a>
45
+ HTML
46
+ elsif send(attachment).styles.member?(file_thumbnail)
47
+ <<-HTML
48
+ <a href="#{send(attachment).url}" title="#{typus_name}">
49
+ <img src="#{send(attachment).url(file_thumbnail)}" />
50
+ </a>
51
+ HTML
52
+ elsif send(attachment).styles.member?(file_preview)
53
+ <<-HTML
54
+ <script type="text/javascript" charset="utf-8">
55
+ $(document).ready(function() { $("##{to_dom}").fancybox(); });
56
+ </script>
57
+ <a id="#{to_dom}" href="#{send(attachment).url(file_preview)}" title="#{typus_name}">
58
+ #{send(attribute)}
59
+ </a>
60
+ HTML
61
+ else
62
+ <<-HTML
63
+ <a href="#{send(attachment).url}">#{send(attribute)}</a>
64
+ HTML
65
+ end
66
+ else
67
+ <<-HTML
68
+ <a href="#{send(attachment).url}">#{send(attribute)}</a>
69
+ HTML
70
+ end
71
+
8
72
  end
9
73
 
10
74
  end
@@ -1,5 +1,3 @@
1
- # require 'spec/tasks/rails'
2
-
3
1
  namespace :typus do
4
2
 
5
3
  desc 'Install acts_as_list, acts_as_tree and paperclip.'
@@ -44,6 +44,8 @@ Post:
44
44
  list: title, created_at, status
45
45
  form: title, body, created_at, status, published_at
46
46
  relationship: title, created_at
47
+ csv: title, status
48
+ xml: title, status
47
49
  options:
48
50
  selectors: status
49
51
  read_only: permalink
@@ -52,7 +54,7 @@ Post:
52
54
  created_at: post_short
53
55
  templates:
54
56
  published_at: datepicker
55
- relationships: assets, categories
57
+ relationships: assets, categories, comments, views
56
58
  actions:
57
59
  index: cleanup
58
60
  edit: send_as_newsletter, preview
@@ -60,9 +62,13 @@ Post:
60
62
  search: title
61
63
  order_by: title, -created_at
62
64
  application: Blog
65
+ export: csv, xml
63
66
 
64
67
  CustomUser:
65
68
  fields:
66
69
  list: first_name, last_name, email
67
- csv: first_name, last_name, email
68
- export: csv
70
+
71
+ View:
72
+ fields:
73
+ list: ip, post
74
+ form: ip, post
@@ -8,6 +8,7 @@ admin:
8
8
  Post: create, read, update, delete
9
9
  Status: index
10
10
  WatchDog: index, cleanup
11
+ View: create, read, update, delete
11
12
 
12
13
  editor:
13
14
  Category: create, read, update
@@ -15,8 +16,9 @@ editor:
15
16
  Git: index
16
17
  Post: create, read, update
17
18
  TypusUser: read, update
19
+ View: create, read, update, delete
18
20
 
19
21
  designer:
20
22
  Category: read, update
21
23
  Comment: read
22
- Post: read
24
+ Post: read, update
@@ -1,18 +1,22 @@
1
1
  require 'test/helper'
2
2
 
3
- # Test polimorphic relationships using the relate & unrelate actions.
4
-
5
3
  class Admin::AssetsControllerTest < ActionController::TestCase
6
4
 
7
5
  def setup
8
- typus_user = typus_users(:admin)
9
- @request.session[:typus_user_id] = typus_user.id
6
+ @request.session[:typus_user_id] = typus_users(:admin).id
10
7
  end
11
8
 
12
9
  def test_should_test_polymorphic_relationship_message
10
+
13
11
  post_ = posts(:published)
14
- get :new, { :back_to => "/admin/posts/#{post_.id}/edit", :resource => post_.class.name, :resource_id => post_.id }
15
- assert_match "You're adding a new Asset to Post.", @response.body
12
+ get :new, { :back_to => "/admin/posts/#{post_.id}/edit",
13
+ :resource => post_.class.name, :resource_id => post_.id }
14
+
15
+ assert_select 'body div#flash' do
16
+ assert_select 'p', "You're adding a new Asset to Post. Do you want to cancel it?"
17
+ assert_select 'a', "Do you want to cancel it?"
18
+ end
19
+
16
20
  end
17
21
 
18
22
  def test_should_create_a_polymorphic_relationship
@@ -20,21 +24,28 @@ class Admin::AssetsControllerTest < ActionController::TestCase
20
24
  post_ = posts(:published)
21
25
 
22
26
  assert_difference('post_.assets.count') do
23
- post :create, { :back_to => "/admin/posts/edit/#{post_.id}", :resource => post_.class.name, :resource_id => post_.id }
27
+ post :create, { :back_to => "/admin/posts/edit/#{post_.id}",
28
+ :resource => post_.class.name, :resource_id => post_.id }
24
29
  end
25
30
 
26
31
  assert_response :redirect
27
32
  assert_redirected_to '/admin/posts/edit/1#assets'
28
- assert flash[:success]
29
33
  assert_equal "Asset successfully assigned to Post.", flash[:success]
30
34
 
31
35
  end
32
36
 
33
- def test_should_test_polymorphic_relationship_edit_message
37
+ def test_should_render_edit_and_verify_message_on_polymorphic_relationship
38
+
34
39
  post_ = posts(:published)
35
- asset_ = assets(:first)
36
- get :edit, { :id => asset_.id, :back_to => "/admin/posts/#{post_.id}/edit", :resource => post_.class.name, :resource_id => post_.id }
37
- assert_match "You're updating a Asset for Post.", @response.body
40
+ get :edit, { :id => assets(:first).id,
41
+ :back_to => "/admin/posts/#{post_.id}/edit",
42
+ :resource => post_.class.name, :resource_id => post_.id }
43
+
44
+ assert_select 'body div#flash' do
45
+ assert_select 'p', "You're updating a Asset for Post. Do you want to cancel it?"
46
+ assert_select 'a', "Do you want to cancel it?"
47
+ end
48
+
38
49
  end
39
50
 
40
51
  def test_should_return_to_back_to_url
@@ -48,7 +59,6 @@ class Admin::AssetsControllerTest < ActionController::TestCase
48
59
  post :update, { :back_to => "/admin/posts/#{post_.id}/edit", :resource => post_.class.name, :resource_id => post_.id, :id => asset_.id }
49
60
  assert_response :redirect
50
61
  assert_redirected_to '/admin/posts/1/edit#assets'
51
- assert flash[:success]
52
62
  assert_equal "Asset successfully updated.", flash[:success]
53
63
 
54
64
  end
@@ -0,0 +1,64 @@
1
+ require 'test/helper'
2
+
3
+ class Admin::CategoriesControllerTest < ActionController::TestCase
4
+
5
+ def setup
6
+ @request.session[:typus_user_id] = typus_users(:admin).id
7
+ end
8
+
9
+ def test_should_verify_items_are_sorted_by_position_on_list
10
+ get :index
11
+ assert_response :success
12
+ assert_equal [ 1, 2, 3 ], assigns['items'].items.map(&:position)
13
+ assert_equal [ 2, 3, 1 ], Category.find(:all, :order => "id ASC").map(&:position)
14
+ end
15
+
16
+ if defined?(ActiveRecord::Acts::List)
17
+
18
+ def test_should_position_item_one_step_down
19
+
20
+ first_category = categories(:first)
21
+ assert_equal 1, first_category.position
22
+ second_category = categories(:second)
23
+ assert_equal 2, second_category.position
24
+
25
+ get :position, { :id => first_category.id, :go => 'move_lower' }
26
+ assert_response :redirect
27
+ assert_redirected_to admin_dashboard_path
28
+
29
+ assert_equal "Record moved lower.", flash[:success]
30
+ assert_equal 2, first_category.reload.position
31
+ assert_equal 1, second_category.reload.position
32
+
33
+ end
34
+
35
+ def test_should_position_item_one_step_up
36
+ first_category = categories(:first)
37
+ assert_equal 1, first_category.position
38
+ second_category = categories(:second)
39
+ assert_equal 2, second_category.position
40
+ get :position, { :id => second_category.id, :go => 'move_higher' }
41
+ assert_equal "Record moved higher.", flash[:success]
42
+ assert_equal 2, first_category.reload.position
43
+ assert_equal 1, second_category.reload.position
44
+ end
45
+
46
+ def test_should_position_top_item_to_bottom
47
+ first_category = categories(:first)
48
+ assert_equal 1, first_category.position
49
+ get :position, { :id => first_category.id, :go => 'move_to_bottom' }
50
+ assert_equal "Record moved to bottom.", flash[:success]
51
+ assert_equal 3, first_category.reload.position
52
+ end
53
+
54
+ def test_should_position_bottom_item_to_top
55
+ third_category = categories(:third)
56
+ assert_equal 3, third_category.position
57
+ get :position, { :id => third_category.id, :go => 'move_to_top' }
58
+ assert_equal "Record moved to top.", flash[:success]
59
+ assert_equal 1, third_category.reload.position
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,10 @@
1
+ require 'test/helper'
2
+
3
+ class Admin::PostsControllerTest < ActionController::TestCase
4
+
5
+ def setup
6
+ @typus_user = typus_users(:admin)
7
+ @request.session[:typus_user_id] = @typus_user.id
8
+ end
9
+
10
+ end
@@ -0,0 +1,97 @@
1
+ require 'test/helper'
2
+
3
+ class Admin::PostsControllerTest < ActionController::TestCase
4
+
5
+ ##
6
+ # Actions related to index.
7
+ ##
8
+
9
+ def test_should_index_items
10
+ get :index
11
+ assert_response :success
12
+ assert_template 'index'
13
+ end
14
+
15
+ ##
16
+ # Actions related to new.
17
+ ##
18
+
19
+ def test_should_new_an_item
20
+ get :new
21
+ assert_response :success
22
+ assert_template 'new'
23
+ end
24
+
25
+ ##
26
+ # Actions related to create.
27
+ ##
28
+
29
+ def test_should_create_an_item
30
+
31
+ assert_difference 'Post.count' do
32
+ post :create, { :item => { :title => 'This is another title', :body => 'Body' } }
33
+ assert_response :redirect
34
+ assert_redirected_to :controller => 'admin/posts', :action => 'edit', :id => Post.last
35
+ end
36
+
37
+ end
38
+
39
+ def test_should_create_an_item_and_redirect_to_index
40
+
41
+ options = Typus::Configuration.options.merge(:index_after_save => true)
42
+ Typus::Configuration.stubs(:options).returns(options)
43
+
44
+ assert_difference 'Post.count' do
45
+ post :create, { :item => { :title => 'This is another title', :body => 'Body' } }
46
+ assert_response :redirect
47
+ assert_redirected_to :action => 'index'
48
+ end
49
+
50
+ end
51
+
52
+ ##
53
+ # Actions related to show.
54
+ ##
55
+
56
+ def test_should_show_an_item
57
+ post_ = posts(:published)
58
+ get :show, { :id => post_.id }
59
+ assert_response :success
60
+ assert_template 'show'
61
+ end
62
+
63
+ ##
64
+ # Actions related to edit.
65
+ ##
66
+
67
+ def test_should_edit_an_item
68
+ get :edit, { :id => posts(:published) }
69
+ assert_response :success
70
+ assert_template 'edit'
71
+ end
72
+
73
+ ##
74
+ # Actions related to update.
75
+ ##
76
+
77
+ def test_should_update_an_item
78
+
79
+ post_ = posts(:published)
80
+ post :update, { :id => post_.id, :title => 'Updated' }
81
+ assert_response :redirect
82
+ assert_redirected_to :controller => 'admin/posts', :action => 'edit', :id => post_.id
83
+
84
+ end
85
+
86
+ def test_should_update_an_item_and_redirect_to_index
87
+
88
+ options = Typus::Configuration.options.merge(:index_after_save => true)
89
+ Typus::Configuration.stubs(:options).returns(options)
90
+
91
+ post :update, { :id => posts(:published), :title => 'Updated' }
92
+ assert_response :redirect
93
+ assert_redirected_to :action => 'index'
94
+
95
+ end
96
+
97
+ end
@@ -0,0 +1,59 @@
1
+ require 'test/helper'
2
+
3
+ class Admin::PostsControllerTest < ActionController::TestCase
4
+
5
+ def test_should_generate_xml
6
+
7
+ assert @typus_user.is_root?
8
+
9
+ expected = <<-RAW
10
+ <?xml version="1.0" encoding="UTF-8"?>
11
+ <posts type="array">
12
+ <post>
13
+ <status type="boolean">false</status>
14
+ <title>Owned by admin</title>
15
+ </post>
16
+ <post>
17
+ <status type="boolean">false</status>
18
+ <title>Owned by editor</title>
19
+ </post>
20
+ <post>
21
+ <status type="boolean">true</status>
22
+ <title>Title One</title>
23
+ </post>
24
+ <post>
25
+ <status type="boolean">false</status>
26
+ <title>Title Two</title>
27
+ </post>
28
+ </posts>
29
+ RAW
30
+
31
+ get :index, :format => 'xml'
32
+ assert_equal expected, @response.body
33
+
34
+ end
35
+
36
+ def test_should_generate_csv
37
+
38
+ assert @typus_user.is_root?
39
+
40
+ begin
41
+ require 'fastercsv'
42
+ rescue LoadError
43
+ return
44
+ end
45
+
46
+ expected = <<-RAW
47
+ Title,Status
48
+ Owned by admin,false
49
+ Owned by editor,false
50
+ Title One,true
51
+ Title Two,false
52
+ RAW
53
+
54
+ get :index, :format => 'csv'
55
+ assert_equal expected, @response.body
56
+
57
+ end
58
+
59
+ end