baza 0.0.6 → 0.0.7
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/baza.gemspec +2 -2
- data/include/db.rb +2 -2
- data/include/query_buffer.rb +30 -0
- data/spec/baza_spec.rb +16 -1
- metadata +3 -3
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.0. | 
| 1 | 
            +
            0.0.7
         | 
    
        data/baza.gemspec
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = "baza"
         | 
| 8 | 
            -
              s.version = "0.0. | 
| 8 | 
            +
              s.version = "0.0.7"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Kasper Johansen"]
         | 
| 12 | 
            -
              s.date = "2013-04- | 
| 12 | 
            +
              s.date = "2013-04-18"
         | 
| 13 13 | 
             
              s.description = "A database abstraction layer, model framework and database framework."
         | 
| 14 14 | 
             
              s.email = "kj@gfish.com"
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
    
        data/include/db.rb
    CHANGED
    
    | @@ -717,8 +717,8 @@ class Baza::Db | |
| 717 717 | 
             
              end
         | 
| 718 718 |  | 
| 719 719 | 
             
              #Yields a query-buffer and flushes at the end of the block given.
         | 
| 720 | 
            -
              def q_buffer(&block)
         | 
| 721 | 
            -
                Baza::QueryBuffer.new(:db => self, &block)
         | 
| 720 | 
            +
              def q_buffer(args = {}, &block)
         | 
| 721 | 
            +
                Baza::QueryBuffer.new(args.merge(:db => self), &block)
         | 
| 722 722 | 
             
                return nil
         | 
| 723 723 | 
             
              end
         | 
| 724 724 |  | 
    
        data/include/query_buffer.rb
    CHANGED
    
    | @@ -1,5 +1,8 @@ | |
| 1 1 | 
             
            #This class buffers a lot of queries and flushes them out via transactions.
         | 
| 2 2 | 
             
            class Baza::QueryBuffer
         | 
| 3 | 
            +
              attr_reader :thread_async
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              INITIALIZE_ARGS_ALLOWED = [:db, :debug, :flush_async]
         | 
| 3 6 | 
             
              #Constructor. Takes arguments to be used and a block.
         | 
| 4 7 | 
             
              def initialize(args)
         | 
| 5 8 | 
             
                @args = args
         | 
| @@ -16,6 +19,7 @@ class Baza::QueryBuffer | |
| 16 19 | 
             
            				yield(self)
         | 
| 17 20 | 
             
            			ensure
         | 
| 18 21 | 
             
            				self.flush
         | 
| 22 | 
            +
                    thread_async_join
         | 
| 19 23 | 
             
            			end
         | 
| 20 24 | 
             
            		end
         | 
| 21 25 | 
             
              end
         | 
| @@ -68,6 +72,32 @@ class Baza::QueryBuffer | |
| 68 72 |  | 
| 69 73 | 
             
              #Flushes all queries out in a transaction. This will automatically be called for every 1000 queries.
         | 
| 70 74 | 
             
              def flush
         | 
| 75 | 
            +
                if @args[:flush_async]
         | 
| 76 | 
            +
                  flush_async
         | 
| 77 | 
            +
                else
         | 
| 78 | 
            +
                  flush_real
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
              
         | 
| 82 | 
            +
              private
         | 
| 83 | 
            +
              
         | 
| 84 | 
            +
              #Runs the flush in a thread in the background.
         | 
| 85 | 
            +
              def flush_async
         | 
| 86 | 
            +
                thread_async_join
         | 
| 87 | 
            +
                
         | 
| 88 | 
            +
                @thread_async = Thread.new do
         | 
| 89 | 
            +
                  flush_real
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
              end
         | 
| 92 | 
            +
              
         | 
| 93 | 
            +
              def thread_async_join
         | 
| 94 | 
            +
                if thread = @thread_async
         | 
| 95 | 
            +
                  thread.join
         | 
| 96 | 
            +
                end
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
              
         | 
| 99 | 
            +
              #Flushes the queries for real.
         | 
| 100 | 
            +
              def flush_real
         | 
| 71 101 | 
             
                return nil if @queries_count <= 0
         | 
| 72 102 |  | 
| 73 103 | 
             
                @lock.synchronize do
         | 
    
        data/spec/baza_spec.rb
    CHANGED
    
    | @@ -342,9 +342,24 @@ describe "Baza" do | |
| 342 342 | 
             
                      count += 1
         | 
| 343 343 | 
             
                    end
         | 
| 344 344 |  | 
| 345 | 
            -
                     | 
| 345 | 
            +
                    #Test the flush-async which flushes transactions in a thread asyncronous.
         | 
| 346 | 
            +
                    db.q_buffer(:flush_async => true) do |buffer|
         | 
| 347 | 
            +
                      count = 0
         | 
| 346 348 | 
             
                      db.select(:test_table) do |row|
         | 
| 349 | 
            +
                        count += 1
         | 
| 350 | 
            +
                        
         | 
| 351 | 
            +
                        if count == 1000
         | 
| 352 | 
            +
                          time_start = Time.now.to_f
         | 
| 353 | 
            +
                        end
         | 
| 354 | 
            +
                        
         | 
| 347 355 | 
             
                        buffer.delete(:test_table, {:id => row[:id]})
         | 
| 356 | 
            +
                        
         | 
| 357 | 
            +
                        if count == 1000
         | 
| 358 | 
            +
                          time_end = Time.now.to_f
         | 
| 359 | 
            +
                          
         | 
| 360 | 
            +
                          time_spent = time_end - time_start
         | 
| 361 | 
            +
                          raise "Too much time spent: '#{time_spent}'." if time_spent > 0.01
         | 
| 362 | 
            +
                        end
         | 
| 348 363 | 
             
                      end
         | 
| 349 364 | 
             
                    end
         | 
| 350 365 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: baza
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.7
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013-04- | 
| 12 | 
            +
            date: 2013-04-18 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: datet
         | 
| @@ -235,7 +235,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 235 235 | 
             
                  version: '0'
         | 
| 236 236 | 
             
                  segments:
         | 
| 237 237 | 
             
                  - 0
         | 
| 238 | 
            -
                  hash:  | 
| 238 | 
            +
                  hash: 3943301269923844356
         | 
| 239 239 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 240 240 | 
             
              none: false
         | 
| 241 241 | 
             
              requirements:
         |