lucarecord 0.5.3 → 0.5.4
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/CHANGELOG.md +8 -0
 - data/lib/luca_record/io.rb +30 -1
 - data/lib/luca_record/version.rb +1 -1
 - data/lib/luca_support/code.rb +1 -0
 - data/lib/luca_support/enc.rb +31 -0
 - data/lib/luca_support/view.rb +10 -2
 - data/lib/luca_support.rb +1 -0
 - metadata +4 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: d7a1835b0493134002d92d7a9b8f8fb6a55305f470636c448da8848f9b6afdaa
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 9ec15acf15451babe4280c098e670f68a377e9be9af8e312f3b0b558476da995
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 7741483aa8e7e6ca1fb01325f546e703b4a530d48b7d68823f127402c39a092d01ee1bcc6a2f319794bd0830a7095957405b833f02c11e480fec6df399f37997
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 90934508dd586dc6582be9366b22d9a60958ce247c0d971d36207016b5ec5b69ee7375f6613cc7e37fe920fd135c2fd85dd5482458763e9372b7ae0c39bf78e7
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ## LucaRecord 0.5.4
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * add `upsert()`
         
     | 
| 
      
 4 
     | 
    
         
            +
            * `open_records()` supports git-like id sub directories
         
     | 
| 
      
 5 
     | 
    
         
            +
            * Regard zero-prefixed code like '00123' as not BigDecimal but String on YAML load
         
     | 
| 
      
 6 
     | 
    
         
            +
            * Add support table columns order to `LucaSupport::View.nushell()`
         
     | 
| 
      
 7 
     | 
    
         
            +
            * Breaking change: `LucaSupport::View.nushell()` takes Ruby Array. YAML is not accepted anymore.
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       1 
9 
     | 
    
         
             
            ## LucaRecord 0.5.3
         
     | 
| 
       2 
10 
     | 
    
         | 
| 
       3 
11 
     | 
    
         
             
            * add `find_secure()` for partial data encryption.
         
     | 
    
        data/lib/luca_record/io.rb
    CHANGED
    
    | 
         @@ -148,6 +148,26 @@ module LucaRecord # :nodoc: 
     | 
|
| 
       148 
148 
     | 
    
         
             
                    end
         
     | 
| 
       149 
149 
     | 
    
         
             
                  end
         
     | 
| 
       150 
150 
     | 
    
         | 
| 
      
 151 
     | 
    
         
            +
                  # update uuid keyed record based on 'id' field.
         
     | 
| 
      
 152 
     | 
    
         
            +
                  # If not found, just create
         
     | 
| 
      
 153 
     | 
    
         
            +
                  #
         
     | 
| 
      
 154 
     | 
    
         
            +
                  def upsert(obj, basedir: @dirname)
         
     | 
| 
      
 155 
     | 
    
         
            +
                    return nil if obj['id'].nil?
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                    validate_keys(obj)
         
     | 
| 
      
 158 
     | 
    
         
            +
                    merged = begin
         
     | 
| 
      
 159 
     | 
    
         
            +
                                open_hashed(basedir, obj['id'], 'r') do |f|
         
     | 
| 
      
 160 
     | 
    
         
            +
                                  load_data(f).merge(obj)
         
     | 
| 
      
 161 
     | 
    
         
            +
                                end
         
     | 
| 
      
 162 
     | 
    
         
            +
                              rescue
         
     | 
| 
      
 163 
     | 
    
         
            +
                                obj
         
     | 
| 
      
 164 
     | 
    
         
            +
                              end
         
     | 
| 
      
 165 
     | 
    
         
            +
                    open_hashed(basedir, obj['id'], 'w') do |f|
         
     | 
| 
      
 166 
     | 
    
         
            +
                      f.write(YAML.dump(LucaSupport::Code.readable(merged.sort.to_h)))
         
     | 
| 
      
 167 
     | 
    
         
            +
                    end
         
     | 
| 
      
 168 
     | 
    
         
            +
                    obj['id']
         
     | 
| 
      
 169 
     | 
    
         
            +
                  end
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
       151 
171 
     | 
    
         
             
                  # If multiple ID matched, return short ID and human readable label.
         
     | 
| 
       152 
172 
     | 
    
         
             
                  #
         
     | 
| 
       153 
173 
     | 
    
         
             
                  def id_completion(phrase, label: 'name', basedir: @dirname)
         
     | 
| 
         @@ -333,7 +353,16 @@ module LucaRecord # :nodoc: 
     | 
|
| 
       333 
353 
     | 
    
         
             
                    file_pattern = filename.nil? ? '*' : "#{filename}*"
         
     | 
| 
       334 
354 
     | 
    
         
             
                    Dir.chdir(abs_path(basedir)) do
         
     | 
| 
       335 
355 
     | 
    
         
             
                      FileUtils.mkdir_p(subdir) if mode == 'w' && !Dir.exist?(subdir)
         
     | 
| 
       336 
     | 
    
         
            -
                      Dir.glob("#{subdir}*/#{file_pattern}" 
     | 
| 
      
 356 
     | 
    
         
            +
                      records = Dir.glob("#{subdir}*/#{file_pattern}", sort: false)
         
     | 
| 
      
 357 
     | 
    
         
            +
                      records = case records.find_index { |path| FileTest.file?(path) }
         
     | 
| 
      
 358 
     | 
    
         
            +
                                when nil
         
     | 
| 
      
 359 
     | 
    
         
            +
                                  # TODO: file_pattern is not valid
         
     | 
| 
      
 360 
     | 
    
         
            +
                                  Dir.glob("#{subdir}*/*/#{file_pattern}", sort: false)
         
     | 
| 
      
 361 
     | 
    
         
            +
                                else
         
     | 
| 
      
 362 
     | 
    
         
            +
                                  records.sort
         
     | 
| 
      
 363 
     | 
    
         
            +
                                end
         
     | 
| 
      
 364 
     | 
    
         
            +
                      records.each do |subpath|
         
     | 
| 
      
 365 
     | 
    
         
            +
                        next if FileTest.directory?(subpath)
         
     | 
| 
       337 
366 
     | 
    
         
             
                        next if skip_on_unmatch_code(subpath, code)
         
     | 
| 
       338 
367 
     | 
    
         | 
| 
       339 
368 
     | 
    
         
             
                        id_set = subpath.split('/').map { |str| str.split('-') }.flatten
         
     | 
    
        data/lib/luca_record/version.rb
    CHANGED
    
    
    
        data/lib/luca_support/code.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module LucaSupport # :nodoc:
         
     | 
| 
      
 6 
     | 
    
         
            +
              # Encrypt/Decrypt directory with openssl command
         
     | 
| 
      
 7 
     | 
    
         
            +
              #
         
     | 
| 
      
 8 
     | 
    
         
            +
              module Enc
         
     | 
| 
      
 9 
     | 
    
         
            +
                module_function
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                # TODO: check if openssl/tar exists
         
     | 
| 
      
 12 
     | 
    
         
            +
                # TODO: handle multiple directories
         
     | 
| 
      
 13 
     | 
    
         
            +
                # TODO: check space in dir string
         
     | 
| 
      
 14 
     | 
    
         
            +
                # TODO: check if origin exists
         
     | 
| 
      
 15 
     | 
    
         
            +
                def encrypt(dir, iter: 10000, cleanup: false)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  Dir.chdir(Pathname(PJDIR) / 'data') do
         
     | 
| 
      
 17 
     | 
    
         
            +
                    system "tar -czf - #{dir} | openssl enc -e -aes256 -iter #{iter} -out #{dir}.tar.gz"
         
     | 
| 
      
 18 
     | 
    
         
            +
                    return if ! cleanup
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    FileUtils.rm_rf dir
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                # TODO: check space in dir string
         
     | 
| 
      
 25 
     | 
    
         
            +
                def decrypt(dir, iter: 10000)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  Dir.chdir(Pathname(PJDIR) / 'data') do
         
     | 
| 
      
 27 
     | 
    
         
            +
                    system "openssl enc -d -aes256 -iter #{iter} -in #{dir}.tar.gz | tar xz"
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/luca_support/view.rb
    CHANGED
    
    | 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'erb'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'json'
         
     | 
| 
       4 
5 
     | 
    
         
             
            require 'open3'
         
     | 
| 
       5 
6 
     | 
    
         
             
            require 'pathname'
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
         @@ -47,9 +48,16 @@ module LucaSupport 
     | 
|
| 
       47 
48 
     | 
    
         
             
                  nil
         
     | 
| 
       48 
49 
     | 
    
         
             
                end
         
     | 
| 
       49 
50 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                def nushell( 
     | 
| 
      
 51 
     | 
    
         
            +
                def nushell(records, columns=[])
         
     | 
| 
      
 52 
     | 
    
         
            +
                  return nil if records.is_a?(String)
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       51 
54 
     | 
    
         
             
                  require 'open3'
         
     | 
| 
       52 
     | 
    
         
            -
                   
     | 
| 
      
 55 
     | 
    
         
            +
                  select = if columns.empty?
         
     | 
| 
      
 56 
     | 
    
         
            +
                             ''
         
     | 
| 
      
 57 
     | 
    
         
            +
                           else
         
     | 
| 
      
 58 
     | 
    
         
            +
                             '| select --ignore-errors ' + columns.map { |col| col.gsub(/[^a-zA-Z0-9_-]/, '') }.join(' ')
         
     | 
| 
      
 59 
     | 
    
         
            +
                           end
         
     | 
| 
      
 60 
     | 
    
         
            +
                  Open3.pipeline_w(%(nu -c 'cat - | from json #{select}')) { |stdin| stdin.puts JSON.dump(records) }
         
     | 
| 
       53 
61 
     | 
    
         
             
                end
         
     | 
| 
       54 
62 
     | 
    
         
             
              end
         
     | 
| 
       55 
63 
     | 
    
         
             
            end
         
     | 
    
        data/lib/luca_support.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: lucarecord
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.5. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.5.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Chuma Takahiro
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2023- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2023-04-11 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -71,6 +71,7 @@ files: 
     | 
|
| 
       71 
71 
     | 
    
         
             
            - lib/luca_support.rb
         
     | 
| 
       72 
72 
     | 
    
         
             
            - lib/luca_support/code.rb
         
     | 
| 
       73 
73 
     | 
    
         
             
            - lib/luca_support/config.rb
         
     | 
| 
      
 74 
     | 
    
         
            +
            - lib/luca_support/enc.rb
         
     | 
| 
       74 
75 
     | 
    
         
             
            - lib/luca_support/mail.rb
         
     | 
| 
       75 
76 
     | 
    
         
             
            - lib/luca_support/range.rb
         
     | 
| 
       76 
77 
     | 
    
         
             
            - lib/luca_support/view.rb
         
     | 
| 
         @@ -96,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       96 
97 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       97 
98 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       98 
99 
     | 
    
         
             
            requirements: []
         
     | 
| 
       99 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 100 
     | 
    
         
            +
            rubygems_version: 3.3.5
         
     | 
| 
       100 
101 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       101 
102 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       102 
103 
     | 
    
         
             
            summary: ERP File operation framework
         
     |