muj 0.0.1 → 0.0.2

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 (4) hide show
  1. data/bin/muj +13 -2
  2. data/lib/muj.rb +39 -10
  3. data/lib/mustache.js +5 -1
  4. metadata +14 -7
data/bin/muj CHANGED
@@ -4,6 +4,8 @@ require 'optparse'
4
4
  require 'muj'
5
5
 
6
6
  $muj_cli_json = false
7
+ $muj_cli_views = nil
8
+ $muj_cli_layout = nil
7
9
 
8
10
  module Muj
9
11
  class CLI
@@ -22,6 +24,14 @@ module Muj
22
24
 
23
25
  opts.on("-j","--json", "Skip YAML parser") { $muj_cli_json = true; ARGV.delete("-j"); ARGV.delete("--json") }
24
26
 
27
+ opts.on('-v', '--views DIR', 'views directory') do |dir|
28
+ $muj_cli_views = dir
29
+ end
30
+
31
+ opts.on('-l', '--layout NAME', 'layout name (should be in views dir use > instead of / for subdir)') do |name|
32
+ $muj_cli_layout = name
33
+ end
34
+
25
35
  opts.on_tail("-h", "--help", "Show this message") do
26
36
  puts opts
27
37
  exit
@@ -43,10 +53,11 @@ module Muj
43
53
  data = File.open(argv.first).read
44
54
  end
45
55
  template = File.open(argv[1]).read
56
+ opts = {'views' => $muj_cli_views, 'layout' => $muj_cli_layout}
46
57
  if $muj_cli_json
47
- puts Muj.render_with_json(template,data)
58
+ puts Muj.render_with_json(template,data,opts)
48
59
  else
49
- puts Muj.render_with_yaml(template,data)
60
+ puts Muj.render_with_yaml(template,data,opts)
50
61
  end
51
62
  end
52
63
  end
data/lib/muj.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'yaml'
1
2
  require 'tilt' unless defined? Tilt
2
3
  require 'json' unless defined? JSON
3
4
 
@@ -17,25 +18,53 @@ module Tilt
17
18
  end
18
19
 
19
20
  module Muj
21
+ class Partials
22
+ def initialize(dir)
23
+ @dir = File.expand_path(dir)
24
+ end
25
+
26
+ def __exists(name)
27
+ fname = name.gsub('>','/')
28
+ File.exists?("#{@dir}/#{fname}.muj")
29
+ end
30
+
31
+ def __read(name)
32
+ fname = name.gsub('>','/')
33
+ f = File.open("#{@dir}/#{fname}.muj")
34
+ r = f.read.chomp
35
+ f.close
36
+ r
37
+ end
38
+ end
39
+
40
+ def self.escape_template(v)
41
+ v.chomp.gsub("\n",'\n\\').gsub('"','\"')
42
+ end
20
43
 
21
- def self.eval(data,json)
44
+ def self.eval(str,json,opts={})
22
45
  require 'v8' unless defined? ::V8
23
46
  cxt = ::V8::Context.new
24
- cxt.eval('var locals='+json+'; for(var attrname in locals) {this[attrname] = locals[attrname]; }');
25
47
  cxt.load(File.dirname(__FILE__)+"/mustache.js")
26
- cxt.eval(data)
48
+ opts['views'] = '.' unless opts['views']
49
+ cxt['partials'] = Muj::Partials.new(opts['views'])
50
+ cxt.eval("var locals = #{json};")
51
+ r = cxt.eval(%Q{locals.__yield__ = Mustache.to_html("#{Muj.escape_template(str)}", locals, partials);})
52
+ if opts['layout']
53
+ layout = cxt['partials'].__read(opts['layout'])
54
+ r = cxt.eval(%Q{Mustache.to_html("#{Muj.escape_template(layout)}", locals, partials);})
55
+ end
56
+ r
27
57
  end
28
58
 
29
- def self.render(str,locals={})
30
- self.eval(str,locals.to_json)
59
+ def self.render(str,locals={},opts={})
60
+ self.eval(str,locals.to_json,opts)
31
61
  end
32
62
 
33
- def self.render_with_json(str,json)
34
- self.eval(str,json)
63
+ def self.render_with_json(str,json,opts={})
64
+ self.eval(str,json,opts)
35
65
  end
36
66
 
37
- def self.render_with_yaml(str,yml)
38
- require 'yaml' unless defined? YAML
39
- self.render(str,YAML.load(yml))
67
+ def self.render_with_yaml(str,yml,opts={})
68
+ self.render(str,YAML::load(yml),opts)
40
69
  end
41
70
  end
data/lib/mustache.js CHANGED
@@ -107,7 +107,11 @@ var Mustache = function() {
107
107
  render_partial: function(name, context, partials) {
108
108
  name = this.trim(name);
109
109
  if(!partials || partials[name] === undefined) {
110
- throw({message: "unknown_partial '" + name + "'"});
110
+ if (partials && partials['__exists'] && partials.__exists(name)) {
111
+ partials[name] = partials.__read(name);
112
+ } else {
113
+ throw({message: "unknown_partial '" + name + "'"});
114
+ }
111
115
  }
112
116
  if(typeof(context[name]) != "object") {
113
117
  return this.render(partials[name], context, partials, true);
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muj
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 27
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 1
9
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
10
11
  platform: ruby
11
12
  authors:
12
13
  - Foy Savas
@@ -14,16 +15,17 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-11-26 00:00:00 -05:00
18
- default_executable:
18
+ date: 2011-11-28 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: tilt
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
28
+ hash: 3
27
29
  segments:
28
30
  - 0
29
31
  version: "0"
@@ -33,9 +35,11 @@ dependencies:
33
35
  name: therubyracer
34
36
  prerelease: false
35
37
  requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
36
39
  requirements:
37
40
  - - ">="
38
41
  - !ruby/object:Gem::Version
42
+ hash: 3
39
43
  segments:
40
44
  - 0
41
45
  version: "0"
@@ -54,7 +58,6 @@ files:
54
58
  - lib/muj.rb
55
59
  - lib/mustache.js
56
60
  - bin/muj
57
- has_rdoc: true
58
61
  homepage: http://github.com/foysavas/muj
59
62
  licenses: []
60
63
 
@@ -64,23 +67,27 @@ rdoc_options: []
64
67
  require_paths:
65
68
  - lib
66
69
  required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
67
71
  requirements:
68
72
  - - ">="
69
73
  - !ruby/object:Gem::Version
74
+ hash: 3
70
75
  segments:
71
76
  - 0
72
77
  version: "0"
73
78
  required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
74
80
  requirements:
75
81
  - - ">="
76
82
  - !ruby/object:Gem::Version
83
+ hash: 3
77
84
  segments:
78
85
  - 0
79
86
  version: "0"
80
87
  requirements: []
81
88
 
82
89
  rubyforge_project:
83
- rubygems_version: 1.3.6
90
+ rubygems_version: 1.8.11
84
91
  signing_key:
85
92
  specification_version: 3
86
93
  summary: Muj is Mustache.js for Ruby and your command line.