props 1.0.0 → 1.0.1
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/.gemtest +0 -0
- data/{History.markdown → History.md} +0 -0
- data/Manifest.txt +4 -2
- data/{README.markdown → README.md} +2 -2
- data/Rakefile +12 -6
- data/lib/props.rb +77 -3
- data/test/helper.rb +13 -0
- data/test/test_ini.rb +50 -0
- metadata +48 -67
data/.gemtest
ADDED
File without changes
|
File without changes
|
data/Manifest.txt
CHANGED
@@ -69,11 +69,11 @@ Just install the gem:
|
|
69
69
|
|
70
70
|
## Real World Usage
|
71
71
|
|
72
|
-
The [`slideshow`](http://slideshow.
|
72
|
+
The [`slideshow`](http://slideshow-s9.github.io) gem (also known as Slide Show (S9))
|
73
73
|
that lets you create slide shows
|
74
74
|
and author slides in plain text using a wiki-style markup language that's easy-to-write and easy-to-read.
|
75
75
|
|
76
|
-
The [`markdown`](
|
76
|
+
The [`markdown`](https://github.com/rubylibs/markdown) gem that lets you use your markdown library
|
77
77
|
of choice.
|
78
78
|
|
79
79
|
## Alternatives
|
data/Rakefile
CHANGED
@@ -2,19 +2,25 @@ require 'hoe'
|
|
2
2
|
require './lib/props.rb'
|
3
3
|
|
4
4
|
Hoe.spec 'props' do
|
5
|
-
|
5
|
+
|
6
6
|
self.version = Props::VERSION
|
7
7
|
|
8
8
|
self.summary = 'props - Manage Settings Hierachies (Commandline, User, Home, Defaults, etc.)'
|
9
9
|
self.description = summary
|
10
10
|
|
11
|
-
self.urls = ['
|
12
|
-
|
11
|
+
self.urls = ['https://github.com/rubylibs/props']
|
12
|
+
|
13
13
|
self.author = 'Gerald Bauer'
|
14
14
|
self.email = 'webslideshow@googlegroups.com'
|
15
15
|
|
16
16
|
# switch extension to .markdown for gihub formatting
|
17
|
-
self.readme_file = 'README.
|
18
|
-
self.history_file = 'History.
|
19
|
-
|
17
|
+
self.readme_file = 'README.md'
|
18
|
+
self.history_file = 'History.md'
|
19
|
+
|
20
|
+
self.licenses = ['Public Domain']
|
21
|
+
|
22
|
+
self.spec_extras = {
|
23
|
+
:required_ruby_version => '>= 1.9.2'
|
24
|
+
}
|
25
|
+
|
20
26
|
end
|
data/lib/props.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
|
2
3
|
# core and stlibs
|
3
4
|
|
@@ -24,8 +25,8 @@ class Env
|
|
24
25
|
else
|
25
26
|
'/'
|
26
27
|
end
|
27
|
-
|
28
|
-
|
28
|
+
end
|
29
|
+
end
|
29
30
|
|
30
31
|
# todo: use logger - how?
|
31
32
|
## puts "env home=>#{path}<"
|
@@ -36,9 +37,82 @@ class Env
|
|
36
37
|
end # class Env
|
37
38
|
|
38
39
|
|
40
|
+
module INI
|
41
|
+
|
42
|
+
def self.load_file( path )
|
43
|
+
# returns a nested hash
|
44
|
+
# (compatible structure - works like YAML.load_file)
|
45
|
+
|
46
|
+
text = File.open( path, 'r:bom|utf-8' ).read
|
47
|
+
self.load( text )
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
def self.load( text )
|
52
|
+
hash = top_hash = Hash.new
|
53
|
+
|
54
|
+
text = text.gsub( "\t", ' ' ) # replace all tabs w/ spaces
|
55
|
+
|
56
|
+
text.each_line do |line|
|
57
|
+
|
58
|
+
### skip comments
|
59
|
+
# e.g. # this is a comment line
|
60
|
+
# or ; this too
|
61
|
+
# or -- haskell style
|
62
|
+
# or % text style
|
63
|
+
|
64
|
+
if line =~ /^\s*#/ || line =~ /^\s*;/ || line =~ /^\s*--/ || line =~ /^\s*%/
|
65
|
+
## logger.debug 'skipping comment line'
|
66
|
+
next
|
67
|
+
end
|
68
|
+
|
69
|
+
### skip blank lines
|
70
|
+
if line =~ /^\s*$/
|
71
|
+
## logger.debug 'skipping blank line'
|
72
|
+
next
|
73
|
+
end
|
74
|
+
|
75
|
+
# pass 1) remove possible trailing eol comment
|
76
|
+
## e.g -> New York # Sample EOL Comment Here (with or without commas,,,,)
|
77
|
+
## becomes -> New York
|
78
|
+
|
79
|
+
line = line.sub( /\s+#.*$/, '' )
|
80
|
+
|
81
|
+
# pass 2) remove leading and trailing whitespace
|
82
|
+
|
83
|
+
line = line.strip
|
84
|
+
|
85
|
+
## check for new section e.g. [planet012-xxx_bc]
|
86
|
+
|
87
|
+
### todo: allow _ or - in strict section key? why? why not??
|
88
|
+
### allow _ or - in value key? why why not??
|
89
|
+
if line =~ /^\s*\[\s*([a-z0-9_\-]+)\s*\]\s*$/ # strict section
|
90
|
+
key = $1.to_s.dup
|
91
|
+
hash = top_hash[ key ] = Hash.new
|
92
|
+
elsif line =~ /^\s*\[\s*([^ \]]+)\s*\]\s*$/ # liberal section; allow everything in key
|
93
|
+
key = $1.to_s.dup
|
94
|
+
hash = top_hash[ key ] = Hash.new
|
95
|
+
elsif line =~ /^\s*([a-z0-9_\-]+)\s*[:=](.*)$/
|
96
|
+
key = $1.to_s.dup
|
97
|
+
value = $2.to_s.strip.dup # check if it can be nil? if yes use blank string e.g. ''
|
98
|
+
### todo: strip quotes from value??? why? why not?
|
99
|
+
hash[ key ] = value
|
100
|
+
else
|
101
|
+
puts "*** warn: skipping unknown line type in ini >#{line}<"
|
102
|
+
end
|
103
|
+
end # each lines
|
104
|
+
|
105
|
+
top_hash
|
106
|
+
end # method load
|
107
|
+
|
108
|
+
|
109
|
+
end # module INI
|
110
|
+
|
111
|
+
|
112
|
+
|
39
113
|
class Props
|
40
114
|
|
41
|
-
VERSION = '1.0.
|
115
|
+
VERSION = '1.0.1'
|
42
116
|
|
43
117
|
attr_reader :path
|
44
118
|
attr_reader :parent
|
data/test/helper.rb
ADDED
data/test/test_ini.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
###
|
2
|
+
# to run use
|
3
|
+
# ruby -I ./lib -I ./test test/test_ini.rb
|
4
|
+
# or better
|
5
|
+
# rake test
|
6
|
+
|
7
|
+
require 'helper'
|
8
|
+
|
9
|
+
class TestIni < MiniTest::Unit::TestCase
|
10
|
+
|
11
|
+
|
12
|
+
def test_load
|
13
|
+
|
14
|
+
text = <<EOS
|
15
|
+
# comment
|
16
|
+
; another comment
|
17
|
+
|
18
|
+
key1 = hello
|
19
|
+
key2 : hi!
|
20
|
+
|
21
|
+
[section1]
|
22
|
+
key3 = salut # end of line comment here
|
23
|
+
|
24
|
+
[section2]
|
25
|
+
key4: hola
|
26
|
+
blank =
|
27
|
+
blank2:
|
28
|
+
|
29
|
+
[ http://example.com ]
|
30
|
+
title = A rose is a rose is a rose, eh?
|
31
|
+
title2: A rose is a rose is a rose, eh? # comment here
|
32
|
+
; another one here
|
33
|
+
title3 = A rose is a rose is a rose, eh?
|
34
|
+
EOS
|
35
|
+
|
36
|
+
hash = INI.load( text )
|
37
|
+
pp hash
|
38
|
+
|
39
|
+
assert( hash['key1'] == 'hello' )
|
40
|
+
assert( hash['key2'] == 'hi!' )
|
41
|
+
assert( hash['section1']['key3'] == 'salut' )
|
42
|
+
assert( hash['section2']['key4'] == 'hola' )
|
43
|
+
assert( hash['section2']['blank'] == '' )
|
44
|
+
assert( hash['section2']['blank2'] == '' )
|
45
|
+
assert( hash['http://example.com']['title'] == 'A rose is a rose is a rose, eh?' )
|
46
|
+
assert( hash['http://example.com']['title2'] == 'A rose is a rose is a rose, eh?' )
|
47
|
+
assert( hash['http://example.com']['title3'] == 'A rose is a rose is a rose, eh?' )
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
metadata
CHANGED
@@ -1,99 +1,80 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: props
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 0
|
10
|
-
version: 1.0.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Gerald Bauer
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2013-09-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rdoc
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &83434100 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 3
|
31
|
-
- 10
|
32
|
-
version: "3.10"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.10'
|
33
22
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: hoe
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *83434100
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hoe
|
27
|
+
requirement: &83477370 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
29
|
+
requirements:
|
41
30
|
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 3
|
46
|
-
- 0
|
47
|
-
version: "3.0"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.3'
|
48
33
|
type: :development
|
49
|
-
|
50
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *83477370
|
36
|
+
description: props - Manage Settings Hierachies (Commandline, User, Home, Defaults,
|
37
|
+
etc.)
|
51
38
|
email: webslideshow@googlegroups.com
|
52
39
|
executables: []
|
53
|
-
|
54
40
|
extensions: []
|
55
|
-
|
56
|
-
extra_rdoc_files:
|
41
|
+
extra_rdoc_files:
|
57
42
|
- Manifest.txt
|
58
|
-
files:
|
59
|
-
- History.
|
43
|
+
files:
|
44
|
+
- History.md
|
60
45
|
- Manifest.txt
|
61
|
-
- README.
|
46
|
+
- README.md
|
62
47
|
- Rakefile
|
63
48
|
- lib/props.rb
|
64
|
-
|
65
|
-
|
66
|
-
|
49
|
+
- test/helper.rb
|
50
|
+
- test/test_ini.rb
|
51
|
+
- .gemtest
|
52
|
+
homepage: https://github.com/rubylibs/props
|
53
|
+
licenses:
|
54
|
+
- Public Domain
|
67
55
|
post_install_message:
|
68
|
-
rdoc_options:
|
56
|
+
rdoc_options:
|
69
57
|
- --main
|
70
|
-
- README.
|
71
|
-
require_paths:
|
58
|
+
- README.md
|
59
|
+
require_paths:
|
72
60
|
- lib
|
73
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
62
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
|
79
|
-
|
80
|
-
- 0
|
81
|
-
version: "0"
|
82
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 1.9.2
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
68
|
none: false
|
84
|
-
requirements:
|
85
|
-
- -
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
|
88
|
-
segments:
|
89
|
-
- 0
|
90
|
-
version: "0"
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
91
73
|
requirements: []
|
92
|
-
|
93
74
|
rubyforge_project: props
|
94
|
-
rubygems_version: 1.8.
|
75
|
+
rubygems_version: 1.8.17
|
95
76
|
signing_key:
|
96
77
|
specification_version: 3
|
97
78
|
summary: props - Manage Settings Hierachies (Commandline, User, Home, Defaults, etc.)
|
98
|
-
test_files:
|
99
|
-
|
79
|
+
test_files:
|
80
|
+
- test/test_ini.rb
|