tadb 0.3.1 → 0.3.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.
- checksums.yaml +5 -5
- data/lib/tadb.rb +8 -4
- data/lib/tadb/db.rb +18 -0
- data/lib/tadb/table.rb +86 -0
- data/lib/tadb/utils.rb +7 -0
- metadata +16 -17
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 7c93f62a11b009c566e1fb48f69ac3ab7bd2766efacc7221cffa9b96fb1d61eb
         | 
| 4 | 
            +
              data.tar.gz: cd883727d6213e37415bdbd8b6354d7ed7220cd89a963a6df30b573dbdafc186
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 86c9aef15d2d8c2996e077b0686944967b5edd168034d9cd6847443fdcb7e1b2a3621e1b4b7daaddc59f669218d581af9ab848b5efe897f32bda20c1e3bc246a
         | 
| 7 | 
            +
              data.tar.gz: 5f4c20841823515e815ac9db0340bc01eb085783733c69a671daa14ef08aed8dece3f2dce1115eb1f2f8ade819f781b80b0294d4e344bbe8e5ddd6bbd5b05d98
         | 
    
        data/lib/tadb.rb
    CHANGED
    
    | @@ -1,4 +1,8 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 1 | 
            +
            module TADB
         | 
| 2 | 
            +
              VERSION = '0.3.7'
         | 
| 3 | 
            +
            end
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require_relative 'tadb/db'
         | 
| 6 | 
            +
            require_relative 'tadb/table'
         | 
| 7 | 
            +
            require_relative 'tadb/utils'
         | 
| 8 | 
            +
             | 
    
        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, clear_if_content = false)
         | 
| 6 | 
            +
                  Table.new(table_name, clear_if_content)
         | 
| 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,86 @@ | |
| 1 | 
            +
            require 'securerandom'
         | 
| 2 | 
            +
            require 'json'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class TADB::Table
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              def initialize(name, clear_if_content = false)
         | 
| 7 | 
            +
                @name = name
         | 
| 8 | 
            +
                clear_file_contents if clear_if_content
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def entries
         | 
| 12 | 
            +
                file('r') do |f|
         | 
| 13 | 
            +
                  f.readlines.map do |line|
         | 
| 14 | 
            +
                    JSON.parse(line, symbolize_names: true)
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def insert(_entry)
         | 
| 20 | 
            +
                entry = _entry.clone
         | 
| 21 | 
            +
                entry[:id] ||= SecureRandom.uuid
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                validate_types(entry)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                file('a') do |f|
         | 
| 26 | 
            +
                  f.puts(JSON.generate(entry))
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
                entry[:id]
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              def delete(id)
         | 
| 32 | 
            +
                remaining = entries.reject {|entry| entry[:id] === id}
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                file('w') do |f|
         | 
| 35 | 
            +
                  remaining.each do |entry|
         | 
| 36 | 
            +
                    f.puts(JSON.generate(entry))
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              def clear
         | 
| 42 | 
            +
                File.open(db_path, 'w') do |f|
         | 
| 43 | 
            +
                  f.sync = true
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              private
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              def clear_file_contents
         | 
| 50 | 
            +
                return unless file_present?
         | 
| 51 | 
            +
                clear
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              def file_present?
         | 
| 55 | 
            +
                File.file?(db_path)
         | 
| 56 | 
            +
              end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
              def file(mode, &block)
         | 
| 59 | 
            +
                Dir.mkdir('./db') unless File.exists?('./db')
         | 
| 60 | 
            +
                clear unless File.exists?(db_path)
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                File.open(db_path, mode) do |file|
         | 
| 63 | 
            +
                  # The new File object is buffered mode (or non-sync mode), unless filename is a tty. See IO#flush, IO#fsync, IO#fdatasync, and IO#sync= about sync mode.
         | 
| 64 | 
            +
                  file.sync = true # https://ruby-doc.org/core-3.0.0/File.html#method-c-new-label-Examples
         | 
| 65 | 
            +
                  block.call(file)
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
              end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
              def db_path
         | 
| 70 | 
            +
                "./db/#{@name}"
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
              def validate_types(entry)
         | 
| 74 | 
            +
                invalid_pairs = entry.select do |_, value|
         | 
| 75 | 
            +
                  !value.is_a?(String) && !value.is_a?(Numeric) && value != true && value != false
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                unless invalid_pairs.empty?
         | 
| 79 | 
            +
                  separator = '/n/t'
         | 
| 80 | 
            +
                  pairs_description = invalid_pairs
         | 
| 81 | 
            +
                                          .map {|key, value| " #{key}: #{value}"}
         | 
| 82 | 
            +
                                          .join(",#{separator}")
         | 
| 83 | 
            +
                  raise TypeError.new("Can't persist field(s) because they contain non-primitive values at" + separator + pairs_description)
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
              end
         | 
| 86 | 
            +
            end
         | 
    
        data/lib/tadb/utils.rb
    ADDED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: tadb
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.7
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - UTN FRBA - TADP
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2021-04-24 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rspec-collection_matchers
         | 
| @@ -16,64 +16,68 @@ dependencies: | |
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '1. | 
| 19 | 
            +
                    version: '1.2'
         | 
| 20 20 | 
             
              type: :development
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: '1. | 
| 26 | 
            +
                    version: '1.2'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: bundler
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version:  | 
| 33 | 
            +
                    version: 2.2.15
         | 
| 34 34 | 
             
              type: :development
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version:  | 
| 40 | 
            +
                    version: 2.2.15
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: rake
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 45 | 
             
                - - "~>"
         | 
| 46 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: ' | 
| 47 | 
            +
                    version: '13.0'
         | 
| 48 48 | 
             
              type: :development
         | 
| 49 49 | 
             
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - "~>"
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: ' | 
| 54 | 
            +
                    version: '13.0'
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 56 | 
             
              name: rspec
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 58 | 
             
                requirements:
         | 
| 59 59 | 
             
                - - "~>"
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: '3. | 
| 61 | 
            +
                    version: '3.10'
         | 
| 62 62 | 
             
              type: :development
         | 
| 63 63 | 
             
              prerelease: false
         | 
| 64 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 65 | 
             
                requirements:
         | 
| 66 66 | 
             
                - - "~>"
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version: '3. | 
| 68 | 
            +
                    version: '3.10'
         | 
| 69 69 | 
             
            description: Toy file based object storage for academic purposes
         | 
| 70 70 | 
             
            email:
         | 
| 71 71 | 
             
            - erwincdl@gmail.com
         | 
| 72 | 
            +
            - ebossicarranza@frba.utn.edu.ar
         | 
| 72 73 | 
             
            executables: []
         | 
| 73 74 | 
             
            extensions: []
         | 
| 74 75 | 
             
            extra_rdoc_files: []
         | 
| 75 76 | 
             
            files:
         | 
| 76 77 | 
             
            - lib/tadb.rb
         | 
| 78 | 
            +
            - lib/tadb/db.rb
         | 
| 79 | 
            +
            - lib/tadb/table.rb
         | 
| 80 | 
            +
            - lib/tadb/utils.rb
         | 
| 77 81 | 
             
            homepage: http://tadp-utn-frba.github.io/
         | 
| 78 82 | 
             
            licenses:
         | 
| 79 83 | 
             
            - MIT
         | 
| @@ -81,11 +85,7 @@ metadata: {} | |
| 81 85 | 
             
            post_install_message: 
         | 
| 82 86 | 
             
            rdoc_options: []
         | 
| 83 87 | 
             
            require_paths:
         | 
| 84 | 
            -
            - lib | 
| 85 | 
            -
            - lib/tadb/table.rb
         | 
| 86 | 
            -
            - lib/tadb/utils.rb
         | 
| 87 | 
            -
            - lib/tadb/version.rb
         | 
| 88 | 
            -
            - lib/tadb.rb
         | 
| 88 | 
            +
            - lib
         | 
| 89 89 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 90 90 | 
             
              requirements:
         | 
| 91 91 | 
             
              - - ">="
         | 
| @@ -97,8 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 97 97 | 
             
                - !ruby/object:Gem::Version
         | 
| 98 98 | 
             
                  version: '0'
         | 
| 99 99 | 
             
            requirements: []
         | 
| 100 | 
            -
             | 
| 101 | 
            -
            rubygems_version: 2.5.2
         | 
| 100 | 
            +
            rubygems_version: 3.2.0.rc.1
         | 
| 102 101 | 
             
            signing_key: 
         | 
| 103 102 | 
             
            specification_version: 4
         | 
| 104 103 | 
             
            summary: File based storage
         |