superb 1.0.0

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 (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: []