libis-tools 1.0.5-java
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 +7 -0
- data/.coveralls.yml +2 -0
- data/.gitignore +16 -0
- data/.rspec +2 -0
- data/.travis.yml +40 -0
- data/Gemfile +7 -0
- data/README.md +202 -0
- data/Rakefile +11 -0
- data/bin/libis_tool +5 -0
- data/lib/libis-tools.rb +1 -0
- data/lib/libis/tools.rb +25 -0
- data/lib/libis/tools/assert.rb +52 -0
- data/lib/libis/tools/checksum.rb +106 -0
- data/lib/libis/tools/cli/cli_helper.rb +189 -0
- data/lib/libis/tools/cli/reorg.rb +416 -0
- data/lib/libis/tools/command.rb +133 -0
- data/lib/libis/tools/command_line.rb +23 -0
- data/lib/libis/tools/config.rb +147 -0
- data/lib/libis/tools/config_file.rb +85 -0
- data/lib/libis/tools/csv.rb +38 -0
- data/lib/libis/tools/deep_struct.rb +71 -0
- data/lib/libis/tools/extend/array.rb +16 -0
- data/lib/libis/tools/extend/empty.rb +7 -0
- data/lib/libis/tools/extend/hash.rb +147 -0
- data/lib/libis/tools/extend/kernel.rb +25 -0
- data/lib/libis/tools/extend/ostruct.rb +3 -0
- data/lib/libis/tools/extend/roo.rb +91 -0
- data/lib/libis/tools/extend/string.rb +94 -0
- data/lib/libis/tools/extend/struct.rb +29 -0
- data/lib/libis/tools/extend/symbol.rb +8 -0
- data/lib/libis/tools/logger.rb +130 -0
- data/lib/libis/tools/mets_dnx.rb +61 -0
- data/lib/libis/tools/mets_file.rb +504 -0
- data/lib/libis/tools/mets_objects.rb +547 -0
- data/lib/libis/tools/parameter.rb +372 -0
- data/lib/libis/tools/spreadsheet.rb +196 -0
- data/lib/libis/tools/temp_file.rb +42 -0
- data/lib/libis/tools/thread_safe.rb +31 -0
- data/lib/libis/tools/version.rb +5 -0
- data/lib/libis/tools/xml_document.rb +583 -0
- data/libis-tools.gemspec +55 -0
- data/spec/assert_spec.rb +65 -0
- data/spec/checksum_spec.rb +68 -0
- data/spec/command_spec.rb +90 -0
- data/spec/config_file_spec.rb +83 -0
- data/spec/config_spec.rb +113 -0
- data/spec/csv_spec.rb +159 -0
- data/spec/data/test-headers.csv +2 -0
- data/spec/data/test-headers.tsv +2 -0
- data/spec/data/test-noheaders.csv +1 -0
- data/spec/data/test-noheaders.tsv +1 -0
- data/spec/data/test.data +9 -0
- data/spec/data/test.xlsx +0 -0
- data/spec/data/test.xml +8 -0
- data/spec/data/test.yml +2 -0
- data/spec/data/test_config.yml +15 -0
- data/spec/deep_struct_spec.rb +138 -0
- data/spec/logger_spec.rb +165 -0
- data/spec/mets_file_spec.rb +223 -0
- data/spec/parameter_container_spec.rb +152 -0
- data/spec/parameter_spec.rb +148 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/spreadsheet_spec.rb +1820 -0
- data/spec/temp_file_spec.rb +76 -0
- data/spec/test.xsd +20 -0
- data/spec/thread_safe_spec.rb +64 -0
- data/spec/xmldocument_spec.rb +421 -0
- data/test/test_helper.rb +7 -0
- data/test/webservices/test_ca_item_info.rb +59 -0
- data/test/webservices/test_ca_search.rb +35 -0
- metadata +437 -0
    
        data/libis-tools.gemspec
    ADDED
    
    | @@ -0,0 +1,55 @@ | |
| 1 | 
            +
            # coding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            lib = File.expand_path('../lib', __FILE__)
         | 
| 4 | 
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            require 'libis/tools/version'
         | 
| 7 | 
            +
            require 'date'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            Gem::Specification.new do |spec|
         | 
| 10 | 
            +
              spec.name          = 'libis-tools'
         | 
| 11 | 
            +
              spec.version       = ::Libis::Tools::VERSION
         | 
| 12 | 
            +
              spec.date          = Date.today.to_s
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              spec.summary       = %q{LIBIS toolbox.}
         | 
| 15 | 
            +
              spec.description   = %q{Some tool classes for other LIBIS gems.}
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              spec.authors       = ['Kris Dekeyser']
         | 
| 18 | 
            +
              spec.email         = ['kris.dekeyser@libis.be']
         | 
| 19 | 
            +
              spec.homepage      = 'https://github.com/Kris-LIBIS/LIBIS_Tools'
         | 
| 20 | 
            +
              spec.license       = 'MIT'
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              spec.platform      = Gem::Platform::JAVA if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              spec.files         = `git ls-files -z`.split("\x0")
         | 
| 25 | 
            +
              spec.bindir        = 'bin'
         | 
| 26 | 
            +
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| 27 | 
            +
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              spec.require_paths = ['lib']
         | 
| 30 | 
            +
              spec.has_rdoc = 'yard'
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              spec.add_development_dependency 'bundler', '> 1.6'
         | 
| 33 | 
            +
              spec.add_development_dependency 'rake', '~> 10.3'
         | 
| 34 | 
            +
              spec.add_development_dependency 'rspec', '~> 3.1'
         | 
| 35 | 
            +
              spec.add_development_dependency 'term-ansicolor', '~> 1.6'
         | 
| 36 | 
            +
              spec.add_development_dependency 'equivalent-xml', '~> 0.5'
         | 
| 37 | 
            +
              spec.add_development_dependency 'awesome_print', '~> 1.6'
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              spec.add_runtime_dependency 'backports', '~> 3.6'
         | 
| 40 | 
            +
              spec.add_runtime_dependency 'nokogiri', '~> 1.6'
         | 
| 41 | 
            +
              spec.add_runtime_dependency 'gyoku',  '~> 1.3'
         | 
| 42 | 
            +
              spec.add_runtime_dependency 'nori', '~> 2.6'
         | 
| 43 | 
            +
              spec.add_runtime_dependency 'recursive-open-struct', '~> 1.0'
         | 
| 44 | 
            +
              spec.add_runtime_dependency 'parslet', '~> 1.7'
         | 
| 45 | 
            +
              spec.add_runtime_dependency 'simple_xlsx_reader', '~> 1.0'
         | 
| 46 | 
            +
              spec.add_runtime_dependency 'logging', '~> 2.0'
         | 
| 47 | 
            +
              spec.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
         | 
| 48 | 
            +
              spec.add_runtime_dependency 'yard', '~> 0.9.11'
         | 
| 49 | 
            +
              spec.add_runtime_dependency 'roo', '~> 2.5'
         | 
| 50 | 
            +
              spec.add_runtime_dependency 'roo-xls', '~> 1.0'
         | 
| 51 | 
            +
              spec.add_runtime_dependency 'tty-prompt'
         | 
| 52 | 
            +
              spec.add_runtime_dependency 'tty-config'
         | 
| 53 | 
            +
              spec.add_runtime_dependency 'thor'
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            end
         | 
    
        data/spec/assert_spec.rb
    ADDED
    
    | @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
            require_relative 'spec_helper'
         | 
| 3 | 
            +
            require 'libis/tools/assert'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe 'Assert' do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              before :example do
         | 
| 8 | 
            +
                $DEBUG = true
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              after :example do
         | 
| 12 | 
            +
                $DEBUG = false
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              it 'should throw an assert exception when statement is false' do
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                message = 'Testing the assert with false.'
         | 
| 18 | 
            +
                expect {
         | 
| 19 | 
            +
                  assert(false, message)
         | 
| 20 | 
            +
                }.to raise_error(AssertionFailure, message)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              it 'should only throw an assert in debug mode' do
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                $DEBUG = false
         | 
| 27 | 
            +
                expect {
         | 
| 28 | 
            +
                  assert(false, 'Testing the assert with false.')
         | 
| 29 | 
            +
                }.to_not raise_error
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              it 'should not throw an assert if statement is true' do
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                expect {
         | 
| 36 | 
            +
                  assert(true, 'Testing the assert with true.')
         | 
| 37 | 
            +
                }.to_not raise_error
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              it 'should throw an assert on nil' do
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                message = 'Testing the assert with nil.'
         | 
| 44 | 
            +
                expect {
         | 
| 45 | 
            +
                  assert(nil, message)
         | 
| 46 | 
            +
                }.to raise_error(AssertionFailure, message)
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              it 'should check the given block if present' do
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                message = 'block test'
         | 
| 52 | 
            +
                expect {
         | 
| 53 | 
            +
                  assert(message) do
         | 
| 54 | 
            +
                    false
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
                }.to raise_error(AssertionFailure, message)
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                expect {
         | 
| 59 | 
            +
                  assert(message) do
         | 
| 60 | 
            +
                    true
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                }.to_not raise_error
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
            end
         | 
| @@ -0,0 +1,68 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
            require_relative 'spec_helper'
         | 
| 3 | 
            +
            require 'libis/tools/checksum'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe 'Checksum' do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              def hex2base64(hexdigest)
         | 
| 8 | 
            +
                [[hexdigest].pack('H*')].pack('m0')
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def hex2string(hexdigest)
         | 
| 12 | 
            +
                [hexdigest].pack('H*')
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              it 'should not know how to calculate ABC checksum' do
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                checksum_type = :ABC
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                expect {
         | 
| 20 | 
            +
                  ::Libis::Tools::Checksum.hexdigest('abc', checksum_type)
         | 
| 21 | 
            +
                }.to raise_error(RuntimeError, "Checksum type 'ABC' not supported.")
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              let(:filename) { File.join(File.dirname(__FILE__), 'data', 'test.data') }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              CHECKSUM_RESULTS = {
         | 
| 28 | 
            +
                  MD5: 'fe249d8dd45a39793f315fb0734ffe2c',
         | 
| 29 | 
            +
                  SHA1: 'e8f322d186699807a98a0cefb5015acf1554f954',
         | 
| 30 | 
            +
                  SHA256: '2a742e643dd79427738bdc0ebd0d2837f998fe2101a964c2d5014905d331bbc4',
         | 
| 31 | 
            +
                  SHA384: '71083b74394f49db6149ad9147103f7693ec823183750ce32a2215bbd7ee5e75212e2d794243c7e76c7318a4ddcf9a56',
         | 
| 32 | 
            +
                  SHA512: '10964f5272729c2670ccad67754284fb06cca1387270c184c2edbcd032700548297916c8e109a10e019c25b86c646e95a3456c465f83d571502889f97b483e6f'
         | 
| 33 | 
            +
              }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              # noinspection RubyResolve
         | 
| 36 | 
            +
              unless defined? JRUBY_VERSION
         | 
| 37 | 
            +
                CHECKSUM_RESULTS[:RMD160] = '17c9eaad9ccbaad0e030c2c5d60fd9d58255cc39'
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              filename = File.join(File.dirname(__FILE__), 'data', 'test.data')
         | 
| 41 | 
            +
              file = File.absolute_path(filename)
         | 
| 42 | 
            +
              string = File.read(filename)
         | 
| 43 | 
            +
              SUBJECTS = {
         | 
| 44 | 
            +
                  string: string,
         | 
| 45 | 
            +
                  file: file
         | 
| 46 | 
            +
              }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              CHECKSUM_RESULTS.each do |checksum_type, digest|
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                SUBJECTS.each do |subject_type, subject|
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  it "should calculate #{checksum_type} from #{subject_type}" do
         | 
| 53 | 
            +
                    expect(::Libis::Tools::Checksum.hexdigest(subject, checksum_type)).to eq digest
         | 
| 54 | 
            +
                    expect(::Libis::Tools::Checksum.base64digest(subject, checksum_type)).to eq hex2base64(digest)
         | 
| 55 | 
            +
                    expect(::Libis::Tools::Checksum.digest(subject, checksum_type)).to eq hex2string(digest)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    checksum = ::Libis::Tools::Checksum.new(checksum_type)
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                    expect(checksum.hexdigest(subject)).to eq digest
         | 
| 60 | 
            +
                    expect(checksum.base64digest(subject)).to eq hex2base64(digest)
         | 
| 61 | 
            +
                    expect(checksum.digest(subject)).to eq hex2string(digest)
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            end
         | 
| @@ -0,0 +1,90 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
            require_relative 'spec_helper'
         | 
| 3 | 
            +
            require 'libis/tools/command'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe 'Command' do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              let!(:dir) { Dir.pwd }
         | 
| 8 | 
            +
              let(:entries) {
         | 
| 9 | 
            +
                Dir.entries('.').inject([]) do |array, value|
         | 
| 10 | 
            +
                  array << value unless File.directory?(value)
         | 
| 11 | 
            +
                  array
         | 
| 12 | 
            +
                end.sort
         | 
| 13 | 
            +
              }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              before(:each) { Dir.chdir(File.join(File.dirname(__FILE__),'data')) }
         | 
| 16 | 
            +
              after(:each) { Dir.chdir(dir) }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              it 'should run ls command' do
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                result = Libis::Tools::Command.run('ls')
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                output = result[:out].map {|x| x.split(/\s+/)}.flatten.compact
         | 
| 23 | 
            +
                expect(output.size).to eq entries.size
         | 
| 24 | 
            +
                expect(output.sort).to match entries
         | 
| 25 | 
            +
                expect(result[:err]).to eq []
         | 
| 26 | 
            +
                expect(result[:status]).to eq 0
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              it 'should run ls command with an option' do
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                result = Libis::Tools::Command.run('ls', '-1')
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                output = result[:out]
         | 
| 35 | 
            +
                puts output.sort
         | 
| 36 | 
            +
                expect(output.size).to eq entries.size
         | 
| 37 | 
            +
                expect(output.sort).to match entries
         | 
| 38 | 
            +
                expect(result[:err]).to eq []
         | 
| 39 | 
            +
                expect(result[:status]).to eq 0
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              it 'should run ls command with multiple options' do
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                result = Libis::Tools::Command.run('ls', '-1', '-a', '-p')
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                output = result[:out]
         | 
| 48 | 
            +
                expect(output.size).to eq entries.size + 2
         | 
| 49 | 
            +
                expect(output[0]).to eq './'
         | 
| 50 | 
            +
                expect(output[1]).to eq '../'
         | 
| 51 | 
            +
                expect(output[2..-1].sort).to match entries
         | 
| 52 | 
            +
                expect(result[:err]).to eq []
         | 
| 53 | 
            +
                expect(result[:status]).to eq 0
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              it 'should capture error output and status' do
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                result = Libis::Tools::Command.run('ls', 'abc')
         | 
| 60 | 
            +
                expect(result[:out]).to eq []
         | 
| 61 | 
            +
                expect(result[:err].size).to eq 1
         | 
| 62 | 
            +
                expect(result[:err][0]).to match /ls: cannot access '?abc'?: No such file or directory/
         | 
| 63 | 
            +
                expect(result[:status]).to eq 2
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
              it 'should allow to supply input data' do
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                result = Libis::Tools::Command.run('cat', stdin_data: "FooBar", timeout: 1)
         | 
| 70 | 
            +
                expect(result[:out]).to eq ['FooBar']
         | 
| 71 | 
            +
                expect(result[:err].size).to eq 0
         | 
| 72 | 
            +
                expect(result[:status]).to eq 0
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              it 'should not timeout if command finishes' do
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                result = Libis::Tools::Command.run('cat', stdin_data: "FooBar", timeout: 1)
         | 
| 79 | 
            +
                expect(result[:timeout]).to be_falsey
         | 
| 80 | 
            +
             | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
              it 'should timeout if command hangs' do
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                result = Libis::Tools::Command.run('ls', '-aRlp', '/', timeout: 1)
         | 
| 86 | 
            +
                expect(result[:timeout]).to be_truthy
         | 
| 87 | 
            +
             | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            end
         | 
| @@ -0,0 +1,83 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
            require_relative 'spec_helper'
         | 
| 3 | 
            +
            require 'libis/tools/config_file'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe ::Libis::Tools::ConfigFile do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              let!(:test_file) { File.join(File.dirname(__FILE__), 'data', 'test_config.yml') }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              let(:hash) {
         | 
| 10 | 
            +
                {
         | 
| 11 | 
            +
                    a: {x: 0, y: 0, z: 0},
         | 
| 12 | 
            +
                    b: {x: 10, y: -5, z: 2.5},
         | 
| 13 | 
            +
                    c: [
         | 
| 14 | 
            +
                        [
         | 
| 15 | 
            +
                            {a: [{a1: 1, a2: 2}]},
         | 
| 16 | 
            +
                        ]
         | 
| 17 | 
            +
                    ]
         | 
| 18 | 
            +
                }
         | 
| 19 | 
            +
              }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              context 'after default initialization' do
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                it 'has empty hash' do
         | 
| 24 | 
            +
                  # noinspection RubyResolve
         | 
| 25 | 
            +
                  expect(subject.to_hash).to be_empty
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                it 'loads from file' do
         | 
| 29 | 
            +
                  subject << test_file
         | 
| 30 | 
            +
                  expect(subject.to_hash).to eq hash
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                it 'loads a hash' do
         | 
| 34 | 
            +
                  subject << hash
         | 
| 35 | 
            +
                  expect(subject.to_hash).to eq hash
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                it 'allows to change sub-hash' do
         | 
| 39 | 
            +
                  subject << hash
         | 
| 40 | 
            +
                  # noinspection RubyResolve
         | 
| 41 | 
            +
                  subject.b.v = 1
         | 
| 42 | 
            +
                  hash[:b][:v] = 1
         | 
| 43 | 
            +
                  expect(subject.to_hash).to eq hash
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                it 'allows to change hash in array' do
         | 
| 47 | 
            +
                  subject << hash
         | 
| 48 | 
            +
                  # noinspection RubyResolve
         | 
| 49 | 
            +
                  subject.c[0][0].a[0].v = 1
         | 
| 50 | 
            +
                  hash[:c][0][0][:a][0][:v] = 1
         | 
| 51 | 
            +
                  expect(subject.to_hash).to eq hash
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              context 'initialization with hash' do
         | 
| 57 | 
            +
                subject { ::Libis::Tools::ConfigFile.new hash }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                it 'has hash' do
         | 
| 60 | 
            +
                  expect(subject.to_hash).to eq hash
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              context 'initialization with file' do
         | 
| 66 | 
            +
                subject { ::Libis::Tools::ConfigFile.new test_file }
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                it 'has hash' do
         | 
| 69 | 
            +
                  expect(subject.to_hash).to eq hash
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              context 'initialization with hash from YAML file' do
         | 
| 75 | 
            +
                subject { ::Libis::Tools::ConfigFile.new YAML.load_file(test_file)}
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                it 'has hash' do
         | 
| 78 | 
            +
                  expect(subject.to_hash).to eq hash
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            end
         | 
    
        data/spec/config_spec.rb
    ADDED
    
    | @@ -0,0 +1,113 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
            require_relative 'spec_helper'
         | 
| 3 | 
            +
            require 'libis/tools/config'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            describe 'Config' do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              before(:all) do
         | 
| 8 | 
            +
                ::Libis::Tools::Config << {appname: 'LIBIS Default'}
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              subject(:config) { ::Libis::Tools::Config.clear! }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              it 'has defaults set' do
         | 
| 14 | 
            +
                expect(config.logger).to be_a ::Logging::Logger
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              it 'clears all values' do
         | 
| 18 | 
            +
                # noinspection RubyResolve
         | 
| 19 | 
            +
                config.test_value = 5
         | 
| 20 | 
            +
                config.logger.level = :FATAL
         | 
| 21 | 
            +
                # noinspection RubyResolve
         | 
| 22 | 
            +
                expect(config.test_value).to be 5
         | 
| 23 | 
            +
                expect(config.logger.level).to be ::Logging::level_num(:FATAL)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                config.clear!
         | 
| 26 | 
            +
                # noinspection RubyResolve
         | 
| 27 | 
            +
                expect(config.test_value).to be_nil
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              context 'adding values with setters' do
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                it 'by symbol' do
         | 
| 33 | 
            +
                  config[:test_value] = 5
         | 
| 34 | 
            +
                  expect(config['test_value']).to be 5
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                it 'by name' do
         | 
| 38 | 
            +
                  config['test_value'] = 6
         | 
| 39 | 
            +
                  # noinspection RubyResolve
         | 
| 40 | 
            +
                  expect(config.test_value).to be 6
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                it 'by method' do
         | 
| 44 | 
            +
                  # noinspection RubyResolve
         | 
| 45 | 
            +
                  config.test_value = 7
         | 
| 46 | 
            +
                  expect(config[:test_value]).to be 7
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                it 'allows to set on instance' do
         | 
| 50 | 
            +
                  config.instance[:test_value] = :abc
         | 
| 51 | 
            +
                  # noinspection RubyResolve
         | 
| 52 | 
            +
                  expect(config.test_value).to be :abc
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                it 'allows to set on class' do
         | 
| 56 | 
            +
                  # noinspection RubyResolve
         | 
| 57 | 
            +
                  config.test_value = :def
         | 
| 58 | 
            +
                  expect(config.instance[:test_value]).to be :def
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
              context 'loading from file' do
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                let(:test_file) { File.join(File.dirname(__FILE__), 'data', 'test.yml') }
         | 
| 66 | 
            +
                subject(:config) {
         | 
| 67 | 
            +
                  Libis::Tools::Config.clear! << test_file
         | 
| 68 | 
            +
                }
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                it 'has configuration parameters set' do
         | 
| 71 | 
            +
                  expect(config.process).to eq 'Test Configuration'
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                it 'resets only values loaded from file' do
         | 
| 75 | 
            +
                  config[:process] = 'foo'
         | 
| 76 | 
            +
                  config[:bar] = 'qux'
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                  expect(config.process).to eq 'foo'
         | 
| 79 | 
            +
                  expect(config.bar).to eq 'qux'
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  config.reload
         | 
| 82 | 
            +
                  expect(config.process).to eq 'Test Configuration'
         | 
| 83 | 
            +
                  expect(config.bar).to eq 'qux'
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                it 'resets all values' do
         | 
| 87 | 
            +
                  config[:process] = 'foo'
         | 
| 88 | 
            +
                  config[:bar] = 'qux'
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                  expect(config.process).to eq 'foo'
         | 
| 91 | 
            +
                  expect(config.bar).to eq 'qux'
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  config.reload!
         | 
| 94 | 
            +
                  expect(config.process).to eq 'Test Configuration'
         | 
| 95 | 
            +
                  expect(config.bar).to be_nil
         | 
| 96 | 
            +
                end
         | 
| 97 | 
            +
             | 
| 98 | 
            +
                it 'clears all values' do
         | 
| 99 | 
            +
                  config[:process] = 'foo'
         | 
| 100 | 
            +
                  config[:bar] = 'qux'
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  expect(config.process).to eq 'foo'
         | 
| 103 | 
            +
                  expect(config.bar).to eq 'qux'
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  config.clear!
         | 
| 106 | 
            +
                  expect(config.process).to be_nil
         | 
| 107 | 
            +
                  expect(config.bar).to be_nil
         | 
| 108 | 
            +
                  # noinspection RubyResolve
         | 
| 109 | 
            +
                  expect(config.to_h).to be_empty
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
            end
         |