theme_park 0.1.0.beta

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 (74) hide show
  1. data/LICENSE.txt +20 -0
  2. data/README.md +105 -0
  3. data/Rakefile +16 -0
  4. data/lib/generators/templates/application.css +5 -0
  5. data/lib/generators/templates/application.js +3 -0
  6. data/lib/generators/templates/layouts/application.html.erb +14 -0
  7. data/lib/generators/templates/theme_park.rb +31 -0
  8. data/lib/generators/theme_park/create_generator.rb +28 -0
  9. data/lib/generators/theme_park/install_generator.rb +16 -0
  10. data/lib/tasks/theme_park.rake +33 -0
  11. data/lib/theme_park.rb +123 -0
  12. data/lib/theme_park/configuration.rb +47 -0
  13. data/lib/theme_park/rails/action_controller.rb +53 -0
  14. data/lib/theme_park/rails/asset_tag_helper.rb +78 -0
  15. data/lib/theme_park/rails/server.rb +38 -0
  16. data/lib/theme_park/railtie.rb +52 -0
  17. data/lib/theme_park/server.rb +25 -0
  18. data/lib/theme_park/version.rb +11 -0
  19. data/test/dummy/README.rdoc +261 -0
  20. data/test/dummy/Rakefile +7 -0
  21. data/test/dummy/app/assets/javascripts/application.js +15 -0
  22. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  23. data/test/dummy/app/controllers/application_controller.rb +3 -0
  24. data/test/dummy/app/helpers/application_helper.rb +2 -0
  25. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  26. data/test/dummy/app/views/test1/index.html.erb +1 -0
  27. data/test/dummy/config.ru +4 -0
  28. data/test/dummy/config/application.rb +56 -0
  29. data/test/dummy/config/boot.rb +10 -0
  30. data/test/dummy/config/database.yml +25 -0
  31. data/test/dummy/config/environment.rb +5 -0
  32. data/test/dummy/config/environments/development.rb +37 -0
  33. data/test/dummy/config/environments/production.rb +67 -0
  34. data/test/dummy/config/environments/test.rb +37 -0
  35. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  36. data/test/dummy/config/initializers/inflections.rb +15 -0
  37. data/test/dummy/config/initializers/mime_types.rb +5 -0
  38. data/test/dummy/config/initializers/secret_token.rb +7 -0
  39. data/test/dummy/config/initializers/session_store.rb +8 -0
  40. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/test/dummy/config/locales/en.yml +5 -0
  42. data/test/dummy/config/routes.rb +58 -0
  43. data/test/dummy/db/test.sqlite3 +0 -0
  44. data/test/dummy/log/test.log +1703 -0
  45. data/test/dummy/public/404.html +26 -0
  46. data/test/dummy/public/422.html +26 -0
  47. data/test/dummy/public/500.html +25 -0
  48. data/test/dummy/public/favicon.ico +0 -0
  49. data/test/dummy/script/rails +6 -0
  50. data/test/dummy/themes/default/assets/javascripts/default.js +0 -0
  51. data/test/dummy/themes/default/assets/stylesheets/default.css +0 -0
  52. data/test/dummy/themes/default/views/layouts/application.html.erb +1 -0
  53. data/test/dummy/themes/default/views/test/edit.html.erb +1 -0
  54. data/test/dummy/themes/default/views/test/index.html.erb +1 -0
  55. data/test/dummy/themes/default/views/test/show.html.erb +1 -0
  56. data/test/dummy/themes/default/views/test1/show.html.erb +1 -0
  57. data/test/dummy/themes/default1/views/layouts/application.html.erb +1 -0
  58. data/test/dummy/themes/default1/views/test/edit.html.erb +1 -0
  59. data/test/dummy/themes/default1/views/test/index.html.erb +1 -0
  60. data/test/dummy/themes/default1/views/test/show.html.erb +1 -0
  61. data/test/dummy/themes/default1/views/test1/edit.html.erb +1 -0
  62. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  63. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  64. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  65. data/test/helper.rb +28 -0
  66. data/test/rails/action_controller_test.rb +58 -0
  67. data/test/rails/action_view_test.rb +103 -0
  68. data/test/rails/server_test.rb +5 -0
  69. data/test/railtie_test.rb +32 -0
  70. data/test/server_test.rb +5 -0
  71. data/test/theme_park_test.rb +79 -0
  72. data/test/themes/default/test.js +0 -0
  73. data/test/themes/default1/test1.js +0 -0
  74. metadata +306 -0
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1 @@
1
+ default/test/edit.html.erb
@@ -0,0 +1 @@
1
+ default/test/index.html.erb
@@ -0,0 +1 @@
1
+ default/test/show.html.erb
@@ -0,0 +1 @@
1
+ default/test1/show.html.erb
@@ -0,0 +1 @@
1
+ default1/test/edit.html.erb
@@ -0,0 +1 @@
1
+ default1/test/index.html.erb
@@ -0,0 +1 @@
1
+ default1/test/show.html.erb
@@ -0,0 +1 @@
1
+ default1/test1/edit.html.erb
@@ -0,0 +1,28 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require 'rubygems'
5
+ require 'bundler'
6
+
7
+ begin
8
+ Bundler.setup(:default, :development)
9
+ rescue Bundler::BundlerError => e
10
+ $stderr.puts e.message
11
+ $stderr.puts "Run `bundle install` to install missing gems"
12
+ exit e.status_code
13
+ end
14
+
15
+ require 'test/unit'
16
+ require 'minitest/autorun'
17
+
18
+ # Enable turn if it is available
19
+ begin
20
+ require 'turn'
21
+ rescue LoadError
22
+ end
23
+
24
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
25
+ require "rails/test_help"
26
+
27
+ Rails.backtrace_cleaner.remove_silencers!
28
+
@@ -0,0 +1,58 @@
1
+ require 'helper'
2
+
3
+ class TestController < ApplicationController
4
+ theme 'default'
5
+
6
+ def index
7
+ end
8
+
9
+ end
10
+
11
+ class Test1Controller < ApplicationController
12
+ theme 'default', :only => :show
13
+
14
+ def index
15
+ end
16
+
17
+ def show
18
+ end
19
+
20
+ def edit
21
+ theme 'default1'
22
+ end
23
+
24
+ end
25
+
26
+ class TestControllerTest < ActionController::TestCase
27
+
28
+ tests TestController
29
+
30
+ def test_class_method_theme_without_options
31
+ get :index
32
+ assert @response.body.include?('default/test/index.html.erb')
33
+ assert_equal 'default', assigns('current_theme')
34
+ end
35
+
36
+ end
37
+
38
+ class Test1ControllerTest < ActionController::TestCase
39
+
40
+ tests Test1Controller
41
+
42
+ def test_class_method_theme_with_options
43
+ get :index
44
+ assert @response.body.include?('origin/test1/index.html.erb')
45
+ assert_equal nil, assigns('current_theme')
46
+
47
+ get :show
48
+ assert @response.body.include?('default/test1/show.html.erb')
49
+ assert_equal 'default', assigns('current_theme')
50
+ end
51
+
52
+ def test_instance_method_theme
53
+ get :edit
54
+ assert @response.body.include?('default1/test1/edit.html.erb')
55
+ assert_equal 'default1', assigns('current_theme')
56
+ end
57
+
58
+ end
@@ -0,0 +1,103 @@
1
+ require 'helper'
2
+ require 'theme_park/rails/asset_tag_helper'
3
+
4
+ class ActionViewTest < ActionView::TestCase
5
+ tests ThemePark::Rails::AssetTagHelper
6
+
7
+ def setup
8
+ super
9
+ @current_theme = 'foo'
10
+ end
11
+
12
+ def test_theme_stylesheet_link_tag
13
+ assert_dom_equal '<link href="/stylesheets/xx.css" type="text/css" media="screen" rel="stylesheet"/>', theme_stylesheet_link_tag('xx')
14
+ end
15
+
16
+ def test_theme_javascript_include_tag
17
+ assert_dom_equal '<script src="/javascripts/xx.js" type="text/javascript"></script>', theme_javascript_include_tag('xx')
18
+ end
19
+
20
+ def test_theme_image_tag
21
+ assert_dom_equal '<img alt="Xx" src="/images/xx.jpg" />', theme_image_tag('xx.jpg')
22
+ end
23
+
24
+ def test_theme_compiled_path
25
+ assert_equal "/themes/foo/bar.js", theme_compiled_path('bar.js')
26
+ assert_equal "/themes/foo1/bar.js", theme_compiled_path('bar.js', 'foo1')
27
+ end
28
+
29
+ def test_assets_enabled?
30
+ assert_equal true, assets_enabled?
31
+ end
32
+
33
+ def test_serve_static_assets?
34
+ assert_equal true, serve_static_assets?
35
+ end
36
+
37
+ def test_assets_digest?
38
+ assert_equal false, assets_digest?
39
+ end
40
+
41
+ def test_serve_theme_compiled?
42
+ assert_equal false, serve_theme_compiled?
43
+ end
44
+
45
+ def test_current_theme
46
+ assert_equal 'foo', current_theme
47
+ end
48
+
49
+ end
50
+
51
+ class ActionViewUseSprocketsTest < ActionView::TestCase
52
+ tests ThemePark::Rails::AssetTagHelper
53
+
54
+ include Sprockets::Helpers::RailsHelper
55
+
56
+ def setup
57
+ super
58
+ @current_theme = 'foo'
59
+ end
60
+
61
+ def test_theme_javascript_include_tag
62
+ assert_dom_equal '<script src="/assets/xx.js" type="text/javascript"></script>', theme_javascript_include_tag('xx')
63
+ end
64
+
65
+ def test_theme_stylesheet_link_tag
66
+ assert_dom_equal '<link href="/assets/xx.css" type="text/css" media="screen" rel="stylesheet"/>', theme_stylesheet_link_tag('xx')
67
+ end
68
+
69
+ def test_theme_image_tag
70
+ assert_dom_equal '<img alt="Xx" src="/assets/xx.jpg" />', theme_image_tag('xx.jpg')
71
+ end
72
+
73
+ end
74
+
75
+ class ActionViewServeThemeCompiledTest < ActionView::TestCase
76
+ tests ThemePark::Rails::AssetTagHelper
77
+
78
+ def setup
79
+ super
80
+ @current_theme = 'foo'
81
+ Dummy::Application.config.assets.digest = true
82
+ end
83
+
84
+ def test_theme_javascript_include_tag
85
+ assert_dom_equal '<script src="/themes/foo/xx.js" type="text/javascript"></script>', theme_javascript_include_tag('xx')
86
+ assert_dom_equal '<script src="/themes/bar/xx.js" type="text/javascript"></script>', theme_javascript_include_tag('xx', :theme => 'bar')
87
+ end
88
+
89
+ def test_theme_stylesheet_link_tag
90
+ assert_dom_equal '<link href="/themes/foo/xx.css" type="text/css" media="screen" rel="stylesheet"/>', theme_stylesheet_link_tag('xx')
91
+ assert_dom_equal '<link href="/themes/bar/xx.css" type="text/css" media="screen" rel="stylesheet"/>', theme_stylesheet_link_tag('xx', :theme => 'bar')
92
+ end
93
+
94
+ def test_theme_image_tag
95
+ assert_dom_equal '<img alt="Xx" src="/themes/foo/xx.jpg" />', theme_image_tag('xx.jpg')
96
+ assert_dom_equal '<img alt="Xx" src="/themes/bar/xx.jpg" />', theme_image_tag('xx.jpg', :theme => 'bar')
97
+ end
98
+
99
+ def teardown
100
+ Dummy::Application.config.assets.digest = false
101
+ end
102
+
103
+ end
@@ -0,0 +1,5 @@
1
+ # #require 'helper'
2
+
3
+ # class ServerTest < Test::Unit::TestCase
4
+
5
+ # end
@@ -0,0 +1,32 @@
1
+ require 'helper'
2
+
3
+ class RailtieTest < ActiveSupport::TestCase
4
+
5
+ test 'rails app should have a theme_park option' do
6
+ theme_park = Dummy::Application.config.theme_park
7
+ assert_equal(ThemePark, theme_park)
8
+ assert_equal('themes', theme_park.prefix)
9
+ assert_equal("#{Dummy::Application.root}/themes", theme_park.base_root)
10
+ end
11
+
12
+ test 'action_view should load ThemePark::Rails::ActionView' do
13
+ assert ActionView::Base < ThemePark::Rails::AssetTagHelper
14
+ end
15
+
16
+ test 'action_controller should load ThemePark::Rails::ActionController' do
17
+ assert ActionController::Base < ThemePark::Rails::ActionController
18
+ end
19
+
20
+ test 'config.assets.paths should include ThemePark.assets_path' do
21
+ assert Dummy::Application.config.assets.paths.include?("#{File.dirname(__FILE__)}/dummy/themes/default/assets/images")
22
+ end
23
+
24
+ test 'rails app route should mount at #{ThemePark.prefix}/:theme_name' do
25
+ routes = Dummy::Application.routes.routes
26
+ server = routes.select { |r| r.app.instance_of?(ThemePark::Rails::Server) }.pop
27
+ assert !server.nil? # mount successful
28
+ path = server.path.spec.to_s
29
+ assert_equal('/themes/:theme_name', path) # mount path correct
30
+ end
31
+
32
+ end
@@ -0,0 +1,5 @@
1
+ require 'helper'
2
+
3
+ class ServerTest < MiniTest::Unit::TestCase
4
+ #TODO
5
+ end
@@ -0,0 +1,79 @@
1
+ require 'helper'
2
+
3
+ class ThemeParkTest < MiniTest::Unit::TestCase
4
+
5
+ def setup
6
+ @logic_path = File.dirname(__FILE__)
7
+ ThemePark.setup do |config|
8
+ config.base = @logic_path
9
+ end
10
+ end
11
+
12
+ def teardown
13
+ end
14
+
15
+ def test_root
16
+ # default setting
17
+ assert_equal("/themes", ThemePark.root)
18
+ end
19
+
20
+ def test_base_root
21
+ assert_equal("#{@logic_path}/themes", ThemePark.base_root)
22
+ end
23
+
24
+ def test_prefix
25
+ assert_equal("themes", ThemePark.prefix)
26
+ end
27
+
28
+ def test_path_with_theme_name
29
+ assert_equal("#{@logic_path}/themes/default", ThemePark.path('default'))
30
+ end
31
+
32
+ def test_theme_exist_or_not
33
+ assert_equal(true, ThemePark.exist?('default'))
34
+ assert_equal(false, ThemePark.exist?('foo'))
35
+ end
36
+
37
+ def test_interpolate
38
+ assert_equal("#{@logic_path}/themes/oo/bar/foo", ThemePark.interpolate(':root/oo/:name/foo', 'bar'))
39
+ assert_equal("/themes/oo/bar/foo", ThemePark.interpolate('/themes/oo/bar/foo', 'bar'))
40
+ end
41
+
42
+ def test_images_path
43
+ assert_equal("#{@logic_path}/themes/default/assets/images", ThemePark.images_path('default'))
44
+ end
45
+
46
+ def test_javascripts_path
47
+ assert_equal("#{@logic_path}/themes/default/assets/javascripts", ThemePark.javascripts_path('default'))
48
+ end
49
+
50
+ def test_stylesheets_path
51
+ assert_equal("#{@logic_path}/themes/default/assets/stylesheets", ThemePark.stylesheets_path('default'))
52
+ end
53
+
54
+ def test_compiled_path
55
+ assert_equal("#{@logic_path}/themes/default/assets/compiled", ThemePark.compiled_path('default'))
56
+ end
57
+
58
+ def test_views_path
59
+ assert_equal("#{@logic_path}/themes/default/views", ThemePark.views_path('default'))
60
+ end
61
+
62
+ def test_assets_path_for_one_theme
63
+ assets_path = [ "#{@logic_path}/themes/default/assets/images",
64
+ "#{@logic_path}/themes/default/assets/javascripts",
65
+ "#{@logic_path}/themes/default/assets/stylesheets"]
66
+ assert_equal(assets_path, ThemePark.theme_assets_path('default'))
67
+ end
68
+
69
+ def test_assets_path
70
+ assets_path = [ "#{@logic_path}/themes/default/assets/images",
71
+ "#{@logic_path}/themes/default/assets/javascripts",
72
+ "#{@logic_path}/themes/default/assets/stylesheets",
73
+ "#{@logic_path}/themes/default1/assets/images",
74
+ "#{@logic_path}/themes/default1/assets/javascripts",
75
+ "#{@logic_path}/themes/default1/assets/stylesheets"].sort
76
+ assert_equal(assets_path, ThemePark.assets_path.sort)
77
+ end
78
+
79
+ end