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 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: quackingduck-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
@@ -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.2.0
70
+ rubyforge_project: fancyviews
71
+ rubygems_version: 1.3.5
61
72
  signing_key:
62
73
  specification_version: 2
63
74
  summary: Fancy Views