xregistry 1.6.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 +7 -0
- data/LICENSE +19 -0
- data/Rakefile +37 -0
- data/VERSION +1 -0
- data/lib/xregistry.rb +246 -0
- data/test/test_xregistry.rb +216 -0
- data/xregistry.gemspec +17 -0
- metadata +51 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5fb2c7081e707996d70925d8263e6c21931de47b
|
4
|
+
data.tar.gz: ae667713a9342fefa9edd27d59c756746c8ad515
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 98c75548ee27d5ec9c138226de3317bc5c13138a4ac6900eb7479815143ffeb2b15a6e8b38d53671416499d21039dbc777f53e2be55107bfb3cf7a3c97bbe159
|
7
|
+
data.tar.gz: e9752864707a4ee539ba9445cdc58f851dc73ed28a858507a521830283c98286c83c3a893b38596c8080eddc5f22c6230d5930cf4b89ac4fedfbffad3b3fc6c9
|
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2016 William Parsons
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
5
|
+
the Software without restriction, including without limitation the rights to
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
8
|
+
so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
11
|
+
copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
16
|
+
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Rakefile for xregistry gem.
|
2
|
+
# Last modified: 28-Apr-2017 Wm. Parsons
|
3
|
+
|
4
|
+
require 'rake/testtask'
|
5
|
+
|
6
|
+
name = 'xregistry'
|
7
|
+
version = IO.read('VERSION').chomp
|
8
|
+
package = "#{name}-#{version}"
|
9
|
+
|
10
|
+
task :default => [:build]
|
11
|
+
|
12
|
+
desc "Build #{name} gem"
|
13
|
+
task :build do
|
14
|
+
system "gem build #{name}.gemspec"
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Clean up generated files"
|
18
|
+
task :clean do
|
19
|
+
Dir.glob('*.gem').each { |x| FileUtils.rm_f x }
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Install #{name} gem"
|
23
|
+
task :install do
|
24
|
+
system "gem install #{package}.gem --document rdoc,ri"
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Install #{name} gem as user"
|
28
|
+
task :userinstall do
|
29
|
+
system "gem install --user-install #{package}.gem --document rdoc,ri"
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Uninstall #{name} gem"
|
33
|
+
task :uninstall do
|
34
|
+
system "gem uninstall #{name} -v #{version}"
|
35
|
+
end
|
36
|
+
|
37
|
+
Rake::TestTask.new :test
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.6.0
|
data/lib/xregistry.rb
ADDED
@@ -0,0 +1,246 @@
|
|
1
|
+
################################################################################
|
2
|
+
# xregistry.rb
|
3
|
+
#
|
4
|
+
# This file defines a cross-platform Registry class for storing application
|
5
|
+
# configuration parameters.
|
6
|
+
#
|
7
|
+
# The application programming interface (API) is based on the FOX registry
|
8
|
+
# class, which is part of the FOX GUI toolkit (http://www.fox-toolkit.org/).
|
9
|
+
# This file defines a class that can be used in the same way as the FOX
|
10
|
+
# registry, but without needing the FOX toolkit.
|
11
|
+
#
|
12
|
+
# The original FOX registry uses the Windows registry if running under Windows,
|
13
|
+
# and an .INI type file if running under Unix-type systems. This class also
|
14
|
+
# uses the Windows registry if running under Windows, but uses an SQLite3
|
15
|
+
# database if running under a Unix-type system.
|
16
|
+
#
|
17
|
+
# Last revised: 03-Aug-2016 Wm. Parsons
|
18
|
+
################################################################################
|
19
|
+
|
20
|
+
|
21
|
+
class Registry
|
22
|
+
# Construct registry object; app_key and vendor_key must be string constants.
|
23
|
+
# Regular applications SHOULD set a vendor key!
|
24
|
+
def initialize(app_key = '', vendor_key = '')
|
25
|
+
@app_key = app_key
|
26
|
+
@vendor_key = vendor_key
|
27
|
+
@on_windows = RUBY_PLATFORM =~ /w(in)?32/
|
28
|
+
|
29
|
+
if @on_windows
|
30
|
+
require 'win32/registry'
|
31
|
+
@root_key = ['SOFTWARE', vendor_key, app_key].join('\\')
|
32
|
+
else
|
33
|
+
require 'sqlite3'
|
34
|
+
|
35
|
+
# create registry directory if necessary
|
36
|
+
regdir = ENV['HOME'] + '/.registry'
|
37
|
+
File.directory?(regdir) || Dir.mkdir(regdir)
|
38
|
+
regdir += '/' + vendor_key
|
39
|
+
File.directory?(regdir) || Dir.mkdir(regdir)
|
40
|
+
|
41
|
+
@db = SQLite3::Database.new("#{regdir}/#{app_key}.db3")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Return application key
|
46
|
+
def appKey
|
47
|
+
@app_key
|
48
|
+
end
|
49
|
+
alias app_key appKey
|
50
|
+
|
51
|
+
# Return vendor key
|
52
|
+
def vendorKey
|
53
|
+
@vendor_key
|
54
|
+
end
|
55
|
+
alias vendor_key vendorKey
|
56
|
+
|
57
|
+
# Delete the registry entry for the specified section and key.
|
58
|
+
def deleteEntry(section, key)
|
59
|
+
if @on_windows
|
60
|
+
begin
|
61
|
+
pkey = [@root_key, section].join('\\')
|
62
|
+
access = Win32::Registry::KEY_ALL_ACCESS
|
63
|
+
Win32::Registry::HKEY_CURRENT_USER.open(pkey, access) do |reg|
|
64
|
+
reg.delete_value(key)
|
65
|
+
end
|
66
|
+
rescue Win32::Registry::Error
|
67
|
+
end
|
68
|
+
else
|
69
|
+
begin
|
70
|
+
@db.execute %Q[delete from "#{section}" where key=?], key
|
71
|
+
rescue SQLite3::SQLException
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
alias delete_entry deleteEntry
|
76
|
+
|
77
|
+
# Delete a specified section from the registry.
|
78
|
+
def deleteSection(section)
|
79
|
+
if @on_windows
|
80
|
+
begin
|
81
|
+
access = Win32::Registry::KEY_ALL_ACCESS
|
82
|
+
Win32::Registry::HKEY_CURRENT_USER.open(@root_key, access) do |reg|
|
83
|
+
reg.delete_key(section, true)
|
84
|
+
end
|
85
|
+
rescue Win32::Registry::Error
|
86
|
+
end
|
87
|
+
else
|
88
|
+
@db.execute "drop table if exists \"#{section}\""
|
89
|
+
end
|
90
|
+
end
|
91
|
+
alias delete_section deleteSection
|
92
|
+
|
93
|
+
# Iterate over the section keys of the registry.
|
94
|
+
def each_key
|
95
|
+
if @on_windows
|
96
|
+
Win32::Registry::HKEY_CURRENT_USER.open(@root_key) do |reg|
|
97
|
+
reg.each_key { |subkey, wtime| yield subkey }
|
98
|
+
end
|
99
|
+
else
|
100
|
+
@db.execute <<-EOS do |name|
|
101
|
+
select name from sqlite_master where type='table' order by name
|
102
|
+
EOS
|
103
|
+
yield name[0]
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Find a section in the registry.
|
109
|
+
# The properties of the value returned are undefined except that it must
|
110
|
+
# support an "each_key" to iterate thru the keys and a "find" method to
|
111
|
+
# locate the value associated with a key.
|
112
|
+
def find(section)
|
113
|
+
hash = {}
|
114
|
+
if @on_windows
|
115
|
+
pkey = [@root_key, section].join('\\')
|
116
|
+
Win32::Registry::HKEY_CURRENT_USER.open(pkey) do |reg|
|
117
|
+
reg.each do |subkey, type, value|
|
118
|
+
hash[subkey] = value
|
119
|
+
end
|
120
|
+
end
|
121
|
+
else
|
122
|
+
@db.execute %Q[select key, value from "#{section}" order by key] do |row|
|
123
|
+
hash[row[0]] = row[1]
|
124
|
+
end
|
125
|
+
end
|
126
|
+
class << hash
|
127
|
+
def find(key)
|
128
|
+
self[key]
|
129
|
+
end
|
130
|
+
end
|
131
|
+
hash
|
132
|
+
end
|
133
|
+
|
134
|
+
# Read a boolean registry entry from the specified section and key. If no
|
135
|
+
# value is found, the default value is returned. A type error is
|
136
|
+
# raised if the retrieved value is real or a string.
|
137
|
+
def readBoolEntry(section, key, default = false)
|
138
|
+
value = readEntry(section, key, default)
|
139
|
+
raise TypeError if value.class == Float || value.class == String
|
140
|
+
value && value != 0
|
141
|
+
end
|
142
|
+
alias read_bool_entry readBoolEntry
|
143
|
+
|
144
|
+
# Read an integer registry entry from the specified section and key. If no
|
145
|
+
# value is found, the default value is returned.
|
146
|
+
def readIntEntry(section, key, default = 0)
|
147
|
+
readEntry(section, key, default).to_i
|
148
|
+
end
|
149
|
+
alias read_int_entry readIntEntry
|
150
|
+
|
151
|
+
# Read a double-precision floating point registry entry from the specified
|
152
|
+
# section and key. If no value is found, the default value is returned.
|
153
|
+
def readRealEntry(section, key, default = 0.0)
|
154
|
+
readEntry(section, key, default).to_f
|
155
|
+
end
|
156
|
+
alias read_real_entry readRealEntry
|
157
|
+
|
158
|
+
# Read a string registry entry from the specified section and key. If no
|
159
|
+
# value is found, the default value is returned.
|
160
|
+
def readStringEntry(section, key, default = '')
|
161
|
+
readEntry(section, key, default).to_s
|
162
|
+
end
|
163
|
+
alias read_string_entry readStringEntry
|
164
|
+
|
165
|
+
# Write a boolean registry value to the specified section and key.
|
166
|
+
def writeBoolEntry(section, key, value)
|
167
|
+
writeEntry(section, key, value ? 1 : 0)
|
168
|
+
end
|
169
|
+
alias write_bool_entry writeBoolEntry
|
170
|
+
|
171
|
+
# Write an integer registry value to the specified section and key.
|
172
|
+
def writeIntEntry(section, key, value)
|
173
|
+
writeEntry(section, key, value.to_i)
|
174
|
+
end
|
175
|
+
alias write_int_entry writeIntEntry
|
176
|
+
|
177
|
+
# Write a double-precision floating point registry value to the specified
|
178
|
+
# section and key.
|
179
|
+
def writeRealEntry(section, key, value)
|
180
|
+
writeEntry(section, key, value.to_f)
|
181
|
+
end
|
182
|
+
alias write_real_entry writeRealEntry
|
183
|
+
|
184
|
+
# Write a string registry value to the specified section and key.
|
185
|
+
def writeStringEntry(section, key, value)
|
186
|
+
writeEntry(section, key, value.to_s)
|
187
|
+
end
|
188
|
+
alias write_string_entry writeStringEntry
|
189
|
+
|
190
|
+
#######
|
191
|
+
private
|
192
|
+
#######
|
193
|
+
|
194
|
+
# Read a registry entry from the specified section and key. If no
|
195
|
+
# value is found, the default value is returned.
|
196
|
+
def readEntry(section, key, default)
|
197
|
+
if @on_windows
|
198
|
+
pkey = [@root_key, section].join('\\')
|
199
|
+
reg = Win32::Registry::HKEY_CURRENT_USER.open(pkey)
|
200
|
+
reg.read(key)[1]
|
201
|
+
else
|
202
|
+
@db.get_first_value("select value from \"#{section}\" where key=?",
|
203
|
+
key) || default
|
204
|
+
end
|
205
|
+
rescue
|
206
|
+
default
|
207
|
+
end
|
208
|
+
|
209
|
+
# Write a registry value to the specified section and key.
|
210
|
+
def writeEntry(section, key, value)
|
211
|
+
if @on_windows
|
212
|
+
# store real values as strings under Windows
|
213
|
+
value = value.to_s if value.class == Float
|
214
|
+
begin
|
215
|
+
pkey = [@root_key, section].join('\\')
|
216
|
+
access = Win32::Registry::KEY_WRITE
|
217
|
+
Win32::Registry::HKEY_CURRENT_USER.open(pkey, access) do |reg|
|
218
|
+
reg[key] = value
|
219
|
+
end
|
220
|
+
rescue
|
221
|
+
Win32::Registry::HKEY_CURRENT_USER.create(pkey, access) do |reg|
|
222
|
+
reg[key] = value
|
223
|
+
end
|
224
|
+
end
|
225
|
+
else
|
226
|
+
begin
|
227
|
+
@db.execute("update \"#{section}\" set value=? where key=?",
|
228
|
+
[value, key])
|
229
|
+
if @db.changes == 0
|
230
|
+
# no row was updated so insert a new row
|
231
|
+
@db.execute("insert into \"#{section}\"(key, value) values(?,?)",
|
232
|
+
[key, value])
|
233
|
+
end
|
234
|
+
rescue SQLite3::Exception => e
|
235
|
+
if e.to_s =~ /no such table/
|
236
|
+
@db.execute "create table \"#{section}\"(key text unique, value)"
|
237
|
+
|
238
|
+
@db.execute("insert into \"#{section}\"(key, value) values(?,?)",
|
239
|
+
[key, value])
|
240
|
+
else
|
241
|
+
raise e.to_s
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
@@ -0,0 +1,216 @@
|
|
1
|
+
# test program for wregistry gem
|
2
|
+
# Last modified: 02-Aug-2016
|
3
|
+
|
4
|
+
require 'xregistry'
|
5
|
+
require 'test/unit'
|
6
|
+
|
7
|
+
class TestXregistry < Test::Unit::TestCase
|
8
|
+
@@app_key = 'testxreg'
|
9
|
+
@@vendor_key = 'Wikareia'
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@@reg ||= Registry.new(@@app_key, @@vendor_key)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_new
|
16
|
+
assert_equal(Registry, @@reg.class)
|
17
|
+
rescue
|
18
|
+
flunk "error encountered opening database: #{$!}"
|
19
|
+
end
|
20
|
+
|
21
|
+
# test of each_key
|
22
|
+
def test_each_key
|
23
|
+
keys = []
|
24
|
+
@@reg.each_key { |k| keys << k }
|
25
|
+
keys.each { |k| @@reg.deleteSection(k) }
|
26
|
+
@@reg.writeIntEntry('Section1', 'key', 1)
|
27
|
+
@@reg.writeIntEntry('Section2', 'key', 2)
|
28
|
+
@@reg.writeIntEntry('Section3', 'key', 3)
|
29
|
+
value = []
|
30
|
+
@@reg.each_key { |k| value << k }
|
31
|
+
assert_equal(%w[Section1 Section2 Section3], value)
|
32
|
+
end
|
33
|
+
|
34
|
+
# test of find
|
35
|
+
def test_find
|
36
|
+
@@reg.writeIntEntry('Section', 'key1', 1)
|
37
|
+
@@reg.writeIntEntry('Section', 'key2', 2)
|
38
|
+
@@reg.writeIntEntry('Section', 'key3', 3)
|
39
|
+
value = []
|
40
|
+
section = @@reg.find('Section')
|
41
|
+
section.each_key { |k| value << [k, section.find(k)] }
|
42
|
+
assert_equal([['key1', 1], ['key2', 2], ['key3', 3]], value)
|
43
|
+
end
|
44
|
+
|
45
|
+
# test of readBoolEntry
|
46
|
+
def test_read_bool_entry
|
47
|
+
value = @@reg.readBoolEntry('Settings', 'bool_key1')
|
48
|
+
assert_equal(false, value)
|
49
|
+
|
50
|
+
value = @@reg.readBoolEntry('Settings', 'bool_key1', true)
|
51
|
+
assert_equal(true, value)
|
52
|
+
|
53
|
+
value = @@reg.readBoolEntry('Settings', 'bool_key1', false)
|
54
|
+
assert_equal(false, value)
|
55
|
+
|
56
|
+
@@reg.writeIntEntry('Settings', 'bool_key1', 2)
|
57
|
+
value = @@reg.readBoolEntry('Settings', 'bool_key1')
|
58
|
+
assert_equal(true, value)
|
59
|
+
|
60
|
+
@@reg.writeRealEntry('Settings', 'bool_key1', 2.5)
|
61
|
+
assert_raise(TypeError) { @@reg.readBoolEntry('Settings', 'bool_key1') }
|
62
|
+
|
63
|
+
@@reg.writeStringEntry('Settings', 'bool_key1', '2')
|
64
|
+
assert_raise(TypeError) { @@reg.readBoolEntry('Settings', 'bool_key1') }
|
65
|
+
end
|
66
|
+
|
67
|
+
# test of readIntEntry
|
68
|
+
def test_read_int_entry
|
69
|
+
value = @@reg.readIntEntry('Settings', 'int_key1')
|
70
|
+
assert_equal(0, value)
|
71
|
+
|
72
|
+
value = @@reg.readIntEntry('Settings', 'int_key1', 123)
|
73
|
+
assert_equal(123, value)
|
74
|
+
|
75
|
+
@@reg.writeBoolEntry('Settings', 'int_key1', true)
|
76
|
+
value = @@reg.readIntEntry('Settings', 'int_key1')
|
77
|
+
assert_equal(1, value)
|
78
|
+
|
79
|
+
@@reg.writeRealEntry('Settings', 'int_key1', 2.5)
|
80
|
+
value = @@reg.readIntEntry('Settings', 'int_key1')
|
81
|
+
assert_equal(2, value)
|
82
|
+
|
83
|
+
@@reg.writeStringEntry('Settings', 'int_key1', '2')
|
84
|
+
value = @@reg.readIntEntry('Settings', 'int_key1')
|
85
|
+
assert_equal(2, value)
|
86
|
+
|
87
|
+
@@reg.writeStringEntry('Settings', 'int_key1', 'abc')
|
88
|
+
value = @@reg.readIntEntry('Settings', 'int_key1')
|
89
|
+
assert_equal(0, value)
|
90
|
+
end
|
91
|
+
|
92
|
+
# test of readRealEntry
|
93
|
+
def test_read_real_entry
|
94
|
+
value = @@reg.readRealEntry('Settings', 'real_key1')
|
95
|
+
assert_equal(0.0, value)
|
96
|
+
|
97
|
+
value = @@reg.readRealEntry('Settings', 'real_key1', 12.5)
|
98
|
+
assert_equal(12.5, value)
|
99
|
+
|
100
|
+
@@reg.writeBoolEntry('Settings', 'real_key1', true)
|
101
|
+
value = @@reg.readRealEntry('Settings', 'real_key1')
|
102
|
+
assert_equal(1.0, value)
|
103
|
+
|
104
|
+
@@reg.writeIntEntry('Settings', 'real_key1', 2)
|
105
|
+
value = @@reg.readRealEntry('Settings', 'real_key1')
|
106
|
+
assert_equal(2.0, value)
|
107
|
+
|
108
|
+
@@reg.writeStringEntry('Settings', 'real_key1', '2.5')
|
109
|
+
value = @@reg.readRealEntry('Settings', 'real_key1')
|
110
|
+
assert_equal(2.5, value)
|
111
|
+
|
112
|
+
@@reg.writeStringEntry('Settings', 'real_key1', 'abc')
|
113
|
+
value = @@reg.readRealEntry('Settings', 'real_key1')
|
114
|
+
assert_equal(0, value)
|
115
|
+
end
|
116
|
+
|
117
|
+
# test of readStringEntry
|
118
|
+
def test_read_string_entry
|
119
|
+
string = @@reg.readStringEntry('Settings', 'string_key1')
|
120
|
+
assert_equal('', string)
|
121
|
+
|
122
|
+
string = @@reg.readStringEntry('Settings', 'string_key1', 'default value')
|
123
|
+
assert_match(/ value/, string)
|
124
|
+
|
125
|
+
@@reg.writeBoolEntry('Settings', 'string_key1', true)
|
126
|
+
value = @@reg.readStringEntry('Settings', 'string_key1')
|
127
|
+
assert_equal('1', value)
|
128
|
+
|
129
|
+
@@reg.writeIntEntry('Settings', 'string_key1', 2)
|
130
|
+
value = @@reg.readStringEntry('Settings', 'string_key1')
|
131
|
+
assert_equal('2', value)
|
132
|
+
|
133
|
+
@@reg.writeRealEntry('Settings', 'string_key1', 2.5)
|
134
|
+
value = @@reg.readStringEntry('Settings', 'string_key1')
|
135
|
+
assert_equal('2.5', value)
|
136
|
+
end
|
137
|
+
|
138
|
+
# test of writeBoolEntry
|
139
|
+
def test_write_bool_entry
|
140
|
+
@@reg.writeBoolEntry('Settings', 'bool_key2', true)
|
141
|
+
value = @@reg.readBoolEntry('Settings', 'bool_key2')
|
142
|
+
assert_equal(true, value)
|
143
|
+
|
144
|
+
@@reg.writeBoolEntry('Settings', 'bool_key2', false)
|
145
|
+
value = @@reg.readBoolEntry('Settings', 'bool_key2')
|
146
|
+
assert_equal(false, value)
|
147
|
+
end
|
148
|
+
|
149
|
+
# test of writeIntEntry
|
150
|
+
def test_write_int_entry
|
151
|
+
@@reg.writeIntEntry('Settings', 'int_key2', 456)
|
152
|
+
value = @@reg.readIntEntry('Settings', 'int_key2')
|
153
|
+
assert_equal(456, value)
|
154
|
+
end
|
155
|
+
|
156
|
+
# test of writeRealEntry
|
157
|
+
def test_write_real_entry
|
158
|
+
@@reg.writeRealEntry('Settings', 'real_key2', 25.5)
|
159
|
+
value = @@reg.readRealEntry('Settings', 'real_key2')
|
160
|
+
assert_equal(25.5, value)
|
161
|
+
end
|
162
|
+
|
163
|
+
# test of writeStringEntry
|
164
|
+
def test_write_string_entry
|
165
|
+
@@reg.writeStringEntry('Settings', 'string_key2', 'test value')
|
166
|
+
string = @@reg.readStringEntry('Settings', 'string_key2')
|
167
|
+
assert_equal('test value', string)
|
168
|
+
end
|
169
|
+
|
170
|
+
# test of deleteEntry
|
171
|
+
def test_delete_entry
|
172
|
+
@@reg.writeStringEntry('Settings', 'key1', 'dummy value')
|
173
|
+
string = @@reg.readStringEntry('Settings', 'key1')
|
174
|
+
assert_equal('dummy value', string)
|
175
|
+
@@reg.writeStringEntry('Settings', 'key2', 'dummy value')
|
176
|
+
string = @@reg.readStringEntry('Settings', 'key2')
|
177
|
+
assert_equal('dummy value', string)
|
178
|
+
@@reg.deleteEntry('Settings', 'key1')
|
179
|
+
string = @@reg.readStringEntry('Settings', 'key1', 'no value')
|
180
|
+
assert_equal('no value', string)
|
181
|
+
|
182
|
+
# test of deleteEntry when key doesn't exist
|
183
|
+
@@reg.deleteEntry('Settings', 'key1')
|
184
|
+
string = @@reg.readStringEntry('Settings', 'key1', 'no value')
|
185
|
+
assert_equal('no value', string)
|
186
|
+
|
187
|
+
# test of deleteEntry when section doesn't exist
|
188
|
+
@@reg.deleteSection('Settings')
|
189
|
+
@@reg.deleteEntry('Settings', 'key2')
|
190
|
+
string = @@reg.readStringEntry('Settings', 'key2', 'no value')
|
191
|
+
assert_equal('no value', string)
|
192
|
+
end
|
193
|
+
|
194
|
+
# test of deleteSection
|
195
|
+
def test_delete_section
|
196
|
+
@@reg.writeStringEntry('Settings', 'key', 'dummy value')
|
197
|
+
@@reg.deleteSection('Settings')
|
198
|
+
string = @@reg.readStringEntry('Settings', 'key', 'no value')
|
199
|
+
assert_equal('no value', string)
|
200
|
+
|
201
|
+
# test of deleteSection when section doesn't exist
|
202
|
+
@@reg.deleteSection('Settings')
|
203
|
+
string = @@reg.readStringEntry('Settings', 'key', 'no value')
|
204
|
+
assert_equal('no value', string)
|
205
|
+
end
|
206
|
+
|
207
|
+
# test of appKey
|
208
|
+
def test_app_key
|
209
|
+
assert_equal(@@app_key, @@reg.appKey)
|
210
|
+
end
|
211
|
+
|
212
|
+
# test of vendorKey
|
213
|
+
def test_vendor_key
|
214
|
+
assert_equal(@@vendor_key, @@reg.vendorKey)
|
215
|
+
end
|
216
|
+
end
|
data/xregistry.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# xregistry.gemspec
|
2
|
+
# Last modified: 22-Feb-2016
|
3
|
+
|
4
|
+
spec = Gem::Specification.new do |s|
|
5
|
+
s.name = 'xregistry'
|
6
|
+
s.version = IO.read('VERSION')
|
7
|
+
s.summary = 'A cross-platform registry class for Ruby.'
|
8
|
+
s.description = <<-EOS
|
9
|
+
This provides a cross-platform registry class for Ruby.
|
10
|
+
EOS
|
11
|
+
s.author = 'William Parsons'
|
12
|
+
s.email = 'wbparsons@alum.mit.edu'
|
13
|
+
s.license = 'MIT'
|
14
|
+
s.homepage = 'http://chiselapp.com/user/varro/repository/Xregistry'
|
15
|
+
s.files = Dir['{lib,test}/*.rb'] +
|
16
|
+
%w[LICENSE Rakefile VERSION xregistry.gemspec]
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xregistry
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.6.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- William Parsons
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-09-20 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: 'This provides a cross-platform registry class for Ruby.
|
14
|
+
|
15
|
+
'
|
16
|
+
email: wbparsons@alum.mit.edu
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- LICENSE
|
22
|
+
- Rakefile
|
23
|
+
- VERSION
|
24
|
+
- lib/xregistry.rb
|
25
|
+
- test/test_xregistry.rb
|
26
|
+
- xregistry.gemspec
|
27
|
+
homepage: http://chiselapp.com/user/varro/repository/Xregistry
|
28
|
+
licenses:
|
29
|
+
- MIT
|
30
|
+
metadata: {}
|
31
|
+
post_install_message:
|
32
|
+
rdoc_options: []
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubyforge_project:
|
47
|
+
rubygems_version: 2.6.12
|
48
|
+
signing_key:
|
49
|
+
specification_version: 4
|
50
|
+
summary: A cross-platform registry class for Ruby.
|
51
|
+
test_files: []
|