oos4ruby 0.1.7 → 0.2.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/lib/oos4ruby.rb +3 -1
- data/lib/oos4ruby/bean.rb +1 -2
- data/lib/oos4ruby/collection.rb +6 -8
- data/lib/oos4ruby/http_invoker.rb +2 -2
- data/lib/oos4ruby/media.rb +2 -6
- data/lib/oos4ruby/search.rb +18 -45
- data/lib/oos4ruby/site.rb +33 -38
- data/lib/oos4ruby/version.rb +2 -2
- data/test/test_search.rb +34 -0
- data/website/index.html +15 -8
- data/website/index.txt +10 -1
- metadata +8 -5
    
        data/lib/oos4ruby.rb
    CHANGED
    
    | @@ -1,3 +1,6 @@ | |
| 1 | 
            +
            $:.unshift(File.dirname(__FILE__)) unless
         | 
| 2 | 
            +
              $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
         | 
| 3 | 
            +
             | 
| 1 4 | 
             
            module Oos4ruby
         | 
| 2 5 | 
             
              class UnknownUser < ArgumentError; end
         | 
| 3 6 |  | 
| @@ -32,7 +35,6 @@ module Oos4ruby | |
| 32 35 | 
             
              TRUSTED_URL = API_URL + '/trusted'
         | 
| 33 36 | 
             
              SEARCH_URL = API_URL + '/search'
         | 
| 34 37 | 
             
            end
         | 
| 35 | 
            -
            %w(rubygems).each { |f| require f }
         | 
| 36 38 |  | 
| 37 39 | 
             
            require 'oos4ruby/http_invoker.rb'
         | 
| 38 40 | 
             
            require 'oos4ruby/auth.rb'
         | 
    
        data/lib/oos4ruby/bean.rb
    CHANGED
    
    | @@ -26,7 +26,7 @@ module Bean #:nodoc: | |
| 26 26 | 
             
                end
         | 
| 27 27 |  | 
| 28 28 | 
             
                def set_variable(options = {})
         | 
| 29 | 
            -
                   | 
| 29 | 
            +
                  unless options.empty?
         | 
| 30 30 | 
             
                    options.each_pair { |key, value|
         | 
| 31 31 | 
             
                      class_variable_set("@@#{key.to_s}".to_sym, value) 
         | 
| 32 32 | 
             
                    }
         | 
| @@ -197,4 +197,3 @@ module Bean #:nodoc: | |
| 197 197 | 
             
              end
         | 
| 198 198 | 
             
            end
         | 
| 199 199 | 
             
            end
         | 
| 200 | 
            -
             | 
    
        data/lib/oos4ruby/collection.rb
    CHANGED
    
    | @@ -11,7 +11,7 @@ class Collection < Array | |
| 11 11 | 
             
                @feed = feed
         | 
| 12 12 | 
             
                @auth = auth
         | 
| 13 13 | 
             
                @slug = slug
         | 
| 14 | 
            -
                evalued_class =  | 
| 14 | 
            +
                evalued_class = Oos4ruby.const_get(self.class.name.gsub(/s$/, ''))
         | 
| 15 15 | 
             
                @feed.entries.each {|entry| self << evalued_class.new(entry, @auth, @slug) }    
         | 
| 16 16 | 
             
              end
         | 
| 17 17 |  | 
| @@ -111,7 +111,7 @@ class Collection < Array | |
| 111 111 | 
             
                    :content_type => file content type
         | 
| 112 112 | 
             
            =end
         | 
| 113 113 | 
             
              def create!(opts = {})    
         | 
| 114 | 
            -
                evalued_class =  | 
| 114 | 
            +
                evalued_class = Oos4ruby.const_get(self.class.name.gsub(/s$/, ''))
         | 
| 115 115 | 
             
                body = evalued_class.dump! opts, @slug
         | 
| 116 116 | 
             
                unless self.instance_of?Medias      
         | 
| 117 117 | 
             
                  body = "<?xml version='1.0' ?>\n" + body.to_s      
         | 
| @@ -119,14 +119,13 @@ class Collection < Array | |
| 119 119 |  | 
| 120 120 | 
             
                poster = HTTPInvoker.new( @feed.self_link, @auth)
         | 
| 121 121 |  | 
| 122 | 
            -
                content_type = opts | 
| 123 | 
            -
                opts.reject {|k, v| k == :content_type}
         | 
| 122 | 
            +
                content_type = opts.delete(:content_type) || AtomEntryContentType
         | 
| 124 123 | 
             
                opts.each {|k, v| poster.set_header(k, v)}
         | 
| 125 124 |  | 
| 126 125 | 
             
                worked = poster.post content_type, body
         | 
| 127 126 |  | 
| 128 | 
            -
                raise  | 
| 129 | 
            -
                return  | 
| 127 | 
            +
                raise poster.response.message unless worked
         | 
| 128 | 
            +
                return get_page(@feed.self_link, @auth).first
         | 
| 130 129 | 
             
              end
         | 
| 131 130 | 
             
            =begin rdoc
         | 
| 132 131 | 
             
              return true if the text of the element is equals to the given value
         | 
| @@ -163,8 +162,7 @@ class Collection < Array | |
| 163 162 | 
             
              end
         | 
| 164 163 |  | 
| 165 164 | 
             
              def convert( body )
         | 
| 166 | 
            -
                 | 
| 167 | 
            -
                return evalued_class.new( Feed.read( body ), @auth, @slug )    
         | 
| 165 | 
            +
                return self.class.new( Feed.read( body ), @auth, @slug )    
         | 
| 168 166 | 
             
              end
         | 
| 169 167 |  | 
| 170 168 | 
             
            end
         | 
| @@ -118,7 +118,7 @@ class HTTPInvoker | |
| 118 118 | 
             
                unless req
         | 
| 119 119 | 
             
                  url = @uri.path
         | 
| 120 120 | 
             
                  url += "?#{@uri.query}" if @uri.query
         | 
| 121 | 
            -
                  req =  | 
| 121 | 
            +
                  req = Net::HTTP.const_get(option.to_s.capitalize).new( url )
         | 
| 122 122 | 
             
                end
         | 
| 123 123 |  | 
| 124 124 | 
             
                @authent.add_to req
         | 
| @@ -141,4 +141,4 @@ class HTTPInvoker | |
| 141 141 | 
             
              end
         | 
| 142 142 |  | 
| 143 143 | 
             
            end
         | 
| 144 | 
            -
            end
         | 
| 144 | 
            +
            end
         | 
    
        data/lib/oos4ruby/media.rb
    CHANGED
    
    | @@ -14,12 +14,8 @@ module Oos4ruby | |
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| 16 16 | 
             
                def Media.dump!(opts, slug)
         | 
| 17 | 
            -
                   | 
| 18 | 
            -
             | 
| 19 | 
            -
                  elsif (opts[:file].instance_of?String)
         | 
| 20 | 
            -
                    file = File.new( opts[:file ])
         | 
| 21 | 
            -
                  end      
         | 
| 22 | 
            -
                  return file
         | 
| 17 | 
            +
                  file = opts.delete(:file)
         | 
| 18 | 
            +
                  file.respond_to?(:path) ? file : File.new(file)
         | 
| 23 19 | 
             
                end
         | 
| 24 20 |  | 
| 25 21 | 
             
                private
         | 
    
        data/lib/oos4ruby/search.rb
    CHANGED
    
    | @@ -1,4 +1,3 @@ | |
| 1 | 
            -
             | 
| 2 1 | 
             
            require 'cgi'
         | 
| 3 2 |  | 
| 4 3 | 
             
            module Oos4ruby
         | 
| @@ -20,55 +19,29 @@ class Search | |
| 20 19 | 
             
              def Search.find(auth, opts)
         | 
| 21 20 | 
             
                query = SEARCH_URL
         | 
| 22 21 |  | 
| 23 | 
            -
                 | 
| 24 | 
            -
                unless opts.empty?
         | 
| 25 | 
            -
                  query += "?"
         | 
| 26 | 
            -
                  if opts[:q]
         | 
| 27 | 
            -
                    query += "q=#{CGI.escape(opts[:q])}"
         | 
| 28 | 
            -
                    more_params = true
         | 
| 29 | 
            -
                  end
         | 
| 30 | 
            -
                  if opts[:bbox]
         | 
| 31 | 
            -
                    query += "&" if more_params
         | 
| 32 | 
            -
                    query += "bbox=#{opts[:bbox].join(",")}"
         | 
| 33 | 
            -
                    more_params = true
         | 
| 34 | 
            -
                  end
         | 
| 35 | 
            -
                  if opts[:as]
         | 
| 36 | 
            -
                    query += "&" if more_params
         | 
| 37 | 
            -
                    query += "as=#{opts[:as]}"
         | 
| 38 | 
            -
                    more_params = true
         | 
| 39 | 
            -
                  end
         | 
| 40 | 
            -
                  if opts[:tags]
         | 
| 41 | 
            -
                    query += "&" if more_params
         | 
| 42 | 
            -
                    opts[:tags].each_with_index do |tag, index|
         | 
| 43 | 
            -
                      query += "tag=#{CGI.escape(tag)}"          
         | 
| 44 | 
            -
                      query += "&" if index < opts[:tags].length - 1
         | 
| 45 | 
            -
                    end
         | 
| 46 | 
            -
                    more_params = true
         | 
| 47 | 
            -
                  end
         | 
| 48 | 
            -
                  if opts[:tag_op]
         | 
| 49 | 
            -
                    query += "&" if more_params
         | 
| 50 | 
            -
                    query += "tagOp=#{opts[:tag_op]}"
         | 
| 51 | 
            -
                    more_params = true
         | 
| 52 | 
            -
                  end
         | 
| 53 | 
            -
                  if opts[:lat] and opts[:lon] and opts[:radius]
         | 
| 54 | 
            -
                    query += "&" if more_params
         | 
| 55 | 
            -
                    query += "lat=#{opts[:lat]}&lon=#{opts[:lon]}&radius=#{opts[:radius]}"
         | 
| 56 | 
            -
                    more_params = true
         | 
| 57 | 
            -
                  end
         | 
| 58 | 
            -
                  if opts[:page]
         | 
| 59 | 
            -
                    query += "&" if more_params
         | 
| 60 | 
            -
                    query += "page=#{opts[:page]}"
         | 
| 61 | 
            -
                  end
         | 
| 62 | 
            -
                else
         | 
| 63 | 
            -
                  raise RuntimeError('a parameter is obligatory at least')
         | 
| 64 | 
            -
                end
         | 
| 65 | 
            -
                
         | 
| 66 | 
            -
                getter = HTTPInvoker.new query, auth
         | 
| 22 | 
            +
                getter = HTTPInvoker.new parse_params(opts), auth
         | 
| 67 23 |  | 
| 68 24 | 
             
                worked = getter.get
         | 
| 69 25 | 
             
                raise RuntimeError.new(getter.response.message) unless worked
         | 
| 70 26 | 
             
                Sites.new(Feed.read(getter.body), auth, nil)
         | 
| 71 27 | 
             
              end
         | 
| 28 | 
            +
              
         | 
| 29 | 
            +
              def Search.parse_params(args)
         | 
| 30 | 
            +
                raise "at least a parameter is mandatory" if args.nil? || args.empty?
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                args[:q] = CGI.escape(args[:q]) if args.include?(:q)
         | 
| 33 | 
            +
                args[:bbox] = args[:bbox].join(",") if args.include?(:bbox)
         | 
| 34 | 
            +
                args[:tag] = args.delete(:tags).map {|tag| CGI.escape(tag)} if args.include?(:tags)
         | 
| 35 | 
            +
                args[:tagOp] = args.delete(:tag_op) if args.include?(:tag_op)     
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                args.map do |k, v|
         | 
| 38 | 
            +
                  if v.respond_to?(:each_with_index)
         | 
| 39 | 
            +
                    v.map {|m| "#{k}=#{m}"}
         | 
| 40 | 
            +
                  else
         | 
| 41 | 
            +
                    "#{k}=#{v}"
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
                end.flatten.join("&")
         | 
| 44 | 
            +
              end
         | 
| 72 45 | 
             
            end
         | 
| 73 46 | 
             
            end
         | 
| 74 47 |  | 
    
        data/lib/oos4ruby/site.rb
    CHANGED
    
    | @@ -61,60 +61,57 @@ class Site < Bean::BeanClass | |
| 61 61 |  | 
| 62 62 | 
             
                add_element entry, 'updated', updated
         | 
| 63 63 | 
             
                add_element entry, 'id', make_id
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                 | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
                 | 
| 69 | 
            -
             | 
| 70 | 
            -
                add_element entry, 'summary', opts | 
| 71 | 
            -
                
         | 
| 72 | 
            -
                if opts | 
| 73 | 
            -
                   | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 64 | 
            +
             | 
| 65 | 
            +
                {:id => 'oos:id', :title => 'title', :user_address => 'oos:useraddress',
         | 
| 66 | 
            +
                    :url => 'oos:url', :telephone => 'oos:telephone', :review_title => 'summary'}.each do |k, v|
         | 
| 67 | 
            +
                  add_element entry, v, opts.delete(k) if opts.include?(k)
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                add_element entry, 'summary', opts.delete(:summary) if opts.include?(:summary) and REXML::XPath.first(entry, 'summary', XmlNamespaces).nil?
         | 
| 71 | 
            +
                
         | 
| 72 | 
            +
                if opts.include?(:privacy)
         | 
| 73 | 
            +
                  privacy = opts.delete(:privacy)
         | 
| 74 | 
            +
                  if privacy.is_a?REXML::Element
         | 
| 75 | 
            +
                    entry.add_element privacy
         | 
| 76 | 
            +
                  elsif privacy.is_a?String         
         | 
| 77 | 
            +
                    add_category entry, privacy, PRIVACY_URL
         | 
| 77 78 | 
             
                  end
         | 
| 78 79 | 
             
                end
         | 
| 79 80 |  | 
| 80 | 
            -
                if opts | 
| 81 | 
            -
                  content = opts | 
| 81 | 
            +
                if opts.include?(:review_content) || opts.include?(:content)
         | 
| 82 | 
            +
                  content = opts.delete(:review_content) || opts.delete(:content)
         | 
| 82 83 | 
             
                  attrs = {}
         | 
| 83 | 
            -
                  text =  | 
| 84 | 
            -
                  if content. | 
| 85 | 
            -
                    text = content
         | 
| 86 | 
            -
                  elsif content.is_a?Hash
         | 
| 87 | 
            -
                    text = content[:text]
         | 
| 88 | 
            -
                    content.delete :text
         | 
| 84 | 
            +
                  text = content
         | 
| 85 | 
            +
                  if content.respond_to?(:each_pair)
         | 
| 86 | 
            +
                    text = content.delete(:text)
         | 
| 89 87 | 
             
                    content.each_pair {|key, value| attrs[key.to_s] = value}        
         | 
| 90 88 | 
             
                  end
         | 
| 91 89 | 
             
                  add_element entry, 'content', text, attrs
         | 
| 92 90 | 
             
                end
         | 
| 93 91 |  | 
| 94 | 
            -
                if opts | 
| 95 | 
            -
                   | 
| 92 | 
            +
                if opts.include?(:locality)
         | 
| 93 | 
            +
                  locality = opts.delete(:locality)
         | 
| 94 | 
            +
                  name = locality
         | 
| 96 95 | 
             
                  local_slug = nil
         | 
| 97 96 | 
             
                  attrs = {}
         | 
| 98 | 
            -
                  if  | 
| 99 | 
            -
                    name =  | 
| 100 | 
            -
                    local_slug =  | 
| 101 | 
            -
                  elsif opts[:locality].is_a?String
         | 
| 102 | 
            -
                    name = opts[:locality]
         | 
| 97 | 
            +
                  if locality.respond_to?(:each_pair)
         | 
| 98 | 
            +
                    name = locality[:name]
         | 
| 99 | 
            +
                    local_slug = locality[:slug]
         | 
| 103 100 | 
             
                  end
         | 
| 104 101 | 
             
                  attrs['slug'] = local_slug if local_slug
         | 
| 105 102 | 
             
                  add_element entry, 'oos:locality', name, attrs
         | 
| 106 103 | 
             
                end
         | 
| 107 104 |  | 
| 108 | 
            -
                if opts | 
| 109 | 
            -
                   | 
| 110 | 
            -
                   | 
| 105 | 
            +
                if opts.include?(:country)
         | 
| 106 | 
            +
                  country = opts.delete(:country)
         | 
| 107 | 
            +
                  name = country.delete(:name)
         | 
| 111 108 | 
             
                  attrs = {}
         | 
| 112 | 
            -
                   | 
| 109 | 
            +
                  country.each_pair {|key, value| attrs[key.to_s] = value}
         | 
| 113 110 | 
             
                  add_element entry, 'oos:country', name, attrs
         | 
| 114 111 | 
             
                end
         | 
| 115 112 |  | 
| 116 | 
            -
                opts | 
| 117 | 
            -
                opts | 
| 113 | 
            +
                opts.delete(:tags).each { |tag| add_category entry, tag, "#{TAGS_URL}/#{slug}"} if opts.include(:tags)
         | 
| 114 | 
            +
                opts.delete(:lists).each { |list| add_category entry, list, "#{LISTS_URL}/#{slug}"} if opts.include?(:lists)
         | 
| 118 115 |  | 
| 119 116 | 
             
                entry
         | 
| 120 117 | 
             
              end
         | 
| @@ -172,9 +169,7 @@ class Site < Bean::BeanClass | |
| 172 169 | 
             
              end
         | 
| 173 170 |  | 
| 174 171 | 
             
              def privacy
         | 
| 175 | 
            -
                 | 
| 176 | 
            -
                @privacy = @xml.category({:scheme => PRIVACY_URL}).attributes['term']
         | 
| 177 | 
            -
                @privacy
         | 
| 172 | 
            +
                @privacy ||= @xml.category({:scheme => PRIVACY_URL}).attributes['term']
         | 
| 178 173 | 
             
              end
         | 
| 179 174 |  | 
| 180 175 | 
             
              def privacy=(privacy)    
         | 
| @@ -187,7 +182,7 @@ class Site < Bean::BeanClass | |
| 187 182 | 
             
                getter = HTTPInvoker.new href, @auth
         | 
| 188 183 | 
             
                worked = getter.get
         | 
| 189 184 |  | 
| 190 | 
            -
                raise  | 
| 185 | 
            +
                raise getter.response.message unless worked
         | 
| 191 186 | 
             
                Medias.new(Feed.read(getter.body), @auth, @slug)
         | 
| 192 187 | 
             
              end
         | 
| 193 188 |  | 
    
        data/lib/oos4ruby/version.rb
    CHANGED
    
    
    
        data/test/test_search.rb
    ADDED
    
    | @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            require File.dirname(__FILE__) + '/test_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class TestSearch < Test::Unit::TestCase
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              VALID_PARAMS = {
         | 
| 6 | 
            +
                :q => 'gloria',
         | 
| 7 | 
            +
                :tags => ['madrid', 'barcelona'],
         | 
| 8 | 
            +
                :as => '/es',
         | 
| 9 | 
            +
                :bbox => ['23452345', '345325', '23434', '32453245'],
         | 
| 10 | 
            +
                :tag_op => 'and',
         | 
| 11 | 
            +
                :lon => '2345',
         | 
| 12 | 
            +
                :lat => '234234',
         | 
| 13 | 
            +
                :radius => '3'    
         | 
| 14 | 
            +
              }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def test_parse_params_without_arguments
         | 
| 17 | 
            +
                assert_raise(RuntimeError) { Oos4ruby::Search.parse_params(nil) }
         | 
| 18 | 
            +
                assert_raise(RuntimeError) { Oos4ruby::Search.parse_params({}) }
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def test_parse_params_with_arguments
         | 
| 22 | 
            +
                query = Oos4ruby::Search.parse_params(VALID_PARAMS)
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                assert query.include?("q=gloria")
         | 
| 25 | 
            +
                assert query.include?("tag=madrid")
         | 
| 26 | 
            +
                assert query.include?("tag=barcelona")
         | 
| 27 | 
            +
                assert query.include?("as=/es")
         | 
| 28 | 
            +
                assert query.include?("bbox=23452345,345325,23434,32453245")
         | 
| 29 | 
            +
                assert query.include?("tagOp=and")
         | 
| 30 | 
            +
                assert query.include?("lon=2345")
         | 
| 31 | 
            +
                assert query.include?("lat=234234")
         | 
| 32 | 
            +
                assert query.include?("radius=3")
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
    
        data/website/index.html
    CHANGED
    
    | @@ -60,13 +60,13 @@ | |
| 60 60 | 
             
            </pre></p>
         | 
| 61 61 | 
             
            <p>How to add a review from a site that doesn’t exist in 11870:</p>
         | 
| 62 62 | 
             
            <p><pre class='syntax'>
         | 
| 63 | 
            -
            <span class="ident">oos</span><span class="punct">.</span><span class="ident">user</span><span class="punct">.</span><span class="ident">sites</span><span class="punct">.</span><span class="ident">create!</span> <span class="punct">{</span><span class="symbol">:title</span> <span class="punct">=></span> <span class="punct" | 
| 64 | 
            -
                 | 
| 65 | 
            -
                 | 
| 66 | 
            -
                 | 
| 67 | 
            -
                 | 
| 68 | 
            -
                 | 
| 69 | 
            -
            </ | 
| 63 | 
            +
            <span class="ident">oos</span><span class="punct">.</span><span class="ident">user</span><span class="punct">.</span><span class="ident">sites</span><span class="punct">.</span><span class="ident">create!</span> <span class="punct">{</span><span class="symbol">:title</span> <span class="punct">=></span> <span class="punct">"</span><span class="string">this site doesn't exist</span><span class="punct">",</span> 
         | 
| 64 | 
            +
                <span class="symbol">:user_address</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">the address</span><span class="punct">',</span> 
         | 
| 65 | 
            +
                <span class="symbol">:locality</span> <span class="punct">=></span> <span class="punct">{</span><span class="symbol">:name</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">Madrid</span><span class="punct">',</span> <span class="symbol">:slug</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">/es/madrid</span><span class="punct">'},</span>
         | 
| 66 | 
            +
                <span class="symbol">:country</span> <span class="punct">=></span> <span class="punct">{</span><span class="symbol">:name</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">España</span><span class="punct">',</span> <span class="symbol">:slug</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">/es</span><span class="punct">'}</span> 
         | 
| 67 | 
            +
                <span class="symbol">:summary</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">review title</span><span class="punct">',</span> <span class="symbol">:content</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">review content</span><span class="punct">'</span>
         | 
| 68 | 
            +
                <span class="symbol">:tags</span> <span class="punct">=></span> <span class="punct">['</span><span class="string">tapas</span><span class="punct">',</span> <span class="punct">'</span><span class="string">tipical spanish</span><span class="punct">'],</span> <span class="symbol">:lists</span> <span class="punct">=></span> <span class="punct">['</span><span class="string">food</span><span class="punct">']}</span>
         | 
| 69 | 
            +
            </pre></p>
         | 
| 70 70 | 
             
            <p>How to add a review from a site that exists in 11870:</p>
         | 
| 71 71 | 
             
            <p><pre class='syntax'>
         | 
| 72 72 | 
             
            <span class="ident">oos</span><span class="punct">.</span><span class="ident">user</span><span class="punct">.</span><span class="ident">sites</span><span class="punct">.</span><span class="ident">create!</span> <span class="punct">{</span><span class="symbol">:id</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">11870 site id</span><span class="punct">',</span>
         | 
| @@ -76,6 +76,13 @@ | |
| 76 76 | 
             
            <p><pre class='syntax'><span class="ident">contacts</span> <span class="punct">=</span> <span class="ident">user</span><span class="punct">.</span><span class="ident">contacts</span></pre></p>
         | 
| 77 77 | 
             
            <p>How to obtain the multimedia feed associated with a review:</p>
         | 
| 78 78 | 
             
            <p><pre class='syntax'><span class="ident">media_collection</span> <span class="punct">=</span> <span class="ident">user</span><span class="punct">.</span><span class="ident">sites</span><span class="punct">[</span><span class="number">0</span><span class="punct">].</span><span class="ident">multimedia</span></pre></p>
         | 
| 79 | 
            +
            <p>How to add a new image or video to a review:</p>
         | 
| 80 | 
            +
            <p><pre class='syntax'><span class="ident">user</span><span class="punct">.</span><span class="ident">sites</span><span class="punct">[</span><span class="number">0</span><span class="punct">].</span><span class="ident">multimedia</span><span class="punct">.</span><span class="ident">create!</span> <span class="punct">{</span>
         | 
| 81 | 
            +
              <span class="symbol">:file</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">image.png</span><span class="punct">',</span>
         | 
| 82 | 
            +
              <span class="symbol">:content_length</span> <span class="punct">=></span> <span class="constant">File</span><span class="punct">.</span><span class="ident">size</span><span class="punct">('</span><span class="string">image.png</span><span class="punct">'),</span>
         | 
| 83 | 
            +
              <span class="symbol">:content_type</span> <span class="punct">=></span> <span class="punct">'</span><span class="string">image/png</span><span class="punct">'</span>
         | 
| 84 | 
            +
            <span class="punct">}</span>
         | 
| 85 | 
            +
            </pre></p>
         | 
| 79 86 | 
             
            <h2>Forum</h2>
         | 
| 80 87 | 
             
            <p><a href="http://groups.google.com/group/api-11870">http://groups.google.com/group/api-11870</a></p>
         | 
| 81 88 | 
             
            <h2>How to submit patches</h2>
         | 
| @@ -86,7 +93,7 @@ | |
| 86 93 | 
             
            <h2>Contact</h2>
         | 
| 87 94 | 
             
            <p>Comments are welcome. Send an email to <a href="mailto:david.calavera@gmail.com">David Calavera</a> email via the <a href="http://groups.google.com/group/api-11870">forum</a></p>
         | 
| 88 95 | 
             
                <p class="coda">
         | 
| 89 | 
            -
                  <a href="FIXME email">David Calavera</a>,  | 
| 96 | 
            +
                  <a href="FIXME email">David Calavera</a>, 19th November 2009<br>
         | 
| 90 97 | 
             
                  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
         | 
| 91 98 | 
             
                </p>
         | 
| 92 99 | 
             
            </div>
         | 
    
        data/website/index.txt
    CHANGED
    
    | @@ -43,7 +43,7 @@ sites = user.sites | |
| 43 43 | 
             
            How to add a review from a site that doesn't exist in 11870:
         | 
| 44 44 |  | 
| 45 45 | 
             
            <pre syntax="ruby">
         | 
| 46 | 
            -
            oos.user.sites.create! {:title =>  | 
| 46 | 
            +
            oos.user.sites.create! {:title => "this site doesn't exist", 
         | 
| 47 47 | 
             
                :user_address => 'the address', 
         | 
| 48 48 | 
             
                :locality => {:name => 'Madrid', :slug => '/es/madrid'},
         | 
| 49 49 | 
             
                :country => {:name => 'España', :slug => '/es'} 
         | 
| @@ -66,6 +66,15 @@ How to obtain the multimedia feed associated with a review: | |
| 66 66 |  | 
| 67 67 | 
             
            <pre syntax="ruby">media_collection = user.sites[0].multimedia</pre>
         | 
| 68 68 |  | 
| 69 | 
            +
            How to add a new image or video to a review:
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            <pre syntax="ruby">user.sites[0].multimedia.create! {
         | 
| 72 | 
            +
              :file => 'image.png',
         | 
| 73 | 
            +
              :content_length => File.size('image.png'),
         | 
| 74 | 
            +
              :content_type => 'image/png'
         | 
| 75 | 
            +
            }
         | 
| 76 | 
            +
            </pre>
         | 
| 77 | 
            +
             | 
| 69 78 | 
             
            h2. Forum
         | 
| 70 79 |  | 
| 71 80 | 
             
            "http://groups.google.com/group/api-11870":http://groups.google.com/group/api-11870
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: oos4ruby
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - David Calavera
         | 
| @@ -9,7 +9,7 @@ autorequire: | |
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 11 |  | 
| 12 | 
            -
            date: 2009- | 
| 12 | 
            +
            date: 2009-11-19 00:00:00 +01:00
         | 
| 13 13 | 
             
            default_executable: 
         | 
| 14 14 | 
             
            dependencies: 
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -30,7 +30,7 @@ dependencies: | |
| 30 30 | 
             
                requirements: 
         | 
| 31 31 | 
             
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                    version: 2.3.3
         | 
| 34 34 | 
             
                version: 
         | 
| 35 35 | 
             
            description: oos4ruby is a ruby binding for the 11870 API
         | 
| 36 36 | 
             
            email: david.calavera@gmail.com
         | 
| @@ -88,6 +88,8 @@ files: | |
| 88 88 | 
             
            - website/template.rhtml
         | 
| 89 89 | 
             
            has_rdoc: true
         | 
| 90 90 | 
             
            homepage: http://oos4r.rubyforge.org
         | 
| 91 | 
            +
            licenses: []
         | 
| 92 | 
            +
             | 
| 91 93 | 
             
            post_install_message: 
         | 
| 92 94 | 
             
            rdoc_options: 
         | 
| 93 95 | 
             
            - --main
         | 
| @@ -109,10 +111,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 109 111 | 
             
            requirements: []
         | 
| 110 112 |  | 
| 111 113 | 
             
            rubyforge_project: oos4r
         | 
| 112 | 
            -
            rubygems_version: 1.3. | 
| 114 | 
            +
            rubygems_version: 1.3.5
         | 
| 113 115 | 
             
            signing_key: 
         | 
| 114 | 
            -
            specification_version:  | 
| 116 | 
            +
            specification_version: 3
         | 
| 115 117 | 
             
            summary: oos4ruby is a ruby binding for the 11870 API
         | 
| 116 118 | 
             
            test_files: 
         | 
| 117 119 | 
             
            - test/test_helper.rb
         | 
| 120 | 
            +
            - test/test_search.rb
         | 
| 118 121 | 
             
            - test/test_oos4ruby.rb
         |