iniparse 1.3.3 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/iniparse.gemspec +2 -2
- data/lib/iniparse.rb +2 -2
- data/lib/iniparse/document.rb +18 -0
- data/lib/iniparse/lines.rb +36 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df89c5288250ac2060dc5fff2d55a8f58ed150ec
|
4
|
+
data.tar.gz: fb378ab6a528d5c718a39b24b1429872a6724a25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa5111d419e946cfdab3bc81dd811461594e94e44d2664b891d3271b514d65f6c0475daceef40d56bcf9232808d14481b3e240f0bf0eb63c822fdf0aaed60387
|
7
|
+
data.tar.gz: c6f7dd510ad5beba9120abae324c1ebc7429ae827b046c96a145b8d7c790329c80d2d91d20829c292753aa14ce5faf95c9500554410a188c7dd9024e8b07df7a
|
data/Rakefile
CHANGED
@@ -51,7 +51,7 @@ task :release => :build do
|
|
51
51
|
puts "You must be on the master branch to release!"
|
52
52
|
exit!
|
53
53
|
end
|
54
|
-
|
54
|
+
sh "git commit --allow-empty -a -m 'Release #{version}'"
|
55
55
|
sh "git tag v#{version}"
|
56
56
|
sh "git push origin master"
|
57
57
|
sh "git push origin v#{version}"
|
data/iniparse.gemspec
CHANGED
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
|
|
12
12
|
## If your rubyforge_project name is different, then edit it and comment out
|
13
13
|
## the sub! line in the Rakefile
|
14
14
|
s.name = 'iniparse'
|
15
|
-
s.version = '1.
|
16
|
-
s.date = '
|
15
|
+
s.version = '1.4.0'
|
16
|
+
s.date = '2015-04-06'
|
17
17
|
s.rubyforge_project = 'iniparse'
|
18
18
|
|
19
19
|
s.summary = 'A pure Ruby library for parsing INI documents.'
|
data/lib/iniparse.rb
CHANGED
@@ -7,7 +7,7 @@ require File.join(dir, 'lines')
|
|
7
7
|
require File.join(dir, 'parser')
|
8
8
|
|
9
9
|
module IniParse
|
10
|
-
VERSION = '1.
|
10
|
+
VERSION = '1.4.0'
|
11
11
|
|
12
12
|
# A base class for IniParse errors.
|
13
13
|
class IniParseError < StandardError; end
|
@@ -36,7 +36,7 @@ module IniParse
|
|
36
36
|
# IniParse::Document
|
37
37
|
#
|
38
38
|
def parse(source)
|
39
|
-
IniParse::Parser.new(source).parse
|
39
|
+
IniParse::Parser.new(source.gsub("\\\n", '')).parse
|
40
40
|
end
|
41
41
|
|
42
42
|
# Opens the file at +path+, reads and parses it's contents.
|
data/lib/iniparse/document.rb
CHANGED
@@ -51,6 +51,24 @@ module IniParse
|
|
51
51
|
|
52
52
|
alias_method :to_s, :to_ini
|
53
53
|
|
54
|
+
# Returns a has representation of the INI with multi-line options
|
55
|
+
# as an array
|
56
|
+
def to_hash
|
57
|
+
result = {}
|
58
|
+
@lines.entries.each do |section|
|
59
|
+
result[section.key] ||= {}
|
60
|
+
section.entries.each do |option|
|
61
|
+
opts = Array(option)
|
62
|
+
val = opts.map { |o| o.respond_to?(:value) ? o.value : o }
|
63
|
+
val = val.size > 1 ? val : val.first
|
64
|
+
result[section.key][opts.first.key] = val
|
65
|
+
end
|
66
|
+
end
|
67
|
+
result
|
68
|
+
end
|
69
|
+
|
70
|
+
alias_method :to_h, :to_hash
|
71
|
+
|
54
72
|
# A human-readable version of the document, for debugging.
|
55
73
|
def inspect
|
56
74
|
sections = @lines.select { |l| l.is_a?(IniParse::Lines::Section) }
|
data/lib/iniparse/lines.rb
CHANGED
@@ -21,16 +21,14 @@ module IniParse
|
|
21
21
|
# Returns this line as a string as it would be represented in an INI
|
22
22
|
# document.
|
23
23
|
def to_ini
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
ini
|
24
|
+
[*line_contents].map { |ini|
|
25
|
+
if has_comment?
|
26
|
+
ini += ' ' if ini =~ /\S/ # not blank
|
27
|
+
ini = ini.ljust(@comment_offset)
|
28
|
+
ini += comment
|
29
|
+
end
|
30
|
+
@indent + ini
|
31
|
+
}.join "\n"
|
34
32
|
end
|
35
33
|
|
36
34
|
# Returns the contents for this line.
|
@@ -48,6 +46,17 @@ module IniParse
|
|
48
46
|
def blank?
|
49
47
|
false
|
50
48
|
end
|
49
|
+
|
50
|
+
# Returns the options used to create the line
|
51
|
+
def options
|
52
|
+
{
|
53
|
+
comment: @comment,
|
54
|
+
comment_sep: @comment_sep,
|
55
|
+
comment_prefix: @comment_prefix,
|
56
|
+
comment_offset: @comment_offset,
|
57
|
+
indent: @indent
|
58
|
+
}
|
59
|
+
end
|
51
60
|
end
|
52
61
|
|
53
62
|
# Represents a section header in an INI document. Section headers consist
|
@@ -93,13 +102,13 @@ module IniParse
|
|
93
102
|
coll = lines.to_a
|
94
103
|
|
95
104
|
if coll.any?
|
96
|
-
super
|
105
|
+
[*super,coll.to_a.map do |line|
|
97
106
|
if line.kind_of?(Array)
|
98
107
|
line.map { |dup_line| dup_line.to_ini }.join($/)
|
99
108
|
else
|
100
109
|
line.to_ini
|
101
110
|
end
|
102
|
-
end.join($/)
|
111
|
+
end].join($/)
|
103
112
|
else
|
104
113
|
super
|
105
114
|
end
|
@@ -132,7 +141,14 @@ module IniParse
|
|
132
141
|
# new option to be considered a duplicate, use +add_option+ instead.
|
133
142
|
#
|
134
143
|
def []=(key, value)
|
135
|
-
@lines[key.to_s]
|
144
|
+
line = @lines[key.to_s]
|
145
|
+
opts = {}
|
146
|
+
if line.kind_of?(Array)
|
147
|
+
opts = line.first.options
|
148
|
+
elsif line.respond_to? :options
|
149
|
+
opts = line.options
|
150
|
+
end
|
151
|
+
@lines[key.to_s] = IniParse::Lines::Option.new(key.to_s, value, opts)
|
136
152
|
end
|
137
153
|
|
138
154
|
# Returns the value of an option identified by +key+.
|
@@ -271,8 +287,14 @@ module IniParse
|
|
271
287
|
private
|
272
288
|
#######
|
273
289
|
|
290
|
+
# returns an array to support multiple lines or a single one at once
|
291
|
+
# because of options key duplication
|
274
292
|
def line_contents
|
275
|
-
|
293
|
+
if value.kind_of?(Array)
|
294
|
+
value.map { |v, i| "#{key} = #{v}" }
|
295
|
+
else
|
296
|
+
"#{key} = #{value}"
|
297
|
+
end
|
276
298
|
end
|
277
299
|
end
|
278
300
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iniparse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|