marble 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.
- data/.autotest +9 -0
- data/.gitignore +19 -0
- data/.travis.yml +6 -0
- data/.yardopts +3 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +93 -0
- data/LICENSE +20 -0
- data/README.md +82 -0
- data/Rakefile +20 -0
- data/lib/marble.rb +274 -0
- data/lib/marble/rails_template_handler.rb +43 -0
- data/lib/marble/version.rb +4 -0
- data/marble.gemspec +29 -0
- data/test/rails/.autotest +5 -0
- data/test/rails/.gitignore +17 -0
- data/test/rails/Gemfile +11 -0
- data/test/rails/Gemfile.lock +87 -0
- data/test/rails/README.md +1 -0
- data/test/rails/Rakefile +4 -0
- data/test/rails/app/controllers/application_controller.rb +2 -0
- data/test/rails/app/controllers/test_controller.rb +6 -0
- data/test/rails/app/views/test/index.json.marble +4 -0
- data/test/rails/app/views/test/index.yaml.marble +4 -0
- data/test/rails/config.ru +4 -0
- data/test/rails/config/application.rb +15 -0
- data/test/rails/config/boot.rb +6 -0
- data/test/rails/config/environment.rb +5 -0
- data/test/rails/config/environments/development.rb +9 -0
- data/test/rails/config/environments/production.rb +9 -0
- data/test/rails/config/environments/test.rb +9 -0
- data/test/rails/config/initializers/secret_token.rb +1 -0
- data/test/rails/config/initializers/session_store.rb +1 -0
- data/test/rails/config/routes.rb +3 -0
- data/test/rails/public/404.html +26 -0
- data/test/rails/public/422.html +26 -0
- data/test/rails/public/500.html +26 -0
- data/test/rails/public/favicon.ico +0 -0
- data/test/rails/public/robots.txt +5 -0
- data/test/rails/script/rails +6 -0
- data/test/rails/test/integration/marble_test.rb +13 -0
- data/test/rails/test/test_helper.rb +3 -0
- data/test/test_helper.rb +7 -0
- data/test/test_marble.rb +127 -0
- metadata +204 -0
data/.autotest
ADDED
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/.yardopts
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
marble (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ZenTest (4.5.0)
|
10
|
+
abstract (1.0.0)
|
11
|
+
actionmailer (3.0.5)
|
12
|
+
actionpack (= 3.0.5)
|
13
|
+
mail (~> 2.2.15)
|
14
|
+
actionpack (3.0.5)
|
15
|
+
activemodel (= 3.0.5)
|
16
|
+
activesupport (= 3.0.5)
|
17
|
+
builder (~> 2.1.2)
|
18
|
+
erubis (~> 2.6.6)
|
19
|
+
i18n (~> 0.4)
|
20
|
+
rack (~> 1.2.1)
|
21
|
+
rack-mount (~> 0.6.13)
|
22
|
+
rack-test (~> 0.5.7)
|
23
|
+
tzinfo (~> 0.3.23)
|
24
|
+
activemodel (3.0.5)
|
25
|
+
activesupport (= 3.0.5)
|
26
|
+
builder (~> 2.1.2)
|
27
|
+
i18n (~> 0.4)
|
28
|
+
activerecord (3.0.5)
|
29
|
+
activemodel (= 3.0.5)
|
30
|
+
activesupport (= 3.0.5)
|
31
|
+
arel (~> 2.0.2)
|
32
|
+
tzinfo (~> 0.3.23)
|
33
|
+
activeresource (3.0.5)
|
34
|
+
activemodel (= 3.0.5)
|
35
|
+
activesupport (= 3.0.5)
|
36
|
+
activesupport (3.0.5)
|
37
|
+
arel (2.0.9)
|
38
|
+
autotest (4.4.6)
|
39
|
+
ZenTest (>= 4.4.1)
|
40
|
+
builder (2.1.2)
|
41
|
+
erubis (2.6.6)
|
42
|
+
abstract (>= 1.0.0)
|
43
|
+
i18n (0.5.0)
|
44
|
+
json (1.5.1)
|
45
|
+
mail (2.2.15)
|
46
|
+
activesupport (>= 2.3.6)
|
47
|
+
i18n (>= 0.4.0)
|
48
|
+
mime-types (~> 1.16)
|
49
|
+
treetop (~> 1.4.8)
|
50
|
+
maruku (0.6.0)
|
51
|
+
syntax (>= 1.0.0)
|
52
|
+
mime-types (1.16)
|
53
|
+
minitest (2.1.0)
|
54
|
+
mocha (0.9.12)
|
55
|
+
polyglot (0.3.1)
|
56
|
+
rack (1.2.2)
|
57
|
+
rack-mount (0.6.13)
|
58
|
+
rack (>= 1.0.0)
|
59
|
+
rack-test (0.5.7)
|
60
|
+
rack (>= 1.0)
|
61
|
+
rails (3.0.5)
|
62
|
+
actionmailer (= 3.0.5)
|
63
|
+
actionpack (= 3.0.5)
|
64
|
+
activerecord (= 3.0.5)
|
65
|
+
activeresource (= 3.0.5)
|
66
|
+
activesupport (= 3.0.5)
|
67
|
+
bundler (~> 1.0)
|
68
|
+
railties (= 3.0.5)
|
69
|
+
railties (3.0.5)
|
70
|
+
actionpack (= 3.0.5)
|
71
|
+
activesupport (= 3.0.5)
|
72
|
+
rake (>= 0.8.7)
|
73
|
+
thor (~> 0.14.4)
|
74
|
+
rake (0.8.7)
|
75
|
+
syntax (1.0.0)
|
76
|
+
thor (0.14.6)
|
77
|
+
treetop (1.4.9)
|
78
|
+
polyglot (>= 0.3.1)
|
79
|
+
tzinfo (0.3.25)
|
80
|
+
yard (0.6.8)
|
81
|
+
|
82
|
+
PLATFORMS
|
83
|
+
ruby
|
84
|
+
|
85
|
+
DEPENDENCIES
|
86
|
+
autotest (~> 4.4)
|
87
|
+
json (~> 1.5)
|
88
|
+
marble!
|
89
|
+
maruku (~> 0.6)
|
90
|
+
minitest (~> 2.0)
|
91
|
+
mocha (~> 0.9)
|
92
|
+
rails (= 3.0.5)
|
93
|
+
yard (~> 0.6)
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Alexander Kern
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# marble [](http://stillmaintained.com/CapnKernul/marble) [](http://travis-ci.org/CapnKernul/marble) #
|
2
|
+
|
3
|
+
Marble is a Ruby object builder. It makes generating complex Ruby objects, and
|
4
|
+
by extension JSON and YAML, much more readable. It's especially useful for Rails
|
5
|
+
JSON API templates.
|
6
|
+
|
7
|
+
## Installation ##
|
8
|
+
|
9
|
+
Marble works both with and without Rails. Installation is as simple as adding
|
10
|
+
this line to your `Gemfile`:
|
11
|
+
|
12
|
+
gem 'marble'
|
13
|
+
|
14
|
+
If you'd like to use marble without bundler, you can also directly install the
|
15
|
+
gem:
|
16
|
+
|
17
|
+
gem install marble
|
18
|
+
|
19
|
+
## Usage ##
|
20
|
+
|
21
|
+
First, require marble and create a builder.
|
22
|
+
|
23
|
+
require 'marble'
|
24
|
+
builder = Marble.new
|
25
|
+
|
26
|
+
This builder can build any Ruby object using the `#build` method. The yielded
|
27
|
+
value is the current builder:
|
28
|
+
|
29
|
+
builder.build do |m|
|
30
|
+
['foo']
|
31
|
+
end # => ['foo']
|
32
|
+
|
33
|
+
However, this isn't very useful. The `#array` and `#hash` methods are far more
|
34
|
+
interesting. They allow you to build complex arrays and hashes in a minimal
|
35
|
+
amount of lines:
|
36
|
+
|
37
|
+
builder.array do |m|
|
38
|
+
m.item 'foo'
|
39
|
+
end # => ['foo']
|
40
|
+
|
41
|
+
builder.hash do |m|
|
42
|
+
m.foo 'bar'
|
43
|
+
end # => { 'foo' => 'bar' }
|
44
|
+
|
45
|
+
The returned value can be converted to JSON and YAML, giving you a really
|
46
|
+
concise way of creating JSON and YAML templates for API's.
|
47
|
+
|
48
|
+
See the `Marble` documentation for more details.
|
49
|
+
|
50
|
+
## Usage with Rails ##
|
51
|
+
|
52
|
+
Marble provides a template handler for Rails. It supports object literal, JSON,
|
53
|
+
and YAML output formats. Name your view template with the extension `marble`.
|
54
|
+
The template creates a builder with the name `marble` for you to use. You can
|
55
|
+
rename it using the block parameter. For example, in order to generate a JSON
|
56
|
+
view:
|
57
|
+
|
58
|
+
# view_name.json.marble
|
59
|
+
marble.hash do |m|
|
60
|
+
m.foo 'bar'
|
61
|
+
end
|
62
|
+
|
63
|
+
# Renders: {"foo": "bar"}
|
64
|
+
|
65
|
+
See the `Marble::RailsTemplateHandler` documentation for more details.
|
66
|
+
|
67
|
+
## Note on Patches/Pull Requests ##
|
68
|
+
|
69
|
+
* Fork the project.
|
70
|
+
* Make your feature addition or bug fix.
|
71
|
+
* Add tests for it. This is important so I don't break it in a future version unintentionally.
|
72
|
+
* Commit, but do not mess with the `Rakefile`. If you want to have your own version, that is fine but bump the version in a commit by itself in another branch so I can ignore it when I pull.
|
73
|
+
* Send me a pull request. Bonus points for git flow feature branches.
|
74
|
+
|
75
|
+
## Resources ##
|
76
|
+
|
77
|
+
* [GitHub Repository](https://github.com/CapnKernul/marble)
|
78
|
+
* [Documentation](http://rubydoc.info/github/CapnKernul/marble)
|
79
|
+
|
80
|
+
## License ##
|
81
|
+
|
82
|
+
Marble is licensed under the MIT License. See `LICENSE` for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
task :default => 'test:unit'
|
5
|
+
|
6
|
+
task :test => ['test:unit', 'test:rails']
|
7
|
+
|
8
|
+
require 'rake/testtask'
|
9
|
+
Rake::TestTask.new('test:unit') do |t|
|
10
|
+
t.ruby_opts += ['-rubygems']
|
11
|
+
t.libs << 'test'
|
12
|
+
t.pattern = 'test/test_*.rb'
|
13
|
+
end
|
14
|
+
|
15
|
+
task 'test:rails' do
|
16
|
+
sh <<-CMD
|
17
|
+
cd test/rails
|
18
|
+
rake
|
19
|
+
CMD
|
20
|
+
end
|
data/lib/marble.rb
ADDED
@@ -0,0 +1,274 @@
|
|
1
|
+
# Builder for Ruby objects. Provides a convenient interface for generating
|
2
|
+
# complex arrays and hashes.
|
3
|
+
#
|
4
|
+
# First instantiate a builder:
|
5
|
+
#
|
6
|
+
# builder = Marble.new
|
7
|
+
#
|
8
|
+
# Then, call either `#build`, `#array`, or `#hash` on the builder. You can use
|
9
|
+
# the yielded block parameter to give the builder a shorter name. I suggest `m`.
|
10
|
+
#
|
11
|
+
# builder.hash do |m|
|
12
|
+
# m.zombies 'oh my!'
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# The returned value is the built object.
|
16
|
+
class Marble
|
17
|
+
# Builds an arbitrary value.
|
18
|
+
#
|
19
|
+
# @example Build a simple value
|
20
|
+
# builder = Marble.new
|
21
|
+
# builder.build do |m|
|
22
|
+
# true
|
23
|
+
# end # => true
|
24
|
+
#
|
25
|
+
# @example Build a more complex value
|
26
|
+
# builder = Marble.new
|
27
|
+
# builder.build do |m|
|
28
|
+
# m.array do
|
29
|
+
# m.item 'foo'
|
30
|
+
# end
|
31
|
+
# end # => ['foo']
|
32
|
+
#
|
33
|
+
# @yield [builder] block to evaluate for the value
|
34
|
+
# @yieldparam builder [Marble] the current builder
|
35
|
+
# @return [Object] the built value
|
36
|
+
def build(&block)
|
37
|
+
value_structure(&block)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Builds a hash.
|
41
|
+
#
|
42
|
+
# @example Build a simple hash
|
43
|
+
# builder = Marble.new
|
44
|
+
# builder.hash do |m|
|
45
|
+
# m.foo 'bar'
|
46
|
+
# m.baz 'quz'
|
47
|
+
# end # => { 'foo' => 'bar', 'baz' => 'quz' }
|
48
|
+
#
|
49
|
+
# @example Build nested hashes
|
50
|
+
# builder = Marble.new
|
51
|
+
# builder.hash do |m|
|
52
|
+
# m.foo :hash do
|
53
|
+
# m.bar 'baz'
|
54
|
+
# end
|
55
|
+
# end # => { 'foo' => { 'bar' => 'baz' } }
|
56
|
+
#
|
57
|
+
# @yield [builder] block to evaluate within the hash's context
|
58
|
+
# @yieldparam builder [Marble] the current builder
|
59
|
+
# @return [Hash] the built hash
|
60
|
+
def hash(&block)
|
61
|
+
insert_structure({}, &block)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Builds an array.
|
65
|
+
#
|
66
|
+
# @example Build a simple array
|
67
|
+
# builder = Marble.new
|
68
|
+
# builder.array do |m|
|
69
|
+
# m.item 'foo'
|
70
|
+
# m.item 'bar'
|
71
|
+
# end # => ['foo', 'bar']
|
72
|
+
#
|
73
|
+
# @example Build nested arrays
|
74
|
+
# builder = Marble.new
|
75
|
+
# builder.array do |m|
|
76
|
+
# m.item :array do
|
77
|
+
# m.item 'foo'
|
78
|
+
# end
|
79
|
+
# end # => [['foo']]
|
80
|
+
#
|
81
|
+
# @yield [builder] block to evaluate within the array's context
|
82
|
+
# @yieldparam builder [Marble] the current builder
|
83
|
+
# @return [Array] the built array
|
84
|
+
def array(&block)
|
85
|
+
insert_structure([], &block)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Calls `#pair` or `#key` depending on the context.
|
89
|
+
#
|
90
|
+
# When the current structure responds to `#push` (for example, in an array
|
91
|
+
# context), it calls `#item` ignoring the method name. This allows you to be
|
92
|
+
# more semantic when defining the items in an array. However, in most cases
|
93
|
+
# calling `#item` will suffice.
|
94
|
+
#
|
95
|
+
# When the current structure responds to `#[]=` (for example, in a hash
|
96
|
+
# context), it calls `#pair` with the stringified method name as the key.
|
97
|
+
# This, in general, is a more concise and preferred way than explicitly
|
98
|
+
# calling `#pair`.
|
99
|
+
#
|
100
|
+
# @example Build an array
|
101
|
+
# builder = Marble.new
|
102
|
+
# builder.array do |m|
|
103
|
+
# m.milk 'toast'
|
104
|
+
# end # => ['foo', 'bar']
|
105
|
+
#
|
106
|
+
# @example Build a hash
|
107
|
+
# builder = Marble.new
|
108
|
+
# builder.hash do |m|
|
109
|
+
# m.milk 'toast'
|
110
|
+
# end # => { 'milk' => 'toast' }
|
111
|
+
def method_missing(method, *args, &block)
|
112
|
+
if @current.respond_to?(:push)
|
113
|
+
item(*args, &block)
|
114
|
+
elsif @current.respond_to?(:[]=)
|
115
|
+
pair(method.to_s, *args, &block)
|
116
|
+
else
|
117
|
+
super
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# Inserts an item into the current structure.
|
122
|
+
#
|
123
|
+
# Arrays are the most common structure into which you insert an item (any
|
124
|
+
# value). Items are inserted using `#push`, so if you'd like to duck-type an
|
125
|
+
# array for whatever reason, go ahead.
|
126
|
+
#
|
127
|
+
# You can provide values using either the second parameter or a block. If you
|
128
|
+
# provide a block, the block will be evaluated immediately.
|
129
|
+
#
|
130
|
+
# Blocks by default insert the value of the block into the item. However, you
|
131
|
+
# can optionally specify the structure type of the block as either `:array` or
|
132
|
+
# `:hash` to insert an array or hash structure. That means that these are all
|
133
|
+
# equivalent:
|
134
|
+
#
|
135
|
+
# m.array do
|
136
|
+
# m.item ['value']
|
137
|
+
# end
|
138
|
+
#
|
139
|
+
# m.array do
|
140
|
+
# m.item do
|
141
|
+
# ['value']
|
142
|
+
# end
|
143
|
+
# end
|
144
|
+
#
|
145
|
+
# m.array do
|
146
|
+
# m.item :hash do
|
147
|
+
# m.pair 'key', 'value'
|
148
|
+
# end
|
149
|
+
# end
|
150
|
+
#
|
151
|
+
# Choose the format that makes the most sense in a given context.
|
152
|
+
#
|
153
|
+
# @overload item(value)
|
154
|
+
# @param value [Object] the value to insert into the item
|
155
|
+
# @overload item()
|
156
|
+
# @yield [builder] block to evaluate for the item's value
|
157
|
+
# @yieldparam builder [Marble] the current builder
|
158
|
+
# @yieldreturn [Object] the value to insert into the item
|
159
|
+
# @overload item(structure_type)
|
160
|
+
# @param structure_type [:array, :hash] the block's structure type
|
161
|
+
# @yield [builder] block to evaluate for the item's value
|
162
|
+
# @yieldparam builder [Marble] the current builder
|
163
|
+
# @yieldreturn [Object] the value to insert into the item
|
164
|
+
def item(value_or_structure_type = nil, &block)
|
165
|
+
if block_given?
|
166
|
+
@current.push evaluate_structure(value_or_structure_type, &block)
|
167
|
+
else
|
168
|
+
@current.push value_or_structure_type
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
# Inserts a pair into the current structure.
|
173
|
+
#
|
174
|
+
# Hashes are the most common structure into which you insert a pair (key and
|
175
|
+
# value). Pairs are inserted using `#[]=`, so if you'd like to duck-type a
|
176
|
+
# hash for whatever reason, go ahead.
|
177
|
+
#
|
178
|
+
# You can provide values using either the second parameter or a block. If you
|
179
|
+
# provide a block, the block will be evaluated immediately.
|
180
|
+
#
|
181
|
+
# Blocks by default insert the value of the block into the pair. However, you
|
182
|
+
# can optionally specify the structure type of the block as either `:array` or
|
183
|
+
# `:hash` to insert an array or hash structure. That means that these are all
|
184
|
+
# equivalent:
|
185
|
+
#
|
186
|
+
# m.hash do
|
187
|
+
# m.pair 'key', ['value']
|
188
|
+
# end
|
189
|
+
#
|
190
|
+
# m.hash do
|
191
|
+
# m.pair 'key' do
|
192
|
+
# ['value']
|
193
|
+
# end
|
194
|
+
# end
|
195
|
+
#
|
196
|
+
# m.hash do
|
197
|
+
# m.pair 'key', :array do
|
198
|
+
# m.item 'value'
|
199
|
+
# end
|
200
|
+
# end
|
201
|
+
#
|
202
|
+
# Choose the format that makes the most sense in a given context.
|
203
|
+
#
|
204
|
+
# @overload pair(key, value)
|
205
|
+
# @param key [Object] the key to use for the pair
|
206
|
+
# @param value [Object] the value to insert into the pair
|
207
|
+
# @overload pair(key)
|
208
|
+
# @param key [Object] the key to use for the pair
|
209
|
+
# @yield [builder] block to evaluate for the pair's value
|
210
|
+
# @yieldparam builder [Marble] the current builder
|
211
|
+
# @yieldreturn [Object] the value to insert into the pair
|
212
|
+
# @overload pair(key, structure_type)
|
213
|
+
# @param key [Object] the key to use for the pair
|
214
|
+
# @param structure_type [:array, :hash] the block's structure type
|
215
|
+
# @yield [builder] block to evaluate for the pair's value
|
216
|
+
# @yieldparam builder [Marble] the current builder
|
217
|
+
# @yieldreturn [Object] the value to insert into the pair
|
218
|
+
def pair(key, value_or_structure_type = nil, &block)
|
219
|
+
if block_given?
|
220
|
+
@current[key] = evaluate_structure(value_or_structure_type, &block)
|
221
|
+
else
|
222
|
+
@current[key] = value_or_structure_type
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
private
|
227
|
+
|
228
|
+
# Inserts a value structure.
|
229
|
+
#
|
230
|
+
# This is really only used as an easy way to insert into the current structure
|
231
|
+
# to whatever the block evaluates.
|
232
|
+
#
|
233
|
+
# @yield [builder] block to evaluate for the value
|
234
|
+
# @yieldparam builder [Marble] the current builder
|
235
|
+
def value_structure(&block)
|
236
|
+
insert_structure(nil, &block)
|
237
|
+
end
|
238
|
+
|
239
|
+
# Inserts a structure into the current structure.
|
240
|
+
#
|
241
|
+
# @param structure [Object] the new structure to insert
|
242
|
+
# @yield [builder] block to evaluate for the value
|
243
|
+
# @yieldparam builder [Marble] the current builder
|
244
|
+
def insert_structure(structure)
|
245
|
+
if block_given?
|
246
|
+
parent = @current
|
247
|
+
@current = structure
|
248
|
+
value = yield(self)
|
249
|
+
@current = parent
|
250
|
+
end
|
251
|
+
|
252
|
+
structure || value
|
253
|
+
end
|
254
|
+
|
255
|
+
# Convenience method for inserting the correct structure type based on a
|
256
|
+
# symbol.
|
257
|
+
#
|
258
|
+
# @param type [Symbol] the structure type
|
259
|
+
# @yield [builder] block to evaluate for the value
|
260
|
+
# @yieldparam builder [Marble] the current builder
|
261
|
+
def evaluate_structure(type, &block)
|
262
|
+
case type
|
263
|
+
when :hash then hash(&block)
|
264
|
+
when :array then array(&block)
|
265
|
+
else value_structure(&block)
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
require 'marble/version'
|
271
|
+
|
272
|
+
if defined? ActionView::Template
|
273
|
+
require 'marble/rails_template_handler'
|
274
|
+
end
|