supernova 0.4.14 → 0.4.15
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/VERSION +1 -1
 - data/lib/supernova/solr_criteria.rb +15 -1
 - data/lib/supernova/solr_indexer.rb +39 -10
 - data/spec/supernova/solr_criteria_spec.rb +25 -0
 - data/spec/supernova/solr_indexer_spec.rb +56 -1
 - data/supernova.gemspec +2 -2
 - metadata +4 -4
 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0.4. 
     | 
| 
      
 1 
     | 
    
         
            +
            0.4.15
         
     | 
| 
         @@ -73,7 +73,21 @@ class Supernova::SolrCriteria < Supernova::Criteria 
     | 
|
| 
       73 
73 
     | 
    
         
             
              end
         
     | 
| 
       74 
74 
     | 
    
         | 
| 
       75 
75 
     | 
    
         
             
              def fq_filter_for_key_and_value(key, value)
         
     | 
| 
       76 
     | 
    
         
            -
                 
     | 
| 
      
 76 
     | 
    
         
            +
                if value.nil?
         
     | 
| 
      
 77 
     | 
    
         
            +
                  "!#{key}:[* TO *]"
         
     | 
| 
      
 78 
     | 
    
         
            +
                elsif value.is_a?(Range)
         
     | 
| 
      
 79 
     | 
    
         
            +
                  "#{key}:[#{value_for_fq_filter(value.first)} TO #{value_for_fq_filter(value.last)}]"
         
     | 
| 
      
 80 
     | 
    
         
            +
                else
         
     | 
| 
      
 81 
     | 
    
         
            +
                  "#{key}:#{value_for_fq_filter(value)}"
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
              end
         
     | 
| 
      
 84 
     | 
    
         
            +
              
         
     | 
| 
      
 85 
     | 
    
         
            +
              def value_for_fq_filter(value)
         
     | 
| 
      
 86 
     | 
    
         
            +
                if value.is_a?(Date)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  Time.utc(value.year, value.month, value.day).iso8601
         
     | 
| 
      
 88 
     | 
    
         
            +
                else
         
     | 
| 
      
 89 
     | 
    
         
            +
                  value
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
       77 
91 
     | 
    
         
             
              end
         
     | 
| 
       78 
92 
     | 
    
         | 
| 
       79 
93 
     | 
    
         
             
              def build_docs(docs)
         
     | 
| 
         @@ -1,9 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require "json"
         
     | 
| 
       2 
2 
     | 
    
         
             
            require "fileutils"
         
     | 
| 
      
 3 
     | 
    
         
            +
            require "time"
         
     | 
| 
       3 
4 
     | 
    
         | 
| 
       4 
5 
     | 
    
         
             
            class Supernova::SolrIndexer
         
     | 
| 
       5 
6 
     | 
    
         
             
              attr_accessor :options, :db, :ids, :max_rows_to_direct_index, :local_solr
         
     | 
| 
       6 
     | 
    
         
            -
              attr_writer :index_file_path
         
     | 
| 
      
 7 
     | 
    
         
            +
              attr_writer :index_file_path, :debug
         
     | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
9 
     | 
    
         
             
              MAX_ROWS_TO_DIRECT_INDEX = 100
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
         @@ -70,6 +71,17 @@ class Supernova::SolrIndexer 
     | 
|
| 
       70 
71 
     | 
    
         
             
                self.ids ||= :all
         
     | 
| 
       71 
72 
     | 
    
         
             
              end
         
     | 
| 
       72 
73 
     | 
    
         | 
| 
      
 74 
     | 
    
         
            +
              def debug(message)
         
     | 
| 
      
 75 
     | 
    
         
            +
                response = true
         
     | 
| 
      
 76 
     | 
    
         
            +
                time = Benchmark.realtime do
         
     | 
| 
      
 77 
     | 
    
         
            +
                  response = yield if block_given?
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
                if @debug == true
         
     | 
| 
      
 80 
     | 
    
         
            +
                  puts "%s: %s" % [Time.now.iso8601(3), message.gsub("%TIME%", "%.3f" % time)]
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
                response
         
     | 
| 
      
 83 
     | 
    
         
            +
              end
         
     | 
| 
      
 84 
     | 
    
         
            +
              
         
     | 
| 
       73 
85 
     | 
    
         
             
              def index!
         
     | 
| 
       74 
86 
     | 
    
         
             
                index_query(query_to_index)
         
     | 
| 
       75 
87 
     | 
    
         
             
              end
         
     | 
| 
         @@ -99,7 +111,7 @@ class Supernova::SolrIndexer 
     | 
|
| 
       99 
111 
     | 
    
         
             
                    value = hash.delete(field.to_s)
         
     | 
| 
       100 
112 
     | 
    
         
             
                    if options[:type] == :date 
         
     | 
| 
       101 
113 
     | 
    
         
             
                      value = Time.utc(value.year, value.month, value.day) if value.is_a?(Date)
         
     | 
| 
       102 
     | 
    
         
            -
                      value = value.utc.iso8601 
         
     | 
| 
      
 114 
     | 
    
         
            +
                      value = value.utc.iso8601 if value
         
     | 
| 
       103 
115 
     | 
    
         
             
                    end
         
     | 
| 
       104 
116 
     | 
    
         
             
                    hash["#{field}_#{self.class.suffix_from_type(options[:type])}"] = value
         
     | 
| 
       105 
117 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -171,7 +183,15 @@ class Supernova::SolrIndexer 
     | 
|
| 
       171 
183 
     | 
    
         
             
              end
         
     | 
| 
       172 
184 
     | 
    
         | 
| 
       173 
185 
     | 
    
         
             
              def query_db(query)
         
     | 
| 
       174 
     | 
    
         
            -
                db. 
     | 
| 
      
 186 
     | 
    
         
            +
                if db.respond_to?(:query)
         
     | 
| 
      
 187 
     | 
    
         
            +
                  db.query(query, :as => :hash)
         
     | 
| 
      
 188 
     | 
    
         
            +
                else
         
     | 
| 
      
 189 
     | 
    
         
            +
                  db.select_all(query)
         
     | 
| 
      
 190 
     | 
    
         
            +
                end
         
     | 
| 
      
 191 
     | 
    
         
            +
              end
         
     | 
| 
      
 192 
     | 
    
         
            +
              
         
     | 
| 
      
 193 
     | 
    
         
            +
              def rows(query = nil)
         
     | 
| 
      
 194 
     | 
    
         
            +
                query_db(query || query_to_index)
         
     | 
| 
       175 
195 
     | 
    
         
             
              end
         
     | 
| 
       176 
196 
     | 
    
         | 
| 
       177 
197 
     | 
    
         
             
              def solr_rows_to_index_for_query(query)
         
     | 
| 
         @@ -181,24 +201,33 @@ class Supernova::SolrIndexer 
     | 
|
| 
       181 
201 
     | 
    
         
             
              end
         
     | 
| 
       182 
202 
     | 
    
         | 
| 
       183 
203 
     | 
    
         
             
              def index_query(query)
         
     | 
| 
       184 
     | 
    
         
            -
                rows  
     | 
| 
      
 204 
     | 
    
         
            +
                debug "getting rows for #{query[0,100]}"
         
     | 
| 
      
 205 
     | 
    
         
            +
                rows = debug "got all rows in %TIME%" do
         
     | 
| 
      
 206 
     | 
    
         
            +
                  solr_rows_to_index_for_query(query)
         
     | 
| 
      
 207 
     | 
    
         
            +
                end
         
     | 
| 
       185 
208 
     | 
    
         
             
                if self.max_rows_to_direct_index < rows.count
         
     | 
| 
       186 
     | 
    
         
            -
                   
     | 
| 
      
 209 
     | 
    
         
            +
                  debug "indexed #{rows.length} rows with json in %TIME%" do
         
     | 
| 
      
 210 
     | 
    
         
            +
                    index_with_json_file(rows)
         
     | 
| 
      
 211 
     | 
    
         
            +
                  end
         
     | 
| 
       187 
212 
     | 
    
         
             
                else
         
     | 
| 
       188 
     | 
    
         
            -
                   
     | 
| 
      
 213 
     | 
    
         
            +
                  debug "indexed #{rows.length} rows directly in %TIME%" do
         
     | 
| 
      
 214 
     | 
    
         
            +
                    index_directly(rows)
         
     | 
| 
      
 215 
     | 
    
         
            +
                  end
         
     | 
| 
       189 
216 
     | 
    
         
             
                end
         
     | 
| 
       190 
217 
     | 
    
         
             
              end
         
     | 
| 
       191 
218 
     | 
    
         | 
| 
       192 
     | 
    
         
            -
              def index_directly(rows 
     | 
| 
      
 219 
     | 
    
         
            +
              def index_directly(rows)
         
     | 
| 
       193 
220 
     | 
    
         
             
                rows.each do |row|
         
     | 
| 
       194 
221 
     | 
    
         
             
                  row = Supernova::Solr.connection.add(row)
         
     | 
| 
       195 
222 
     | 
    
         
             
                end
         
     | 
| 
       196 
223 
     | 
    
         
             
                Supernova::Solr.connection.commit if rows.any?
         
     | 
| 
       197 
224 
     | 
    
         
             
              end
         
     | 
| 
       198 
225 
     | 
    
         | 
| 
       199 
     | 
    
         
            -
              def index_with_json_file(rows 
     | 
| 
       200 
     | 
    
         
            -
                rows. 
     | 
| 
       201 
     | 
    
         
            -
                   
     | 
| 
      
 226 
     | 
    
         
            +
              def index_with_json_file(rows)
         
     | 
| 
      
 227 
     | 
    
         
            +
                debug "wrote #{rows.count} rows to the json file in %TIME%" do
         
     | 
| 
      
 228 
     | 
    
         
            +
                  rows.each do |row|
         
     | 
| 
      
 229 
     | 
    
         
            +
                    write_to_file(row)
         
     | 
| 
      
 230 
     | 
    
         
            +
                  end
         
     | 
| 
       202 
231 
     | 
    
         
             
                end
         
     | 
| 
       203 
232 
     | 
    
         
             
                finish
         
     | 
| 
       204 
233 
     | 
    
         
             
              end
         
     | 
| 
         @@ -30,6 +30,31 @@ describe Supernova::SolrCriteria do 
     | 
|
| 
       30 
30 
     | 
    
         
             
                end
         
     | 
| 
       31 
31 
     | 
    
         
             
              end
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
      
 33 
     | 
    
         
            +
              describe "#fq_filter_for_key_and_value" do
         
     | 
| 
      
 34 
     | 
    
         
            +
                it "returns the correct statment for nil" do
         
     | 
| 
      
 35 
     | 
    
         
            +
                  criteria.fq_filter_for_key_and_value(:user_id, nil).should == "!user_id:[* TO *]"
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
                
         
     | 
| 
      
 38 
     | 
    
         
            +
                it "returns the correct conditon for single values" do
         
     | 
| 
      
 39 
     | 
    
         
            +
                  criteria.fq_filter_for_key_and_value(:user_id, 1).should == "user_id:1"
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
                
         
     | 
| 
      
 42 
     | 
    
         
            +
                it "returns the correct condition for ranges" do
         
     | 
| 
      
 43 
     | 
    
         
            +
                  criteria.fq_filter_for_key_and_value(:user_id, 1..10).should == "user_id:[1 TO 10]"
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
                
         
     | 
| 
      
 46 
     | 
    
         
            +
                it "returns the correct conditon for single dates" do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  criteria.fq_filter_for_key_and_value(:released_on, Date.new(1999, 1, 2)).should == "released_on:1999-01-02T00:00:00Z"
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
                
         
     | 
| 
      
 50 
     | 
    
         
            +
                it "returns the correct condition for date ranges" do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  date1 = Date.new(1999, 1, 2)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  date2 = Date.new(1999, 2, 5)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  range = Range.new(date1, date2)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  criteria.fq_filter_for_key_and_value(:open_at, range).should == "open_at:[1999-01-02T00:00:00Z TO 1999-02-05T00:00:00Z]"
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
              
         
     | 
| 
       33 
58 
     | 
    
         
             
              describe "#to_params" do
         
     | 
| 
       34 
59 
     | 
    
         
             
                it "returns a Hash" do
         
     | 
| 
       35 
60 
     | 
    
         
             
                  criteria.to_params.should be_an_instance_of(Hash)
         
     | 
| 
         @@ -183,7 +183,7 @@ describe Supernova::SolrIndexer do 
     | 
|
| 
       183 
183 
     | 
    
         | 
| 
       184 
184 
     | 
    
         
             
              describe "#query_db" do
         
     | 
| 
       185 
185 
     | 
    
         
             
                it "executes the query" do
         
     | 
| 
       186 
     | 
    
         
            -
                  db.should_receive(:query).with("query").and_return [to_index]
         
     | 
| 
      
 186 
     | 
    
         
            +
                  db.should_receive(:query).with("query", :as => :hash).and_return [to_index]
         
     | 
| 
       187 
187 
     | 
    
         
             
                  indexer.query_db("query")
         
     | 
| 
       188 
188 
     | 
    
         
             
                end
         
     | 
| 
       189 
189 
     | 
    
         | 
| 
         @@ -195,6 +195,38 @@ describe Supernova::SolrIndexer do 
     | 
|
| 
       195 
195 
     | 
    
         
             
                end
         
     | 
| 
       196 
196 
     | 
    
         
             
              end
         
     | 
| 
       197 
197 
     | 
    
         | 
| 
      
 198 
     | 
    
         
            +
              describe "#debug" do
         
     | 
| 
      
 199 
     | 
    
         
            +
                it "prints a line when debug is enabled" do
         
     | 
| 
      
 200 
     | 
    
         
            +
                  index = CustomSolrIndex.new(:debug => true)
         
     | 
| 
      
 201 
     | 
    
         
            +
                  index.should_receive(:puts).with(/hello world/)
         
     | 
| 
      
 202 
     | 
    
         
            +
                  index.debug "hello world"
         
     | 
| 
      
 203 
     | 
    
         
            +
                end
         
     | 
| 
      
 204 
     | 
    
         
            +
                
         
     | 
| 
      
 205 
     | 
    
         
            +
                it "does not print print a line when debug is not enabled" do
         
     | 
| 
      
 206 
     | 
    
         
            +
                  index = CustomSolrIndex.new(:debug => false)
         
     | 
| 
      
 207 
     | 
    
         
            +
                  index.should_not_receive(:puts)
         
     | 
| 
      
 208 
     | 
    
         
            +
                  index.debug "hello world"
         
     | 
| 
      
 209 
     | 
    
         
            +
                end
         
     | 
| 
      
 210 
     | 
    
         
            +
                
         
     | 
| 
      
 211 
     | 
    
         
            +
                it "can be called with block and still returns the response" do
         
     | 
| 
      
 212 
     | 
    
         
            +
                  index = CustomSolrIndex.new(:debug => true)
         
     | 
| 
      
 213 
     | 
    
         
            +
                  index.should_receive(:puts).with(/some message/)
         
     | 
| 
      
 214 
     | 
    
         
            +
                  res = index.debug "some message" do
         
     | 
| 
      
 215 
     | 
    
         
            +
                    112
         
     | 
| 
      
 216 
     | 
    
         
            +
                  end
         
     | 
| 
      
 217 
     | 
    
         
            +
                  res.should == 112
         
     | 
| 
      
 218 
     | 
    
         
            +
                end
         
     | 
| 
      
 219 
     | 
    
         
            +
                
         
     | 
| 
      
 220 
     | 
    
         
            +
                it "includes the time in the debug output when placeholder found" do
         
     | 
| 
      
 221 
     | 
    
         
            +
                  index = CustomSolrIndex.new(:debug => true)
         
     | 
| 
      
 222 
     | 
    
         
            +
                  Benchmark.stub(:realtime).and_return 0.12345
         
     | 
| 
      
 223 
     | 
    
         
            +
                  index.should_receive(:puts).with(/indexed in 0.123/)
         
     | 
| 
      
 224 
     | 
    
         
            +
                  index.debug "indexed in %TIME%" do
         
     | 
| 
      
 225 
     | 
    
         
            +
                    112
         
     | 
| 
      
 226 
     | 
    
         
            +
                  end
         
     | 
| 
      
 227 
     | 
    
         
            +
                end
         
     | 
| 
      
 228 
     | 
    
         
            +
              end
         
     | 
| 
      
 229 
     | 
    
         
            +
              
         
     | 
| 
       198 
230 
     | 
    
         
             
              describe "#map_hash_keys_to_solr" do
         
     | 
| 
       199 
231 
     | 
    
         
             
                class CustomSolrIndex < Supernova::SolrIndexer
         
     | 
| 
       200 
232 
     | 
    
         
             
                  has :offer_id, :type => :integer
         
     | 
| 
         @@ -205,6 +237,10 @@ describe Supernova::SolrIndexer do 
     | 
|
| 
       205 
237 
     | 
    
         
             
                  has :indexed, :type => :boolean, :virtual => true
         
     | 
| 
       206 
238 
     | 
    
         
             
                end
         
     | 
| 
       207 
239 
     | 
    
         | 
| 
      
 240 
     | 
    
         
            +
                it "sets empty dates to nil" do
         
     | 
| 
      
 241 
     | 
    
         
            +
                  CustomSolrIndex.new.map_hash_keys_to_solr("checkin_date" => nil)["checkin_date_dt"].should == nil
         
     | 
| 
      
 242 
     | 
    
         
            +
                end
         
     | 
| 
      
 243 
     | 
    
         
            +
                
         
     | 
| 
       208 
244 
     | 
    
         
             
                it "maps virtual fields" do
         
     | 
| 
       209 
245 
     | 
    
         
             
                  CustomSolrIndex.new.map_hash_keys_to_solr("indexed" => true)["indexed_b"].should == true
         
     | 
| 
       210 
246 
     | 
    
         
             
                end
         
     | 
| 
         @@ -254,6 +290,25 @@ describe Supernova::SolrIndexer do 
     | 
|
| 
       254 
290 
     | 
    
         
             
                end
         
     | 
| 
       255 
291 
     | 
    
         
             
              end
         
     | 
| 
       256 
292 
     | 
    
         | 
| 
      
 293 
     | 
    
         
            +
              describe "#rows" do
         
     | 
| 
      
 294 
     | 
    
         
            +
                let(:res) { double("result") }
         
     | 
| 
      
 295 
     | 
    
         
            +
                
         
     | 
| 
      
 296 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 297 
     | 
    
         
            +
                  custom_indexer.stub(:query_db).and_return([])
         
     | 
| 
      
 298 
     | 
    
         
            +
                end
         
     | 
| 
      
 299 
     | 
    
         
            +
                
         
     | 
| 
      
 300 
     | 
    
         
            +
                it "calls query_db with correct query" do
         
     | 
| 
      
 301 
     | 
    
         
            +
                  custom_indexer.should_receive(:query_db).with("some query").and_return res
         
     | 
| 
      
 302 
     | 
    
         
            +
                  custom_indexer.rows("some query").should == res
         
     | 
| 
      
 303 
     | 
    
         
            +
                end
         
     | 
| 
      
 304 
     | 
    
         
            +
                
         
     | 
| 
      
 305 
     | 
    
         
            +
                it "uses the query_to_index when query is blank" do
         
     | 
| 
      
 306 
     | 
    
         
            +
                  custom_indexer.should_receive(:query_to_index).and_return "some other query"
         
     | 
| 
      
 307 
     | 
    
         
            +
                  custom_indexer.should_receive(:query_db).with("some other query").and_return res
         
     | 
| 
      
 308 
     | 
    
         
            +
                  custom_indexer.rows.should == res
         
     | 
| 
      
 309 
     | 
    
         
            +
                end
         
     | 
| 
      
 310 
     | 
    
         
            +
              end
         
     | 
| 
      
 311 
     | 
    
         
            +
              
         
     | 
| 
       257 
312 
     | 
    
         
             
              describe "#solr_rows_to_index_for_query" do
         
     | 
| 
       258 
313 
     | 
    
         
             
                let(:result) {
         
     | 
| 
       259 
314 
     | 
    
         
             
                  [
         
     | 
    
        data/supernova.gemspec
    CHANGED
    
    | 
         @@ -5,11 +5,11 @@ 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       7 
7 
     | 
    
         
             
              s.name = %q{supernova}
         
     | 
| 
       8 
     | 
    
         
            -
              s.version = "0.4. 
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.4.15"
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.authors = ["Tobias Schwab"]
         
     | 
| 
       12 
     | 
    
         
            -
              s.date = %q{2011-07- 
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2011-07-28}
         
     | 
| 
       13 
13 
     | 
    
         
             
              s.description = %q{Unified search scopes}
         
     | 
| 
       14 
14 
     | 
    
         
             
              s.email = %q{tobias.schwab@dynport.de}
         
     | 
| 
       15 
15 
     | 
    
         
             
              s.executables = ["start_solr"]
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: supernova
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 17
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 4
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0.4. 
     | 
| 
      
 9 
     | 
    
         
            +
              - 15
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.4.15
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Tobias Schwab
         
     | 
| 
         @@ -15,7 +15,7 @@ autorequire: 
     | 
|
| 
       15 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date: 2011-07- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2011-07-28 00:00:00 Z
         
     | 
| 
       19 
19 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
       21 
21 
     | 
    
         
             
              requirement: &id001 !ruby/object:Gem::Requirement 
         
     |