quackingduck-fancyviews 0.5 → 1.0
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 +2 -2
- data/fancyviews.gemspec +3 -1
- data/lib/sinatra/fancyviews.rb +60 -52
- data/test/test.rb +30 -21
- metadata +14 -3
data/Rakefile
CHANGED
@@ -2,10 +2,10 @@ gem "sr-mg", "0.0.2"
|
|
2
2
|
|
3
3
|
task :default => :test
|
4
4
|
|
5
|
-
desc "Run
|
5
|
+
desc "Run example test app"
|
6
6
|
task :test do
|
7
7
|
dir = File.dirname(__FILE__)
|
8
|
-
system "cd #{dir} && ruby test/test.rb -p 2222
|
8
|
+
system "cd #{dir} && ruby test/test.rb -p 2222"
|
9
9
|
end
|
10
10
|
|
11
11
|
begin
|
data/fancyviews.gemspec
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "fancyviews"
|
3
|
-
s.
|
3
|
+
s.rubyforge_project = 'fancyviews'
|
4
|
+
s.version = "1.0"
|
4
5
|
s.summary = "Fancy Views"
|
5
6
|
s.description = "Fancy Views"
|
6
7
|
s.email = "myles@myles.id.au"
|
@@ -14,4 +15,5 @@ lib/sinatra/fancyviews.rb
|
|
14
15
|
test/test.rb
|
15
16
|
]
|
16
17
|
s.add_dependency("sinatra", [">= 0.9.1.1"])
|
18
|
+
s.add_dependency("haml", [">= 2.2"])
|
17
19
|
end
|
data/lib/sinatra/fancyviews.rb
CHANGED
@@ -4,16 +4,61 @@ require 'sass'
|
|
4
4
|
|
5
5
|
module Sinatra
|
6
6
|
|
7
|
-
module
|
7
|
+
module StyleFilter
|
8
|
+
include Haml::Filters::Base
|
9
|
+
|
10
|
+
def compile(precompiler, text)
|
11
|
+
precompiler.send :push_silent, %(fancyviews.include_style(fancyviews.view_name, #{text.inspect}))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
Haml::Filters.defined['style'] = StyleFilter
|
15
|
+
|
16
|
+
module ScriptFilter
|
17
|
+
include Haml::Filters::Base
|
18
|
+
|
19
|
+
def compile(precompiler, text)
|
20
|
+
precompiler.send :push_silent, %(fancyviews.include_script(fancyviews.view_name, #{text.inspect}))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
Haml::Filters.defined['script'] = ScriptFilter
|
24
|
+
|
25
|
+
class FancyViews
|
26
|
+
|
27
|
+
# current view
|
28
|
+
attr_accessor :view_name
|
29
|
+
|
30
|
+
def initialize(app)
|
31
|
+
@app = app
|
32
|
+
end
|
33
|
+
|
34
|
+
def include_style(name, sass)
|
35
|
+
included_styles << [name, sass] unless included_styles.detect { |s| s == [name, sass] }
|
36
|
+
end
|
37
|
+
|
38
|
+
def included_styles
|
39
|
+
@included_styles ||= []
|
40
|
+
end
|
41
|
+
|
42
|
+
def include_script(name, js)
|
43
|
+
included_scripts << [name, js] unless included_scripts.detect { |s| s == [name, js] }
|
44
|
+
end
|
45
|
+
|
46
|
+
def included_scripts
|
47
|
+
@included_scripts ||= []
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
module FancyHelpers
|
8
53
|
|
9
54
|
# use this instead of `haml` when rendering a template, unlike the haml
|
10
55
|
# method, layout is false by default
|
11
56
|
def view(name, options = {})
|
12
|
-
parent_view =
|
13
|
-
|
57
|
+
parent_view = fancyviews.view_name.to_s
|
58
|
+
fancyviews.view_name = name.to_s
|
14
59
|
options[:layout] = false unless options.has_key?(:layout)
|
15
60
|
rendered = haml(name, options)
|
16
|
-
|
61
|
+
fancyviews.view_name = parent_view
|
17
62
|
rendered
|
18
63
|
end
|
19
64
|
|
@@ -23,70 +68,33 @@ module Sinatra
|
|
23
68
|
view(name, options)
|
24
69
|
end
|
25
70
|
|
26
|
-
#
|
27
|
-
# render them
|
28
|
-
|
71
|
+
# renders all the styles captured by the :style filter
|
29
72
|
def styles(options = {})
|
30
73
|
imported = options.has_key?(:import) ?
|
31
74
|
File.read("#{self.options.views}/#{options[:import]}.sass") : ''
|
32
75
|
|
33
|
-
rendered_styles = included_styles.map do |name, sass|
|
76
|
+
rendered_styles = fancyviews.included_styles.map do |name, sass|
|
34
77
|
# would be nice if construction took an :offest to go along with the :filename
|
35
78
|
eng = Sass::Engine.new(imported + "\n" + sass, :attribute_syntax => :normal)
|
36
79
|
"\n/* -- #{name} -- */\n" + eng.render
|
37
80
|
end.join
|
38
81
|
|
39
|
-
capture_haml { haml_tag(:style, rendered_styles
|
82
|
+
capture_haml { haml_tag(:style, rendered_styles) }.strip
|
40
83
|
end
|
41
84
|
|
42
|
-
|
43
|
-
|
85
|
+
# renders all the scripts captured by the :script filter
|
86
|
+
def scripts
|
87
|
+
scripts = fancyviews.included_scripts.map do |name, js|
|
44
88
|
"\n/* -- #{name} -- */\n" + js
|
45
89
|
end.join
|
46
|
-
capture_haml { haml_tag(:script, scripts
|
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 ||= []
|
90
|
+
capture_haml { haml_tag(:script, scripts) }.strip
|
79
91
|
end
|
80
92
|
|
81
|
-
def
|
82
|
-
|
93
|
+
def fancyviews
|
94
|
+
@fancyviews ||= FancyViews.new(self)
|
83
95
|
end
|
84
|
-
|
85
|
-
def included_scripts
|
86
|
-
@included_scripts ||= []
|
87
|
-
end
|
88
|
-
|
96
|
+
|
89
97
|
end
|
90
98
|
|
91
|
-
helpers
|
99
|
+
helpers FancyHelpers
|
92
100
|
end
|
data/test/test.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'sinatra'
|
3
|
-
require File.dirname(__FILE__) + '/../lib/fancyviews'
|
3
|
+
require File.dirname(__FILE__) + '/../lib/sinatra/fancyviews'
|
4
|
+
|
5
|
+
set :haml, :format => :html5
|
4
6
|
|
5
7
|
get('/') { page :home }
|
6
8
|
|
@@ -8,32 +10,39 @@ __END__
|
|
8
10
|
|
9
11
|
@@layout
|
10
12
|
!!!
|
11
|
-
%
|
12
|
-
%
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
= script
|
13
|
+
%head
|
14
|
+
%title FancyTest
|
15
|
+
= styles
|
16
|
+
%body
|
17
|
+
= yield
|
18
|
+
= scripts
|
18
19
|
|
19
20
|
@@home
|
20
|
-
:
|
21
|
+
:style
|
21
22
|
#fancydiv
|
22
|
-
:
|
23
|
-
:
|
24
|
-
|
25
|
-
:
|
26
|
-
|
23
|
+
:border 10px solid goldenrod
|
24
|
+
:position fixed
|
25
|
+
:top 20%
|
26
|
+
:left 50%
|
27
|
+
:width 600px
|
28
|
+
:margin-left -300px
|
29
|
+
:cursor pointer
|
27
30
|
|
28
|
-
#fancydiv
|
29
|
-
|
31
|
+
#fancydiv= view :some_partial
|
32
|
+
|
30
33
|
|
31
34
|
@@some_partial
|
32
|
-
:
|
33
|
-
#
|
34
|
-
:
|
35
|
+
:style
|
36
|
+
#fancy
|
37
|
+
:font-family Helvetica
|
38
|
+
:font-size 200px
|
39
|
+
:font-weight bold
|
40
|
+
:color black
|
41
|
+
:margin 0
|
42
|
+
:padding 10px
|
43
|
+
:letter-spacing -4px
|
35
44
|
|
36
45
|
:script
|
37
|
-
alert('
|
46
|
+
document.getElementById('fancy').onclick = function() { alert('Fancy click') }
|
38
47
|
|
39
|
-
#
|
48
|
+
%h1#fancy Oooh! Fancy
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quackingduck-fancyviews
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0
|
4
|
+
version: "1.0"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Myles Byrne
|
@@ -22,6 +22,16 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: 0.9.1.1
|
24
24
|
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: haml
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "2.2"
|
34
|
+
version:
|
25
35
|
description: Fancy Views
|
26
36
|
email: myles@myles.id.au
|
27
37
|
executables: []
|
@@ -37,6 +47,7 @@ files:
|
|
37
47
|
- test/test.rb
|
38
48
|
has_rdoc: false
|
39
49
|
homepage:
|
50
|
+
licenses:
|
40
51
|
post_install_message:
|
41
52
|
rdoc_options: []
|
42
53
|
|
@@ -56,8 +67,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
67
|
version:
|
57
68
|
requirements: []
|
58
69
|
|
59
|
-
rubyforge_project:
|
60
|
-
rubygems_version: 1.
|
70
|
+
rubyforge_project: fancyviews
|
71
|
+
rubygems_version: 1.3.5
|
61
72
|
signing_key:
|
62
73
|
specification_version: 2
|
63
74
|
summary: Fancy Views
|