inifile 1.0.0 → 1.1.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.
- data/.travis.yml +12 -0
 - data/History.txt +5 -0
 - data/README.md +8 -4
 - data/lib/inifile.rb +13 -10
 - data/test/data/bad_1.ini +3 -3
 - data/test/data/global.ini +3 -0
 - data/test/test_inifile.rb +15 -2
 - metadata +11 -12
 - data/test/data/bad_2.ini +0 -6
 
    
        data/.travis.yml
    ADDED
    
    
    
        data/History.txt
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            inifile
         
     | 
| 
      
 1 
     | 
    
         
            +
            inifile [](http://travis-ci.org/TwP/inifile)
         
     | 
| 
       2 
2 
     | 
    
         
             
            =======
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            This is a native Ruby package for reading and writing INI files.
         
     | 
| 
         @@ -22,9 +22,6 @@ left of the equals sign and the value to the right. 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                name=value
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
            All properties must exist within a section. If the file contains a property
         
     | 
| 
       26 
     | 
    
         
            -
            before the first section is declared, an error will be raised.
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
25 
     | 
    
         
             
            ### Sections
         
     | 
| 
       29 
26 
     | 
    
         | 
| 
       30 
27 
     | 
    
         
             
            Section declarations start with *[* and end with *]* as in `[section1]` and
         
     | 
| 
         @@ -61,6 +58,13 @@ The format of INI files is not well defined. Several assumptions are made by 
     | 
|
| 
       61 
58 
     | 
    
         
             
            the **inifile** gem when parsing INI files. Most of these assumptions can be
         
     | 
| 
       62 
59 
     | 
    
         
             
            modified at, but the defaults are listed below.
         
     | 
| 
       63 
60 
     | 
    
         | 
| 
      
 61 
     | 
    
         
            +
            ### Global Properties
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            If the INI file lacks any section declarations, or if there are properties
         
     | 
| 
      
 64 
     | 
    
         
            +
            decalared before the first section, then these properties will be placed into
         
     | 
| 
      
 65 
     | 
    
         
            +
            a default "global" section. The name of this section can be configured when
         
     | 
| 
      
 66 
     | 
    
         
            +
            creating an `IniFile` instance.
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
       64 
68 
     | 
    
         
             
            ### Duplicate Properties
         
     | 
| 
       65 
69 
     | 
    
         | 
| 
       66 
70 
     | 
    
         
             
            Duplicate properties are allowed in a single section. The last property value
         
     | 
    
        data/lib/inifile.rb
    CHANGED
    
    | 
         @@ -12,7 +12,7 @@ class IniFile 
     | 
|
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
              # :stopdoc:
         
     | 
| 
       14 
14 
     | 
    
         
             
              class Error < StandardError; end
         
     | 
| 
       15 
     | 
    
         
            -
              VERSION = '1. 
     | 
| 
      
 15 
     | 
    
         
            +
              VERSION = '1.1.0'
         
     | 
| 
       16 
16 
     | 
    
         
             
              # :startdoc:
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
              #
         
     | 
| 
         @@ -23,10 +23,11 @@ class IniFile 
     | 
|
| 
       23 
23 
     | 
    
         
             
              # Open the given _filename_ and load the contents of the INI file.
         
     | 
| 
       24 
24 
     | 
    
         
             
              # The following _options_ can be passed to this method:
         
     | 
| 
       25 
25 
     | 
    
         
             
              #
         
     | 
| 
       26 
     | 
    
         
            -
              #    :comment => ';' 
     | 
| 
       27 
     | 
    
         
            -
              #    :parameter => '=' 
     | 
| 
       28 
     | 
    
         
            -
              #    :encoding => nil 
     | 
| 
       29 
     | 
    
         
            -
              #    :escape => true 
     | 
| 
      
 26 
     | 
    
         
            +
              #    :comment => ';'       The line comment character(s)
         
     | 
| 
      
 27 
     | 
    
         
            +
              #    :parameter => '='     The parameter / value separator
         
     | 
| 
      
 28 
     | 
    
         
            +
              #    :encoding => nil      The encoding used for read/write (RUBY 1.9)
         
     | 
| 
      
 29 
     | 
    
         
            +
              #    :escape => true       Whether or not to escape values when reading/writing
         
     | 
| 
      
 30 
     | 
    
         
            +
              #    :default => 'global'  Default global section name
         
     | 
| 
       30 
31 
     | 
    
         
             
              #
         
     | 
| 
       31 
32 
     | 
    
         
             
              def self.load( filename, opts = {} )
         
     | 
| 
       32 
33 
     | 
    
         
             
                new(filename, opts)
         
     | 
| 
         @@ -41,10 +42,11 @@ class IniFile 
     | 
|
| 
       41 
42 
     | 
    
         
             
              # exists and is a regular file, then its contents will be parsed.
         
     | 
| 
       42 
43 
     | 
    
         
             
              # The following _options_ can be passed to this method:
         
     | 
| 
       43 
44 
     | 
    
         
             
              #
         
     | 
| 
       44 
     | 
    
         
            -
              #    :comment => ';' 
     | 
| 
       45 
     | 
    
         
            -
              #    :parameter => '=' 
     | 
| 
       46 
     | 
    
         
            -
              #    :encoding => nil 
     | 
| 
       47 
     | 
    
         
            -
              #    :escape => true 
     | 
| 
      
 45 
     | 
    
         
            +
              #    :comment => ';'       The line comment character(s)
         
     | 
| 
      
 46 
     | 
    
         
            +
              #    :parameter => '='     The parameter / value separator
         
     | 
| 
      
 47 
     | 
    
         
            +
              #    :encoding => nil      The encoding used for read/write (RUBY 1.9)
         
     | 
| 
      
 48 
     | 
    
         
            +
              #    :escape => true       Whether or not to escape values when reading/writing
         
     | 
| 
      
 49 
     | 
    
         
            +
              #    :default => 'global'  Default global section name
         
     | 
| 
       48 
50 
     | 
    
         
             
              #
         
     | 
| 
       49 
51 
     | 
    
         
             
              def initialize( filename, opts = {} )
         
     | 
| 
       50 
52 
     | 
    
         
             
                @fn = filename
         
     | 
| 
         @@ -52,6 +54,7 @@ class IniFile 
     | 
|
| 
       52 
54 
     | 
    
         
             
                @param = opts.fetch(:parameter, '=')
         
     | 
| 
       53 
55 
     | 
    
         
             
                @encoding = opts.fetch(:encoding, nil)
         
     | 
| 
       54 
56 
     | 
    
         
             
                @escape = opts.fetch(:escape, true)
         
     | 
| 
      
 57 
     | 
    
         
            +
                @default = opts.fetch(:default, 'global')
         
     | 
| 
       55 
58 
     | 
    
         
             
                @ini = Hash.new {|h,k| h[k] = Hash.new}
         
     | 
| 
       56 
59 
     | 
    
         | 
| 
       57 
60 
     | 
    
         
             
                @rgxp_comment = %r/\A\s*\z|\A\s*[#{@comment}]/
         
     | 
| 
         @@ -411,7 +414,7 @@ private 
     | 
|
| 
       411 
414 
     | 
    
         
             
              def finish_property
         
     | 
| 
       412 
415 
     | 
    
         
             
                return unless @_current_param
         
     | 
| 
       413 
416 
     | 
    
         | 
| 
       414 
     | 
    
         
            -
                 
     | 
| 
      
 417 
     | 
    
         
            +
                @_current_section = @ini[@default] if @_current_section.nil?
         
     | 
| 
       415 
418 
     | 
    
         
             
                @_current_section[@_current_param] = unescape @_current_value
         
     | 
| 
       416 
419 
     | 
    
         | 
| 
       417 
420 
     | 
    
         
             
                @_current_param = nil
         
     | 
    
        data/test/data/bad_1.ini
    CHANGED
    
    
    
        data/test/test_inifile.rb
    CHANGED
    
    | 
         @@ -57,7 +57,6 @@ class TestIniFile < Test::Unit::TestCase 
     | 
|
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
                # make sure we error out on files with bad lines
         
     | 
| 
       59 
59 
     | 
    
         
             
                assert_raise(IniFile::Error) {IniFile.load 'test/data/bad_1.ini'}
         
     | 
| 
       60 
     | 
    
         
            -
                assert_raise(IniFile::Error) {IniFile.load 'test/data/bad_2.ini'}
         
     | 
| 
       61 
60 
     | 
    
         
             
              end
         
     | 
| 
       62 
61 
     | 
    
         | 
| 
       63 
62 
     | 
    
         
             
              def test_clone
         
     | 
| 
         @@ -254,7 +253,6 @@ class TestIniFile < Test::Unit::TestCase 
     | 
|
| 
       254 
253 
     | 
    
         | 
| 
       255 
254 
     | 
    
         
             
                # make sure we error out on files with bad lines
         
     | 
| 
       256 
255 
     | 
    
         
             
                assert_raise(IniFile::Error) {IniFile.new 'test/data/bad_1.ini'}
         
     | 
| 
       257 
     | 
    
         
            -
                assert_raise(IniFile::Error) {IniFile.new 'test/data/bad_2.ini'}
         
     | 
| 
       258 
256 
     | 
    
         
             
              end
         
     | 
| 
       259 
257 
     | 
    
         | 
| 
       260 
258 
     | 
    
         
             
              def test_sections
         
     | 
| 
         @@ -439,5 +437,20 @@ class TestIniFile < Test::Unit::TestCase 
     | 
|
| 
       439 
437 
     | 
    
         
             
                assert_equal %q{This string \\\\t contains \\\\n no \\\\r special \\\\0 characters!}, escaped['backslash']
         
     | 
| 
       440 
438 
     | 
    
         
             
              end
         
     | 
| 
       441 
439 
     | 
    
         | 
| 
      
 440 
     | 
    
         
            +
              def test_global_section
         
     | 
| 
      
 441 
     | 
    
         
            +
                ini_file = IniFile.load('test/data/global.ini')
         
     | 
| 
      
 442 
     | 
    
         
            +
             
     | 
| 
      
 443 
     | 
    
         
            +
                assert_equal %w[global], ini_file.sections
         
     | 
| 
      
 444 
     | 
    
         
            +
                assert_equal '1', ini_file['global']['one']
         
     | 
| 
      
 445 
     | 
    
         
            +
                assert_equal '2', ini_file['global']['two']
         
     | 
| 
      
 446 
     | 
    
         
            +
              end
         
     | 
| 
      
 447 
     | 
    
         
            +
             
     | 
| 
      
 448 
     | 
    
         
            +
              def test_default_global_section
         
     | 
| 
      
 449 
     | 
    
         
            +
                ini_file = IniFile.load('test/data/global.ini', :default => 'nonce')
         
     | 
| 
      
 450 
     | 
    
         
            +
             
     | 
| 
      
 451 
     | 
    
         
            +
                assert_equal %w[nonce], ini_file.sections
         
     | 
| 
      
 452 
     | 
    
         
            +
                assert_equal '1', ini_file['nonce']['one']
         
     | 
| 
      
 453 
     | 
    
         
            +
                assert_equal '2', ini_file['nonce']['two']
         
     | 
| 
      
 454 
     | 
    
         
            +
              end
         
     | 
| 
       442 
455 
     | 
    
         
             
            end
         
     | 
| 
       443 
456 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: inifile
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -13,7 +13,7 @@ date: 2012-02-28 00:00:00.000000000Z 
     | 
|
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: bones-git
         
     | 
| 
       16 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 16 
     | 
    
         
            +
              requirement: &2167250880 !ruby/object:Gem::Requirement
         
     | 
| 
       17 
17 
     | 
    
         
             
                none: false
         
     | 
| 
       18 
18 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
19 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -21,10 +21,10 @@ dependencies: 
     | 
|
| 
       21 
21 
     | 
    
         
             
                    version: 1.2.5
         
     | 
| 
       22 
22 
     | 
    
         
             
              type: :development
         
     | 
| 
       23 
23 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 24 
     | 
    
         
            +
              version_requirements: *2167250880
         
     | 
| 
       25 
25 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       26 
26 
     | 
    
         
             
              name: bones
         
     | 
| 
       27 
     | 
    
         
            -
              requirement: & 
     | 
| 
      
 27 
     | 
    
         
            +
              requirement: &2167250400 !ruby/object:Gem::Requirement
         
     | 
| 
       28 
28 
     | 
    
         
             
                none: false
         
     | 
| 
       29 
29 
     | 
    
         
             
                requirements:
         
     | 
| 
       30 
30 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
         @@ -32,7 +32,7 @@ dependencies: 
     | 
|
| 
       32 
32 
     | 
    
         
             
                    version: 3.7.2
         
     | 
| 
       33 
33 
     | 
    
         
             
              type: :development
         
     | 
| 
       34 
34 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       35 
     | 
    
         
            -
              version_requirements: * 
     | 
| 
      
 35 
     | 
    
         
            +
              version_requirements: *2167250400
         
     | 
| 
       36 
36 
     | 
    
         
             
            description: ! "Although made popular by Windows, INI files can be used on any system
         
     | 
| 
       37 
37 
     | 
    
         
             
              thanks\nto their flexibility. They allow a program to store configuration data,
         
     | 
| 
       38 
38 
     | 
    
         
             
              which\ncan then be easily parsed and changed. Two notable systems that use the INI\nformat
         
     | 
| 
         @@ -40,12 +40,10 @@ description: ! "Although made popular by Windows, INI files can be used on any s 
     | 
|
| 
       40 
40 
     | 
    
         
             
              Page](http://en.wikipedia.org/wiki/INI_file).\n\n### Properties\n\nThe basic element
         
     | 
| 
       41 
41 
     | 
    
         
             
              contained in an INI file is the property. Every property has\na name and a value,
         
     | 
| 
       42 
42 
     | 
    
         
             
              delimited by an equals sign *=*. The name appears to the\nleft of the equals sign
         
     | 
| 
       43 
     | 
    
         
            -
              and the value to the right.\n\n    name=value\n\ 
     | 
| 
       44 
     | 
    
         
            -
               
     | 
| 
       45 
     | 
    
         
            -
               
     | 
| 
       46 
     | 
    
         
            -
               
     | 
| 
       47 
     | 
    
         
            -
              The section declaration marks the\nbeginning of a section. All properties after
         
     | 
| 
       48 
     | 
    
         
            -
              the section declaration will be\nassociated with that section.\n\n### Comments\n\nAll
         
     | 
| 
      
 43 
     | 
    
         
            +
              and the value to the right.\n\n    name=value\n\n### Sections\n\nSection declarations
         
     | 
| 
      
 44 
     | 
    
         
            +
              start with *[* and end with *]* as in `[section1]` and\n`[section2]` shown in the
         
     | 
| 
      
 45 
     | 
    
         
            +
              example below. The section declaration marks the\nbeginning of a section. All properties
         
     | 
| 
      
 46 
     | 
    
         
            +
              after the section declaration will be\nassociated with that section.\n\n### Comments\n\nAll
         
     | 
| 
       49 
47 
     | 
    
         
             
              lines beginning with a semicolon *;* or a number sign *#* are considered\nto be
         
     | 
| 
       50 
48 
     | 
    
         
             
              comments. Comment lines are ignored when parsing INI files.\n\n### Example File
         
     | 
| 
       51 
49 
     | 
    
         
             
              Format\n\nA typical INI file might look like this:\n\n    [section1]\n    ; some
         
     | 
| 
         @@ -59,15 +57,16 @@ extra_rdoc_files: 
     | 
|
| 
       59 
57 
     | 
    
         
             
            - History.txt
         
     | 
| 
       60 
58 
     | 
    
         
             
            files:
         
     | 
| 
       61 
59 
     | 
    
         
             
            - .gitignore
         
     | 
| 
      
 60 
     | 
    
         
            +
            - .travis.yml
         
     | 
| 
       62 
61 
     | 
    
         
             
            - History.txt
         
     | 
| 
       63 
62 
     | 
    
         
             
            - README.md
         
     | 
| 
       64 
63 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       65 
64 
     | 
    
         
             
            - lib/inifile.rb
         
     | 
| 
       66 
65 
     | 
    
         
             
            - test/data/bad_1.ini
         
     | 
| 
       67 
     | 
    
         
            -
            - test/data/bad_2.ini
         
     | 
| 
       68 
66 
     | 
    
         
             
            - test/data/browscap.ini
         
     | 
| 
       69 
67 
     | 
    
         
             
            - test/data/comment.ini
         
     | 
| 
       70 
68 
     | 
    
         
             
            - test/data/escape.ini
         
     | 
| 
      
 69 
     | 
    
         
            +
            - test/data/global.ini
         
     | 
| 
       71 
70 
     | 
    
         
             
            - test/data/good.ini
         
     | 
| 
       72 
71 
     | 
    
         
             
            - test/data/merge.ini
         
     | 
| 
       73 
72 
     | 
    
         
             
            - test/data/mixed_comment.ini
         
     |