tadb 0.1.0 → 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.
- checksums.yaml +4 -4
 - data/lib/tadb.rb +4 -0
 - data/lib/tadb/db.rb +18 -0
 - data/lib/tadb/table.rb +70 -0
 - data/lib/tadb/utils.rb +7 -0
 - data/lib/tadb/version.rb +3 -0
 - metadata +9 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 0f80b3709c6d94354ea8ba525b9831a165b6fe26
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: eee504adeeefe58d7f33808829472a38da42bd74
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ec9a255021177f287a0c1aac98484bce94342c0ccfdad710989f3ac7e6b64ecf09603057fe3f28d04a0a4d456502802657405209b0a220f026df8e54fa7c936f
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 5b780f0f50eefac645aa24ad3234f541dfd10186974343bcddf45389468ba7f7f7b216c16bbac67a1914bdd37a93dd9fc43cf213c6e4cdf8149a18fb2f6a7ad9
         
     | 
    
        data/lib/tadb.rb
    ADDED
    
    
    
        data/lib/tadb/db.rb
    ADDED
    
    | 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 2 
     | 
    
         
            +
            module TADB
         
     | 
| 
      
 3 
     | 
    
         
            +
              module DB
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                def self.table(table_name)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  Table.new(table_name)
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def self.clear_all
         
     | 
| 
      
 10 
     | 
    
         
            +
                  #FileUtils.remove_dir('./db', true)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  Utils.db_files.each do |filename|
         
     | 
| 
      
 12 
     | 
    
         
            +
                    FileUtils.chdir('./db') do
         
     | 
| 
      
 13 
     | 
    
         
            +
                      File.delete(filename)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    end
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/tadb/table.rb
    ADDED
    
    | 
         @@ -0,0 +1,70 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'securerandom'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class TADB::Table
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              def initialize(name)
         
     | 
| 
      
 7 
     | 
    
         
            +
                @name = name
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def entries
         
     | 
| 
      
 11 
     | 
    
         
            +
                file('r') do |f|
         
     | 
| 
      
 12 
     | 
    
         
            +
                  f.readlines.map do |line|
         
     | 
| 
      
 13 
     | 
    
         
            +
                    JSON.parse(line).map {|k, v| [k.to_sym, v]}.to_h
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def insert(_entry)
         
     | 
| 
      
 19 
     | 
    
         
            +
                entry = _entry.clone
         
     | 
| 
      
 20 
     | 
    
         
            +
                entry[:id] ||= SecureRandom.uuid
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                validate_types(entry)
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                file('a') do |f|
         
     | 
| 
      
 25 
     | 
    
         
            +
                  f.puts(JSON.generate(entry))
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
                entry[:id]
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def delete(id)
         
     | 
| 
      
 31 
     | 
    
         
            +
                remaining = entries.reject {|entry| entry[:id] === id}
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                file('w') do |f|
         
     | 
| 
      
 34 
     | 
    
         
            +
                  remaining.each do |entry|
         
     | 
| 
      
 35 
     | 
    
         
            +
                    f.puts(JSON.generate(entry))
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def clear
         
     | 
| 
      
 41 
     | 
    
         
            +
                File.open(db_path, 'w') {}
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              private
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              def file(mode, &block)
         
     | 
| 
      
 47 
     | 
    
         
            +
                Dir.mkdir('./db') unless File.exists?('./db')
         
     | 
| 
      
 48 
     | 
    
         
            +
                clear unless File.exists?(db_path)
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                File.open(db_path, mode) {|file| block.call(file)}
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              def db_path
         
     | 
| 
      
 54 
     | 
    
         
            +
                "./db/#{@name}"
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              def validate_types(entry)
         
     | 
| 
      
 58 
     | 
    
         
            +
                invalid_pairs = entry.select do |_, value|
         
     | 
| 
      
 59 
     | 
    
         
            +
                  !value.is_a?(String) && !value.is_a?(Numeric) && value != true && value != false
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                unless invalid_pairs.empty?
         
     | 
| 
      
 63 
     | 
    
         
            +
                  separator = '/n/t'
         
     | 
| 
      
 64 
     | 
    
         
            +
                  pairs_description = invalid_pairs
         
     | 
| 
      
 65 
     | 
    
         
            +
                                          .map {|key, value| " #{key}: #{value}"}
         
     | 
| 
      
 66 
     | 
    
         
            +
                                          .join(",#{separator}")
         
     | 
| 
      
 67 
     | 
    
         
            +
                  raise TypeError.new("Can't persist field(s) because they contain non-primitive values at" + separator + pairs_description)
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/tadb/utils.rb
    ADDED
    
    
    
        data/lib/tadb/version.rb
    ADDED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: tadb
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - UTN FRBA - TADP
         
     | 
| 
         @@ -66,13 +66,18 @@ dependencies: 
     | 
|
| 
       66 
66 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
68 
     | 
    
         
             
                    version: '3.0'
         
     | 
| 
       69 
     | 
    
         
            -
            description: Toy  
     | 
| 
      
 69 
     | 
    
         
            +
            description: Toy file based object storage for academic purposes
         
     | 
| 
       70 
70 
     | 
    
         
             
            email:
         
     | 
| 
       71 
71 
     | 
    
         
             
            - erwincdl@gmail.com
         
     | 
| 
       72 
72 
     | 
    
         
             
            executables: []
         
     | 
| 
       73 
73 
     | 
    
         
             
            extensions: []
         
     | 
| 
       74 
74 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       75 
     | 
    
         
            -
            files: 
     | 
| 
      
 75 
     | 
    
         
            +
            files:
         
     | 
| 
      
 76 
     | 
    
         
            +
            - lib/tadb.rb
         
     | 
| 
      
 77 
     | 
    
         
            +
            - lib/tadb/db.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib/tadb/table.rb
         
     | 
| 
      
 79 
     | 
    
         
            +
            - lib/tadb/utils.rb
         
     | 
| 
      
 80 
     | 
    
         
            +
            - lib/tadb/version.rb
         
     | 
| 
       76 
81 
     | 
    
         
             
            homepage: http://tadp-utn-frba.github.io/
         
     | 
| 
       77 
82 
     | 
    
         
             
            licenses:
         
     | 
| 
       78 
83 
     | 
    
         
             
            - MIT
         
     | 
| 
         @@ -96,5 +101,5 @@ rubyforge_project: 
     | 
|
| 
       96 
101 
     | 
    
         
             
            rubygems_version: 2.5.2
         
     | 
| 
       97 
102 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       98 
103 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       99 
     | 
    
         
            -
            summary:  
     | 
| 
      
 104 
     | 
    
         
            +
            summary: File based storage
         
     | 
| 
       100 
105 
     | 
    
         
             
            test_files: []
         
     |