css_views 0.5.0.pre

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.
@@ -0,0 +1,21 @@
1
+ module CssViews
2
+ class Configuration
3
+ def initialize(name, options)
4
+ @name = name
5
+ @options = options
6
+ end
7
+
8
+ def components
9
+ @options[:components]
10
+ end
11
+
12
+ def transformers
13
+ @options[:transformers]
14
+ end
15
+
16
+
17
+ def handler(controller)
18
+ Handler.new(self, controller)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,34 @@
1
+ module CssViews
2
+ module ControllerMixins
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ cattr_accessor :configurations
6
+ self.configurations = {}
7
+ caches_page :show
8
+ end
9
+
10
+ module ClassMethods
11
+ def css_configuration(name, options)
12
+ self.configurations[name.to_s] = Configuration.new(name, options)
13
+ end
14
+ end
15
+
16
+ module InstanceMethods
17
+ def show
18
+ configuration = self.class.configurations[params[:configuration_name]]
19
+ head :not_found unless configuration
20
+
21
+ handler = configuration.handler(self)
22
+ if perform_caching
23
+ fresh_when(:etag=>handler.etag, :last_modified=>handler.last_modified, :public=>true)
24
+ if params[:cache_buster]
25
+ response.headers['Cache-Control']= 'public, max-age=131557600'
26
+ response.headers['Expires'] = 10.years.from_now.httpdate
27
+ end
28
+ return if performed?
29
+ end
30
+ render :text=>handler.render, :type=>Mime::CSS
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,47 @@
1
+ module CssViews
2
+ class Handler
3
+ def initialize(configuration, controller)
4
+ @configuration = configuration
5
+ @controller = controller
6
+ end
7
+
8
+ def render
9
+ transform(body)
10
+ end
11
+
12
+ def body
13
+ @configuration.components.map do |view|
14
+ @controller.send(:render_to_string, view)
15
+ end.join("\n")
16
+ end
17
+
18
+ def last_modified
19
+ template_files.map {|f| File.mtime(f) }.max
20
+ end
21
+
22
+ def etag
23
+ template_files.map {|f| File.mtime(f) }
24
+ end
25
+
26
+ def transform(css)
27
+ if transformers = @configuration.transformers
28
+ transformers.each do |transformer|
29
+ css = transformer.transform(css)
30
+ end
31
+ end
32
+ css
33
+ end
34
+
35
+ private
36
+ def lookup_context
37
+ @controller.send(:lookup_context)
38
+ end
39
+
40
+ def template_files
41
+ @template_files ||= @configuration.components.map do |name|
42
+ lookup_context.find(name, "stylesheets", false).identifier
43
+ end
44
+ end
45
+
46
+ end
47
+ end
data/lib/css_views.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'css_views/configuration'
2
+ require 'css_views/controller_mixins'
3
+ require 'css_views/handler'
4
+
5
+ module CssViews
6
+ VERSION = "0.5.0"
7
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: css_views
3
+ version: !ruby/object:Gem::Version
4
+ hash: 961916012
5
+ prerelease: true
6
+ segments:
7
+ - 0
8
+ - 5
9
+ - 0
10
+ - pre
11
+ version: 0.5.0.pre
12
+ platform: ruby
13
+ authors:
14
+ - Michael Koziarski
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2010-09-06 00:00:00 +12:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: actionpack
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 7712042
31
+ segments:
32
+ - 3
33
+ - 0
34
+ - 0
35
+ - rc
36
+ version: 3.0.0.rc
37
+ type: :runtime
38
+ version_requirements: *id001
39
+ description: Gives you helpers and the like when composing stylesheets
40
+ email: michael@koziarski.com
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ extra_rdoc_files: []
46
+
47
+ files:
48
+ - lib/css_views/configuration.rb
49
+ - lib/css_views/controller_mixins.rb
50
+ - lib/css_views/handler.rb
51
+ - lib/css_views.rb
52
+ has_rdoc: true
53
+ homepage: http://www.radionz.co.nz/
54
+ licenses: []
55
+
56
+ post_install_message:
57
+ rdoc_options: []
58
+
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ hash: 3
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">"
74
+ - !ruby/object:Gem::Version
75
+ hash: 25
76
+ segments:
77
+ - 1
78
+ - 3
79
+ - 1
80
+ version: 1.3.1
81
+ requirements: []
82
+
83
+ rubyforge_project:
84
+ rubygems_version: 1.3.7
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Simple Controller support
88
+ test_files: []
89
+