mustache_render 0.0.21 → 0.0.22

Sign up to get free protection for your applications and to get access to all the features.
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
-