fancyviews 0.5 → 1.0

Sign up to get free protection for your applications and to get access to all the features.
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 tests"
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.version = "0.5"
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
@@ -4,16 +4,61 @@ require 'sass'
4
4
 
5
5
  module Sinatra
6
6
 
7
- module FancyViews
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 = @view_name
13
- @view_name = name.to_s
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
- @view_name = parent_view
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
- # use the :styles filter to define styles and the `styles` method to
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, :type => 'text/css') }.strip
82
+ capture_haml { haml_tag(:style, rendered_styles) }.strip
40
83
  end
41
84
 
42
- def script
43
- scripts = included_scripts.map do |name, js|
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, :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 ||= []
90
+ capture_haml { haml_tag(:script, scripts) }.strip
79
91
  end
80
92
 
81
- def include_script(name, js)
82
- included_scripts << [name, js] unless included_scripts.detect { |s| s == [name, js] }
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 FancyViews
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
- %html
12
- %head
13
- %title FancyTest
14
- = styles
15
- %body
16
- = yield
17
- = script
13
+ %head
14
+ %title FancyTest
15
+ = styles
16
+ %body
17
+ = yield
18
+ = scripts
18
19
 
19
20
  @@home
20
- :styles
21
+ :style
21
22
  #fancydiv
22
- :background red
23
- :color white
24
-
25
- :script
26
- alert('hello');
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 red
29
- = view :some_partial
31
+ #fancydiv= view :some_partial
32
+
30
33
 
31
34
  @@some_partial
32
- :styles
33
- #partial
34
- :background blue
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('partial')
46
+ document.getElementById('fancy').onclick = function() { alert('Fancy click') }
38
47
 
39
- #partial this is a partial
48
+ %h1#fancy Oooh! Fancy
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fancyviews
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.5"
4
+ version: "1.0"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Myles Byrne
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-16 00:00:00 +10:00
12
+ date: 2009-08-11 00:00:00 +10:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -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: []
@@ -56,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
66
  version:
57
67
  requirements: []
58
68
 
59
- rubyforge_project:
69
+ rubyforge_project: fancyviews
60
70
  rubygems_version: 1.3.1
61
71
  signing_key:
62
72
  specification_version: 2