to_xoxo

Any object can be serialized as an XOXO document easily with the #to_xoxo method.

String

"This is an example".to_xoxo

serializes to:

<ol class="xoxo">
  <li>This is an example</li>
</ol>

Array

["one", "two", "three"].to_xoxo

serializes to:

<ol class="xoxo">
  <li>one</li>
  <li>two</li>
  <li>three</li>
</ol>

Hash

{"one"=>1, "two"=>2, "three"=>3}.to_xoxo

With some implementations of Ruby Hash order is not preserved. So,

@_.assert.include?('<ol class="xoxo">')
@_.assert.include?('<dt>one</dt><dd>1</dd>')
@_.assert.include?('<dt>two</dt><dd>2</dd>')
@_.assert.include?('<dt>three</dt><dd>3</dd>')

It would otherwise look like this:

<ol class="xoxo">
<li>
  <dl>
  <dt>a</dt><dd>1</dd>
  <dt>b</dt><dd>2</dd>
  <dt>c</dt><dd>3</dd>
  </dl>
</li>
</ol>

Struct

c = Struct.new(:a, :b, :c)
s = c.new(1,2,3)

s.to_xoxo

With some implementations of Ruby Stuct order is not preserved. So,

@_.assert.include?('<ol class="xoxo">')
@_.assert.include?('<dt>a</dt><dd>1</dd>')
@_.assert.include?('<dt>b</dt><dd>2</dd>')
@_.assert.include?('<dt>c</dt><dd>3</dd>')

It would otherwise look like this:

<ol class="xoxo">
<li>
  <dl>
  <dt>a</dt><dd>1</dd>
  <dt>b</dt><dd>2</dd>
  <dt>c</dt><dd>3</dd>
  </dl>
</li>
</ol>

Object

class C
  def initialize(a,b,c)
    @a, @b, @c = a, b, c
  end
end

c = C.new(1,2,3)

c.to_xoxo

Instance attributes are not stored in order. So

@_.assert.include?('<ol class="xoxo">')
@_.assert.include?('<dt>a</dt><dd>1</dd>')
@_.assert.include?('<dt>b</dt><dd>2</dd>')
@_.assert.include?('<dt>c</dt><dd>3</dd>')