themes_for_rails 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- themes_for_rails (0.3.0)
4
+ themes_for_rails (0.3.1)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.textile CHANGED
@@ -120,13 +120,13 @@ h2. Generators
120
120
  For now, it only creates the theme folder.
121
121
 
122
122
  <pre>
123
- rails generate theme_for_rails:install
123
+ rails generate themes_for_rails:install
124
124
  </pre>
125
125
 
126
126
  Inside the themes folder, it create a structure for my_theme.
127
127
 
128
128
  <pre>
129
- rails generate theme_for_rails:theme my_theme
129
+ rails generate themes_for_rails:theme my_theme
130
130
  </pre>
131
131
 
132
132
  h2. Changing things
@@ -155,6 +155,22 @@ KillerApp::Application.configure do
155
155
  end
156
156
  </pre>
157
157
 
158
+ h2. Sass support
159
+
160
+ ThemesForRails will automatically add the themes paths to Sass, if sass is available.
161
+
162
+ For instance, everything you put inside themes/my_theme/stylesheets/sass will get compiled into themes/my_theme/stylesheets (duh, right?)
163
+
164
+ To bypass sass configuration, do this:
165
+ <pre>
166
+ KillerApp::Application.configure do
167
+ #
168
+
169
+ config.themes_for_rails.use_sass = false
170
+
171
+ #...
172
+ end
173
+ </pre>
158
174
 
159
175
  h2. Another way to change things
160
176
 
@@ -219,3 +235,9 @@ rake
219
235
  h2. Authors and contributors
220
236
 
221
237
  * lucasefe
238
+
239
+ h2. Last but not least
240
+
241
+ If you are using this gem, please, take a minute to recommend me at Working With Rails.
242
+
243
+ <a href="http://www.workingwithrails.com/recommendation/new/person/7277-lucas-florio"><img alt="Recommend Me" src="http://workingwithrails.com/images/tools/compact-small.jpg" /></a>
@@ -1,4 +1,4 @@
1
- module ThemeForRails
1
+ module ThemesForRails
2
2
  module Generators
3
3
  class InstallGenerator < Rails::Generators::Base
4
4
  desc "Creates a ThemeForRails basic structure."
@@ -1,4 +1,4 @@
1
- module ThemeForRails
1
+ module ThemesForRails
2
2
  module Generators
3
3
  class ThemeGenerator < Rails::Generators::NamedBase
4
4
  source_root File.expand_path("../templates", __FILE__)
@@ -7,26 +7,27 @@ module ThemesForRails
7
7
  include ThemesForRails::UrlHelpers
8
8
 
9
9
  def stylesheets
10
- filename, extension = extract_filename_and_extension_from(params[:asset])
11
- render_asset theme_stylesheet_path_for(params[:theme], filename), 'text/css'
10
+ render_asset asset_path_for(params[:asset], 'stylesheets'), mime_type_from(params[:asset])
12
11
  end
13
12
 
14
13
  def javascripts
15
- filename, extension = extract_filename_and_extension_from(params[:asset])
16
- render_asset theme_javascript_path_for(params[:theme], filename), 'text/javascript'
14
+ render_asset asset_path_for(params[:asset], 'javascripts'), mime_type_from(params[:asset])
17
15
  end
18
16
 
19
17
  def images
20
- filename, extension = extract_filename_and_extension_from(params[:asset])
21
- render_asset theme_image_path_for(params[:theme], filename, extension), "image/#{extension.gsub('.', '')}"
18
+ render_asset asset_path_for(params[:asset], 'images'), mime_type_from(params[:asset])
22
19
  end
23
20
 
24
21
  private
25
22
 
23
+ def asset_path_for(asset_url, asset_prefix)
24
+ File.join(theme_path_for(params[:theme]), asset_prefix, params[:asset])
25
+ end
26
+
26
27
  def extract_filename_and_extension_from(asset)
27
28
  extension = File.extname(asset)
28
29
  filename = params[:asset].gsub(extension, '')
29
- return filename, extension
30
+ return filename, extension[1..-1]
30
31
  end
31
32
 
32
33
  def render_asset(asset, mime_type)
@@ -36,16 +37,16 @@ module ThemesForRails
36
37
  send_file asset, :type => mime_type
37
38
  end
38
39
  end
39
-
40
- # Physical paths
41
- def theme_stylesheet_path_for(name, asset)
42
- File.join(theme_path_for(name), 'stylesheets', "#{asset}.css")
43
- end
44
- def theme_javascript_path_for(name, asset)
45
- File.join(theme_path_for(name), 'javascripts', "#{asset}.js")
46
- end
47
- def theme_image_path_for(name, asset, extension = ".png")
48
- File.join(theme_path_for(name), 'images', "#{asset}#{extension}")
40
+
41
+ def mime_type_from(asset_path)
42
+ extension = extract_filename_and_extension_from(asset_path).last
43
+ if extension == 'css'
44
+ "text/css"
45
+ elsif extension == 'js'
46
+ 'text/javascript'
47
+ else
48
+ "image/#{extension}"
49
+ end
49
50
  end
50
51
  end
51
52
  end
@@ -2,8 +2,10 @@ module ThemesForRails
2
2
  class Config
3
3
 
4
4
  attr_writer :base_dir, :themes_dir
5
+ attr_accessor :use_sass
5
6
 
6
7
  def initialize(&block)
8
+ @use_sass = true
7
9
  yield if block_given?
8
10
  end
9
11
 
@@ -20,5 +22,12 @@ module ThemesForRails
20
22
  @themes_dir = nil
21
23
  end
22
24
 
25
+ def use_sass?
26
+ @use_sass and sass_is_available?
27
+ end
28
+
29
+ def sass_is_available?
30
+ !!defined?Sass::Plugin
31
+ end
23
32
  end
24
33
  end
@@ -8,7 +8,12 @@ module ThemesForRails
8
8
  ThemesForRails::Railtie.config.themes_for_rails.each do |key, value|
9
9
  ThemesForRails.config.send "#{key}=".to_sym, value
10
10
  end
11
+
12
+ # Adding theme stylesheets path to sass, automatically.
13
+ ThemesForRails.add_themes_path_to_sass if ThemesForRails.config.use_sass?
14
+
11
15
  end
16
+
12
17
  rake_tasks do
13
18
  load "tasks/themes_for_rails.rake"
14
19
  end
@@ -1,3 +1,3 @@
1
1
  module ThemesForRails
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -1,6 +1,8 @@
1
1
  module ThemesForRails
2
2
  module ViewHelpers
3
+
3
4
  extend ActiveSupport::Concern
5
+
4
6
  included do
5
7
  include ThemesForRails::CommonMethods
6
8
  end
@@ -12,8 +14,9 @@ module ThemesForRails
12
14
  base_theme_javascript_path(:theme => self.theme_name, :asset => "#{asset}.js")
13
15
  end
14
16
  def current_theme_image_path(asset)
15
- self.base_theme_image_path(:theme => self.theme_name, :asset => asset)
17
+ base_theme_image_path(:theme => self.theme_name, :asset => asset)
16
18
  end
19
+
17
20
  alias_method :theme_image_path, :current_theme_image_path
18
21
  alias_method :theme_javascript_path, :current_theme_javascript_path
19
22
  alias_method :theme_stylesheet_path, :current_theme_stylesheet_path
@@ -21,13 +24,17 @@ module ThemesForRails
21
24
  def theme_image_tag(source)
22
25
  image_tag(theme_image_path(source))
23
26
  end
27
+
24
28
  def theme_javascript_include_tag(*files)
25
29
  files.collect! {|file| theme_javascript_path(file) }
26
30
  javascript_include_tag *files
27
31
  end
32
+
28
33
  def theme_stylesheet_link_tag(*files)
34
+ options = files.extract_options!
29
35
  files.collect! {|file| theme_stylesheet_path(file) }
30
- stylesheet_link_tag *files
36
+ files << options
37
+ stylesheet_link_tag(*files)
31
38
  end
32
39
  end
33
40
  end
@@ -14,7 +14,34 @@ module ThemesForRails
14
14
  def available_theme_names
15
15
  available_themes.map {|theme| File.basename(theme) }
16
16
  end
17
+
18
+ def add_themes_path_to_sass
19
+ if ThemesForRails.config.sass_is_available?
20
+ each_theme_dir do |dir|
21
+ if File.directory?(dir) # Need to get rid of the '.' and '..'
22
+
23
+ sass_dir = "#{dir}/stylesheets/sass"
24
+ css_dir = "#{dir}/stylesheets"
17
25
 
26
+ unless already_configured_in_sass?(sass_dir)
27
+ Sass::Plugin.add_template_location sass_dir, css_dir
28
+ end
29
+ end
30
+ end
31
+ else
32
+ raise "Sass is not available. What are you trying to do?"
33
+ end
34
+ end
35
+
36
+ def already_configured_in_sass?(sass_dir)
37
+ Sass::Plugin.template_location_array.map(&:first).include?(sass_dir)
38
+ end
39
+
40
+ def each_theme_dir
41
+ Dir.glob(File.join(Rails.root, config.themes_dir, "*")) do |theme_dir|
42
+ yield(theme_dir) if block_given?
43
+ end
44
+ end
18
45
  end
19
46
  end
20
47
 
@@ -37,7 +37,7 @@ module ThemesForRails
37
37
  should "respond with the right image file when requested" do
38
38
  get 'images', { :theme => 'default', :asset => 'logo.png'}
39
39
  assert_response :success
40
- assert_equal @response.content_type, 'image/png'
40
+ assert_equal 'image/png', @response.content_type
41
41
  end
42
42
  should "not be success when the image file is not found" do
43
43
  get 'images', { :theme => 'default', :asset => 'i_am_not_here.jpg'}
@@ -47,6 +47,12 @@ module ThemesForRails
47
47
  should "respond with a nested asset" do
48
48
  get 'images', { :theme => 'default', :asset => 'nested/logo.png'}
49
49
  assert_response :success
50
+ assert_equal 'image/png', @response.content_type
51
+ end
52
+
53
+ should "respond with properly even when requesting an image inside the stylesheets folder" do
54
+ get 'stylesheets', { :theme => 'default', :asset => 'images/logo.png'}
55
+ assert_response :success
50
56
  assert_equal @response.content_type, 'image/png'
51
57
  end
52
58
  end
@@ -1,9 +1,11 @@
1
1
  require 'active_support/test_case'
2
2
 
3
3
  class ActiveSupport::TestCase
4
+
4
5
  def assert_named_route(result, name)
5
6
  assert_equal result, @routes.url_helpers.send(name)
6
7
  end
8
+
7
9
  def assert_send_file(result)
8
10
  assert(@response.body.is_a? Proc)
9
11
  require 'stringio'
@@ -13,4 +15,5 @@ class ActiveSupport::TestCase
13
15
  puts "OUT: #{output.output}"
14
16
  assert_equal(result, output.string)
15
17
  end
18
+
16
19
  end
@@ -0,0 +1,27 @@
1
+ require "test_helper"
2
+
3
+ module ThemesForRails
4
+ class ViewHelpersTest < ActionController::IntegrationTest
5
+ include ThemesForRails::ViewHelpers
6
+
7
+ include ActionView::Helpers::AssetTagHelper
8
+ include ERB::Util
9
+ include ActionView::Helpers::TagHelper
10
+
11
+ def theme_name
12
+ 'default'
13
+ end
14
+
15
+ def config
16
+ @config ||= stub({:perform_caching => false, :asset_path => "/assets", :asset_host => ''})
17
+ end
18
+
19
+ should 'delegate to stylesheet_link_tag' do
20
+ assert theme_stylesheet_link_tag('cuac.css').include?('media="screen"')
21
+ end
22
+
23
+ should 'delegate options (lazy testing, I know)' do
24
+ assert theme_stylesheet_link_tag('cuac.css', :media => 'print').include?('media="print"')
25
+ end
26
+ end
27
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{themes_for_rails}
8
- s.version = "0.3.1"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Lucas Florio"]
12
- s.date = %q{2010-12-23}
12
+ s.date = %q{2011-01-14}
13
13
  s.description = %q{It allows an application to have many different ways of rendering static assets and dynamic views. }
14
14
  s.email = %q{lucasefe@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -26,12 +26,12 @@ Gem::Specification.new do |s|
26
26
  "Rakefile",
27
27
  "TODO.textile",
28
28
  "init.rb",
29
- "lib/generators/theme_for_rails/install_generator.rb",
30
- "lib/generators/theme_for_rails/templates/theme/images/.gitkeep",
31
- "lib/generators/theme_for_rails/templates/theme/javascripts/.gitkeep",
32
- "lib/generators/theme_for_rails/templates/theme/stylesheets/.gitkeep",
33
- "lib/generators/theme_for_rails/templates/theme/views/layouts/.gitkeep",
34
- "lib/generators/theme_for_rails/theme_generator.rb",
29
+ "lib/generators/themes_for_rails/install_generator.rb",
30
+ "lib/generators/themes_for_rails/templates/theme/images/.gitkeep",
31
+ "lib/generators/themes_for_rails/templates/theme/javascripts/.gitkeep",
32
+ "lib/generators/themes_for_rails/templates/theme/stylesheets/.gitkeep",
33
+ "lib/generators/themes_for_rails/templates/theme/views/layouts/.gitkeep",
34
+ "lib/generators/themes_for_rails/theme_generator.rb",
35
35
  "lib/tasks/themes_for_rails.rake",
36
36
  "lib/themes_for_rails.rb",
37
37
  "lib/themes_for_rails/assets_controller.rb",
@@ -95,6 +95,7 @@ Gem::Specification.new do |s|
95
95
  "test/dummy_app/themes/default/images/logo.png",
96
96
  "test/dummy_app/themes/default/images/nested/logo.png",
97
97
  "test/dummy_app/themes/default/javascripts/app.js",
98
+ "test/dummy_app/themes/default/stylesheets/images/logo.png",
98
99
  "test/dummy_app/themes/default/stylesheets/style.css",
99
100
  "test/dummy_app/themes/default/stylesheets/style2.css",
100
101
  "test/dummy_app/themes/default/views/layouts/default.html.erb",
@@ -103,6 +104,7 @@ Gem::Specification.new do |s|
103
104
  "test/support/extensions.rb",
104
105
  "test/test_helper.rb",
105
106
  "test/themes_for_rails_test.rb",
107
+ "test/view_helpers_test.rb",
106
108
  "themes_for_rails.gemspec"
107
109
  ]
108
110
  s.homepage = %q{http://github.com/lucasefe/themes_for_rails}
@@ -132,7 +134,8 @@ Gem::Specification.new do |s|
132
134
  "test/routes_test.rb",
133
135
  "test/support/extensions.rb",
134
136
  "test/test_helper.rb",
135
- "test/themes_for_rails_test.rb"
137
+ "test/themes_for_rails_test.rb",
138
+ "test/view_helpers_test.rb"
136
139
  ]
137
140
 
138
141
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
8
- - 1
9
- version: 0.3.1
7
+ - 4
8
+ - 0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Lucas Florio
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-23 00:00:00 -03:00
17
+ date: 2011-01-14 00:00:00 -03:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -37,12 +37,12 @@ files:
37
37
  - Rakefile
38
38
  - TODO.textile
39
39
  - init.rb
40
- - lib/generators/theme_for_rails/install_generator.rb
41
- - lib/generators/theme_for_rails/templates/theme/images/.gitkeep
42
- - lib/generators/theme_for_rails/templates/theme/javascripts/.gitkeep
43
- - lib/generators/theme_for_rails/templates/theme/stylesheets/.gitkeep
44
- - lib/generators/theme_for_rails/templates/theme/views/layouts/.gitkeep
45
- - lib/generators/theme_for_rails/theme_generator.rb
40
+ - lib/generators/themes_for_rails/install_generator.rb
41
+ - lib/generators/themes_for_rails/templates/theme/images/.gitkeep
42
+ - lib/generators/themes_for_rails/templates/theme/javascripts/.gitkeep
43
+ - lib/generators/themes_for_rails/templates/theme/stylesheets/.gitkeep
44
+ - lib/generators/themes_for_rails/templates/theme/views/layouts/.gitkeep
45
+ - lib/generators/themes_for_rails/theme_generator.rb
46
46
  - lib/tasks/themes_for_rails.rake
47
47
  - lib/themes_for_rails.rb
48
48
  - lib/themes_for_rails/assets_controller.rb
@@ -106,6 +106,7 @@ files:
106
106
  - test/dummy_app/themes/default/images/logo.png
107
107
  - test/dummy_app/themes/default/images/nested/logo.png
108
108
  - test/dummy_app/themes/default/javascripts/app.js
109
+ - test/dummy_app/themes/default/stylesheets/images/logo.png
109
110
  - test/dummy_app/themes/default/stylesheets/style.css
110
111
  - test/dummy_app/themes/default/stylesheets/style2.css
111
112
  - test/dummy_app/themes/default/views/layouts/default.html.erb
@@ -114,6 +115,7 @@ files:
114
115
  - test/support/extensions.rb
115
116
  - test/test_helper.rb
116
117
  - test/themes_for_rails_test.rb
118
+ - test/view_helpers_test.rb
117
119
  - themes_for_rails.gemspec
118
120
  has_rdoc: true
119
121
  homepage: http://github.com/lucasefe/themes_for_rails
@@ -170,3 +172,4 @@ test_files:
170
172
  - test/support/extensions.rb
171
173
  - test/test_helper.rb
172
174
  - test/themes_for_rails_test.rb
175
+ - test/view_helpers_test.rb