mustache_render 0.0.10 → 0.0.12
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/lib/generators/mustache_render/install/templates/config/initializers/mustache_render.rb +12 -10
- data/lib/mustache_render/config.rb +100 -59
- data/lib/mustache_render/core_ext/action_view_handler.rb +17 -0
- data/lib/mustache_render/mustache.rb +100 -59
- data/lib/mustache_render/version.rb +1 -1
- data/lib/mustache_render.rb +2 -0
- data/spec/lib/mustache/file_render_spec.rb +0 -3
- data/spec/spec_helper.rb +48 -0
- metadata +5 -4
data/lib/generators/mustache_render/install/templates/config/initializers/mustache_render.rb
CHANGED
@@ -23,17 +23,19 @@ MustacheRender.configure do |config|
|
|
23
23
|
# 当文件模板不存在时候是否抛出异常
|
24
24
|
config.raise_on_file_template_miss = true
|
25
25
|
|
26
|
+
config.logger = Rails.logger
|
27
|
+
|
26
28
|
### 模板的相关配置 ###########################
|
27
|
-
# 数据库模板是否需要缓存
|
28
|
-
config.db_template_cache = true
|
29
|
-
# 文件模板是否需要缓存
|
30
|
-
config.file_template_cache = false
|
31
|
-
# 数据库模板缓存过期时间
|
32
|
-
config.db_template_cache_expires_in = 1.hours
|
33
|
-
# 文件模板缓存的过期时间, 注意文件系统没有自动清理缓存的机制,建议设置的短一些
|
34
|
-
config.file_template_cache_expires_in = 1.minutes
|
35
|
-
# 缓存的媒介
|
36
|
-
config.cache_store = Rails.cache
|
29
|
+
# # 数据库模板是否需要缓存
|
30
|
+
# config.db_template_cache = true
|
31
|
+
# # 文件模板是否需要缓存
|
32
|
+
# config.file_template_cache = false
|
33
|
+
# # 数据库模板缓存过期时间
|
34
|
+
# config.db_template_cache_expires_in = 1.hours
|
35
|
+
# # 文件模板缓存的过期时间, 注意文件系统没有自动清理缓存的机制,建议设置的短一些
|
36
|
+
# config.file_template_cache_expires_in = 1.minutes
|
37
|
+
# # 缓存的媒介
|
38
|
+
# config.cache_store = Rails.cache
|
37
39
|
|
38
40
|
# 版本适配器的配置
|
39
41
|
config.adapter_configure do |adapter|
|
@@ -5,10 +5,22 @@ module MustacheRender
|
|
5
5
|
|
6
6
|
def configure
|
7
7
|
yield self.config ||= Config.new
|
8
|
+
self.config.apply!
|
8
9
|
end
|
9
10
|
end
|
10
11
|
|
11
12
|
class Config
|
13
|
+
def apply!
|
14
|
+
# if self.action_view_handler?
|
15
|
+
# if defined?(::ActionView::Template)
|
16
|
+
# ::ActionView::Template.register_template_handler(
|
17
|
+
# self.action_view_handler_extension.to_sym,
|
18
|
+
# ::MustacheRender::CoreExt::ActionViewHandler
|
19
|
+
# )
|
20
|
+
# end
|
21
|
+
# end
|
22
|
+
end
|
23
|
+
|
12
24
|
def initialize
|
13
25
|
end
|
14
26
|
|
@@ -21,6 +33,18 @@ module MustacheRender
|
|
21
33
|
end
|
22
34
|
end
|
23
35
|
|
36
|
+
def action_view_handler?
|
37
|
+
if defined?(@_use_action_view_handler)
|
38
|
+
@_use_action_view_handler
|
39
|
+
else
|
40
|
+
true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def use_action_view_handler= _bool
|
45
|
+
@_use_action_view_handler = _bool unless defined?(@_use_action_view_handler)
|
46
|
+
end
|
47
|
+
|
24
48
|
#
|
25
49
|
# 默认的渲染媒介
|
26
50
|
#
|
@@ -48,20 +72,22 @@ module MustacheRender
|
|
48
72
|
@user_login_url ||= url
|
49
73
|
end
|
50
74
|
|
51
|
-
def cache
|
52
|
-
|
75
|
+
# def cache
|
76
|
+
# return @_cache_store if defined?(@_cache_store)
|
53
77
|
|
54
|
-
|
55
|
-
|
56
|
-
end
|
78
|
+
# @_cache_store ||= Rails.cache
|
79
|
+
# # @_cache_store ||= MemCache.new('localhost:11211', :namespace => 'mustache_render#cache')
|
80
|
+
# end
|
57
81
|
|
58
|
-
def cache_store= cache_store
|
59
|
-
|
60
|
-
end
|
82
|
+
# def cache_store= cache_store
|
83
|
+
# @_cache_store ||= cache_store
|
84
|
+
# end
|
61
85
|
|
62
86
|
def logger
|
63
87
|
return @_logger if defined?(@_logger)
|
64
88
|
|
89
|
+
require 'logger'
|
90
|
+
|
65
91
|
@_logger ||= ::Logger.new(STDOUT)
|
66
92
|
end
|
67
93
|
|
@@ -69,57 +95,57 @@ module MustacheRender
|
|
69
95
|
@_logger ||= logger
|
70
96
|
end
|
71
97
|
|
72
|
-
#
|
73
|
-
# 是否开启缓存
|
74
|
-
#
|
75
|
-
def db_template_cache?
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
#
|
84
|
-
# 是否开启缓存
|
85
|
-
#
|
86
|
-
def file_template_cache?
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
#
|
95
|
-
# 设置是否启用缓存
|
96
|
-
#
|
97
|
-
def db_template_cache= user_cache
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
#
|
102
|
-
# 设置是否启用缓存
|
103
|
-
#
|
104
|
-
def file_template_cache= user_cache
|
105
|
-
|
106
|
-
end
|
107
|
-
|
108
|
-
def db_template_cache_expires_in
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
def file_template_cache_expires_in
|
113
|
-
|
114
|
-
end
|
115
|
-
|
116
|
-
def db_template_cache_expires_in= expires_in
|
117
|
-
|
118
|
-
end
|
119
|
-
|
120
|
-
def file_template_cache_expires_in= expires_in
|
121
|
-
|
122
|
-
end
|
98
|
+
# #
|
99
|
+
# # 是否开启缓存
|
100
|
+
# #
|
101
|
+
# def db_template_cache?
|
102
|
+
# if defined?(@_db_template_cache)
|
103
|
+
# @_db_template_cache
|
104
|
+
# else
|
105
|
+
# true
|
106
|
+
# end
|
107
|
+
# end
|
108
|
+
|
109
|
+
# #
|
110
|
+
# # 是否开启缓存
|
111
|
+
# #
|
112
|
+
# def file_template_cache?
|
113
|
+
# if defined?(@_file_template_cache)
|
114
|
+
# @_file_template_cache
|
115
|
+
# else
|
116
|
+
# false
|
117
|
+
# end
|
118
|
+
# end
|
119
|
+
|
120
|
+
# #
|
121
|
+
# # 设置是否启用缓存
|
122
|
+
# #
|
123
|
+
# def db_template_cache= user_cache
|
124
|
+
# @_db_template_cache = user_cache unless defined?(@_db_template_cache)
|
125
|
+
# end
|
126
|
+
|
127
|
+
# #
|
128
|
+
# # 设置是否启用缓存
|
129
|
+
# #
|
130
|
+
# def file_template_cache= user_cache
|
131
|
+
# @_file_template_cache = user_cache unless defined?(@_file_template_cache)
|
132
|
+
# end
|
133
|
+
|
134
|
+
# def db_template_cache_expires_in
|
135
|
+
# @db_template_cache_expires_in ||= 1.hours
|
136
|
+
# end
|
137
|
+
|
138
|
+
# def file_template_cache_expires_in
|
139
|
+
# @file_template_cache_expires_in ||= 5.minutes
|
140
|
+
# end
|
141
|
+
|
142
|
+
# def db_template_cache_expires_in= expires_in
|
143
|
+
# @db_template_cache_expires_in ||= expires_in
|
144
|
+
# end
|
145
|
+
|
146
|
+
# def file_template_cache_expires_in= expires_in
|
147
|
+
# @file_template_cache_expires_in ||= expires_in
|
148
|
+
# end
|
123
149
|
|
124
150
|
def manage_center_need_login?
|
125
151
|
if defined?(@manage_center_need_login)
|
@@ -149,6 +175,14 @@ module MustacheRender
|
|
149
175
|
@file_template_root_path ||= path
|
150
176
|
end
|
151
177
|
|
178
|
+
# def action_view_handler_extension
|
179
|
+
# @action_view_handler_extension ||= :mustache
|
180
|
+
# end
|
181
|
+
|
182
|
+
# def action_view_handler_extension= name
|
183
|
+
# @action_view_handler_extension ||= name
|
184
|
+
# end
|
185
|
+
|
152
186
|
def db_template_extension
|
153
187
|
@db_template_extension ||= '.mustache'
|
154
188
|
end
|
@@ -203,3 +237,10 @@ module MustacheRender
|
|
203
237
|
|
204
238
|
end
|
205
239
|
end
|
240
|
+
|
241
|
+
# if ::MustacheRender.config.action_view_handler?
|
242
|
+
# ActionView::Template.register_template_handler(
|
243
|
+
# ::MustacheRender.config.db_template_extension.to_sym,
|
244
|
+
# ::MustacheRender::CoreExt::ActionViewHandler
|
245
|
+
# )
|
246
|
+
# end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# #
|
2
|
+
# # 注册action view handler
|
3
|
+
# #
|
4
|
+
# #
|
5
|
+
# module MustacheRender::CoreExt
|
6
|
+
# module ActionViewHandler
|
7
|
+
# def self.call template
|
8
|
+
# if template.locals.include? :mustache
|
9
|
+
# ::MustacheRender::Mustache.render(template.source.inspect, {}).html_safe
|
10
|
+
# else
|
11
|
+
# "#{template.source.inspect}".html_safe
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
#
|
@@ -19,21 +19,14 @@ module MustacheRender
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def render(data = template, ctx = {})
|
22
|
-
|
23
|
-
|
24
|
-
return self.template.render(context) if ctx == {}
|
25
|
-
|
26
|
-
begin
|
27
|
-
context.push(ctx)
|
28
|
-
self.template.render(context)
|
29
|
-
ensure
|
30
|
-
context.pop
|
22
|
+
impl_logger :level => :debug, :operation => 'MustacheRender::Mustache.render' do
|
23
|
+
impl_render data, ctx
|
31
24
|
end
|
32
25
|
end
|
33
26
|
|
34
27
|
# 片段树
|
35
28
|
def partials_tree
|
36
|
-
|
29
|
+
|
37
30
|
end
|
38
31
|
|
39
32
|
# Context accessors.
|
@@ -66,8 +59,10 @@ module MustacheRender
|
|
66
59
|
# Given a file name and an optional context, attempts to load and
|
67
60
|
# render the file as a template.
|
68
61
|
def file_render(name, context = {})
|
69
|
-
|
70
|
-
|
62
|
+
impl_logger :level => :debug, :operation => "#{self.class}.file_render" do
|
63
|
+
@media = :file
|
64
|
+
render(partial(name), context)
|
65
|
+
end
|
71
66
|
end
|
72
67
|
|
73
68
|
def self.db_render(full_path, context={})
|
@@ -75,8 +70,10 @@ module MustacheRender
|
|
75
70
|
end
|
76
71
|
|
77
72
|
def db_render(full_path, context={})
|
78
|
-
|
79
|
-
|
73
|
+
impl_logger :level => :debug, :operation => "#{self.class}.db_render" do
|
74
|
+
@media = :db
|
75
|
+
render(partial(full_path), context)
|
76
|
+
end
|
80
77
|
end
|
81
78
|
|
82
79
|
def impl_read_db_template name
|
@@ -115,23 +112,30 @@ module MustacheRender
|
|
115
112
|
end
|
116
113
|
|
117
114
|
def read_template_from_media name, media
|
118
|
-
::MustacheRender.logger.debug "MustacheRender render -> read template from #{media}: #{name}"
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
impl_read_db_template name
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
115
|
+
# ::MustacheRender.logger.debug "MustacheRender render -> read template from #{media}: #{name}"
|
116
|
+
|
117
|
+
impl_logger :level => :debug,
|
118
|
+
:operation => "MustacheRender render -> read template from #{media}: #{name}" do
|
119
|
+
|
120
|
+
case media
|
121
|
+
when :db
|
122
|
+
# if ::MustacheRender.config.db_template_cache?
|
123
|
+
# self.class.fetch_partial_cache name, media, :expires_in => ::MustacheRender.config.db_template_cache_expires_in do
|
124
|
+
# impl_read_db_template name
|
125
|
+
# end
|
126
|
+
# else
|
127
|
+
# impl_read_db_template name
|
128
|
+
# end
|
129
|
+
impl_read_file_template name
|
130
|
+
when :file
|
131
|
+
# if ::MustacheRender.config.file_template_cache?
|
132
|
+
# self.class.fetch_partial_cache name, media, :expires_in => ::MustacheRender.config.file_template_cache_expires_in do
|
133
|
+
# impl_read_file_template name
|
134
|
+
# end
|
135
|
+
# else
|
136
|
+
# impl_read_file_template name
|
137
|
+
# end
|
138
|
+
|
135
139
|
impl_read_file_template name
|
136
140
|
end
|
137
141
|
end
|
@@ -148,34 +152,34 @@ module MustacheRender
|
|
148
152
|
(@_cached_partials[media] ||= {})[name] ||= self.read_template_from_media name, media
|
149
153
|
end
|
150
154
|
|
151
|
-
def self.partial_cache_key(name, media)
|
152
|
-
raise 'options key: :media must in(:file, :db)' unless [:file, :db].include?(media)
|
153
|
-
"MustacheRender::Mustache#Template.cache##{media}##{name}"
|
154
|
-
end
|
155
|
-
|
156
|
-
def self.exist_partial_cache?(name, media)
|
157
|
-
::MustacheRender.config.cache.exist?(self.partial_cache_key(name, media))
|
158
|
-
end
|
159
|
-
|
160
|
-
def self.delete_partial_cache(name, media)
|
161
|
-
::MustacheRender.config.cache.delete(self.partial_cache_key(name, media))
|
162
|
-
end
|
163
|
-
|
164
|
-
def self.fetch_partial_cache(name, media, options={}, &block)
|
165
|
-
::MustacheRender.config.cache.fetch(self.partial_cache_key(name, media), options) do
|
166
|
-
if block_given?
|
167
|
-
block.call
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
def self.read_partial_cache(name, media)
|
173
|
-
::MustacheRender.config.cache.read(self.partial_cache_key(name, media))
|
174
|
-
end
|
175
|
-
|
176
|
-
def self.write_partial_cache(name, media, value, options={})
|
177
|
-
::MustacheRender.config.cache.write(self.partial_cache_key(name, media), value, options)
|
178
|
-
end
|
155
|
+
## def self.partial_cache_key(name, media)
|
156
|
+
## raise 'options key: :media must in(:file, :db)' unless [:file, :db].include?(media)
|
157
|
+
## "MustacheRender::Mustache#Template.cache##{media}##{name}"
|
158
|
+
## end
|
159
|
+
##
|
160
|
+
## def self.exist_partial_cache?(name, media)
|
161
|
+
## ::MustacheRender.config.cache.exist?(self.partial_cache_key(name, media))
|
162
|
+
## end
|
163
|
+
##
|
164
|
+
## def self.delete_partial_cache(name, media)
|
165
|
+
## ::MustacheRender.config.cache.delete(self.partial_cache_key(name, media))
|
166
|
+
## end
|
167
|
+
##
|
168
|
+
## def self.fetch_partial_cache(name, media, options={}, &block)
|
169
|
+
## ::MustacheRender.config.cache.fetch(self.partial_cache_key(name, media), options) do
|
170
|
+
## if block_given?
|
171
|
+
## block.call
|
172
|
+
## end
|
173
|
+
## end
|
174
|
+
## end
|
175
|
+
##
|
176
|
+
## def self.read_partial_cache(name, media)
|
177
|
+
## ::MustacheRender.config.cache.read(self.partial_cache_key(name, media))
|
178
|
+
## end
|
179
|
+
##
|
180
|
+
## def self.write_partial_cache(name, media, value, options={})
|
181
|
+
## ::MustacheRender.config.cache.write(self.partial_cache_key(name, media), value, options)
|
182
|
+
## end
|
179
183
|
|
180
184
|
# Override this to provide custom escaping.
|
181
185
|
#
|
@@ -310,5 +314,42 @@ module MustacheRender
|
|
310
314
|
def self.inheritable_config_for(attr_name, default)
|
311
315
|
superclass.respond_to?(attr_name) ? superclass.send(attr_name) : default
|
312
316
|
end
|
317
|
+
|
318
|
+
private
|
319
|
+
|
320
|
+
def impl_logger options={}
|
321
|
+
level = options[:level] || :debug
|
322
|
+
|
323
|
+
result = nil
|
324
|
+
|
325
|
+
if block_given?
|
326
|
+
start_at = Time.now
|
327
|
+
result = yield
|
328
|
+
ms = ((Time.now - start_at) * 1000).to_i
|
329
|
+
MustacheRender.logger.send level, impl_format_log_entry(
|
330
|
+
"#{options[:operation]} (#{ms}ms)", options[:message]
|
331
|
+
)
|
332
|
+
end
|
333
|
+
|
334
|
+
result
|
335
|
+
end
|
336
|
+
|
337
|
+
def impl_format_log_entry(operation, message = nil)
|
338
|
+
" \033[4;34;1m#{operation}\033[0m \033[0;1m#{message}\033[0m"
|
339
|
+
end
|
340
|
+
|
341
|
+
def impl_render(data=template, ctx={})
|
342
|
+
self.template = data
|
343
|
+
|
344
|
+
return self.template.render(context) if ctx == {}
|
345
|
+
|
346
|
+
begin
|
347
|
+
context.push(ctx)
|
348
|
+
self.template.render(context)
|
349
|
+
ensure
|
350
|
+
context.pop
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
313
354
|
end
|
314
355
|
end
|
data/lib/mustache_render.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'mustache_render/adapter'
|
3
3
|
require 'mustache_render/config'
|
4
4
|
require 'mustache_render/mustache'
|
5
|
+
# require 'benchmark'
|
5
6
|
|
6
7
|
module MustacheRender
|
7
8
|
def self.logger
|
@@ -21,6 +22,7 @@ module MustacheRender
|
|
21
22
|
|
22
23
|
module CoreExt
|
23
24
|
autoload :BaseControllerExt, 'mustache_render/core_ext/base_controller_ext'
|
25
|
+
# autoload :ActionViewHandler, 'mustache_render/core_ext/action_view_handler'
|
24
26
|
end
|
25
27
|
|
26
28
|
module Controllers
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,51 @@
|
|
1
1
|
require 'mustache_render'
|
2
2
|
|
3
|
+
|
3
4
|
ROOT_PATH = File.dirname(__FILE__) + '/lib'
|
5
|
+
|
6
|
+
# -*- encoding : utf-8 -*-
|
7
|
+
MustacheRender.configure do |config|
|
8
|
+
# 默认的模板渲染媒介
|
9
|
+
# :db => 数据库渲染
|
10
|
+
# :file => 文件系统渲染
|
11
|
+
config.default_render_media = :db
|
12
|
+
|
13
|
+
# 默认的文件模板的根目录
|
14
|
+
config.file_template_root_path = ROOT_PATH + '/resources/templates'
|
15
|
+
|
16
|
+
# 默认的文件模板的扩展名称
|
17
|
+
config.file_template_extension = '.mustache'
|
18
|
+
|
19
|
+
# 默认的数据模板的扩展名称
|
20
|
+
config.db_template_extension = '.mustache'
|
21
|
+
|
22
|
+
# 当字段缺少的时候是否抛出异常
|
23
|
+
config.raise_on_context_miss = false
|
24
|
+
|
25
|
+
# 当数据库模板不存在时候是否抛出异常
|
26
|
+
config.raise_on_db_template_miss = true
|
27
|
+
|
28
|
+
# 当文件模板不存在时候是否抛出异常
|
29
|
+
config.raise_on_file_template_miss = true
|
30
|
+
|
31
|
+
# config.logger = Rails.logger
|
32
|
+
|
33
|
+
config.logger.level = Logger::INFO
|
34
|
+
|
35
|
+
### 模板的相关配置 ###########################
|
36
|
+
# 缓存的媒介
|
37
|
+
# config.cache_store = Rails.cache
|
38
|
+
|
39
|
+
# 版本适配器的配置
|
40
|
+
config.adapter_configure do |adapter|
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
# config.manage_center_need_login = true
|
45
|
+
config.manage_center_need_login = false
|
46
|
+
config.user_login_url = '/login'
|
47
|
+
config.manager_authenticate_fail_url = '/auth_fail'
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mustache_render
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 12
|
10
|
+
version: 0.0.12
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- happy
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2013-01-
|
18
|
+
date: 2013-01-24 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- lib/mustache_render/resources/jquery.js
|
78
78
|
- lib/mustache_render/resources/jquery_ujs.js
|
79
79
|
- lib/mustache_render/config.rb
|
80
|
+
- lib/mustache_render/core_ext/action_view_handler.rb
|
80
81
|
- lib/mustache_render/core_ext/base_controller_ext.rb
|
81
82
|
- lib/mustache_render/helpers/mustache_render/manage/base_helper.rb
|
82
83
|
- lib/mustache_render/version.rb
|