mustache_render 0.0.12 → 0.0.13

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.md ADDED
@@ -0,0 +1,23 @@
1
+ # MustacheRender
2
+
3
+ This project rocks and uses MIT-LICENSE.
4
+
5
+ ## Rails 3.1.x
6
+
7
+ routes
8
+
9
+ ``` ruby
10
+ Raily::Application.routes.draw do
11
+ ::MustacheRender.adapter.manage_route_adapter self
12
+ end
13
+ ```
14
+
15
+ install:
16
+
17
+ ``` console
18
+ rails g mustache_render:migration:install
19
+ ```
20
+
21
+ ## 使用方法
22
+
23
+
@@ -16,7 +16,7 @@ module MustacheRender::CoreExt
16
16
  impl_mustache_result_render result
17
17
  end
18
18
 
19
- def mustache_file_render template_path=nil, mustache={}
19
+ def mustache_file_render template_path, mustache={}
20
20
  result = ::MustacheRender::Mustache.file_render(template_path, mustache)
21
21
  impl_mustache_result_render result
22
22
  end
@@ -25,7 +25,7 @@ module MustacheRender::CoreExt
25
25
  # 使用数据库中的模板进行渲染
26
26
  # - template_path: 模板的路径
27
27
  #
28
- def mustache_db_render(template_path=nil, mustache={})
28
+ def mustache_db_render(template_path, mustache={})
29
29
  result = ::MustacheRender::Mustache.db_render(template_path, mustache)
30
30
  impl_mustache_result_render result
31
31
  end
@@ -0,0 +1,99 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module MustacheRender
3
+ class Mustache
4
+ # 将所有的key转为字符串
5
+ class Data < ::Hash
6
+ def initialize options = {}
7
+ self.merge! options
8
+ end
9
+
10
+ def render(template='')
11
+ ::MustacheRender::Mustache.render template, self
12
+ end
13
+
14
+ def file_render path
15
+ ::MustacheRender::Mustache.file_render path, self
16
+ end
17
+
18
+ def db_render path
19
+ ::MustacheRender::Mustache.db_render path, self
20
+ end
21
+
22
+ def []=(name, value)
23
+ result = super(name.to_s, value)
24
+ self.each_pair do |k, v|
25
+ impl_stringify_keys v
26
+ end
27
+ # self.stringify_keys!
28
+ result
29
+ end
30
+
31
+ def [](name)
32
+ super(name.to_s)
33
+ end
34
+
35
+ # 深层复制
36
+ def deep_dup
37
+ duplicate = self.dup
38
+ duplicate.each_pair do |k, v|
39
+ tv = duplicate[k]
40
+ duplicate[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_dup : v
41
+ end
42
+ duplicate
43
+ end
44
+
45
+ #
46
+ # data = MustacheRender::Mustache::Data.new
47
+ # data.site = {
48
+ # :name => 'abc'
49
+ # }
50
+ #
51
+ # 等价于
52
+ #
53
+ # data['site'] = {
54
+ # :name => 'abc'
55
+ # }
56
+ #
57
+ def method_missing method_name, *args, &block
58
+ # 如果方法是赋值, 则直接赋值
59
+ if method_name.to_s[-1,1] == "="
60
+ self[method_name.to_s.chop!] = args.first
61
+ else
62
+ result = self[method_name.to_s]
63
+
64
+ if result.is_a?(Hash)
65
+ self[method_name.to_s] = Data.new(result)
66
+ elsif result.nil? # 如果为空的话,则生成一个新的对象
67
+ self[method_name.to_s] = Data.new {}
68
+ else
69
+ result
70
+ end
71
+ end
72
+ end
73
+
74
+ def stringify_keys!
75
+ raise 'not impl'
76
+ end
77
+
78
+ def symbolize_keys!
79
+ raise 'not impl'
80
+ end
81
+
82
+ private
83
+
84
+ def impl_stringify_keys(v)
85
+ if v.is_a?(::Hash)
86
+ v.keys.each do |key|
87
+ v[key.to_s] = v.delete(key) unless key.is_a?(::String)
88
+ end
89
+ elsif v.is_a?(::Array)
90
+ v.each do |_v|
91
+ impl_stringify_keys _v
92
+ end
93
+ end
94
+ end
95
+
96
+ end
97
+ end
98
+ end
99
+
@@ -1,6 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  require 'mustache_render/mustache/template'
3
3
  require 'mustache_render/mustache/context'
4
+ require 'mustache_render/mustache/data'
4
5
 
5
6
  module MustacheRender
6
7
  class Mustache
@@ -24,14 +25,14 @@ module MustacheRender
24
25
  end
25
26
  end
26
27
 
27
- # 片段树
28
+ # TODO: 语法检查,片段树
28
29
  def partials_tree
29
30
 
30
31
  end
31
32
 
32
33
  # Context accessors.
33
34
  #
34
- # view = Mustache.new
35
+ # view = ::MustacheRender::Mustache.new
35
36
  # view[:name] = "Jon"
36
37
  # view.template = "Hi, {{name}}!"
37
38
  # view.render # => "Hi, Jon!"
@@ -147,7 +148,6 @@ module MustacheRender
147
148
  def partial(name)
148
149
  name = self.class.generate_template_name name, config.file_template_extension
149
150
 
150
- # return self.read_template_from_media name, media
151
151
  @_cached_partials ||= {}
152
152
  (@_cached_partials[media] ||= {})[name] ||= self.read_template_from_media name, media
153
153
  end
@@ -194,56 +194,6 @@ module MustacheRender
194
194
  CGI.escapeHTML(str)
195
195
  end
196
196
 
197
- #
198
- # Private API
199
- #
200
-
201
- # When given a symbol or string representing a class, will try to produce an
202
- # appropriate view class.
203
- # e.g.
204
- # Mustache.view_namespace = Hurl::Views
205
- # Mustache.view_class(:Partial) # => Hurl::Views::Partial
206
- def self.view_class(name)
207
- if name != classify(name.to_s)
208
- name = classify(name.to_s)
209
- end
210
-
211
- # Emptiness begets emptiness.
212
- if name.to_s == ''
213
- return Mustache
214
- end
215
-
216
- file_name = underscore(name)
217
-
218
- name = "#{view_namespace}::#{name}"
219
-
220
- if const = const_get!(name)
221
- const
222
- elsif File.exists?(file = "#{view_path}/#{file_name}.rb")
223
- require "#{file}".chomp('.rb')
224
- const_get!(name) || Mustache
225
- else
226
- Mustache
227
- end
228
- end
229
-
230
- # Supercharged version of Module#const_get.
231
- #
232
- # Always searches under Object and can find constants by their full name,
233
- # e.g. Mustache::Views::Index
234
- #
235
- # name - The full constant name to find.
236
- #
237
- # Returns the constant if found
238
- # Returns nil if nothing is found
239
- def self.const_get!(name)
240
- name.split('::').inject(Object) do |klass, name|
241
- klass.const_get(name)
242
- end
243
- rescue NameError
244
- nil
245
- end
246
-
247
197
  # Has this template already been compiled? Compilation is somewhat
248
198
  # expensive so it may be useful to check this before attempting it.
249
199
  def self.compiled?
@@ -275,7 +225,7 @@ module MustacheRender
275
225
  end.join('::')
276
226
  end
277
227
 
278
- # TemplatePartial => template_partial
228
+ # TemplatePartial => template_partial
279
229
  # Template::Partial => template/partial
280
230
  # Takes a string but defaults to using the current class' name.
281
231
  def self.underscore(classified = name)
@@ -3,7 +3,7 @@ module MustacheRender
3
3
  VERSION_NUMBERS = [
4
4
  VERSION_MAJOR = 0,
5
5
  VERSION_MINOR = 0,
6
- VERSION_BUILD = 12,
6
+ VERSION_BUILD = 13,
7
7
  ]
8
8
 
9
9
  VERSION = VERSION_NUMBERS.join(".")
@@ -0,0 +1,20 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe 'MustacheRender Render Basic Render' do
5
+ context 'basic render' do
6
+ before :each do
7
+
8
+ end
9
+
10
+ it 'basic render' do
11
+ viewer = ::MustacheRender::Mustache.new
12
+
13
+ viewer[:name] = 'Happy Wang'
14
+ viewer.template = '{{name}}'
15
+ viewer.render.should == 'Happy Wang'
16
+ viewer.file_render('basic/8').should == "in-8file:Happy Wang\n"
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,69 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe 'MustacheRender Mustache Data' do
5
+ context 'basic test' do
6
+ let :data do
7
+ MustacheRender::Mustache::Data.new
8
+ end
9
+
10
+ before :each do
11
+
12
+ end
13
+
14
+ it 'render basic' do
15
+ data[:a] = 'hello'
16
+ data.b = 'happy'
17
+ data.render('{{a}}{{b}}').should == 'hellohappy'
18
+ end
19
+
20
+ it 'render a array' do
21
+ data.a = [{:a => 1, :b => 2}, {:a => 10, :b => 20}]
22
+ data.render('{{#a}}a:{{a}} b:{{b}}{{/a}}').should == "a:1 b:2a:10 b:20"
23
+ end
24
+
25
+ it '所有的key转为字符串' do
26
+ data[:a] = 'b'
27
+ data.inspect.should == "{\"a\"=>\"b\"}"
28
+ end
29
+
30
+ it '当为数组的时候,每个元素也许要进行key字符串化' do
31
+ data.b.c = [{:a => 'a', 'b' => 'b'}]
32
+ data.inspect.should == "{\"b\"=>{\"c\"=>[{\"b\"=>\"b\", \"a\"=>\"a\"}]}}"
33
+ end
34
+
35
+ it '基本赋值方法' do
36
+
37
+ data.site = {
38
+ :name => 'a'
39
+ }
40
+
41
+ data.inspect.should == "{\"site\"=>{\"name\"=>\"a\"}}"
42
+ data.site.inspect.should == "{\"name\"=>\"a\"}"
43
+ end
44
+
45
+ it '取值类型为数组' do
46
+ data.sites = [1, 2, 3]
47
+
48
+ data.sites.inspect.should == '[1, 2, 3]'
49
+ end
50
+
51
+ it '直接调用一个空方法' do
52
+ data.helloworld_abcd.should == {}
53
+ data.helloworld_abcd.class.should == ::MustacheRender::Mustache::Data
54
+ end
55
+
56
+ it '连续的调用一个方法' do
57
+ data.a.b.c.should == {}
58
+
59
+ data.a.b.c.sites = [1, 2, 3]
60
+ data.a.b.c.sites.inspect.should == '[1, 2, 3]'
61
+ end
62
+
63
+ it 'hello? 这类方法的生成是否正常' do
64
+ data.a['hello?'] = false
65
+ data.a.hello?.should == false
66
+ end
67
+ end
68
+ end
69
+
@@ -0,0 +1 @@
1
+ in-8file:{{name}}
metadata CHANGED
@@ -1,61 +1,55 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mustache_render
3
- version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 12
10
- version: 0.0.12
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.13
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - happy
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2013-01-24 00:00:00 +08:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2013-01-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: awesome_nested_set
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
33
22
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: sqlite3
37
23
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
39
25
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: sqlite3
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
47
38
  type: :development
48
- version_requirements: *id002
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
49
46
  description: Description of MustacheRender.
50
- email:
47
+ email:
51
48
  - andywang7259@gmail.com
52
49
  executables: []
53
-
54
50
  extensions: []
55
-
56
51
  extra_rdoc_files: []
57
-
58
- files:
52
+ files:
59
53
  - lib/mustache_render.rb
60
54
  - lib/tasks/mustache_render_tasks.rake
61
55
  - lib/generators/mustache_render/install_generator.rb
@@ -69,6 +63,7 @@ files:
69
63
  - lib/mustache_render/mustache/context.rb
70
64
  - lib/mustache_render/mustache/template.rb
71
65
  - lib/mustache_render/mustache/parser.rb
66
+ - lib/mustache_render/mustache/data.rb
72
67
  - lib/mustache_render/controllers/mustache_render/manage/base_controller.rb
73
68
  - lib/mustache_render/controllers/mustache_render/manage/templates_controller.rb
74
69
  - lib/mustache_render/controllers/mustache_render/manage/template_versions_controller.rb
@@ -111,12 +106,15 @@ files:
111
106
  - lib/mustache_render/views/mustache_render/manage/folders/_new_2.html.erb
112
107
  - lib/mustache_render/views/mustache_render/manage/folders/_edit_2.html.erb
113
108
  - lib/mustache_render/adapter.rb
109
+ - spec/lib/mustache/data_spec.rb
114
110
  - spec/lib/mustache/file_render_spec.rb
111
+ - spec/lib/mustache/basic_render_spec.rb
115
112
  - spec/lib/resources/templates/basic/6.mustache
116
113
  - spec/lib/resources/templates/basic/2.mustache
117
114
  - spec/lib/resources/templates/basic/1.mustache
118
115
  - spec/lib/resources/templates/basic/7.mustache
119
116
  - spec/lib/resources/templates/basic/3.mustache
117
+ - spec/lib/resources/templates/basic/8.mustache
120
118
  - spec/lib/resources/templates/basic/5.mustache
121
119
  - spec/lib/resources/templates/basic/4.mustache
122
120
  - spec/lib/resources/templates/scan_tags/2.mustache
@@ -125,40 +123,29 @@ files:
125
123
  - spec/spec_helper.rb
126
124
  - MIT-LICENSE
127
125
  - Rakefile
128
- - README.rdoc
129
- has_rdoc: true
126
+ - README.md
130
127
  homepage: http://blogsoso.net/
131
128
  licenses: []
132
-
133
129
  post_install_message:
134
130
  rdoc_options: []
135
-
136
- require_paths:
131
+ require_paths:
137
132
  - lib
138
- required_ruby_version: !ruby/object:Gem::Requirement
133
+ required_ruby_version: !ruby/object:Gem::Requirement
139
134
  none: false
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- hash: 3
144
- segments:
145
- - 0
146
- version: "0"
147
- required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
140
  none: false
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- hash: 3
153
- segments:
154
- - 0
155
- version: "0"
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
156
145
  requirements: []
157
-
158
146
  rubyforge_project:
159
- rubygems_version: 1.3.7
147
+ rubygems_version: 1.8.24
160
148
  signing_key:
161
149
  specification_version: 3
162
150
  summary: Summary of MustacheRender.
163
151
  test_files: []
164
-
data/README.rdoc DELETED
@@ -1,22 +0,0 @@
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
-