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.
Files changed (37) hide show
  1. data/README.rdoc +22 -0
  2. data/lib/generators/mustache_render/install/templates/active_record/migration.rb +65 -0
  3. data/lib/generators/mustache_render/install/templates/config/initializers/mustache_render.rb +8 -14
  4. data/lib/generators/mustache_render/install/templates/models/active_record/mustache_render_folder.rb +6 -0
  5. data/lib/generators/mustache_render/install/templates/models/active_record/mustache_render_manager.rb +6 -0
  6. data/lib/generators/mustache_render/install/templates/models/active_record/mustache_render_template.rb +6 -0
  7. data/lib/generators/mustache_render/install/templates/models/active_record/mustache_render_template_version.rb +6 -0
  8. data/lib/generators/mustache_render/install_generator.rb +14 -2
  9. data/lib/mustache_render.rb +5 -14
  10. data/lib/mustache_render/ables.rb +7 -0
  11. data/lib/mustache_render/ables/render_able.rb +161 -0
  12. data/lib/mustache_render/config.rb +24 -62
  13. data/lib/mustache_render/errors.rb +5 -0
  14. data/lib/mustache_render/errors/mustache_template_miss_error.rb +6 -0
  15. data/lib/mustache_render/mustache.rb +85 -79
  16. data/lib/mustache_render/mustache/data.rb +155 -61
  17. data/lib/mustache_render/mustache/parser.rb +0 -4
  18. data/lib/mustache_render/mustache/template.rb +2 -7
  19. data/lib/mustache_render/populator.rb +7 -0
  20. data/lib/mustache_render/utils.rb +15 -0
  21. data/lib/mustache_render/{core_ext/base_controller_ext.rb → utils/action_controller_util.rb} +7 -6
  22. data/lib/mustache_render/utils/array_util.rb +15 -0
  23. data/lib/mustache_render/utils/fields_filter_util.rb +127 -0
  24. data/lib/mustache_render/version.rb +1 -1
  25. data/spec/lib/ables/render_able_spec.rb +183 -0
  26. data/spec/lib/mustache/basic_render_spec.rb +26 -1
  27. data/spec/lib/mustache/data_spec.rb +5 -5
  28. data/spec/lib/mustache/file_render_spec.rb +11 -2
  29. data/spec/lib/resources/templates/mustache_render_ables/1.mustache +11 -0
  30. data/spec/lib/utils/field_filter_spec.rb +71 -0
  31. data/spec/spec_helper.rb +0 -21
  32. metadata +69 -59
  33. data/README.md +0 -23
  34. data/lib/mustache_render/adapter.rb +0 -75
  35. data/lib/mustache_render/populator_base.rb +0 -88
  36. data/spec/lib/config_spec.rb +0 -14
  37. data/spec/lib/resources/templates/basic/8.mustache +0 -1
@@ -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
+
@@ -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 = :file
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
 
@@ -0,0 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class MustacheRenderFolder < ActiveRecord::Base
3
+ include ::MustacheRender::Models::MustacheRenderFolderMixin
4
+
5
+ end
6
+
@@ -0,0 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class MustacheRenderManager < ActiveRecord::Base
3
+ include ::MustacheRender::Models::MustacheRenderManagerMixin
4
+
5
+ end
6
+
@@ -0,0 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class MustacheRenderTemplate < ActiveRecord::Base
3
+ include ::MustacheRender::Models::MustacheRenderTemplateMixin
4
+
5
+ end
6
+
@@ -0,0 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class MustacheRenderTemplateVersion < ActiveRecord::Base
3
+ include ::MustacheRender::Models::MustacheRenderTemplateVersionMixin
4
+
5
+ end
6
+
@@ -4,10 +4,22 @@ require 'rails/generators/migration'
4
4
 
5
5
  module MustacheRender
6
6
  class InstallGenerator < Rails::Generators::Base
7
- desc "Generates MustacheRender"
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)
@@ -1,23 +1,14 @@
1
1
  # -*- encoding : utf-8 -*-
2
- require 'mustache_render/adapter'
3
- require 'mustache_render/config'
4
- require 'mustache_render/mustache'
5
- # require 'benchmark'
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,7 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require "#{File.dirname(__FILE__)}/ables/render_able"
4
+
5
+ module MustacheRender
6
+
7
+ end
@@ -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
-