representative 0.3.6 → 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.
- data/README.markdown +33 -5
- data/examples/{xml_demo.rb → books.rb} +15 -8
- data/lib/representative/json.rb +20 -20
- data/lib/representative/version.rb +1 -1
- data/spec/representative/xml_behaviour.rb +32 -18
- metadata +78 -86
- data/examples/json_demo.rb +0 -44
    
        data/README.markdown
    CHANGED
    
    | @@ -11,23 +11,23 @@ Generating XML | |
| 11 11 | 
             
            Given a Ruby data-structure:
         | 
| 12 12 |  | 
| 13 13 | 
             
                @books = [
         | 
| 14 | 
            -
                   | 
| 14 | 
            +
                  Book.new(
         | 
| 15 15 | 
             
                    :title => "Sailing for old dogs", 
         | 
| 16 16 | 
             
                    :authors => ["Jim Watson"],
         | 
| 17 | 
            -
                    :published =>  | 
| 17 | 
            +
                    :published => Publication.new(
         | 
| 18 18 | 
             
                      :by => "Credulous Print",
         | 
| 19 19 | 
             
                      :year => 1994
         | 
| 20 20 | 
             
                    )
         | 
| 21 21 | 
             
                  ),
         | 
| 22 | 
            -
                   | 
| 22 | 
            +
                  Book.new(
         | 
| 23 23 | 
             
                    :title => "On the horizon", 
         | 
| 24 24 | 
             
                    :authors => ["Zoe Primpton", "Stan Ford"],
         | 
| 25 | 
            -
                    :published =>  | 
| 25 | 
            +
                    :published => Publication.new(
         | 
| 26 26 | 
             
                      :by => "McGraw-Hill",
         | 
| 27 27 | 
             
                      :year => 2005
         | 
| 28 28 | 
             
                    )
         | 
| 29 29 | 
             
                  ),
         | 
| 30 | 
            -
                   | 
| 30 | 
            +
                  Book.new(
         | 
| 31 31 | 
             
                    :title => "The Little Blue Book of VHS Programming",
         | 
| 32 32 | 
             
                    :authors => ["Henry Nelson"],
         | 
| 33 33 | 
             
                    :rating => "****"
         | 
| @@ -152,7 +152,35 @@ Representative is packaged as a Gem.  Install with: | |
| 152 152 |  | 
| 153 153 | 
             
                gem install representative
         | 
| 154 154 |  | 
| 155 | 
            +
            Ruby on Rails integration
         | 
| 156 | 
            +
            -------------------------
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            A separate gem, [RepresentativeView](https://github.com/mdub/representative_view), integrates Representative as an ActionPack template format.
         | 
| 159 | 
            +
             | 
| 160 | 
            +
            Tilt integration
         | 
| 161 | 
            +
            ----------------
         | 
| 162 | 
            +
             | 
| 163 | 
            +
            Representative includes integration with [Tilt](https://github.com/rtomayko/tilt), which can be enabled with:
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                require "representative/tilt_integration"
         | 
| 166 | 
            +
             | 
| 167 | 
            +
            This registers handlers for "`.xml.rep`" and "`.json.rep`" templates.
         | 
| 168 | 
            +
             | 
| 155 169 | 
             
            Copyright
         | 
| 156 170 | 
             
            ---------
         | 
| 157 171 |  | 
| 158 172 | 
             
            Copyright (c) 2009 Mike Williams. See LICENSE for details.
         | 
| 173 | 
            +
             | 
| 174 | 
            +
            Similar projects
         | 
| 175 | 
            +
            ----------------
         | 
| 176 | 
            +
             | 
| 177 | 
            +
            If Representative is not your cup of tea, you may prefer:
         | 
| 178 | 
            +
             | 
| 179 | 
            +
            * [Tokamak](https://github.com/abril/tokamak)
         | 
| 180 | 
            +
            * [Builder](http://rubygems.org/gems/builder)
         | 
| 181 | 
            +
            * [JSONify](https://github.com/bsiggelkow/jsonify)
         | 
| 182 | 
            +
            * [Argonaut](https://github.com/jbr/argonaut)
         | 
| 183 | 
            +
            * [JSON Builder](https://github.com/dewski/json_builder)
         | 
| 184 | 
            +
            * [RABL](https://github.com/nesquena/rabl)
         | 
| 185 | 
            +
             | 
| 186 | 
            +
            Just don't go back to using "`this_thing.to_xml`" and "`that_thing.to_json`", m'kay?
         | 
| @@ -1,12 +1,10 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            #! /usr/bin/env ruby
         | 
| 2 2 |  | 
| 3 | 
            -
            require "rubygems"
         | 
| 4 | 
            -
            require "representative/nokogiri"
         | 
| 5 3 | 
             
            require "ostruct"
         | 
| 6 4 |  | 
| 7 5 | 
             
            @books = [
         | 
| 8 6 | 
             
              OpenStruct.new(
         | 
| 9 | 
            -
                :title => "Sailing for old dogs", | 
| 7 | 
            +
                :title => "Sailing for old dogs",
         | 
| 10 8 | 
             
                :authors => ["Jim Watson"],
         | 
| 11 9 | 
             
                :published => OpenStruct.new(
         | 
| 12 10 | 
             
                  :by => "Credulous Print",
         | 
| @@ -14,7 +12,7 @@ require "ostruct" | |
| 14 12 | 
             
                )
         | 
| 15 13 | 
             
              ),
         | 
| 16 14 | 
             
              OpenStruct.new(
         | 
| 17 | 
            -
                :title => "On the horizon", | 
| 15 | 
            +
                :title => "On the horizon",
         | 
| 18 16 | 
             
                :authors => ["Zoe Primpton", "Stan Ford"],
         | 
| 19 17 | 
             
                :published => OpenStruct.new(
         | 
| 20 18 | 
             
                  :by => "McGraw-Hill",
         | 
| @@ -28,8 +26,10 @@ require "ostruct" | |
| 28 26 | 
             
              )
         | 
| 29 27 | 
             
            ]
         | 
| 30 28 |  | 
| 31 | 
            -
             | 
| 29 | 
            +
            require "representative/json"
         | 
| 30 | 
            +
            require "representative/nokogiri"
         | 
| 32 31 |  | 
| 32 | 
            +
            def represent_books(r)
         | 
| 33 33 | 
             
              r.list_of :books, @books do
         | 
| 34 34 | 
             
                r.element :title
         | 
| 35 35 | 
             
                r.list_of :authors
         | 
| @@ -38,7 +38,14 @@ xml = Representative::Nokogiri.new do |r| | |
| 38 38 | 
             
                  r.element :year
         | 
| 39 39 | 
             
                end
         | 
| 40 40 | 
             
              end
         | 
| 41 | 
            -
             | 
| 42 41 | 
             
            end
         | 
| 43 42 |  | 
| 44 | 
            -
            puts  | 
| 43 | 
            +
            puts "\n=== JSON ===\n\n"
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            json = Representative::Json.new.tap { |r| represent_books(r) }.to_s
         | 
| 46 | 
            +
            puts json
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            puts "\n=== XML ===\n\n"
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            xml = Representative::Nokogiri.new.tap { |r| represent_books(r) }.to_s
         | 
| 51 | 
            +
            puts xml
         | 
    
        data/lib/representative/json.rb
    CHANGED
    
    | @@ -3,11 +3,11 @@ require "representative/base" | |
| 3 3 | 
             
            require "multi_json"
         | 
| 4 4 |  | 
| 5 5 | 
             
            module Representative
         | 
| 6 | 
            -
             | 
| 6 | 
            +
             | 
| 7 7 | 
             
              class Json < Base
         | 
| 8 8 |  | 
| 9 9 | 
             
                DEFAULT_ATTRIBUTE_PREFIX = "@".freeze
         | 
| 10 | 
            -
             | 
| 10 | 
            +
             | 
| 11 11 | 
             
                def initialize(subject = nil, options = {})
         | 
| 12 12 | 
             
                  super(subject, options)
         | 
| 13 13 | 
             
                  @buffer = ""
         | 
| @@ -16,19 +16,19 @@ module Representative | |
| 16 16 | 
             
                  now_at :beginning_of_buffer
         | 
| 17 17 | 
             
                  yield self if block_given?
         | 
| 18 18 | 
             
                end
         | 
| 19 | 
            -
             | 
| 19 | 
            +
             | 
| 20 20 | 
             
                attr_reader :attribute_prefix
         | 
| 21 | 
            -
             | 
| 21 | 
            +
             | 
| 22 22 | 
             
                def element(name, *args, &block)
         | 
| 23 23 |  | 
| 24 24 | 
             
                  metadata = @inspector.get_metadata(current_subject, name)
         | 
| 25 25 | 
             
                  attributes = args.extract_options!.merge(metadata)
         | 
| 26 26 |  | 
| 27 | 
            -
                  subject_of_element = if args.empty? | 
| 27 | 
            +
                  subject_of_element = if args.empty?
         | 
| 28 28 | 
             
                    lambda do |subject|
         | 
| 29 29 | 
             
                      @inspector.get_value(current_subject, name)
         | 
| 30 30 | 
             
                    end
         | 
| 31 | 
            -
                  else | 
| 31 | 
            +
                  else
         | 
| 32 32 | 
             
                    args.shift
         | 
| 33 33 | 
             
                  end
         | 
| 34 34 |  | 
| @@ -36,13 +36,13 @@ module Representative | |
| 36 36 |  | 
| 37 37 | 
             
                  label(name)
         | 
| 38 38 | 
             
                  value(subject_of_element, attributes, &block)
         | 
| 39 | 
            -
             | 
| 39 | 
            +
             | 
| 40 40 | 
             
                end
         | 
| 41 41 |  | 
| 42 42 | 
             
                def attribute(name, value_generator = name)
         | 
| 43 43 | 
             
                  element(attribute_prefix + name.to_s, value_generator)
         | 
| 44 44 | 
             
                end
         | 
| 45 | 
            -
             | 
| 45 | 
            +
             | 
| 46 46 | 
             
                def list_of(name, *args, &block)
         | 
| 47 47 | 
             
                  options = args.extract_options!
         | 
| 48 48 | 
             
                  list_subject = args.empty? ? name : args.shift
         | 
| @@ -60,7 +60,7 @@ module Representative | |
| 60 60 | 
             
                    end
         | 
| 61 61 | 
             
                  end
         | 
| 62 62 | 
             
                end
         | 
| 63 | 
            -
             | 
| 63 | 
            +
             | 
| 64 64 | 
             
                def value(subject, attributes = {})
         | 
| 65 65 | 
             
                  representing(subject) do
         | 
| 66 66 | 
             
                    if block_given? && !current_subject.nil?
         | 
| @@ -76,23 +76,23 @@ module Representative | |
| 76 76 | 
             
                  end
         | 
| 77 77 | 
             
                  now_at :end_of_item
         | 
| 78 78 | 
             
                end
         | 
| 79 | 
            -
             | 
| 79 | 
            +
             | 
| 80 80 | 
             
                def comment(text)
         | 
| 81 81 | 
             
                  new_item
         | 
| 82 | 
            -
                  emit("//  | 
| 82 | 
            +
                  emit("// " + text)
         | 
| 83 83 | 
             
                  now_at :end_of_comment
         | 
| 84 84 | 
             
                end
         | 
| 85 85 |  | 
| 86 86 | 
             
                def to_json
         | 
| 87 87 | 
             
                  @buffer + "\n"
         | 
| 88 88 | 
             
                end
         | 
| 89 | 
            -
             | 
| 89 | 
            +
             | 
| 90 90 | 
             
                def to_s
         | 
| 91 91 | 
             
                  to_json
         | 
| 92 92 | 
             
                end
         | 
| 93 93 |  | 
| 94 94 | 
             
                private
         | 
| 95 | 
            -
             | 
| 95 | 
            +
             | 
| 96 96 | 
             
                def emit(s)
         | 
| 97 97 | 
             
                  @buffer << s
         | 
| 98 98 | 
             
                end
         | 
| @@ -100,7 +100,7 @@ module Representative | |
| 100 100 | 
             
                def encode(data)
         | 
| 101 101 | 
             
                  MultiJson.encode(data)
         | 
| 102 102 | 
             
                end
         | 
| 103 | 
            -
             | 
| 103 | 
            +
             | 
| 104 104 | 
             
                def indentation
         | 
| 105 105 | 
             
                  ("  " * @indent_level)
         | 
| 106 106 | 
             
                end
         | 
| @@ -108,7 +108,7 @@ module Representative | |
| 108 108 | 
             
                def label(name)
         | 
| 109 109 | 
             
                  return false if @indent_level == 0
         | 
| 110 110 | 
             
                  new_item
         | 
| 111 | 
            -
                  emit( | 
| 111 | 
            +
                  emit(encode(format_name(name)) + ": ")
         | 
| 112 112 | 
             
                end
         | 
| 113 113 |  | 
| 114 114 | 
             
                def new_item
         | 
| @@ -117,14 +117,14 @@ module Representative | |
| 117 117 | 
             
                  emit(indentation)
         | 
| 118 118 | 
             
                  @pending_comma = ","
         | 
| 119 119 | 
             
                end
         | 
| 120 | 
            -
             | 
| 120 | 
            +
             | 
| 121 121 | 
             
                def inside(opening_char, closing_char)
         | 
| 122 122 | 
             
                  emit(opening_char)
         | 
| 123 123 | 
             
                  @indent_level += 1
         | 
| 124 124 | 
             
                  now_at :beginning_of_block
         | 
| 125 125 | 
             
                  yield
         | 
| 126 126 | 
             
                  @indent_level -= 1
         | 
| 127 | 
            -
                  emit("\n | 
| 127 | 
            +
                  emit("\n" + indentation) unless at? :beginning_of_block
         | 
| 128 128 | 
             
                  emit(closing_char)
         | 
| 129 129 | 
             
                  now_at :end_of_item
         | 
| 130 130 | 
             
                end
         | 
| @@ -136,9 +136,9 @@ module Representative | |
| 136 136 | 
             
                def at?(state)
         | 
| 137 137 | 
             
                  @state == state
         | 
| 138 138 | 
             
                end
         | 
| 139 | 
            -
             | 
| 139 | 
            +
             | 
| 140 140 | 
             
              end
         | 
| 141 | 
            -
             | 
| 141 | 
            +
             | 
| 142 142 | 
             
              JSON = Json
         | 
| 143 | 
            -
             | 
| 143 | 
            +
             | 
| 144 144 | 
             
            end
         | 
| @@ -8,15 +8,15 @@ shared_examples_for "an XML Representative" do | |
| 8 8 |  | 
| 9 9 | 
             
                before do
         | 
| 10 10 | 
             
                  @subject = OpenStruct.new(
         | 
| 11 | 
            -
                    :name => "Fred", | 
| 12 | 
            -
                    :full_name => "Fredrick", | 
| 13 | 
            -
                    :width => 200, | 
| 11 | 
            +
                    :name => "Fred",
         | 
| 12 | 
            +
                    :full_name => "Fredrick",
         | 
| 13 | 
            +
                    :width => 200,
         | 
| 14 14 | 
             
                    :vehicle => OpenStruct.new(:year => "1959", :make => "Chevrolet")
         | 
| 15 15 | 
             
                  )
         | 
| 16 16 | 
             
                end
         | 
| 17 17 |  | 
| 18 18 | 
             
                describe "#element" do
         | 
| 19 | 
            -
             | 
| 19 | 
            +
             | 
| 20 20 | 
             
                  it "generates an element with content extracted from the subject" do
         | 
| 21 21 | 
             
                    r.element :name
         | 
| 22 22 | 
             
                    resulting_xml.should == %(<name>Fred</name>)
         | 
| @@ -77,7 +77,7 @@ shared_examples_for "an XML Representative" do | |
| 77 77 |  | 
| 78 78 | 
             
                  end
         | 
| 79 79 |  | 
| 80 | 
            -
                  describe "with a Symbol argument" do
         | 
| 80 | 
            +
                  describe "with a Symbol value argument" do
         | 
| 81 81 |  | 
| 82 82 | 
             
                    it "calls the named method to generate a value" do
         | 
| 83 83 | 
             
                      r.element :name, :width
         | 
| @@ -103,7 +103,7 @@ shared_examples_for "an XML Representative" do | |
| 103 103 | 
             
                      end
         | 
| 104 104 | 
             
                      resulting_xml.should == %(<info><name>Fred</name></info>)
         | 
| 105 105 | 
             
                    end
         | 
| 106 | 
            -
             | 
| 106 | 
            +
             | 
| 107 107 | 
             
                  end
         | 
| 108 108 |  | 
| 109 109 | 
             
                  describe "with value argument nil" do
         | 
| @@ -169,7 +169,7 @@ shared_examples_for "an XML Representative" do | |
| 169 169 | 
             
                  end
         | 
| 170 170 |  | 
| 171 171 | 
             
                end
         | 
| 172 | 
            -
             | 
| 172 | 
            +
             | 
| 173 173 | 
             
                describe "#list_of" do
         | 
| 174 174 |  | 
| 175 175 | 
             
                  before do
         | 
| @@ -181,8 +181,22 @@ shared_examples_for "an XML Representative" do | |
| 181 181 | 
             
                    resulting_xml.should == %(<nick-names type="array"><nick-name>Freddie</nick-name><nick-name>Knucklenose</nick-name></nick-names>)
         | 
| 182 182 | 
             
                  end
         | 
| 183 183 |  | 
| 184 | 
            +
                  describe "with a Symbol value argument" do
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                    it "calls the named method to generate a value" do
         | 
| 187 | 
            +
                      r.list_of(:foo_bars, :nick_names)
         | 
| 188 | 
            +
                      resulting_xml.should == %(<foo-bars type="array"><foo-bar>Freddie</foo-bar><foo-bar>Knucklenose</foo-bar></foo-bars>)
         | 
| 189 | 
            +
                    end
         | 
| 190 | 
            +
             | 
| 191 | 
            +
                  end
         | 
| 192 | 
            +
             | 
| 193 | 
            +
                  it "generates an array element" do
         | 
| 194 | 
            +
                    r.list_of(:nick_names)
         | 
| 195 | 
            +
                    resulting_xml.should == %(<nick-names type="array"><nick-name>Freddie</nick-name><nick-name>Knucklenose</nick-name></nick-names>)
         | 
| 196 | 
            +
                  end
         | 
| 197 | 
            +
             | 
| 184 198 | 
             
                  describe "with :list_attributes" do
         | 
| 185 | 
            -
             | 
| 199 | 
            +
             | 
| 186 200 | 
             
                    it "attaches attributes to the array element" do
         | 
| 187 201 | 
             
                      r.list_of(:nick_names, :list_attributes => {:color => "blue", :size => :size})
         | 
| 188 202 | 
             
                      array_element_attributes = REXML::Document.new(resulting_xml).root.attributes
         | 
| @@ -191,7 +205,7 @@ shared_examples_for "an XML Representative" do | |
| 191 205 | 
             
                      array_element_attributes["size"].should == "2"
         | 
| 192 206 | 
             
                      array_element_attributes.size.should == 3
         | 
| 193 207 | 
             
                    end
         | 
| 194 | 
            -
             | 
| 208 | 
            +
             | 
| 195 209 | 
             
                  end
         | 
| 196 210 |  | 
| 197 211 | 
             
                  describe "with :item_attributes" do
         | 
| @@ -200,7 +214,7 @@ shared_examples_for "an XML Representative" do | |
| 200 214 | 
             
                      r.list_of(:nick_names, :item_attributes => {:length => :size})
         | 
| 201 215 | 
             
                      resulting_xml.should == %(<nick-names type="array"><nick-name length="7">Freddie</nick-name><nick-name length="11">Knucklenose</nick-name></nick-names>)
         | 
| 202 216 | 
             
                    end
         | 
| 203 | 
            -
             | 
| 217 | 
            +
             | 
| 204 218 | 
             
                  end
         | 
| 205 219 |  | 
| 206 220 | 
             
                  describe "with an explicit :item_name" do
         | 
| @@ -238,41 +252,41 @@ shared_examples_for "an XML Representative" do | |
| 238 252 | 
             
                      r.list_of(:nick_names, :item_attributes => {:value => :to_s}, &r.empty)
         | 
| 239 253 | 
             
                      resulting_xml.should == %(<nick-names type="array"><nick-name value="Freddie"/><nick-name value="Knucklenose"/></nick-names>)
         | 
| 240 254 | 
             
                    end
         | 
| 241 | 
            -
             | 
| 255 | 
            +
             | 
| 242 256 | 
             
                  end
         | 
| 243 | 
            -
             | 
| 257 | 
            +
             | 
| 244 258 | 
             
                  describe "with :item_attributes AND block" do
         | 
| 245 | 
            -
             | 
| 259 | 
            +
             | 
| 246 260 | 
             
                    it "generates attributes and nested elements" do
         | 
| 247 261 | 
             
                      r.list_of(:nick_names, :item_attributes => {:length => :size}) do
         | 
| 248 262 | 
             
                        r.element :reverse
         | 
| 249 263 | 
             
                      end
         | 
| 250 264 | 
             
                      resulting_xml.should == %(<nick-names type="array"><nick-name length="7"><reverse>eidderF</reverse></nick-name><nick-name length="11"><reverse>esonelkcunK</reverse></nick-name></nick-names>)
         | 
| 251 265 | 
             
                    end
         | 
| 252 | 
            -
             | 
| 266 | 
            +
             | 
| 253 267 | 
             
                  end
         | 
| 254 268 |  | 
| 255 269 | 
             
                end
         | 
| 256 270 |  | 
| 257 271 | 
             
                describe "#representing" do
         | 
| 258 | 
            -
             | 
| 272 | 
            +
             | 
| 259 273 | 
             
                  it "selects a new subject without generating an element" do
         | 
| 260 274 | 
             
                    r.representing :vehicle do
         | 
| 261 275 | 
             
                      r.element :make
         | 
| 262 276 | 
             
                    end
         | 
| 263 277 | 
             
                    resulting_xml.should == %(<make>Chevrolet</make>)
         | 
| 264 278 | 
             
                  end
         | 
| 265 | 
            -
             | 
| 279 | 
            +
             | 
| 266 280 | 
             
                end
         | 
| 267 281 |  | 
| 268 282 | 
             
                describe "#comment" do
         | 
| 269 | 
            -
             | 
| 283 | 
            +
             | 
| 270 284 | 
             
                  it "inserts a comment" do
         | 
| 271 285 | 
             
                    r.element :vehicle do
         | 
| 272 286 | 
             
                      r.comment "Year of manufacture"
         | 
| 273 287 | 
             
                      r.element :year
         | 
| 274 288 | 
             
                    end
         | 
| 275 | 
            -
                    resulting_xml.should == | 
| 289 | 
            +
                    resulting_xml.should ==
         | 
| 276 290 | 
             
                    %(<vehicle><!-- Year of manufacture --><year>1959</year></vehicle>)
         | 
| 277 291 | 
             
                  end
         | 
| 278 292 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,125 +1,121 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: representative
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 1.0.0
         | 
| 4 5 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0.3.6
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 8 8 | 
             
            - Mike Williams
         | 
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 12 | 
            +
            date: 2011-09-06 00:00:00.000000000Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 16 15 | 
             
              name: activesupport
         | 
| 17 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &70241309663160 !ruby/object:Gem::Requirement
         | 
| 18 17 | 
             
                none: false
         | 
| 19 | 
            -
                requirements: | 
| 20 | 
            -
                - -  | 
| 21 | 
            -
                  - !ruby/object:Gem::Version | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 22 21 | 
             
                    version: 2.2.2
         | 
| 23 22 | 
             
              type: :runtime
         | 
| 24 23 | 
             
              prerelease: false
         | 
| 25 | 
            -
              version_requirements: * | 
| 26 | 
            -
            - !ruby/object:Gem::Dependency | 
| 24 | 
            +
              version_requirements: *70241309663160
         | 
| 25 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 27 26 | 
             
              name: i18n
         | 
| 28 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &70241309662120 !ruby/object:Gem::Requirement
         | 
| 29 28 | 
             
                none: false
         | 
| 30 | 
            -
                requirements: | 
| 31 | 
            -
                - -  | 
| 32 | 
            -
                  - !ruby/object:Gem::Version | 
| 29 | 
            +
                requirements:
         | 
| 30 | 
            +
                - - ! '>='
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 32 | 
             
                    version: 0.4.1
         | 
| 34 33 | 
             
              type: :runtime
         | 
| 35 34 | 
             
              prerelease: false
         | 
| 36 | 
            -
              version_requirements: * | 
| 37 | 
            -
            - !ruby/object:Gem::Dependency | 
| 35 | 
            +
              version_requirements: *70241309662120
         | 
| 36 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 38 37 | 
             
              name: builder
         | 
| 39 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &70241309661380 !ruby/object:Gem::Requirement
         | 
| 40 39 | 
             
                none: false
         | 
| 41 | 
            -
                requirements: | 
| 42 | 
            -
                - -  | 
| 43 | 
            -
                  - !ruby/object:Gem::Version | 
| 40 | 
            +
                requirements:
         | 
| 41 | 
            +
                - - ! '>='
         | 
| 42 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 44 43 | 
             
                    version: 2.1.2
         | 
| 45 44 | 
             
              type: :runtime
         | 
| 46 45 | 
             
              prerelease: false
         | 
| 47 | 
            -
              version_requirements: * | 
| 48 | 
            -
            - !ruby/object:Gem::Dependency | 
| 46 | 
            +
              version_requirements: *70241309661380
         | 
| 47 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 49 48 | 
             
              name: multi_json
         | 
| 50 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &70241309660480 !ruby/object:Gem::Requirement
         | 
| 51 50 | 
             
                none: false
         | 
| 52 | 
            -
                requirements: | 
| 53 | 
            -
                - -  | 
| 54 | 
            -
                  - !ruby/object:Gem::Version | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ! '>='
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 55 54 | 
             
                    version: 0.0.5
         | 
| 56 55 | 
             
              type: :runtime
         | 
| 57 56 | 
             
              prerelease: false
         | 
| 58 | 
            -
              version_requirements: * | 
| 59 | 
            -
            - !ruby/object:Gem::Dependency | 
| 57 | 
            +
              version_requirements: *70241309660480
         | 
| 58 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 60 59 | 
             
              name: rake
         | 
| 61 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &70241309659680 !ruby/object:Gem::Requirement
         | 
| 62 61 | 
             
                none: false
         | 
| 63 | 
            -
                requirements: | 
| 62 | 
            +
                requirements:
         | 
| 64 63 | 
             
                - - ~>
         | 
| 65 | 
            -
                  - !ruby/object:Gem::Version | 
| 64 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 66 65 | 
             
                    version: 0.8.7
         | 
| 67 66 | 
             
              type: :development
         | 
| 68 67 | 
             
              prerelease: false
         | 
| 69 | 
            -
              version_requirements: * | 
| 70 | 
            -
            - !ruby/object:Gem::Dependency | 
| 68 | 
            +
              version_requirements: *70241309659680
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 71 70 | 
             
              name: rspec
         | 
| 72 | 
            -
              requirement: & | 
| 71 | 
            +
              requirement: &70241309658960 !ruby/object:Gem::Requirement
         | 
| 73 72 | 
             
                none: false
         | 
| 74 | 
            -
                requirements: | 
| 73 | 
            +
                requirements:
         | 
| 75 74 | 
             
                - - ~>
         | 
| 76 | 
            -
                  - !ruby/object:Gem::Version | 
| 75 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 77 76 | 
             
                    version: 2.5.0
         | 
| 78 77 | 
             
              type: :development
         | 
| 79 78 | 
             
              prerelease: false
         | 
| 80 | 
            -
              version_requirements: * | 
| 81 | 
            -
            - !ruby/object:Gem::Dependency | 
| 79 | 
            +
              version_requirements: *70241309658960
         | 
| 80 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 82 81 | 
             
              name: tilt
         | 
| 83 | 
            -
              requirement: & | 
| 82 | 
            +
              requirement: &70241309658220 !ruby/object:Gem::Requirement
         | 
| 84 83 | 
             
                none: false
         | 
| 85 | 
            -
                requirements: | 
| 86 | 
            -
                - -  | 
| 87 | 
            -
                  - !ruby/object:Gem::Version | 
| 88 | 
            -
                    version:  | 
| 84 | 
            +
                requirements:
         | 
| 85 | 
            +
                - - ! '>='
         | 
| 86 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 87 | 
            +
                    version: '0.9'
         | 
| 89 88 | 
             
              type: :development
         | 
| 90 89 | 
             
              prerelease: false
         | 
| 91 | 
            -
              version_requirements: * | 
| 92 | 
            -
            - !ruby/object:Gem::Dependency | 
| 90 | 
            +
              version_requirements: *70241309658220
         | 
| 91 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 93 92 | 
             
              name: nokogiri
         | 
| 94 | 
            -
              requirement: & | 
| 93 | 
            +
              requirement: &70241309657400 !ruby/object:Gem::Requirement
         | 
| 95 94 | 
             
                none: false
         | 
| 96 | 
            -
                requirements: | 
| 95 | 
            +
                requirements:
         | 
| 97 96 | 
             
                - - ~>
         | 
| 98 | 
            -
                  - !ruby/object:Gem::Version | 
| 97 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 99 98 | 
             
                    version: 1.4.2
         | 
| 100 99 | 
             
              type: :development
         | 
| 101 100 | 
             
              prerelease: false
         | 
| 102 | 
            -
              version_requirements: * | 
| 103 | 
            -
            - !ruby/object:Gem::Dependency | 
| 101 | 
            +
              version_requirements: *70241309657400
         | 
| 102 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 104 103 | 
             
              name: diff-lcs
         | 
| 105 | 
            -
              requirement: & | 
| 104 | 
            +
              requirement: &70241309656760 !ruby/object:Gem::Requirement
         | 
| 106 105 | 
             
                none: false
         | 
| 107 | 
            -
                requirements: | 
| 108 | 
            -
                - -  | 
| 109 | 
            -
                  - !ruby/object:Gem::Version | 
| 110 | 
            -
                    version:  | 
| 106 | 
            +
                requirements:
         | 
| 107 | 
            +
                - - ! '>='
         | 
| 108 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 109 | 
            +
                    version: '0'
         | 
| 111 110 | 
             
              type: :development
         | 
| 112 111 | 
             
              prerelease: false
         | 
| 113 | 
            -
              version_requirements: * | 
| 112 | 
            +
              version_requirements: *70241309656760
         | 
| 114 113 | 
             
            description: 
         | 
| 115 114 | 
             
            email: mdub@dogbiscuit.org
         | 
| 116 115 | 
             
            executables: []
         | 
| 117 | 
            -
             | 
| 118 116 | 
             
            extensions: []
         | 
| 119 | 
            -
             | 
| 120 117 | 
             
            extra_rdoc_files: []
         | 
| 121 | 
            -
             | 
| 122 | 
            -
            files: 
         | 
| 118 | 
            +
            files:
         | 
| 123 119 | 
             
            - lib/representative/abstract_xml.rb
         | 
| 124 120 | 
             
            - lib/representative/base.rb
         | 
| 125 121 | 
             
            - lib/representative/empty.rb
         | 
| @@ -130,8 +126,7 @@ files: | |
| 130 126 | 
             
            - lib/representative/version.rb
         | 
| 131 127 | 
             
            - lib/representative/xml.rb
         | 
| 132 128 | 
             
            - lib/representative.rb
         | 
| 133 | 
            -
            - examples/ | 
| 134 | 
            -
            - examples/xml_demo.rb
         | 
| 129 | 
            +
            - examples/books.rb
         | 
| 135 130 | 
             
            - README.markdown
         | 
| 136 131 | 
             
            - LICENSE
         | 
| 137 132 | 
             
            - spec/representative/json_spec.rb
         | 
| @@ -143,38 +138,35 @@ files: | |
| 143 138 | 
             
            - Rakefile
         | 
| 144 139 | 
             
            homepage: http://github.com/mdub/representative
         | 
| 145 140 | 
             
            licenses: []
         | 
| 146 | 
            -
             | 
| 147 141 | 
             
            post_install_message: 
         | 
| 148 142 | 
             
            rdoc_options: []
         | 
| 149 | 
            -
             | 
| 150 | 
            -
            require_paths: 
         | 
| 143 | 
            +
            require_paths:
         | 
| 151 144 | 
             
            - lib
         | 
| 152 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 145 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 153 146 | 
             
              none: false
         | 
| 154 | 
            -
              requirements: | 
| 155 | 
            -
              - -  | 
| 156 | 
            -
                - !ruby/object:Gem::Version | 
| 157 | 
            -
                   | 
| 158 | 
            -
                  segments: | 
| 147 | 
            +
              requirements:
         | 
| 148 | 
            +
              - - ! '>='
         | 
| 149 | 
            +
                - !ruby/object:Gem::Version
         | 
| 150 | 
            +
                  version: '0'
         | 
| 151 | 
            +
                  segments:
         | 
| 159 152 | 
             
                  - 0
         | 
| 160 | 
            -
                   | 
| 161 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement | 
| 153 | 
            +
                  hash: -2883973472066778787
         | 
| 154 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 162 155 | 
             
              none: false
         | 
| 163 | 
            -
              requirements: | 
| 164 | 
            -
              - -  | 
| 165 | 
            -
                - !ruby/object:Gem::Version | 
| 166 | 
            -
                   | 
| 167 | 
            -
                  segments: | 
| 156 | 
            +
              requirements:
         | 
| 157 | 
            +
              - - ! '>='
         | 
| 158 | 
            +
                - !ruby/object:Gem::Version
         | 
| 159 | 
            +
                  version: '0'
         | 
| 160 | 
            +
                  segments:
         | 
| 168 161 | 
             
                  - 0
         | 
| 169 | 
            -
                   | 
| 162 | 
            +
                  hash: -2883973472066778787
         | 
| 170 163 | 
             
            requirements: []
         | 
| 171 | 
            -
             | 
| 172 164 | 
             
            rubyforge_project: 
         | 
| 173 | 
            -
            rubygems_version: 1. | 
| 165 | 
            +
            rubygems_version: 1.8.10
         | 
| 174 166 | 
             
            signing_key: 
         | 
| 175 167 | 
             
            specification_version: 3
         | 
| 176 168 | 
             
            summary: Builds XML and JSON representations of your Ruby objects
         | 
| 177 | 
            -
            test_files: | 
| 169 | 
            +
            test_files:
         | 
| 178 170 | 
             
            - spec/representative/json_spec.rb
         | 
| 179 171 | 
             
            - spec/representative/nokogiri_spec.rb
         | 
| 180 172 | 
             
            - spec/representative/tilt_integration_spec.rb
         | 
    
        data/examples/json_demo.rb
    DELETED
    
    | @@ -1,44 +0,0 @@ | |
| 1 | 
            -
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require "rubygems"
         | 
| 4 | 
            -
            require "representative/json"
         | 
| 5 | 
            -
            require "ostruct"
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            @books = [
         | 
| 8 | 
            -
              OpenStruct.new(
         | 
| 9 | 
            -
                :title => "Sailing for old dogs", 
         | 
| 10 | 
            -
                :authors => ["Jim Watson"],
         | 
| 11 | 
            -
                :published => OpenStruct.new(
         | 
| 12 | 
            -
                  :by => "Credulous Print",
         | 
| 13 | 
            -
                  :year => 1994
         | 
| 14 | 
            -
                )
         | 
| 15 | 
            -
              ),
         | 
| 16 | 
            -
              OpenStruct.new(
         | 
| 17 | 
            -
                :title => "On the horizon", 
         | 
| 18 | 
            -
                :authors => ["Zoe Primpton", "Stan Ford"],
         | 
| 19 | 
            -
                :published => OpenStruct.new(
         | 
| 20 | 
            -
                  :by => "McGraw-Hill",
         | 
| 21 | 
            -
                  :year => 2005
         | 
| 22 | 
            -
                )
         | 
| 23 | 
            -
              ),
         | 
| 24 | 
            -
              OpenStruct.new(
         | 
| 25 | 
            -
                :title => "The Little Blue Book of VHS Programming",
         | 
| 26 | 
            -
                :authors => ["Henry Nelson"],
         | 
| 27 | 
            -
                :rating => "****"
         | 
| 28 | 
            -
              )
         | 
| 29 | 
            -
            ]
         | 
| 30 | 
            -
             | 
| 31 | 
            -
            json = Representative::Json.new do |r|
         | 
| 32 | 
            -
             | 
| 33 | 
            -
              r.list_of :books, @books do
         | 
| 34 | 
            -
                r.element :title
         | 
| 35 | 
            -
                r.list_of :authors
         | 
| 36 | 
            -
                r.element :published do
         | 
| 37 | 
            -
                  r.element :by
         | 
| 38 | 
            -
                  r.element :year
         | 
| 39 | 
            -
                end
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
            end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
            puts json.to_s
         |