quackingduck-fancyviews 0.5

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.
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: quackingduck-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-05-16 00:00:00 -07: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.2.0
61
+ signing_key:
62
+ specification_version: 2
63
+ summary: Fancy Views
64
+ test_files: []
65
+