nakajima-key-val 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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
+