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 +15 -0
- data/fancyviews.gemspec +17 -0
- data/lib/sinatra/fancyviews.rb +92 -0
- data/test/test.rb +39 -0
- metadata +65 -0
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
|
data/fancyviews.gemspec
ADDED
@@ -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
|
+
|