mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-17 18:00:41 -07:00
Migrated from using-liquid-without-rails v1
@@ -0,0 +1,44 @@
|
||||
Want to use Liquid along with some plain old Ruby code? The secret is creating a <code>to_liquid</code> method on any classes you create.
|
||||
|
||||
Let's say you have a Product class:
|
||||
|
||||
<pre><code>class Product
|
||||
attr_accessor :name, :price
|
||||
def initialize(name,price)
|
||||
@name = name
|
||||
@price = price
|
||||
end
|
||||
end</code></pre>
|
||||
|
||||
And you have a chunk of text that you want to Liquidize by inserting some details about your products:
|
||||
|
||||
<pre><code>sentence = "I'm running to the store with {{ product.price }} dollars in my pocket to buy a {{ product.name }}."</code></pre>
|
||||
|
||||
And you create a product and parse the sentence:
|
||||
|
||||
<pre><code>my_purchase = Product.new('box of sausages', 20)
|
||||
puts Liquid::Template.parse(sentence).render('product' => my_purchase)</code></pre>
|
||||
|
||||
You excitedly execute your code expecting to see your beautiful new sentence, but instead you get:
|
||||
|
||||
<pre><code>I'm running to the store with Liquid error: undefined method `to_liquid' for #<Product:0x1388c08 @title="box of sausages", @price=20> dollars in my pocket to buy a Liquid error: undefined method `to_liquid' for #<Product:0x1388c08 @title="box of sausages", @price=20>.</code></pre>
|
||||
|
||||
to_liquid? Where did that come from? Turns out you need to add a method to your class that returns your instance variables as part of a hash. (Liquid was built to be very paranoid about not letting people access something they're not supposed to, so you need to explicitly let liquid know how to access everything in your object.) So we update the Product class description to include that method:
|
||||
|
||||
<pre><code>class Product
|
||||
attr_accessor :name, :price
|
||||
def initialize(name,price)
|
||||
@name = name
|
||||
@price = price
|
||||
end
|
||||
to_liquid
|
||||
{ :name => self.name,
|
||||
:prict => self.price }
|
||||
end
|
||||
end</code></pre>
|
||||
|
||||
Run that again and presto:
|
||||
|
||||
<pre><code>I'm running to the store with 20 dollars in my pocket to buy a box of sausages.</code></pre>
|
||||
|
||||
(Thanks to "Tom's":http://github.com/mojombo "Jekyll":http://github.com/mojombo/jekyll/tree/master/lib/jekyll/post.rb#L122-128 code for helping me figuring this out.)
|
||||
Reference in New Issue
Block a user