nakajima-key-val 0.0.5

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.
Files changed (4) hide show
  1. data/bin/val +5 -0
  2. data/lib/completions.rb +7 -0
  3. data/lib/val.rb +100 -0
  4. metadata +55 -0
data/bin/val ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.join(File.dirname(__FILE__), *%w[.. lib val])
4
+
5
+ KeyValerie.new.run(ARGV.dup)
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), *%w[val])
2
+
3
+ TabTab::Definition.register('val') do |c|
4
+ KeyValerie.new.each do |key,val|
5
+ c.command key, "Reveal value for #{key}"
6
+ end
7
+ end
data/lib/val.rb ADDED
@@ -0,0 +1,100 @@
1
+ # Keep track of key/value pairs in a .key-val file.
2
+ #
3
+ # USAGE
4
+ #
5
+ # Setting a token:
6
+ #
7
+ # $ val foo bar
8
+ #
9
+ # Getting a token:
10
+ #
11
+ # $ val foo
12
+ #
13
+ # will return "bar"
14
+ #
15
+ # Unsetting a token:
16
+ #
17
+ # $ val foo --unset
18
+ #
19
+ # will delete the "bar"
20
+ #
21
+ # Listing all tokens:
22
+ #
23
+ # $ val
24
+ #
25
+ # TODO Real options
26
+ require 'yaml'
27
+ begin
28
+ require 'crypt/blowfish'
29
+ rescue LoadError
30
+ puts "You must install the `crypt` gem."
31
+ end
32
+
33
+ class KeyValerie
34
+ def run(args)
35
+ init unless File.exist?(tokens)
36
+ sym = case
37
+ when args.empty? then :list
38
+ when args.delete('--unset') then :unset
39
+ else args.length > 1 ? :set : :get
40
+ end ; send(sym, *args)
41
+ end
42
+
43
+ def get(key)
44
+ if token = store[key]
45
+ puts token
46
+ end
47
+ end
48
+
49
+ def set(key, val)
50
+ store[key] = val and save(store)
51
+ puts "set `#{key}` to #{val}"
52
+ end
53
+
54
+ def unset(key)
55
+ store.delete(key) and save(store)
56
+ puts "unset `#{key}` token"
57
+ end
58
+
59
+ def list
60
+ puts "Key/Value Pairs:"
61
+ store.each do |key, val|
62
+ puts "- #{key}: #{val}"
63
+ end
64
+ end
65
+
66
+ def each
67
+ store.each { |key,val| yield(key,val) }
68
+ end
69
+
70
+ def keys
71
+ store.keys
72
+ end
73
+
74
+ private
75
+
76
+ def crypter
77
+ @crypter ||= Crypt::Blowfish.new('val-crypt-key')
78
+ end
79
+
80
+ def init
81
+ File.open(tokens, 'w+') { |f| f << '' }
82
+ end
83
+
84
+ def save(new_store)
85
+ File.open(tokens, 'w+') do |file|
86
+ file << crypter.encrypt_string(store.to_yaml)
87
+ end
88
+ end
89
+
90
+ def store
91
+ @store ||= begin
92
+ text = File.read(tokens)
93
+ text.empty? ? {} : YAML.load(crypter.decrypt_string(text))
94
+ end
95
+ end
96
+
97
+ def tokens
98
+ File.join(ENV['HOME'], '.key-val')
99
+ end
100
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nakajima-key-val
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Pat Nakajima
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-09 00:00:00 -07:00
13
+ default_executable: val
14
+ dependencies: []
15
+
16
+ description:
17
+ email: patnakajima@gmail.com
18
+ executables:
19
+ - val
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - bin/val
26
+ - lib/val.rb
27
+ - lib/completions.rb
28
+ has_rdoc: false
29
+ homepage:
30
+ post_install_message:
31
+ rdoc_options: []
32
+
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
+ version:
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ requirements: []
48
+
49
+ rubyforge_project:
50
+ rubygems_version: 1.2.0
51
+ signing_key:
52
+ specification_version: 2
53
+ summary: Easily get or set key/value pairs from ~/.key-valerie
54
+ test_files: []
55
+