handlebars 0.0.1

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.
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in handlebars.gemspec
4
+ gemspec
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/handlebars/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "handlebars"
6
+ s.version = Handlebars::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ['Martin Schuerrer']
9
+ s.email = ['martin@schuerrer.org']
10
+ s.homepage = "http://github.com/MSch/handlebars-ruby"
11
+ s.summary = "handlebars.js port to ruby"
12
+ s.description = "A straight port of handlebars.js to ruby. Currently unfinished, if you've got a complete version let me know so I'll release the name to you"
13
+
14
+ s.required_rubygems_version = ">= 1.3.6"
15
+ s.rubyforge_project = "handlebars"
16
+
17
+ s.add_development_dependency "bundler", ">= 1.0.0"
18
+ s.add_development_dependency "rspec", ">= 2.0.0"
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
22
+ s.require_path = 'lib'
23
+ end
@@ -0,0 +1,30 @@
1
+ require 'handlebars/compiler'
2
+
3
+ class Handlebars
4
+ attr_accessor :compiled_partials
5
+ def compile(input)
6
+ end
7
+
8
+ def compile_to_string(input)
9
+ end
10
+
11
+ def compile_function_body(input)
12
+ end
13
+
14
+ def escape_text(input)
15
+ CGI.escapeHTML(input)
16
+ end
17
+
18
+ def escape_expression(input)
19
+ end
20
+
21
+
22
+ def compile_partials(input)
23
+ end
24
+
25
+ def parse_path(input)
26
+ end
27
+
28
+ def filter_output(input, escape=true)
29
+ end
30
+ end
@@ -0,0 +1,96 @@
1
+ require 'stringio'
2
+
3
+ class Handlebars
4
+ class Compiler
5
+ attr_accessor :input, :pointer, :mustache, :text, :fn, :newlines, :comment, :escaped, :partial, :inverted, :end_condition, :continue_inverted
6
+ def initialize(input)
7
+ @input = input
8
+ @pointer = -1
9
+ @mustache = false
10
+ @text = ''
11
+ @fn = 'out = ""; lookup = nil; '
12
+ @newlines = ''
13
+ @comment = false
14
+ @escaped = true
15
+ @partial = false
16
+ @inverted = false
17
+ @end_condition = nil
18
+ @continue_inverted = false
19
+ end
20
+
21
+ def add_text
22
+ if not @text.empty?
23
+ @fn << 'out = out + \'' + CGI.escapeHTML(@text) + '\''
24
+ @fn << @newlines
25
+ @newlines = ''
26
+ @text = ''
27
+ end
28
+ end
29
+
30
+ def parse_mustache
31
+ chr, part, mustache, param = nil
32
+ @s = StringScanner.new(input)
33
+
34
+ next_char = @s.peek
35
+ case next_char
36
+ when '!'
37
+ @comment = true
38
+ when '#'
39
+ @open_block = true
40
+ when '>'
41
+ @partial = true
42
+ when '^'
43
+ @inverted = true
44
+ @open_block = true
45
+ when '{'
46
+ @escaped = false
47
+ when '&'
48
+ @escaped = false
49
+ end
50
+ @s.getch
51
+
52
+ add_text
53
+ @mustache = ' '
54
+
55
+ while(chr = @s.getch)
56
+ if @mustache && chr == '}' && @s.peek == '}'
57
+ parts = @mustache.chomp.split(/\s+/)
58
+ mustache = parts[0]
59
+ param = lookup_for(parts[1])
60
+
61
+ @mustace = false
62
+
63
+ # finish reading off the close of the handlebars
64
+ @s.getch
65
+
66
+ # {{{expression}} is techically valid, but if we started with {{{ we'll try to read
67
+ # }}} off of the close of the handlebars
68
+ @s.getch if (!@escaped && @s.peek == '}')
69
+
70
+ if @comment
71
+ @comment = false
72
+ return
73
+ elsif @partial
74
+ add_partial(mustache, param)
75
+ return
76
+ elsif @inverted
77
+ add_inverted_section(mustache)
78
+ return
79
+ elsif @open_block
80
+ add_block(mustache, param, parts)
81
+ return
82
+ else
83
+ return this.add_expression(mustache, param)
84
+ end
85
+
86
+ @escaped = true
87
+ elsif @comment
88
+ ;
89
+ else
90
+ @mustace << chr
91
+ end
92
+ end
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,3 @@
1
+ module Handlebars
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,17 @@
1
+ require 'rspec'
2
+
3
+ # Requires supporting files with custom matchers and macros, etc,
4
+ # in ./support/ and its subdirectories.
5
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
6
+
7
+ RSpec.configure do |config|
8
+ # == Mock Framework
9
+ #
10
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
11
+ #
12
+ # config.mock_with :mocha
13
+ # config.mock_with :flexmock
14
+ # config.mock_with :rr
15
+ config.mock_with :rspec
16
+ end
17
+
@@ -0,0 +1,8 @@
1
+ require 'spec_helper'
2
+ require 'handlebars'
3
+
4
+ describe 'something' do
5
+ it 'instanziates Compiler' do
6
+ Handlebars::Compiler.new('')
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: handlebars
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Martin Schuerrer
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-09-10 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: bundler
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 1
30
+ - 0
31
+ - 0
32
+ version: 1.0.0
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rspec
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 2
45
+ - 0
46
+ - 0
47
+ version: 2.0.0
48
+ type: :development
49
+ version_requirements: *id002
50
+ description: A straight port of handlebars.js to ruby. Currently unfinished, if you've got a complete version let me know so I'll release the name to you
51
+ email:
52
+ - martin@schuerrer.org
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files: []
58
+
59
+ files:
60
+ - .gitignore
61
+ - Gemfile
62
+ - Rakefile
63
+ - handlebars.gemspec
64
+ - lib/handlebars.rb
65
+ - lib/handlebars/compiler.rb
66
+ - lib/handlebars/version.rb
67
+ - spec/spec_helper.rb
68
+ - spec/test_spec.rb
69
+ has_rdoc: true
70
+ homepage: http://github.com/MSch/handlebars-ruby
71
+ licenses: []
72
+
73
+ post_install_message:
74
+ rdoc_options: []
75
+
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ segments:
92
+ - 1
93
+ - 3
94
+ - 6
95
+ version: 1.3.6
96
+ requirements: []
97
+
98
+ rubyforge_project: handlebars
99
+ rubygems_version: 1.3.7
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: handlebars.js port to ruby
103
+ test_files: []
104
+