superb 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/superb.rb +119 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 27d98aa64f3176041a62074f4918641a09cbfa39
4
+ data.tar.gz: f9de77a886b76456dd56adc6e918e88ee15b1dba
5
+ SHA512:
6
+ metadata.gz: d0e1cde07645b97fbbbb7a431600c0d9523fcea1e1e70e55a5548ebc0ea19cb7ee4ffd974c4a0b033c6b050f46df121bceaa6897c5d7a24dd456f6eb471cdcb5
7
+ data.tar.gz: 419d5e50ffd88064961d45bdbf2135940e01b616ec976b49696e4de04513e4565177a78d36600f90b4291c7a19d9d6cdf85de9fb714951e6b3d1afda1ebf9ef5
data/lib/superb.rb ADDED
@@ -0,0 +1,119 @@
1
+
2
+ require 'erb'
3
+
4
+ module Superb
5
+
6
+ module AttributeMagic
7
+
8
+ def key_name_for(k)
9
+ k.to_s.gsub(/^@*/, "").to_sym
10
+ end
11
+ module_function :key_name_for
12
+
13
+ def field_name_for(k)
14
+ ("@" + k.to_s.gsub(/^@*/, "")).to_sym
15
+ end
16
+ module_function :field_name_for
17
+
18
+ def [](key)
19
+ self.instance_variable_get(field_name_for(key))
20
+ end
21
+
22
+ def []=(key, value)
23
+ self.instance_variable_set(field_name_for(key), value)
24
+ end
25
+
26
+ def method_missing(name, *args, &block)
27
+ name_str = name.to_s
28
+
29
+ if name_str.end_with? "="
30
+
31
+ self.[]=(name[0...-1].to_sym, *args, &block)
32
+ else
33
+ self.[](name, *args, &block)
34
+ end
35
+ end
36
+
37
+ def respond_to?(name)
38
+ # TODO: Should only return true when string can be
39
+ # used as a method name.
40
+ true
41
+ end
42
+
43
+ def merge!(hashable)
44
+ hashable.to_hash.each do |k, v|
45
+ self[k] = v
46
+ end
47
+
48
+ return self
49
+ end
50
+
51
+ def merge(hashable)
52
+ self.dup.merge!(hashable)
53
+ end
54
+
55
+ def to_hash
56
+ retval = {}
57
+ instance_variables.each do |k|
58
+ retval[key_name_for(k)] = self.instance_variable_get(k)
59
+ end
60
+
61
+ return retval
62
+ end
63
+
64
+ end
65
+
66
+
67
+ # A Context instance is a container for instance
68
+ # variables. These variables can then be applied
69
+ # to an ERB template.
70
+ class Context
71
+ include AttributeMagic
72
+
73
+ def initialize(options = {})
74
+ self.merge!(options)
75
+ end
76
+
77
+ def dup
78
+ Superb::Context.new(self.to_hash)
79
+ end
80
+
81
+ def apply_to(template)
82
+ template.result(binding)
83
+ end
84
+
85
+ end
86
+
87
+
88
+
89
+ # Templates are bound to a specific ERB instance.
90
+ # They maintain their own state, but they also allow
91
+ # for individual values to be overridden when being
92
+ # rendered.
93
+ class Template
94
+ include AttributeMagic
95
+
96
+ attr_accessor :__erb
97
+
98
+ def initialize(erb, options = {})
99
+ @__erb = erb
100
+ self.merge!(options)
101
+ end
102
+
103
+ def dup
104
+ Superb::Template.new(@__erb, self.to_hash)
105
+ end
106
+
107
+ def render(options = {})
108
+ c = Superb::Context.new(self.to_hash)
109
+ c.merge!(options)
110
+ c.apply_to(@__erb)
111
+ end
112
+ end
113
+
114
+
115
+
116
+
117
+
118
+ end
119
+
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: superb
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brian Lauber
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-22 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A supERB template helper for ERB!
14
+ email: constructible.truth@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/superb.rb
20
+ homepage: https://github.com/briandamaged/superb
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.0.3
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: A supERB template helper for ERB!
44
+ test_files: []