yamler 0.1.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.
@@ -0,0 +1,28 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Classes
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Classes</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Classes</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/Yamler.html">Yamler</a><br />
24
+ <a href="classes/Yamler/Template.html">Yamler::Template</a><br />
25
+ </div>
26
+ </div>
27
+ </body>
28
+ </html>
@@ -0,0 +1,30 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Files
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Files</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Files</h1>
22
+ <div id="index-entries">
23
+ <a href="files/README.html">README</a><br />
24
+ <a href="files/lib/yamler_rb.html">lib/yamler.rb</a><br />
25
+ <a href="files/lib/yamler/template_rb.html">lib/yamler/template.rb</a><br />
26
+ <a href="files/lib/yamler/yamler_rb.html">lib/yamler/yamler.rb</a><br />
27
+ </div>
28
+ </div>
29
+ </body>
30
+ </html>
@@ -0,0 +1,31 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Methods
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Methods</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Methods</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/Yamler/Template.html#M000005">__FILE__ (Yamler::Template)</a><br />
24
+ <a href="classes/Yamler.html#M000001">load (Yamler)</a><br />
25
+ <a href="classes/Yamler/Template.html#M000002">new (Yamler::Template)</a><br />
26
+ <a href="classes/Yamler/Template.html#M000003">render (Yamler::Template)</a><br />
27
+ <a href="classes/Yamler/Template.html#M000004">require_yaml (Yamler::Template)</a><br />
28
+ </div>
29
+ </div>
30
+ </body>
31
+ </html>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
5
+
6
+ <!--
7
+
8
+ yamler
9
+
10
+ -->
11
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
12
+ <head>
13
+ <title>yamler</title>
14
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
15
+ </head>
16
+ <frameset rows="20%, 80%">
17
+ <frameset cols="25%,35%,45%">
18
+ <frame src="fr_file_index.html" title="Files" name="Files" />
19
+ <frame src="fr_class_index.html" name="Classes" />
20
+ <frame src="fr_method_index.html" name="Methods" />
21
+ </frameset>
22
+ <frame src="files/README.html" name="docwin" />
23
+ </frameset>
24
+ </html>
@@ -0,0 +1,208 @@
1
+
2
+ body {
3
+ font-family: Verdana,Arial,Helvetica,sans-serif;
4
+ font-size: 90%;
5
+ margin: 0;
6
+ margin-left: 40px;
7
+ padding: 0;
8
+ background: white;
9
+ }
10
+
11
+ h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
12
+ h1 { font-size: 150%; }
13
+ h2,h3,h4 { margin-top: 1em; }
14
+
15
+ a { background: #eef; color: #039; text-decoration: none; }
16
+ a:hover { background: #039; color: #eef; }
17
+
18
+ /* Override the base stylesheet's Anchor inside a table cell */
19
+ td > a {
20
+ background: transparent;
21
+ color: #039;
22
+ text-decoration: none;
23
+ }
24
+
25
+ /* and inside a section title */
26
+ .section-title > a {
27
+ background: transparent;
28
+ color: #eee;
29
+ text-decoration: none;
30
+ }
31
+
32
+ /* === Structural elements =================================== */
33
+
34
+ div#index {
35
+ margin: 0;
36
+ margin-left: -40px;
37
+ padding: 0;
38
+ font-size: 90%;
39
+ }
40
+
41
+
42
+ div#index a {
43
+ margin-left: 0.7em;
44
+ }
45
+
46
+ div#index .section-bar {
47
+ margin-left: 0px;
48
+ padding-left: 0.7em;
49
+ background: #ccc;
50
+ font-size: small;
51
+ }
52
+
53
+
54
+ div#classHeader, div#fileHeader {
55
+ width: auto;
56
+ color: white;
57
+ padding: 0.5em 1.5em 0.5em 1.5em;
58
+ margin: 0;
59
+ margin-left: -40px;
60
+ border-bottom: 3px solid #006;
61
+ }
62
+
63
+ div#classHeader a, div#fileHeader a {
64
+ background: inherit;
65
+ color: white;
66
+ }
67
+
68
+ div#classHeader td, div#fileHeader td {
69
+ background: inherit;
70
+ color: white;
71
+ }
72
+
73
+
74
+ div#fileHeader {
75
+ background: #057;
76
+ }
77
+
78
+ div#classHeader {
79
+ background: #048;
80
+ }
81
+
82
+
83
+ .class-name-in-header {
84
+ font-size: 180%;
85
+ font-weight: bold;
86
+ }
87
+
88
+
89
+ div#bodyContent {
90
+ padding: 0 1.5em 0 1.5em;
91
+ }
92
+
93
+ div#description {
94
+ padding: 0.5em 1.5em;
95
+ background: #efefef;
96
+ border: 1px dotted #999;
97
+ }
98
+
99
+ div#description h1,h2,h3,h4,h5,h6 {
100
+ color: #125;;
101
+ background: transparent;
102
+ }
103
+
104
+ div#validator-badges {
105
+ text-align: center;
106
+ }
107
+ div#validator-badges img { border: 0; }
108
+
109
+ div#copyright {
110
+ color: #333;
111
+ background: #efefef;
112
+ font: 0.75em sans-serif;
113
+ margin-top: 5em;
114
+ margin-bottom: 0;
115
+ padding: 0.5em 2em;
116
+ }
117
+
118
+
119
+ /* === Classes =================================== */
120
+
121
+ table.header-table {
122
+ color: white;
123
+ font-size: small;
124
+ }
125
+
126
+ .type-note {
127
+ font-size: small;
128
+ color: #DEDEDE;
129
+ }
130
+
131
+ .xxsection-bar {
132
+ background: #eee;
133
+ color: #333;
134
+ padding: 3px;
135
+ }
136
+
137
+ .section-bar {
138
+ color: #333;
139
+ border-bottom: 1px solid #999;
140
+ margin-left: -20px;
141
+ }
142
+
143
+
144
+ .section-title {
145
+ background: #79a;
146
+ color: #eee;
147
+ padding: 3px;
148
+ margin-top: 2em;
149
+ margin-left: -30px;
150
+ border: 1px solid #999;
151
+ }
152
+
153
+ .top-aligned-row { vertical-align: top }
154
+ .bottom-aligned-row { vertical-align: bottom }
155
+
156
+ /* --- Context section classes ----------------------- */
157
+
158
+ .context-row { }
159
+ .context-item-name { font-family: monospace; font-weight: bold; color: black; }
160
+ .context-item-value { font-size: small; color: #448; }
161
+ .context-item-desc { color: #333; padding-left: 2em; }
162
+
163
+ /* --- Method classes -------------------------- */
164
+ .method-detail {
165
+ background: #efefef;
166
+ padding: 0;
167
+ margin-top: 0.5em;
168
+ margin-bottom: 1em;
169
+ border: 1px dotted #ccc;
170
+ }
171
+ .method-heading {
172
+ color: black;
173
+ background: #ccc;
174
+ border-bottom: 1px solid #666;
175
+ padding: 0.2em 0.5em 0 0.5em;
176
+ }
177
+ .method-signature { color: black; background: inherit; }
178
+ .method-name { font-weight: bold; }
179
+ .method-args { font-style: italic; }
180
+ .method-description { padding: 0 0.5em 0 0.5em; }
181
+
182
+ /* --- Source code sections -------------------- */
183
+
184
+ a.source-toggle { font-size: 90%; }
185
+ div.method-source-code {
186
+ background: #262626;
187
+ color: #ffdead;
188
+ margin: 1em;
189
+ padding: 0.5em;
190
+ border: 1px dashed #999;
191
+ overflow: hidden;
192
+ }
193
+
194
+ div.method-source-code pre { color: #ffdead; overflow: hidden; }
195
+
196
+ /* --- Ruby keyword styles --------------------- */
197
+
198
+ .standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
199
+
200
+ .ruby-constant { color: #7fffd4; background: transparent; }
201
+ .ruby-keyword { color: #00ffff; background: transparent; }
202
+ .ruby-ivar { color: #eedd82; background: transparent; }
203
+ .ruby-operator { color: #00ffee; background: transparent; }
204
+ .ruby-identifier { color: #ffdead; background: transparent; }
205
+ .ruby-node { color: #ffa07a; background: transparent; }
206
+ .ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
207
+ .ruby-regexp { color: #ffa07a; background: transparent; }
208
+ .ruby-value { color: #7fffd4; background: transparent; }
@@ -0,0 +1,7 @@
1
+ require 'erb'
2
+ require 'yaml'
3
+ require 'fileutils'
4
+
5
+ Dir.glob(File.join(File.dirname(__FILE__), 'yamler', '**/*.rb')).each do |f|
6
+ require f
7
+ end
@@ -0,0 +1,67 @@
1
+ module Yamler
2
+
3
+ class Template
4
+
5
+ # The path of the YAML file to be rendered
6
+ attr_accessor :path
7
+ # Options that are available to the YAML file.
8
+ attr_accessor :options
9
+
10
+ # Takes the path to the YAML file you wish to render.
11
+ # An optional <tt>Hash</tt> of options can be passed in.
12
+ # These options are available via the <tt>options</tt> accessor.
13
+ # If there is a <tt>Hash</tt> in the <tt>options</tt> called
14
+ # <tt>:locals</tt> then the keys of that <tt>Hash are available</tt>
15
+ # as local methods.
16
+ #
17
+ # Examples:
18
+ # Yamler::Template.new('/path/to/file.yml', {:locals => {:username => 'markbates'}, :foo => :bar})
19
+ #
20
+ # # in file.yml:
21
+ # username: <%= username %> # => 'markbates'
22
+ # foo: <%= options[:foo] %> # => :bar
23
+ def initialize(path, options = {})
24
+ self.path = File.expand_path(path)
25
+ self.options = options
26
+ end
27
+
28
+ # Runs the YAML file through ERB using either the current
29
+ # templates <tt>binding</tt> or the specified one. This
30
+ # method returns a string and <i>NOT</i> a YAML object.
31
+ def render(b = binding)
32
+ res = ERB.new(File.read(self.path)).result(b)
33
+ res
34
+ end
35
+
36
+ def method_missing(sym, *args) # :nodoc:
37
+ raise NoMethodError.new(sym.to_s) if self.options[:locals].nil? || self.options[:locals][sym].nil?
38
+ return self.options[:locals][sym]
39
+ end
40
+
41
+ # Requires another YAML file from inside the current YAML file. The contents
42
+ # of the required YAML file will be run through ERB with the binding of the
43
+ # requiring YAML file and it's output will be appended to the calling YAML file.
44
+ # The '.yml' extension is optional. It will be added on if the extension
45
+ # is blank. If the file does not exist, it will look for it in the current
46
+ # directory. If it does not exist there it will raise an error.
47
+ #
48
+ # Examples:
49
+ # <%= require_yaml('foo') %> # => <current_yml_files_directory>/foo.yml
50
+ # <%= require_yaml('foo.yml') %> # => <current_yml_files_directory>/foo.yml
51
+ # <%= require_yaml('/usr/foo.yml') %> # => /usr/foo.yml
52
+ def require_yaml(path)
53
+ path = File.extname(path) == '' ? "#{path}.yml" : path
54
+ unless File.exists?(path)
55
+ path = File.expand_path(File.join(File.dirname(self.path), path))
56
+ end
57
+ Yamler::Template.new(path).render(binding)
58
+ end
59
+
60
+ # Returns the path of the current YAML file.
61
+ def __FILE__
62
+ self.path
63
+ end
64
+
65
+ end
66
+
67
+ end
@@ -0,0 +1,35 @@
1
+ module Yamler
2
+
3
+ class << self
4
+
5
+ # Mimics <tt>YAML#load</tt>, except that it creates a new <tt>Yamler::Template</tt>
6
+ # class and calls the <tt>render</tt> method on <tt>Yamler::Template</tt>.
7
+ #
8
+ # An optional <tt>Hash</tt> of options can be passed in. See <tt>Yamler::Template</tt>
9
+ # for more information.
10
+ #
11
+ # If a block is passed in the contents of that block will be made available to
12
+ # ERB when the rendering occurs.
13
+ #
14
+ # Examples:
15
+ # # Renders said file through ERB, and then through YAML.load:
16
+ # Yamler.load('/path/to/file.yml')
17
+ #
18
+ # # Does the same as above but makes a method called say_hi
19
+ # # available to the binding of the Yamler::Template instance.
20
+ # Yamler.load('/path/to/file.yml') do
21
+ # def say_hi
22
+ # 'hi'
23
+ # end
24
+ # end
25
+ def load(path, options = {}, &block)
26
+ template = Yamler::Template.new(path, options)
27
+ if block_given?
28
+ template.instance_eval(&block)
29
+ end
30
+ YAML.load(template.render)
31
+ end
32
+
33
+ end
34
+
35
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yamler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - markbates
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-02-20 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: "yamler was developed by: markbates"
17
+ email: mark@mackframework.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ files:
25
+ - lib/yamler/template.rb
26
+ - lib/yamler/yamler.rb
27
+ - lib/yamler.rb
28
+ - README
29
+ - doc/classes/Yamler/Template.html
30
+ - doc/classes/Yamler.html
31
+ - doc/created.rid
32
+ - doc/files/lib/yamler/template_rb.html
33
+ - doc/files/lib/yamler/yamler_rb.html
34
+ - doc/files/lib/yamler_rb.html
35
+ - doc/files/README.html
36
+ - doc/fr_class_index.html
37
+ - doc/fr_file_index.html
38
+ - doc/fr_method_index.html
39
+ - doc/index.html
40
+ - doc/rdoc-style.css
41
+ has_rdoc: true
42
+ homepage: http://www.mackframework.com
43
+ post_install_message:
44
+ rdoc_options: []
45
+
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ version:
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ requirements: []
61
+
62
+ rubyforge_project: magrathea
63
+ rubygems_version: 1.3.1
64
+ signing_key:
65
+ specification_version: 2
66
+ summary: yamler
67
+ test_files: []
68
+