mustache_render 0.0.21 → 0.0.22
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/README.rdoc +22 -0
- data/lib/generators/mustache_render/install/templates/active_record/migration.rb +65 -0
- data/lib/generators/mustache_render/install/templates/config/initializers/mustache_render.rb +8 -14
- data/lib/generators/mustache_render/install/templates/models/active_record/mustache_render_folder.rb +6 -0
- data/lib/generators/mustache_render/install/templates/models/active_record/mustache_render_manager.rb +6 -0
- data/lib/generators/mustache_render/install/templates/models/active_record/mustache_render_template.rb +6 -0
- data/lib/generators/mustache_render/install/templates/models/active_record/mustache_render_template_version.rb +6 -0
- data/lib/generators/mustache_render/install_generator.rb +14 -2
- data/lib/mustache_render.rb +5 -14
- data/lib/mustache_render/ables.rb +7 -0
- data/lib/mustache_render/ables/render_able.rb +161 -0
- data/lib/mustache_render/config.rb +24 -62
- data/lib/mustache_render/errors.rb +5 -0
- data/lib/mustache_render/errors/mustache_template_miss_error.rb +6 -0
- data/lib/mustache_render/mustache.rb +85 -79
- data/lib/mustache_render/mustache/data.rb +155 -61
- data/lib/mustache_render/mustache/parser.rb +0 -4
- data/lib/mustache_render/mustache/template.rb +2 -7
- data/lib/mustache_render/populator.rb +7 -0
- data/lib/mustache_render/utils.rb +15 -0
- data/lib/mustache_render/{core_ext/base_controller_ext.rb → utils/action_controller_util.rb} +7 -6
- data/lib/mustache_render/utils/array_util.rb +15 -0
- data/lib/mustache_render/utils/fields_filter_util.rb +127 -0
- data/lib/mustache_render/version.rb +1 -1
- data/spec/lib/ables/render_able_spec.rb +183 -0
- data/spec/lib/mustache/basic_render_spec.rb +26 -1
- data/spec/lib/mustache/data_spec.rb +5 -5
- data/spec/lib/mustache/file_render_spec.rb +11 -2
- data/spec/lib/resources/templates/mustache_render_ables/1.mustache +11 -0
- data/spec/lib/utils/field_filter_spec.rb +71 -0
- data/spec/spec_helper.rb +0 -21
- metadata +69 -59
- data/README.md +0 -23
- data/lib/mustache_render/adapter.rb +0 -75
- data/lib/mustache_render/populator_base.rb +0 -88
- data/spec/lib/config_spec.rb +0 -14
- data/spec/lib/resources/templates/basic/8.mustache +0 -1
data/README.rdoc
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
= MustacheRender
|
2
|
+
|
3
|
+
This project rocks and uses MIT-LICENSE.
|
4
|
+
|
5
|
+
= Rails 3.1.x
|
6
|
+
|
7
|
+
routes
|
8
|
+
|
9
|
+
```
|
10
|
+
namespace :mustache_render do
|
11
|
+
namespace :manager do
|
12
|
+
resources :folders do
|
13
|
+
resources :templates, :only => [:show, :new, :edit, :update, :create, :destroy]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
```
|
18
|
+
|
19
|
+
install:
|
20
|
+
|
21
|
+
rails g mustache_render:migration:install
|
22
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
class MustacheRenderMigration < ActiveRecord::Migration
|
3
|
+
def self.up
|
4
|
+
create_table :mustache_render_folders, :options => 'DEFAULT CHARSET=utf8' do |t|
|
5
|
+
t.string :name, :default => '' # 文件夹的名称
|
6
|
+
|
7
|
+
t.string :full_path, :default => '' # 全路径
|
8
|
+
|
9
|
+
###### for nested_ful #####################
|
10
|
+
t.integer :parent_id # 父节点的id
|
11
|
+
t.integer :left_id
|
12
|
+
t.integer :right_id
|
13
|
+
t.integer :depth # 深度
|
14
|
+
t.integer :children_count, :default => 0
|
15
|
+
###########################################
|
16
|
+
|
17
|
+
t.text :note # 备注
|
18
|
+
|
19
|
+
t.timestamps
|
20
|
+
end
|
21
|
+
|
22
|
+
create_table :mustache_render_templates, :options => 'DEFAULT CHARSET=utf8' do |t|
|
23
|
+
t.integer :last_user_id # 最后一个修改模板的用户
|
24
|
+
t.integer :create_user_id # 创建者的用户id
|
25
|
+
t.integer :folder_id # 文件夹的ID
|
26
|
+
t.string :name # 模板的名称
|
27
|
+
t.text :content # 代码
|
28
|
+
|
29
|
+
t.text :note # 备注
|
30
|
+
t.timestamps
|
31
|
+
end
|
32
|
+
|
33
|
+
create_table :mustache_render_template_versions, :options => 'DEFAULT CHARSET=utf8' do |t|
|
34
|
+
t.integer :template_id # 模板的id
|
35
|
+
t.integer :last_user_id # 最后一个修改模板的用户
|
36
|
+
t.integer :create_user_id # 创建者的用户id
|
37
|
+
t.integer :folder_id # 文件夹的ID
|
38
|
+
t.string :name # 模板的名称
|
39
|
+
t.text :content # 代码
|
40
|
+
t.string :full_path
|
41
|
+
t.string :change_log # 修改日志
|
42
|
+
|
43
|
+
t.text :note # 备注
|
44
|
+
t.timestamps
|
45
|
+
end
|
46
|
+
|
47
|
+
create_table :mustache_render_managers, :options => 'DEFAULT CHARSET=utf8' do |t|
|
48
|
+
t.integer :user_id
|
49
|
+
|
50
|
+
t.integer :admin_able # 是否是管理权限
|
51
|
+
t.integer :edit_able # 是否可以编辑
|
52
|
+
|
53
|
+
t.timestamps
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.down
|
59
|
+
drop_table :mustache_render_folders
|
60
|
+
drop_table :mustache_render_template_versions
|
61
|
+
drop_table :mustache_render_templates
|
62
|
+
drop_table :mustache_render_managers
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
data/lib/generators/mustache_render/install/templates/config/initializers/mustache_render.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
MustacheRender.configure do |config|
|
3
3
|
# 默认的模板渲染媒介
|
4
|
+
# :db => 数据库渲染
|
4
5
|
# :file => 文件系统渲染
|
5
|
-
config.default_render_media = :
|
6
|
+
config.default_render_media = :db
|
6
7
|
|
7
8
|
# 默认的文件模板的根目录
|
8
9
|
config.file_template_root_path = "#{Rails.root}/app/templates"
|
@@ -10,25 +11,18 @@ MustacheRender.configure do |config|
|
|
10
11
|
# 默认的文件模板的扩展名称
|
11
12
|
config.file_template_extension = '.mustache'
|
12
13
|
|
14
|
+
# 默认的数据模板的扩展名称
|
15
|
+
config.db_template_extension = '.mustache'
|
16
|
+
|
13
17
|
# 当字段缺少的时候是否抛出异常
|
14
18
|
config.raise_on_context_miss = false
|
15
19
|
|
20
|
+
# 当数据库模板不存在时候是否抛出异常
|
21
|
+
config.raise_on_db_template_miss = true
|
22
|
+
|
16
23
|
# 当文件模板不存在时候是否抛出异常
|
17
24
|
config.raise_on_file_template_miss = true
|
18
25
|
|
19
26
|
config.logger = Rails.logger
|
20
|
-
|
21
|
-
# 版本适配器的配置
|
22
|
-
config.adapter_configure do |adapter|
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
# 管理中心是否需要登录
|
27
|
-
config.manage_center_need_login = true
|
28
|
-
# 用户登录的url
|
29
|
-
config.user_login_url = '/login'
|
30
|
-
# 管理员登录失败后跳往的URL
|
31
|
-
config.manager_authenticate_fail_url = '/login'
|
32
|
-
|
33
27
|
end
|
34
28
|
|
@@ -4,10 +4,22 @@ require 'rails/generators/migration'
|
|
4
4
|
|
5
5
|
module MustacheRender
|
6
6
|
class InstallGenerator < Rails::Generators::Base
|
7
|
-
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
|
9
|
+
desc "Generates MustacheRender database migration, models"
|
8
10
|
|
9
11
|
def copy_files
|
12
|
+
orm = options[:orm].to_s
|
13
|
+
orm = "active_record" unless %w{active_record}.include?(orm)
|
14
|
+
%w(mustache_render_folder mustache_render_template mustache_render_manager mustache_render_template_version).each do |file|
|
15
|
+
copy_model(orm, file)
|
16
|
+
end
|
17
|
+
|
10
18
|
template "config/initializers/mustache_render.rb", "config/initializers/mustache_render.rb"
|
19
|
+
|
20
|
+
if self.class.orm_has_migration?
|
21
|
+
migration_template "#{orm}/migration.rb", 'db/migrate/mustache_render_migration'
|
22
|
+
end
|
11
23
|
end
|
12
24
|
|
13
25
|
def self.orm
|
@@ -31,7 +43,7 @@ module MustacheRender
|
|
31
43
|
"%.3d" % (current_migration_number(dirname) + 1)
|
32
44
|
end
|
33
45
|
end
|
34
|
-
|
46
|
+
|
35
47
|
private
|
36
48
|
|
37
49
|
def copy_model(orm, name)
|
data/lib/mustache_render.rb
CHANGED
@@ -1,23 +1,14 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
|
2
|
+
require "#{File.dirname(__FILE__)}/mustache_render/errors"
|
3
|
+
require "#{File.dirname(__FILE__)}/mustache_render/config"
|
4
|
+
require "#{File.dirname(__FILE__)}/mustache_render/mustache"
|
5
|
+
require "#{File.dirname(__FILE__)}/mustache_render/utils"
|
6
|
+
require "#{File.dirname(__FILE__)}/mustache_render/ables"
|
6
7
|
|
7
8
|
module MustacheRender
|
8
9
|
def self.logger
|
9
10
|
MustacheRender.config.logger
|
10
11
|
end
|
11
|
-
|
12
|
-
autoload :Adapter, 'mustache_render/adapter'
|
13
|
-
autoload :PopulatorBase, 'mustache_render/populator_base'
|
14
|
-
|
15
|
-
module CoreExt
|
16
|
-
autoload :BaseControllerExt, 'mustache_render/core_ext/base_controller_ext'
|
17
|
-
end
|
18
12
|
end
|
19
13
|
|
20
|
-
if defined?(::ActionController::Base)
|
21
|
-
::ActionController::Base.send :include, ::MustacheRender::CoreExt::BaseControllerExt
|
22
|
-
end
|
23
14
|
|
@@ -0,0 +1,161 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module MustacheRender
|
3
|
+
module RenderAble
|
4
|
+
class MustachePopulatorConfig
|
5
|
+
def filters_util
|
6
|
+
@filters_util ||= ::MustacheRender::FieldsFilterUtil.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def filters_util= options={}
|
10
|
+
@filters_util ||= ::MustacheRender::FieldsFilterUtil.new(options)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module SharedMethods
|
15
|
+
[:render, :file_render].each do |_render_method|
|
16
|
+
define_method "mustache_#{_render_method}" do |*args, &block|
|
17
|
+
options = ::MustacheRender::ArrayUtil.extract_options!(args)
|
18
|
+
template_or_path = args.first || ''
|
19
|
+
|
20
|
+
::MustacheRender::Mustache.send(_render_method, template_or_path, self.to_mustache(options, &block))
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module ForRecord
|
26
|
+
def self.included base
|
27
|
+
base.class_eval do
|
28
|
+
include ::MustacheRender::RenderAble::SharedMethods
|
29
|
+
extend ClassMethods
|
30
|
+
include InstanceMethods
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# 类方法
|
35
|
+
module ClassMethods
|
36
|
+
# options:
|
37
|
+
# - populators:
|
38
|
+
#
|
39
|
+
def load_mustache_populator *args, &block
|
40
|
+
options = ::MustacheRender::ArrayUtil.extract_options!(args)
|
41
|
+
|
42
|
+
(
|
43
|
+
::MustacheRender::ArrayUtil.init(options[:populators]).compact
|
44
|
+
).each do |populator_moule|
|
45
|
+
self.send :include, populator_moule if populator_moule.is_a?(Module)
|
46
|
+
end
|
47
|
+
|
48
|
+
if block_given?
|
49
|
+
block.call(
|
50
|
+
self.mustache_populator_config
|
51
|
+
)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def mustache_populator_config
|
56
|
+
@mustache_populator_config ||= ::MustacheRender::RenderAble::MustachePopulatorConfig.new
|
57
|
+
end
|
58
|
+
|
59
|
+
def mustache_populator_filters_util
|
60
|
+
self.mustache_populator_config.filters_util
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
module InstanceMethods
|
65
|
+
# 组装器的配置
|
66
|
+
def mustache_populator_config
|
67
|
+
self.class.mustache_populator_config
|
68
|
+
end
|
69
|
+
|
70
|
+
# 组装器的过滤工具
|
71
|
+
def mustache_populator_filters_util
|
72
|
+
self.class.mustache_populator_filters_util
|
73
|
+
end
|
74
|
+
|
75
|
+
# options:
|
76
|
+
# - filter:
|
77
|
+
# - ...
|
78
|
+
# - &block
|
79
|
+
def to_mustache options={}, &block
|
80
|
+
result = ::MustacheRender::Mustache::Data.new(
|
81
|
+
:nil? => false
|
82
|
+
)
|
83
|
+
|
84
|
+
filter_util = self.mustache_populator_filters_util.load(options[:filter] || :default)
|
85
|
+
|
86
|
+
self.impl_to_mustache result, filter_util, options if defined?(self.impl_to_mustache)
|
87
|
+
|
88
|
+
if block_given?
|
89
|
+
if(_block_result = block.call :record => self, :result => result).is_a?(::Hash)
|
90
|
+
result.merge! _block_result
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
result
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
module ForList
|
100
|
+
include ::MustacheRender::RenderAble::SharedMethods
|
101
|
+
|
102
|
+
def to_mustache options={}, &block
|
103
|
+
|
104
|
+
result = {
|
105
|
+
:any? => self.any?,
|
106
|
+
:list => self.map do |item|
|
107
|
+
item.to_mustache options, &block
|
108
|
+
end
|
109
|
+
}
|
110
|
+
|
111
|
+
# 支持分页?
|
112
|
+
# 分页相关的数据
|
113
|
+
|
114
|
+
if self.respond_to?(:total_pages)
|
115
|
+
total_entries = defined?(self.total_entries) ? self.total_entries : self.total_count
|
116
|
+
|
117
|
+
pagination_result = {
|
118
|
+
:support? => true,
|
119
|
+
:info => {
|
120
|
+
:current_page => self.current_page, # 当前页数
|
121
|
+
:total_entries => total_entries, # 总页数
|
122
|
+
:per_page => self.per_page, # 每页条数
|
123
|
+
:total_pages => self.total_pages, # 总页数
|
124
|
+
:first_page? => self.current_page == 1, # 是否是第一页?
|
125
|
+
:last_page? => self.current_page == self.total_pages, # 最后一页?
|
126
|
+
:next_page => self.next_page, # 下一页
|
127
|
+
:previous_page => self.previous_page # 前一页
|
128
|
+
}
|
129
|
+
}
|
130
|
+
else
|
131
|
+
pagination_result = {
|
132
|
+
:support? => false
|
133
|
+
}
|
134
|
+
end
|
135
|
+
|
136
|
+
result.merge!(
|
137
|
+
:pagination => pagination_result
|
138
|
+
)
|
139
|
+
|
140
|
+
result
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
module NilMethods
|
145
|
+
def to_mustache options={}
|
146
|
+
::MustacheRender::Mustache::Data.new(
|
147
|
+
:nil? => true
|
148
|
+
)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
if defined?(::NilClass)
|
155
|
+
::NilClass.send :include, ::MustacheRender::RenderAble::NilMethods
|
156
|
+
end
|
157
|
+
|
158
|
+
if defined?(::Array)
|
159
|
+
::Array.send :include, ::MustacheRender::RenderAble::ForList
|
160
|
+
end
|
161
|
+
|
@@ -5,46 +5,13 @@ module MustacheRender
|
|
5
5
|
|
6
6
|
def configure
|
7
7
|
yield self.config ||= Config.new
|
8
|
-
self.config.apply!
|
9
8
|
end
|
10
9
|
end
|
11
10
|
|
12
11
|
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
|
-
|
24
12
|
def initialize
|
25
13
|
end
|
26
14
|
|
27
|
-
# 配置适配器
|
28
|
-
def adapter_configure(&block)
|
29
|
-
::MustacheRender.adapter_configure do |adapter|
|
30
|
-
if block_given?
|
31
|
-
block.call adapter
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
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
|
-
|
48
15
|
#
|
49
16
|
# 默认的渲染媒介
|
50
17
|
#
|
@@ -56,22 +23,10 @@ module MustacheRender
|
|
56
23
|
@default_render_media ||= media
|
57
24
|
end
|
58
25
|
|
59
|
-
# def cache
|
60
|
-
# return @_cache_store if defined?(@_cache_store)
|
61
|
-
|
62
|
-
# @_cache_store ||= Rails.cache
|
63
|
-
# # @_cache_store ||= MemCache.new('localhost:11211', :namespace => 'mustache_render#cache')
|
64
|
-
# end
|
65
|
-
|
66
|
-
# def cache_store= cache_store
|
67
|
-
# @_cache_store ||= cache_store
|
68
|
-
# end
|
69
|
-
|
70
26
|
def logger
|
71
27
|
return @_logger if defined?(@_logger)
|
72
28
|
|
73
29
|
require 'logger'
|
74
|
-
|
75
30
|
@_logger ||= ::Logger.new(STDOUT)
|
76
31
|
end
|
77
32
|
|
@@ -79,6 +34,30 @@ module MustacheRender
|
|
79
34
|
@_logger ||= logger
|
80
35
|
end
|
81
36
|
|
37
|
+
def raise_on_context_miss?
|
38
|
+
return @_raise_on_context_miss if defined?(@_raise_on_context_miss)
|
39
|
+
|
40
|
+
@raise_on_context_miss = false
|
41
|
+
end
|
42
|
+
|
43
|
+
def raise_on_context_miss= _miss
|
44
|
+
return @_raise_on_context_miss if defined?(@_raise_on_context_miss)
|
45
|
+
|
46
|
+
@raise_on_context_miss = _miss
|
47
|
+
end
|
48
|
+
|
49
|
+
def raise_on_file_template_miss?
|
50
|
+
return @_raise_on_file_template_miss if defined?(@_raise_on_file_template_miss)
|
51
|
+
|
52
|
+
@raise_on_file_template_miss = true
|
53
|
+
end
|
54
|
+
|
55
|
+
def raise_on_file_template_miss= _miss
|
56
|
+
return @_raise_on_file_template_miss if defined?(@_raise_on_file_template_miss)
|
57
|
+
|
58
|
+
@raise_on_file_template_miss = _miss
|
59
|
+
end
|
60
|
+
|
82
61
|
#
|
83
62
|
# lib 的基本路径
|
84
63
|
#
|
@@ -102,22 +81,5 @@ module MustacheRender
|
|
102
81
|
@file_template_extension ||= name
|
103
82
|
end
|
104
83
|
|
105
|
-
# 是否抛出文件模板丢失的异常?
|
106
|
-
def raise_on_file_template_miss= _bool
|
107
|
-
@raise_on_file_template_miss = _bool unless defined?(@raise_on_file_template_miss)
|
108
|
-
end
|
109
|
-
|
110
|
-
def raise_on_file_template_miss?
|
111
|
-
defined?(@raise_on_file_template_miss) ? @raise_on_file_template_miss : true
|
112
|
-
end
|
113
|
-
|
114
|
-
def raise_on_context_miss?
|
115
|
-
defined?(@raise_on_context_miss) ? @raise_on_context_miss : false
|
116
|
-
end
|
117
|
-
|
118
|
-
def raise_on_context_miss=(_bool)
|
119
|
-
@raise_on_context_miss = _bool unless defined?(@raise_on_context_miss)
|
120
|
-
end
|
121
84
|
end
|
122
85
|
end
|
123
|
-
|