mustache-sinatra 1.0.0 → 1.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff55e20ce7e3821875601fb0b2c8cfb81103e7d8
4
- data.tar.gz: 8b7b161f5110d393ca53c1f8eb86b4de32372144
3
+ metadata.gz: 0a10facd8c6cb6543e7a19ba8c8b5881b5af1907
4
+ data.tar.gz: c53a8137cd6dc6512b40aac096cb87e94bece9eb
5
5
  SHA512:
6
- metadata.gz: 75f801d22be8f58faaeff17d749ccd4921bfe3a0d5cffc2997eebe6f4262f9f100dee5d156a73fb72b39064f558a0a0cf030549b82da4cab240f6d530efc5c88
7
- data.tar.gz: fb6e7613d8042bcdc139b20ef03ede699e72c3829042b29ed34c3a7a3c35184c9b6a707502bfeb3a4d07e93d3ab182ed677e931ec7a7173cc4168c8f952664cb
6
+ metadata.gz: 4fff4466c64df75740c7ffd5c45e9fc6cf76386f5f0724801292d8426e75be987bf0a931ec3b5e36b408c5acc6b1bc717a523a56bd50a4be679f8c2604535b00
7
+ data.tar.gz: 05be9a0162b4f93588bdd79a52220decc4c057ce36aad1819f1260800dfdce3a367506c2455a234f8c3ff7351714c2a134aadfd1a4f390b799ad745b9489fa69
@@ -1,149 +1,9 @@
1
- require "mustache/sinatra/version"
1
+ require 'mustache/sinatra/version'
2
+ require 'mustache'
3
+ require 'mustache/sinatra/helpers'
2
4
 
3
5
  class Mustache
4
6
  module Sinatra
5
- module Helpers
6
- # Call this in your Sinatra routes.
7
- def mustache(template, options={}, locals={})
8
- # Locals can be passed as options under the :locals key.
9
- locals.update(options.delete(:locals) || {})
10
-
11
- # Grab any user-defined settings.
12
- if settings.respond_to?(:mustache)
13
- options = settings.send(:mustache).merge(options)
14
- end
15
-
16
- # If they aren't explicitly disabling layouts, try to find
17
- # one.
18
- if options[:layout] != false
19
- # Let the user pass in a layout name.
20
- layout_name = options[:layout]
21
-
22
- # If all they said was `true` (or nothing), default to :layout.
23
- layout_name = :layout if layout_name == true || !layout_name
24
-
25
- # If they passed a layout name use that.
26
- layout = mustache_class(layout_name, options)
27
-
28
- # If it's just an anonymous subclass then don't bother, otherwise
29
- # give us a layout instance.
30
- if layout.name && layout.name.empty?
31
- layout = nil
32
- else
33
- layout = layout.new
34
- end
35
- end
36
-
37
- # If instead of a symbol they gave us a Mustache class,
38
- # use that for rendering.
39
- klass = template if template.is_a?(Class) && template < Mustache
40
-
41
- # Find and cache the view class we want if we don't have
42
- # one yet. This ensures the compiled template is cached,
43
- # too - no looking up and compiling templates on each page
44
- # load.
45
- if klass.nil?
46
- klass = mustache_class(template, options)
47
- end
48
-
49
- # Does the view subclass the layout? If so we'll use the
50
- # view to render the layout so you can override layout
51
- # methods in your view - tricky.
52
- view_subclasses_layout = klass < layout.class if layout
53
-
54
- # Create a new instance for playing with.
55
- instance = klass.new
56
-
57
- # Copy instance variables set in Sinatra to the view
58
- instance_variables.each do |name|
59
- instance.instance_variable_set(name, instance_variable_get(name))
60
- end
61
-
62
- # Render with locals.
63
- rendered = instance.render(instance.template, locals)
64
-
65
- # Now render the layout with the view we just rendered, if we
66
- # need to.
67
- if layout && view_subclasses_layout
68
- rendered = instance.render(layout.template, :yield => rendered)
69
- elsif layout
70
- rendered = layout.render(layout.template, :yield => rendered)
71
- end
72
-
73
- # That's it.
74
- rendered
75
- end
76
-
77
- # Returns a View class for a given template name.
78
- def mustache_class(template, options = {})
79
- @template_cache.fetch(:mustache, template) do
80
- compile_mustache(template, options)
81
- end
82
- end
83
-
84
- # Given a view name and settings, finds and prepares an
85
- # appropriate view class for this view.
86
- def compile_mustache(view, options = {})
87
- options[:templates] ||= settings.views if settings.respond_to?(:views)
88
- options[:namespace] ||= self.class
89
-
90
- unless options[:namespace].to_s.include? 'Views'
91
- options[:namespace] = options[:namespace].const_get(:Views) rescue Object
92
- end
93
-
94
- factory = Class.new(Mustache) do
95
- self.view_namespace = options[:namespace]
96
- self.view_path = options[:views]
97
- end
98
-
99
- # If we were handed :"positions.atom" or some such as the
100
- # template name, we need to remember the extension.
101
- if view.to_s.include?('.')
102
- view, ext = view.to_s.split('.')
103
- end
104
-
105
- # Try to find the view class for a given view, e.g.
106
- # :view => Hurl::Views::Index.
107
- klass = factory.view_class(view)
108
- klass.view_namespace = options[:namespace]
109
- klass.view_path = options[:views]
110
-
111
- # If there is no view class, issue a warning and use the one
112
- # we just generated to cache the compiled template.
113
- if klass == Mustache
114
- warn "No view class found for #{view} in #{factory.view_path}"
115
- klass = factory
116
-
117
- # If this is a generic view class make sure we set the
118
- # template name as it was given. That is, an anonymous
119
- # subclass of Mustache won't know how to find the
120
- # "index.mustache" template unless we tell it to.
121
- klass.template_name = view.to_s
122
- elsif ext
123
- # We got an ext (like "atom"), so look for an "Atom" class
124
- # under the current View's namespace.
125
- #
126
- # So if our template was "positions.atom", try to find
127
- # Positions::Atom.
128
- if klass.const_defined?(ext_class = ext.capitalize)
129
- # Found Positions::Atom - set it
130
- klass = klass.const_get(ext_class)
131
- else
132
- # Didn't find Positions::Atom - create it by creating an
133
- # anonymous subclass of Positions and setting that to
134
- # Positions::Atom.
135
- new_class = Class.new(klass)
136
- new_class.template_name = "#{view}.#{ext}"
137
- klass.const_set(ext_class, new_class)
138
- klass = new_class
139
- end
140
- end
141
-
142
- # Set the template path and return our class.
143
- klass.template_path = options[:templates] if options[:templates]
144
- klass
145
- end
146
- end
147
7
 
148
8
  # Called when you `register Mustache::Sinatra` in your Sinatra app.
149
9
  def self.registered(app)
@@ -0,0 +1,149 @@
1
+ class Mustache
2
+ module Sinatra
3
+
4
+ module Helpers
5
+
6
+ # Call this in your Sinatra routes.
7
+ def mustache(template, options={}, locals={})
8
+ # Locals can be passed as options under the :locals key.
9
+ locals.update(options.delete(:locals) || {})
10
+
11
+ # Grab any user-defined settings.
12
+ if settings.respond_to?(:mustache)
13
+ options = settings.send(:mustache).merge(options)
14
+ end
15
+
16
+ # If they aren't explicitly disabling layouts, try to find
17
+ # one.
18
+ if options[:layout] != false
19
+ # Let the user pass in a layout name.
20
+ layout_name = options[:layout]
21
+
22
+ # If all they said was `true` (or nothing), default to :layout.
23
+ layout_name = :layout if layout_name == true || !layout_name
24
+
25
+ # If they passed a layout name use that.
26
+ layout = mustache_class(layout_name, options)
27
+
28
+ # If it's just an anonymous subclass then don't bother, otherwise
29
+ # give us a layout instance.
30
+ if layout.name && layout.name.empty?
31
+ layout = nil
32
+ else
33
+ layout = layout.new
34
+ end
35
+ end
36
+
37
+ # If instead of a symbol they gave us a Mustache class,
38
+ # use that for rendering.
39
+ klass = template if template.is_a?(Class) && template < Mustache
40
+
41
+ # Find and cache the view class we want if we don't have
42
+ # one yet. This ensures the compiled template is cached,
43
+ # too - no looking up and compiling templates on each page
44
+ # load.
45
+ if klass.nil?
46
+ klass = mustache_class(template, options)
47
+ end
48
+
49
+ # Does the view subclass the layout? If so we'll use the
50
+ # view to render the layout so you can override layout
51
+ # methods in your view - tricky.
52
+ view_subclasses_layout = klass < layout.class if layout
53
+
54
+ # Create a new instance for playing with.
55
+ instance = klass.new
56
+
57
+ # Copy instance variables set in Sinatra to the view
58
+ instance_variables.each do |name|
59
+ instance.instance_variable_set(name, instance_variable_get(name))
60
+ end
61
+
62
+ # Render with locals.
63
+ rendered = instance.render(instance.template, locals)
64
+
65
+ # Now render the layout with the view we just rendered, if we
66
+ # need to.
67
+ if layout && view_subclasses_layout
68
+ rendered = instance.render(layout.template, :yield => rendered)
69
+ elsif layout
70
+ rendered = layout.render(layout.template, :yield => rendered)
71
+ end
72
+
73
+ # That's it.
74
+ rendered
75
+ end
76
+
77
+ # Returns a View class for a given template name.
78
+ def mustache_class(template, options = {})
79
+ @template_cache.fetch(:mustache, template) do
80
+ compile_mustache(template, options)
81
+ end
82
+ end
83
+
84
+ # Given a view name and settings, finds and prepares an
85
+ # appropriate view class for this view.
86
+ def compile_mustache(view, options = {})
87
+ options[:templates] ||= settings.views if settings.respond_to?(:views)
88
+ options[:namespace] ||= self.class
89
+
90
+ unless options[:namespace].to_s.include? 'Views'
91
+ options[:namespace] = options[:namespace].const_get(:Views) rescue Object
92
+ end
93
+
94
+ factory = Class.new(Mustache) do
95
+ self.view_namespace = options[:namespace]
96
+ self.view_path = options[:views]
97
+ end
98
+
99
+ # If we were handed :"positions.atom" or some such as the
100
+ # template name, we need to remember the extension.
101
+ if view.to_s.include?('.')
102
+ view, ext = view.to_s.split('.')
103
+ end
104
+
105
+ # Try to find the view class for a given view, e.g.
106
+ # :view => Hurl::Views::Index.
107
+ klass = factory.view_class(view)
108
+ klass.view_namespace = options[:namespace]
109
+ klass.view_path = options[:views]
110
+
111
+ # If there is no view class, issue a warning and use the one
112
+ # we just generated to cache the compiled template.
113
+ if klass == Mustache
114
+ warn "No view class found for #{view} in #{factory.view_path}"
115
+ klass = factory
116
+
117
+ # If this is a generic view class make sure we set the
118
+ # template name as it was given. That is, an anonymous
119
+ # subclass of Mustache won't know how to find the
120
+ # "index.mustache" template unless we tell it to.
121
+ klass.template_name = view.to_s
122
+ elsif ext
123
+ # We got an ext (like "atom"), so look for an "Atom" class
124
+ # under the current View's namespace.
125
+ #
126
+ # So if our template was "positions.atom", try to find
127
+ # Positions::Atom.
128
+ if klass.const_defined?(ext_class = ext.capitalize)
129
+ # Found Positions::Atom - set it
130
+ klass = klass.const_get(ext_class)
131
+ else
132
+ # Didn't find Positions::Atom - create it by creating an
133
+ # anonymous subclass of Positions and setting that to
134
+ # Positions::Atom.
135
+ new_class = Class.new(klass)
136
+ new_class.template_name = "#{view}.#{ext}"
137
+ klass.const_set(ext_class, new_class)
138
+ klass = new_class
139
+ end
140
+ end
141
+
142
+ # Set the template path and return our class.
143
+ klass.template_path = options[:templates] if options[:templates]
144
+ klass
145
+ end
146
+ end
147
+
148
+ end
149
+ end
@@ -1,5 +1,5 @@
1
1
  class Mustache
2
2
  module Sinatra
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
@@ -20,4 +20,6 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
+
24
+ spec.add_dependency "mustache", "<= 0.99.8"
23
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mustache-sinatra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ricardo Mendes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-02 00:00:00.000000000 Z
11
+ date: 2015-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mustache
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "<="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.99.8
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "<="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.99.8
41
55
  description: Mustache support for Sinatra applications
42
56
  email:
43
57
  - rokusu@gmail.com
@@ -52,6 +66,7 @@ files:
52
66
  - README.md
53
67
  - Rakefile
54
68
  - lib/mustache/sinatra.rb
69
+ - lib/mustache/sinatra/helpers.rb
55
70
  - lib/mustache/sinatra/version.rb
56
71
  - mustache-sinatra.gemspec
57
72
  homepage: https://github.com/mustache/mustache-sinatra