fancyviews 0.5

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile ADDED
@@ -0,0 +1,15 @@
1
+ gem "sr-mg", "0.0.2"
2
+
3
+ task :default => :test
4
+
5
+ desc "Run tests"
6
+ task :test do
7
+ dir = File.dirname(__FILE__)
8
+ system "cd #{dir} && ruby test/test.rb -p 2222 "
9
+ end
10
+
11
+ begin
12
+ require "mg"
13
+ MG.new("fancyviews.gemspec")
14
+ rescue LoadError
15
+ end
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "fancyviews"
3
+ s.version = "0.5"
4
+ s.summary = "Fancy Views"
5
+ s.description = "Fancy Views"
6
+ s.email = "myles@myles.id.au"
7
+ s.authors = ["Myles Byrne"]
8
+ s.has_rdoc = false
9
+ s.require_paths = ["lib"]
10
+ s.files = %w[
11
+ Rakefile
12
+ fancyviews.gemspec
13
+ lib/sinatra/fancyviews.rb
14
+ test/test.rb
15
+ ]
16
+ s.add_dependency("sinatra", [">= 0.9.1.1"])
17
+ end
@@ -0,0 +1,92 @@
1
+ require 'sinatra/base'
2
+ require 'haml'
3
+ require 'sass'
4
+
5
+ module Sinatra
6
+
7
+ module FancyViews
8
+
9
+ # use this instead of `haml` when rendering a template, unlike the haml
10
+ # method, layout is false by default
11
+ def view(name, options = {})
12
+ parent_view = @view_name
13
+ @view_name = name.to_s
14
+ options[:layout] = false unless options.has_key?(:layout)
15
+ rendered = haml(name, options)
16
+ @view_name = parent_view
17
+ rendered
18
+ end
19
+
20
+ # same as `view` but has layout by default
21
+ def page(name, options = {})
22
+ options[:layout] = true unless options.has_key?(:layout)
23
+ view(name, options)
24
+ end
25
+
26
+ # use the :styles filter to define styles and the `styles` method to
27
+ # render them
28
+
29
+ def styles(options = {})
30
+ imported = options.has_key?(:import) ?
31
+ File.read("#{self.options.views}/#{options[:import]}.sass") : ''
32
+
33
+ rendered_styles = included_styles.map do |name, sass|
34
+ # would be nice if construction took an :offest to go along with the :filename
35
+ eng = Sass::Engine.new(imported + "\n" + sass, :attribute_syntax => :normal)
36
+ "\n/* -- #{name} -- */\n" + eng.render
37
+ end.join
38
+
39
+ capture_haml { haml_tag(:style, rendered_styles, :type => 'text/css') }.strip
40
+ end
41
+
42
+ def script
43
+ scripts = included_scripts.map do |name, js|
44
+ "\n/* -- #{name} -- */\n" + js
45
+ end.join
46
+ capture_haml { haml_tag(:script, scripts, :type => 'text/javascript') }.strip
47
+ end
48
+
49
+ # private
50
+
51
+ def view_name
52
+ @view_name
53
+ end
54
+
55
+ module StyleFilter
56
+ include Haml::Filters::Base
57
+
58
+ def compile(precompiler, text)
59
+ precompiler.send :push_silent, %(include_style(view_name, #{text.inspect}))
60
+ end
61
+ end
62
+ Haml::Filters.defined['styles'] = StyleFilter
63
+
64
+ module ScriptFilter
65
+ include Haml::Filters::Base
66
+
67
+ def compile(precompiler, text)
68
+ precompiler.send :push_silent, %(include_script(view_name, #{text.inspect}))
69
+ end
70
+ end
71
+ Haml::Filters.defined['script'] = ScriptFilter
72
+
73
+ def include_style(name, sass)
74
+ included_styles << [name, sass] unless included_styles.detect { |s| s == [name, sass] }
75
+ end
76
+
77
+ def included_styles
78
+ @included_styles ||= []
79
+ end
80
+
81
+ def include_script(name, js)
82
+ included_scripts << [name, js] unless included_scripts.detect { |s| s == [name, js] }
83
+ end
84
+
85
+ def included_scripts
86
+ @included_scripts ||= []
87
+ end
88
+
89
+ end
90
+
91
+ helpers FancyViews
92
+ end
data/test/test.rb ADDED
@@ -0,0 +1,39 @@
1
+ require 'rubygems'
2
+ require 'sinatra'
3
+ require File.dirname(__FILE__) + '/../lib/fancyviews'
4
+
5
+ get('/') { page :home }
6
+
7
+ __END__
8
+
9
+ @@layout
10
+ !!!
11
+ %html
12
+ %head
13
+ %title FancyTest
14
+ = styles
15
+ %body
16
+ = yield
17
+ = script
18
+
19
+ @@home
20
+ :styles
21
+ #fancydiv
22
+ :background red
23
+ :color white
24
+
25
+ :script
26
+ alert('hello');
27
+
28
+ #fancydiv red
29
+ = view :some_partial
30
+
31
+ @@some_partial
32
+ :styles
33
+ #partial
34
+ :background blue
35
+
36
+ :script
37
+ alert('partial')
38
+
39
+ #partial this is a partial
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fancyviews
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.5"
5
+ platform: ruby
6
+ authors:
7
+ - Myles Byrne
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-07-16 00:00:00 +10:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sinatra
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.1.1
24
+ version:
25
+ description: Fancy Views
26
+ email: myles@myles.id.au
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files: []
32
+
33
+ files:
34
+ - Rakefile
35
+ - fancyviews.gemspec
36
+ - lib/sinatra/fancyviews.rb
37
+ - test/test.rb
38
+ has_rdoc: false
39
+ homepage:
40
+ post_install_message:
41
+ rdoc_options: []
42
+
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ version:
57
+ requirements: []
58
+
59
+ rubyforge_project:
60
+ rubygems_version: 1.3.1
61
+ signing_key:
62
+ specification_version: 2
63
+ summary: Fancy Views
64
+ test_files: []
65
+