ruby-keepassx 0.2.0beta11 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -7
- data/lib/keepassx.rb +14 -19
- data/lib/keepassx/database.rb +62 -25
- data/lib/keepassx/entry.rb +15 -2
- data/lib/keepassx/field.rb +4 -1
- data/lib/keepassx/header.rb +1 -1
- data/lib/keepassx/item.rb +0 -6
- data/lib/keepassx/utilities.rb +7 -6
- data/ruby-keepassx.gemspec +3 -8
- data/spec/keepassx/database_spec.rb +2 -1
- metadata +66 -69
- data/.rvmrc +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
5
|
-
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 35f2f1221b72c8c74d1fa5a93850c16344d45545
|
4
|
+
data.tar.gz: c0ab67fd645312df9583a7d98304f19c7f287cce
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1f09e9cdd21f2e08a544f02c868877c05f3e3dcb8e30b1e850d6dc3e0f977a305a868064a0abfd2dcd2aab49b9bbf065535503b29ee7252c00f97e579facefb7
|
7
|
+
data.tar.gz: 4307be70d609093891f1bdf59f2e5cfd263a5ee9febcfec84cf8e29ae4f7dff984a2a0e634758460ada410b8bb01127acb9d57bc90c61d216d3fff94d469f46e
|
data/lib/keepassx.rb
CHANGED
@@ -5,25 +5,6 @@ require 'digest/sha2'
|
|
5
5
|
require 'securerandom'
|
6
6
|
require 'rexml/document'
|
7
7
|
|
8
|
-
# Add backward compatibility stuff
|
9
|
-
if RUBY_VERSION =~ /1\.8/
|
10
|
-
require 'backports/tools'
|
11
|
-
require 'backports/1.9.1/symbol/empty'
|
12
|
-
require 'backports/1.9.3/io/write'
|
13
|
-
require 'time' # Get Time.parse
|
14
|
-
|
15
|
-
unless SecureRandom.method_defined? :uuid
|
16
|
-
module SecureRandom
|
17
|
-
# Based on this post https://www.ruby-forum.com/topic/3171049#1035902
|
18
|
-
def self.uuid
|
19
|
-
s = hex 16
|
20
|
-
[s[0..7], s[8..11], s[12..15], s[16..19], s[20..-1]].join '-'
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
8
|
require 'keepassx/exceptions'
|
28
9
|
require 'keepassx/header'
|
29
10
|
require 'keepassx/utilities'
|
@@ -39,6 +20,14 @@ require 'keepassx/aes_crypt'
|
|
39
20
|
module Keepassx
|
40
21
|
|
41
22
|
class << self
|
23
|
+
|
24
|
+
|
25
|
+
# Create Keepassx database
|
26
|
+
#
|
27
|
+
# @param opts [Hash] Keepassx database options.
|
28
|
+
# @yield [opts]
|
29
|
+
# @yieldreturn [Fixnum]
|
30
|
+
# @return [Keepassx::Database]
|
42
31
|
def new opts
|
43
32
|
db = Database.new opts
|
44
33
|
return db unless block_given?
|
@@ -46,6 +35,12 @@ module Keepassx
|
|
46
35
|
end
|
47
36
|
|
48
37
|
|
38
|
+
# Read Keepassx database from file storage.
|
39
|
+
#
|
40
|
+
# @param opts [Hash] Keepassx database options.
|
41
|
+
# @yield [opts]
|
42
|
+
# @yieldreturn [Fixnum]
|
43
|
+
# @return [Keepassx::Database]
|
49
44
|
def open opts
|
50
45
|
db = Database.open opts
|
51
46
|
return db unless block_given?
|
data/lib/keepassx/database.rb
CHANGED
@@ -50,6 +50,11 @@ module Keepassx
|
|
50
50
|
end
|
51
51
|
|
52
52
|
|
53
|
+
# Get raw encoded database.
|
54
|
+
#
|
55
|
+
# @param password [String] Password the database will be encoded with.
|
56
|
+
# @param key_file [String] Path to key file.
|
57
|
+
# @return [String]
|
53
58
|
def dump password = nil, key_file = nil
|
54
59
|
# FIXME: Figure out what this is needed for
|
55
60
|
# my $e = ($self->find_entries({title => 'Meta-Info', username => 'SYSTEM', comment => 'KPX_GROUP_TREE_STATE', url => '$'}))[0] || $self->add_entry({
|
@@ -73,8 +78,13 @@ module Keepassx
|
|
73
78
|
end
|
74
79
|
|
75
80
|
|
76
|
-
#
|
81
|
+
# Save database to file storage
|
82
|
+
#
|
83
|
+
# @param password [String] Password the database will be encoded with.
|
84
|
+
# @param key_file [String] Path to key file.
|
85
|
+
# @return [Fixnum]
|
77
86
|
def save password = nil, key_file = nil
|
87
|
+
# TODO: Switch to rails style, i.e. save(:password => 'pass')
|
78
88
|
fail TypeError, 'File path is not set' if path.nil?
|
79
89
|
File.write path, dump(password, key_file)
|
80
90
|
|
@@ -89,6 +99,10 @@ module Keepassx
|
|
89
99
|
|
90
100
|
|
91
101
|
# Search for items, using AND statement for the search conditions
|
102
|
+
#
|
103
|
+
# @param item_type [Symbol] Can be :entry or :group.
|
104
|
+
# @param opts [Hash] Search options.
|
105
|
+
# @return [Keepassx::Group, Keepassx::Entry]
|
92
106
|
def get item_type, opts = {}
|
93
107
|
|
94
108
|
case item_type
|
@@ -110,7 +124,7 @@ module Keepassx
|
|
110
124
|
match_number = opts.length
|
111
125
|
items = []
|
112
126
|
opts.each do |k, v|
|
113
|
-
items += Array
|
127
|
+
items += Array item_list.select { |e| e.send(k).eql?(v) }
|
114
128
|
end
|
115
129
|
|
116
130
|
buffer = Hash.new 0
|
@@ -138,7 +152,9 @@ module Keepassx
|
|
138
152
|
end
|
139
153
|
|
140
154
|
|
141
|
-
# Get first matching entry
|
155
|
+
# Get first matching entry.
|
156
|
+
#
|
157
|
+
# @return [Keepassx::Entry]
|
142
158
|
def entry opts = {}
|
143
159
|
entries = get :entry, opts
|
144
160
|
if entries.empty?
|
@@ -150,13 +166,17 @@ module Keepassx
|
|
150
166
|
end
|
151
167
|
|
152
168
|
|
153
|
-
# Get all matching entries
|
169
|
+
# Get all matching entries.
|
170
|
+
#
|
171
|
+
# @return [Array<Keepassx::Entry>]
|
154
172
|
def entries opts = {}
|
155
173
|
get :entry, opts
|
156
174
|
end
|
157
175
|
|
158
176
|
|
159
|
-
# Get first matching group
|
177
|
+
# Get first matching group.
|
178
|
+
#
|
179
|
+
# @return [Keepassx::Group]
|
160
180
|
def group opts = {}
|
161
181
|
groups = get :group, opts
|
162
182
|
if groups.empty?
|
@@ -168,12 +188,19 @@ module Keepassx
|
|
168
188
|
end
|
169
189
|
|
170
190
|
|
171
|
-
# Get all matching groups
|
191
|
+
# Get all matching groups.
|
192
|
+
#
|
193
|
+
# @param opts [Hash]
|
194
|
+
# @return [Array<Keepassx::Group>]
|
172
195
|
def groups opts = {}
|
173
196
|
get :group, opts
|
174
197
|
end
|
175
198
|
|
176
199
|
|
200
|
+
# Add new item to database.
|
201
|
+
#
|
202
|
+
# @param item [Symbol, Keepassx::Group, Keepassx::Entry] New item.
|
203
|
+
# @return [Keepassx::Group, Keepassx::Entry]
|
177
204
|
def add item, opts = {}
|
178
205
|
if item.is_a? Symbol
|
179
206
|
|
@@ -197,6 +224,10 @@ module Keepassx
|
|
197
224
|
end
|
198
225
|
|
199
226
|
|
227
|
+
# Add new group to database.
|
228
|
+
#
|
229
|
+
# @param opts [Hash] Options that will be passed to Keepassx::Group#new.
|
230
|
+
# @return [Keepassx::Group]
|
200
231
|
def add_group opts
|
201
232
|
|
202
233
|
if opts.is_a? Hash
|
@@ -232,7 +263,12 @@ module Keepassx
|
|
232
263
|
end
|
233
264
|
|
234
265
|
|
266
|
+
# Add new entry to database.
|
267
|
+
#
|
268
|
+
# @param opts [Hash] Options that will be passed to Keepassx::Entry#new.
|
269
|
+
# @return [Keepassx::Entry]
|
235
270
|
def add_entry opts
|
271
|
+
# FIXME: Add warnings and detailed description
|
236
272
|
if opts.is_a? Hash
|
237
273
|
opts = deep_copy opts
|
238
274
|
|
@@ -258,11 +294,11 @@ module Keepassx
|
|
258
294
|
end
|
259
295
|
|
260
296
|
|
261
|
-
# Delete item from database
|
297
|
+
# Delete item from database.
|
262
298
|
#
|
263
|
-
# @param [Keepassx::Group, Keepassx::Entry, Symbol]
|
264
|
-
# @param [Hash]
|
265
|
-
#
|
299
|
+
# @param item [Keepassx::Group, Keepassx::Entry, Symbol] Item to delete.
|
300
|
+
# @param opts [Hash] If first parameter is a Symbol, then this will be
|
301
|
+
# used to determine which item to delete.
|
266
302
|
def delete item, opts = {}
|
267
303
|
if item.is_a? Keepassx::Group
|
268
304
|
delete_group item
|
@@ -285,11 +321,11 @@ module Keepassx
|
|
285
321
|
end
|
286
322
|
|
287
323
|
|
288
|
-
# Unlock database
|
324
|
+
# Unlock database.
|
289
325
|
#
|
290
|
-
# @param [String]
|
291
|
-
# @param [String]
|
292
|
-
# @return [Boolean] Whether or not password validation successfull
|
326
|
+
# @param password [String] Datbase password.
|
327
|
+
# @param key_file [String] Key file path.
|
328
|
+
# @return [Boolean] Whether or not password validation successfull.
|
293
329
|
def unlock password, key_file = nil
|
294
330
|
|
295
331
|
return true unless locked?
|
@@ -310,12 +346,13 @@ module Keepassx
|
|
310
346
|
end
|
311
347
|
|
312
348
|
|
313
|
-
|
314
|
-
#
|
349
|
+
|
350
|
+
# Search entry by title.
|
315
351
|
#
|
316
|
-
# @param [String]
|
352
|
+
# @param pattern [String] Entry's title to search for.
|
317
353
|
# @return [Keepassx::Entry]
|
318
354
|
def search pattern
|
355
|
+
# FIXME: Seqrch by any atribute by pattern
|
319
356
|
backup = group 'Backup'
|
320
357
|
|
321
358
|
entries.select do |e|
|
@@ -324,7 +361,7 @@ module Keepassx
|
|
324
361
|
end
|
325
362
|
|
326
363
|
|
327
|
-
# Check database validity
|
364
|
+
# Check database validity.
|
328
365
|
#
|
329
366
|
# @return [Boolean]
|
330
367
|
def valid?
|
@@ -340,9 +377,9 @@ module Keepassx
|
|
340
377
|
end
|
341
378
|
|
342
379
|
|
343
|
-
# Get Group/Entry index in storage
|
380
|
+
# Get Group/Entry index in storage.
|
344
381
|
#
|
345
|
-
# @return [
|
382
|
+
# @return [Fixnum]
|
346
383
|
def index v
|
347
384
|
if v.is_a? Keepassx::Group
|
348
385
|
groups.find_index v
|
@@ -357,9 +394,9 @@ module Keepassx
|
|
357
394
|
end
|
358
395
|
|
359
396
|
|
360
|
-
# Get Enries and Groups total number
|
397
|
+
# Get Enries and Groups total number.
|
361
398
|
#
|
362
|
-
# @return [
|
399
|
+
# @return [Fixnum]
|
363
400
|
def length
|
364
401
|
length = 0
|
365
402
|
[@groups, @entries].each do |items|
|
@@ -372,7 +409,7 @@ module Keepassx
|
|
372
409
|
end
|
373
410
|
|
374
411
|
|
375
|
-
# Get actual payload checksum
|
412
|
+
# Get actual payload checksum.
|
376
413
|
#
|
377
414
|
# @return [String]
|
378
415
|
def checksum
|
@@ -380,9 +417,9 @@ module Keepassx
|
|
380
417
|
end
|
381
418
|
|
382
419
|
|
383
|
-
# Get next group ID number
|
420
|
+
# Get next group ID number.
|
384
421
|
#
|
385
|
-
# @return [
|
422
|
+
# @return [Fixnum]
|
386
423
|
def next_group_id
|
387
424
|
if groups.empty?
|
388
425
|
# Start each time from 1 to make sure groups get the same id's for the
|
data/lib/keepassx/entry.rb
CHANGED
@@ -51,6 +51,12 @@ module Keepassx
|
|
51
51
|
}
|
52
52
|
|
53
53
|
|
54
|
+
# Create entries from raw data.
|
55
|
+
#
|
56
|
+
# @param header [Keepassx::Header] Keepassx database header.
|
57
|
+
# @param groups [Array<Keepassx::Group>] Group list, the entry will bind to.
|
58
|
+
# @param payload [StringIO] Raw data.
|
59
|
+
# @return [Array<Keepassx::Entry>]
|
54
60
|
def self.extract_from_payload(header, groups, payload)
|
55
61
|
items = []
|
56
62
|
header.entry_number.times do
|
@@ -62,6 +68,9 @@ module Keepassx
|
|
62
68
|
end
|
63
69
|
|
64
70
|
|
71
|
+
# Get list of supported entry fields.
|
72
|
+
#
|
73
|
+
# @return [Array<Symbol>]
|
65
74
|
def self.fields
|
66
75
|
FIELD_MAPPING.keys
|
67
76
|
end
|
@@ -78,8 +87,8 @@ module Keepassx
|
|
78
87
|
fail "'group' is required" if payload[:group].nil?
|
79
88
|
self.group = payload[:group]
|
80
89
|
|
81
|
-
|
82
|
-
data = payload.
|
90
|
+
field_list = FIELD_MAPPING.keys
|
91
|
+
data = payload.select { |k| field_list.include? k }
|
83
92
|
data[:group_id] = group.id
|
84
93
|
|
85
94
|
@fields = []
|
@@ -97,6 +106,10 @@ module Keepassx
|
|
97
106
|
attr_reader :group
|
98
107
|
|
99
108
|
|
109
|
+
# Set parent group.
|
110
|
+
#
|
111
|
+
# @param v [Keepassx::Group] Parent group.
|
112
|
+
# @return [Keepassx::Group]
|
100
113
|
def group= v
|
101
114
|
if v.is_a? Keepassx::Group
|
102
115
|
self.group_id = v.id
|
data/lib/keepassx/field.rb
CHANGED
@@ -53,7 +53,9 @@ module Keepassx
|
|
53
53
|
end
|
54
54
|
|
55
55
|
|
56
|
-
#
|
56
|
+
# Get raw data length
|
57
|
+
#
|
58
|
+
# @return [Integer]
|
57
59
|
def length
|
58
60
|
TYPE_CODE_FIELD_SIZE + DATA_LENGTH_FIELD_SIZE + size
|
59
61
|
end
|
@@ -167,6 +169,7 @@ module Keepassx
|
|
167
169
|
|
168
170
|
|
169
171
|
def ascii= value
|
172
|
+
# TODO: Add spec
|
170
173
|
@data = [value].pack('H*')
|
171
174
|
end
|
172
175
|
|
data/lib/keepassx/header.rb
CHANGED
data/lib/keepassx/item.rb
CHANGED
data/lib/keepassx/utilities.rb
CHANGED
@@ -92,7 +92,7 @@ module Keepassx
|
|
92
92
|
|
93
93
|
# Set parents for groups
|
94
94
|
#
|
95
|
-
# @param [Array]
|
95
|
+
# @param list [Array] Array of groups.
|
96
96
|
# @return [Array] Updated array of groups.
|
97
97
|
def initialize_groups list
|
98
98
|
|
@@ -109,9 +109,9 @@ module Keepassx
|
|
109
109
|
if previous_group.nil? or group.level.eql? 0
|
110
110
|
group.parent = nil
|
111
111
|
|
112
|
-
|
113
|
-
|
114
|
-
|
112
|
+
# If group has level greater than parent's level by one,
|
113
|
+
# it gets parent set to the first previous group with level less
|
114
|
+
# than group's level by one
|
115
115
|
elsif group.level == previous_group.level + 1 or
|
116
116
|
group.level == previous_group.level
|
117
117
|
|
@@ -153,7 +153,7 @@ module Keepassx
|
|
153
153
|
|
154
154
|
# Retrieves last sibling index
|
155
155
|
#
|
156
|
-
# @param [Keepassx::Group]
|
156
|
+
# @param parent [Keepassx::Group] Last sibling group.
|
157
157
|
# @return [Integer] index Group index.
|
158
158
|
def last_sibling_index parent
|
159
159
|
|
@@ -187,7 +187,7 @@ module Keepassx
|
|
187
187
|
# Remove groups and entries from options, so new group could be
|
188
188
|
# initialized from incoming Hash
|
189
189
|
fields = Keepassx::Group.fields
|
190
|
-
group_opts = opts.
|
190
|
+
group_opts = opts.select { |k, _| fields.include? k }
|
191
191
|
group = add_group group_opts
|
192
192
|
|
193
193
|
entries.each do |e|
|
@@ -197,6 +197,7 @@ module Keepassx
|
|
197
197
|
|
198
198
|
# Recursively proceed each child group
|
199
199
|
groups.each { |g| parse_data_array g } unless groups.nil?
|
200
|
+
|
200
201
|
end
|
201
202
|
|
202
203
|
|
data/ruby-keepassx.gemspec
CHANGED
@@ -3,20 +3,15 @@ Gem::Specification.new do |s|
|
|
3
3
|
s.summary = 'Ruby API access for KeePassX databases'
|
4
4
|
s.description = 'This is fork of Tony Pitluga\'s ' \
|
5
5
|
'Ruby API for keepassx with read-write support.'
|
6
|
-
s.version = '0.2.
|
6
|
+
s.version = '0.2.0'
|
7
7
|
s.authors = ['Tony Pitluga', 'Paul Hinze', 'Tio Teath']
|
8
8
|
s.email = ['tony.pitluga@gmail.com', 'paul.t.hinze@gmail.com',
|
9
|
-
'
|
9
|
+
'tioteath@gmail.com']
|
10
10
|
s.homepage = 'https://github.com/tioteath/ruby-keepassx.git'
|
11
11
|
s.files = `git ls-files`.split "\n"
|
12
12
|
|
13
|
-
# TODO: This won't work, figure out why.
|
14
|
-
if RUBY_VERSION =~ /1\.8/
|
15
|
-
s.add_dependency 'backports', '~> 3.6.0'
|
16
|
-
end
|
17
|
-
|
18
13
|
s.add_development_dependency 'rspec', '~> 3.0'
|
19
|
-
s.add_development_dependency 'pry', '~> 0
|
14
|
+
s.add_development_dependency 'pry', '~> 0'
|
20
15
|
s.add_development_dependency 'rake', '~> 0.8', '>= 0.8.7'
|
21
16
|
# s.add_development_dependency 'respect', '~> 0.1.1'
|
22
17
|
# s.add_development_dependency 'rspec-prof', '~> 0'
|
@@ -16,8 +16,9 @@ describe Keepassx::Database do
|
|
16
16
|
subject { Keepassx }
|
17
17
|
let(:db1) { subject.new data_array }
|
18
18
|
let(:db2) { subject.new data_array }
|
19
|
-
|
20
19
|
it 'has the same checksum for the same data' do
|
20
|
+
# warn "db1: #{File.write '/tmp/db1', db1.entries.inspect}>><<"
|
21
|
+
# warn "db2: #{File.write '/tmp/db2', db2.entries.inspect}>><<"
|
21
22
|
expect(db1.checksum).to eq db2.checksum
|
22
23
|
end
|
23
24
|
end
|
metadata
CHANGED
@@ -1,77 +1,78 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-keepassx
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Tony Pitluga
|
8
8
|
- Paul Hinze
|
9
9
|
- Tio Teath
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
- !ruby/object:Gem::Dependency
|
17
|
-
name: backports
|
18
|
-
prerelease: false
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 3.6.0
|
24
|
-
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
13
|
+
date: 2014-09-16 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
27
16
|
name: rspec
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
version: "3.0"
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.0'
|
34
22
|
type: :development
|
35
|
-
version_requirements: *id002
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: pry
|
38
23
|
prerelease: false
|
39
|
-
|
40
|
-
requirements:
|
41
|
-
- - ~>
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 0
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - "~>"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '3.0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: pry
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
44
36
|
type: :development
|
45
|
-
version_requirements: *id003
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: rake
|
48
37
|
prerelease: false
|
49
|
-
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version:
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: rake
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.8'
|
54
50
|
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
51
|
+
- !ruby/object:Gem::Version
|
56
52
|
version: 0.8.7
|
57
53
|
type: :development
|
58
|
-
|
59
|
-
|
60
|
-
|
54
|
+
prerelease: false
|
55
|
+
version_requirements: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.8'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.8.7
|
63
|
+
description: This is fork of Tony Pitluga's Ruby API for keepassx with read-write
|
64
|
+
support.
|
65
|
+
email:
|
61
66
|
- tony.pitluga@gmail.com
|
62
67
|
- paul.t.hinze@gmail.com
|
63
|
-
-
|
68
|
+
- tioteath@gmail.com
|
64
69
|
executables: []
|
65
|
-
|
66
70
|
extensions: []
|
67
|
-
|
68
71
|
extra_rdoc_files: []
|
69
|
-
|
70
|
-
|
71
|
-
- .
|
72
|
-
- .
|
73
|
-
- .rvmrc
|
74
|
-
- .travis.yml
|
72
|
+
files:
|
73
|
+
- ".coveralls.yml"
|
74
|
+
- ".gitignore"
|
75
|
+
- ".travis.yml"
|
75
76
|
- Gemfile
|
76
77
|
- README.md
|
77
78
|
- Rakefile
|
@@ -97,30 +98,26 @@ files:
|
|
97
98
|
- spec/spec_helper.rb
|
98
99
|
homepage: https://github.com/tioteath/ruby-keepassx.git
|
99
100
|
licenses: []
|
100
|
-
|
101
101
|
metadata: {}
|
102
|
-
|
103
102
|
post_install_message:
|
104
103
|
rdoc_options: []
|
105
|
-
|
106
|
-
require_paths:
|
104
|
+
require_paths:
|
107
105
|
- lib
|
108
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
-
requirements:
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
110
113
|
- - ">="
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version:
|
113
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 1.3.1
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
118
116
|
requirements: []
|
119
|
-
|
120
117
|
rubyforge_project:
|
121
|
-
rubygems_version: 2.
|
118
|
+
rubygems_version: 2.2.2
|
122
119
|
signing_key:
|
123
120
|
specification_version: 4
|
124
121
|
summary: Ruby API access for KeePassX databases
|
125
122
|
test_files: []
|
126
|
-
|
123
|
+
has_rdoc:
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm ruby-1.8.7@keepassx --create
|