keytar 0.9.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -1
- data/README.md +36 -25
- data/VERSION +1 -1
- data/keytar.gemspec +3 -24
- data/lib/keytar.rb +0 -3
- data/lib/keytar/key_builder.rb +59 -49
- data/spec/keytar/key_builder_spec.rb +129 -166
- data/spec/keytar/keytar_spec.rb +193 -13
- data/spec/keytar/spec_helper.rb +1 -0
- metadata +4 -25
- data/.DS_Store +0 -0
- data/Gemfile.lock +0 -44
- data/db/migrate/001_create_bars.rb +0 -11
- data/pkg/keytar-0.1.0.gem +0 -0
- data/pkg/keytar-0.1.1.gem +0 -0
- data/vendor/cache/activemodel-3.0.6.gem +0 -0
- data/vendor/cache/activerecord-3.0.6.gem +0 -0
- data/vendor/cache/activesupport-3.0.6.gem +0 -0
- data/vendor/cache/arel-2.0.9.gem +0 -0
- data/vendor/cache/builder-2.1.2.gem +0 -0
- data/vendor/cache/diff-lcs-1.1.2.gem +0 -0
- data/vendor/cache/git-1.2.5.gem +0 -0
- data/vendor/cache/i18n-0.5.0.gem +0 -0
- data/vendor/cache/jeweler-1.5.2.gem +0 -0
- data/vendor/cache/rake-0.8.7.gem +0 -0
- data/vendor/cache/rspec-2.5.0.gem +0 -0
- data/vendor/cache/rspec-core-2.5.1.gem +0 -0
- data/vendor/cache/rspec-expectations-2.5.0.gem +0 -0
- data/vendor/cache/rspec-mocks-2.5.0.gem +0 -0
- data/vendor/cache/sqlite3-1.3.3.gem +0 -0
- data/vendor/cache/tzinfo-0.3.26.gem +0 -0
data/.rvmrc
CHANGED
data/README.md
CHANGED
@@ -4,10 +4,10 @@ Keytar
|
|
4
4
|
**1.** A keyboard that is designed to be played standing up, like a guitar.
|
5
5
|
**2.** A crazy simple ruby-on-rails library for making re-usable keys (the kind you use in key/value stores)
|
6
6
|
|
7
|
-
|
7
|
+
It Builds Keys
|
8
8
|
----------
|
9
9
|
|
10
|
-
Keytar is an amazingly easy way
|
10
|
+
Keytar is an amazingly easy way generate keys for all of your NOSQL key needs. Are you using Redis, Memcache, MongoDB, Cassandra, or another hot key-value store? Then use **keytar**! It auto-magically generates keys based on class name instead of cluttering model definitions with tons of redundant key method declarations.
|
11
11
|
|
12
12
|
___quit___ littering your code with junk like this:
|
13
13
|
|
@@ -22,7 +22,7 @@ Seriously, ___quit it___!
|
|
22
22
|
|
23
23
|
Installation
|
24
24
|
------------
|
25
|
-
In your
|
25
|
+
In your Gemfile add
|
26
26
|
|
27
27
|
gem 'keytar'
|
28
28
|
|
@@ -30,19 +30,19 @@ then run
|
|
30
30
|
|
31
31
|
bundle install
|
32
32
|
|
33
|
-
|
33
|
+
Then drop `include Keytar` in any Ruby model you want and you're good to go
|
34
34
|
|
35
35
|
|
36
36
|
Example:
|
37
37
|
--------
|
38
|
-
keytar auto-magically generates keys using method names ending in `"_key"` or simply "key"
|
38
|
+
keytar auto-magically generates keys using method names ending in `"_key"` or simply "key"
|
39
39
|
|
40
40
|
User.key #=> "user"
|
41
41
|
User.memcache_key #=> "user:memcache"
|
42
42
|
|
43
43
|
u = User.new
|
44
44
|
u.redis_key #=> "users:redis"
|
45
|
-
u.redis_key("
|
45
|
+
u.redis_key("some_argument") #=> "users:redis:some_argument"
|
46
46
|
|
47
47
|
u = User.create(:id => 2)
|
48
48
|
u.sweet_key #=> "users:sweet:2"
|
@@ -51,18 +51,33 @@ keytar auto-magically generates keys using method names ending in `"_key"` or si
|
|
51
51
|
|
52
52
|
It's that simple
|
53
53
|
|
54
|
-
|
55
|
-
|
54
|
+
Configuration
|
55
|
+
-------------
|
56
|
+
Keys can be pre-defined and configured on a per key basis by calling **define\_keys**:
|
57
|
+
|
58
|
+
class User
|
59
|
+
include Keytar
|
60
|
+
define_keys [:zoolander, :something_about_mary, :tropic_thunder], :delimiter => "|", :version => 2
|
61
|
+
define_keys :cassandra, :delimiter => "/", :version => 3, :key_prefix => "lol"
|
62
|
+
end
|
63
|
+
|
64
|
+
User.respond_to? :zoolander_key #=> true
|
65
|
+
User.zoolander_key #=> "user|zoolander|2"
|
66
|
+
|
67
|
+
Where the first argument is the key (or keys) to be defined, and the second argument is a hash of configurations. Using **define\_keys** is the recommended configuration method.
|
56
68
|
|
57
|
-
These options can be configured by passing in a hash to keyfig:
|
58
69
|
|
59
|
-
|
60
|
-
|
70
|
+
options can also be configured per class by passing in a hash to **key_config**:
|
71
|
+
|
72
|
+
class User
|
73
|
+
include Keytar
|
74
|
+
key_config :key_delimiter => ":", :key_order => [:unique, :suffix], :key_prefix => "before"
|
61
75
|
end
|
62
76
|
|
63
77
|
Or by calling class methods
|
64
78
|
|
65
|
-
class User
|
79
|
+
class User
|
80
|
+
include Keytar
|
66
81
|
key_delimiter ":"
|
67
82
|
key_order [:prefix, :base, :name, :unique, :args, :suffix]
|
68
83
|
key_prefix nil
|
@@ -72,9 +87,9 @@ Config Options Breakdown
|
|
72
87
|
------------------------
|
73
88
|
Here is a run down of what each does
|
74
89
|
|
75
|
-
**
|
90
|
+
**key_delimiter** sets the separating argument in keys
|
76
91
|
|
77
|
-
User.
|
92
|
+
User.key_delimiter "|"
|
78
93
|
user.redis_key #=> "users|redis"
|
79
94
|
|
80
95
|
|
@@ -92,17 +107,18 @@ By default all instance keys have an identifying unique element included in the
|
|
92
107
|
user.redis_key #=> "users:redis:9"
|
93
108
|
|
94
109
|
User.key_unique("username")
|
110
|
+
user.username #=> "schneems"
|
95
111
|
user.redis_key #=> "users:redis:schneems"
|
96
112
|
|
97
|
-
**key_prefix**
|
113
|
+
**key_prefix** adds some text to the beginning of your key for that class
|
98
114
|
|
99
115
|
User.key_prefix "woot"
|
100
|
-
|
116
|
+
User.redis_key #=> "woot:users:redis"
|
101
117
|
|
102
|
-
**key_suffix**
|
118
|
+
**key_suffix** adds some text to the end of your key for that class
|
103
119
|
|
104
120
|
User.key_suffix "slave"
|
105
|
-
|
121
|
+
User.redis_key #=> "users:redis:slave"
|
106
122
|
|
107
123
|
**`key_pluralize_instances`** allows you to toggle pluralizing instance keys (note the 's' in 'users' is not there)
|
108
124
|
|
@@ -118,12 +134,7 @@ By default all instance keys have an identifying unique element included in the
|
|
118
134
|
**key_case** allows you to specify the case of your key
|
119
135
|
|
120
136
|
User.key_case :upcase
|
121
|
-
|
122
|
-
|
123
|
-
**`key_cache_methods`** will let you toggle whether or not keytar defines your key methods after being called. If you're calling
|
124
|
-
these methods over and over, this can give you a speed boost, however there is overhead associated with defining methods. The default
|
125
|
-
is on, however try it both ways on your app run some benchmarks and see what works the best.
|
126
|
-
|
137
|
+
User.redis_key #=> "USER:REDIS"
|
127
138
|
|
128
139
|
|
129
140
|
Since this library is sooooo simple, here is a ASCII keytar for you. Thanks for checking it out.
|
@@ -188,4 +199,4 @@ Fork away. If you want to chat about a feature idea, or a question you can find
|
|
188
199
|
|
189
200
|
|
190
201
|
Copyright (c) 2011 Schneems. See LICENSE.txt for
|
191
|
-
further details.
|
202
|
+
further details.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
data/keytar.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{keytar}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Schneems"]
|
12
|
-
s.date = %q{2011-05-
|
12
|
+
s.date = %q{2011-05-16}
|
13
13
|
s.description = %q{
|
14
14
|
Keytar is a Ruby on Rails wrapper for KeyBuilder.
|
15
15
|
Use KeyBuilder to automatically generate keys based on class name instead of cluttering model
|
@@ -20,40 +20,19 @@ Gem::Specification.new do |s|
|
|
20
20
|
"README.md"
|
21
21
|
]
|
22
22
|
s.files = [
|
23
|
-
".DS_Store",
|
24
23
|
".rvmrc",
|
25
24
|
"Gemfile",
|
26
|
-
"Gemfile.lock",
|
27
25
|
"README.md",
|
28
26
|
"Rakefile",
|
29
27
|
"VERSION",
|
30
|
-
"db/migrate/001_create_bars.rb",
|
31
28
|
"keytar.gemspec",
|
32
29
|
"lib/.DS_Store",
|
33
30
|
"lib/keytar.rb",
|
34
31
|
"lib/keytar/key_builder.rb",
|
35
32
|
"license.txt",
|
36
|
-
"pkg/keytar-0.1.0.gem",
|
37
|
-
"pkg/keytar-0.1.1.gem",
|
38
33
|
"spec/keytar/key_builder_spec.rb",
|
39
34
|
"spec/keytar/keytar_spec.rb",
|
40
|
-
"spec/keytar/spec_helper.rb"
|
41
|
-
"vendor/cache/activemodel-3.0.6.gem",
|
42
|
-
"vendor/cache/activerecord-3.0.6.gem",
|
43
|
-
"vendor/cache/activesupport-3.0.6.gem",
|
44
|
-
"vendor/cache/arel-2.0.9.gem",
|
45
|
-
"vendor/cache/builder-2.1.2.gem",
|
46
|
-
"vendor/cache/diff-lcs-1.1.2.gem",
|
47
|
-
"vendor/cache/git-1.2.5.gem",
|
48
|
-
"vendor/cache/i18n-0.5.0.gem",
|
49
|
-
"vendor/cache/jeweler-1.5.2.gem",
|
50
|
-
"vendor/cache/rake-0.8.7.gem",
|
51
|
-
"vendor/cache/rspec-2.5.0.gem",
|
52
|
-
"vendor/cache/rspec-core-2.5.1.gem",
|
53
|
-
"vendor/cache/rspec-expectations-2.5.0.gem",
|
54
|
-
"vendor/cache/rspec-mocks-2.5.0.gem",
|
55
|
-
"vendor/cache/sqlite3-1.3.3.gem",
|
56
|
-
"vendor/cache/tzinfo-0.3.26.gem"
|
35
|
+
"spec/keytar/spec_helper.rb"
|
57
36
|
]
|
58
37
|
s.homepage = %q{http://github.com/Schnems/keytar}
|
59
38
|
s.licenses = ["MIT"]
|
data/lib/keytar.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
begin; require 'active_record'; rescue; end
|
3
1
|
|
4
2
|
module Keytar
|
5
3
|
autoload :KeyBuilder, 'keytar/key_builder'
|
6
|
-
ActiveRecord::Base.class_eval { include KeyBuilder } if defined?(ActiveRecord::Base)
|
7
4
|
def self.included(klass)
|
8
5
|
klass.class_eval {include KeyBuilder}
|
9
6
|
end
|
data/lib/keytar/key_builder.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'active_support/inflector' # used for pluralize
|
3
2
|
require 'active_support/core_ext/object/blank' # used for blank? and present?
|
4
3
|
|
@@ -6,44 +5,23 @@ module KeyBuilder
|
|
6
5
|
alias :original_method_missing :method_missing
|
7
6
|
|
8
7
|
DEFAULTS = {:key_delimiter => ":",
|
9
|
-
:key_order => [:prefix, :base, :name, :unique, :args, :suffix],
|
8
|
+
:key_order => [:prefix, :base, :name, :unique, :args, :suffix, :version, :v],
|
10
9
|
:key_prefix => nil,
|
11
10
|
:key_suffix => nil,
|
12
11
|
:key_pluralize_instances => true,
|
13
12
|
:key_case => :downcase,
|
14
13
|
:key_plural => nil,
|
15
|
-
:key_unique => "id"
|
16
|
-
:key_cache_methods => true
|
17
|
-
}
|
14
|
+
:key_unique => "id"}
|
18
15
|
|
19
16
|
def self.included(klass)
|
20
17
|
# setup method missing on class
|
21
18
|
klass.class_eval do
|
22
19
|
extend KeyBuilder::Ext
|
23
|
-
# if method_missing doesn't already exist, aliasing and calling it will create an infinite loop
|
24
|
-
@@key_builder_jump_to_superclass = true
|
25
|
-
if klass.respond_to?("method_missing")
|
26
|
-
@@key_builder_jump_to_superclass = false
|
27
|
-
alias :key_builder_alias_method_missing :method_missing
|
28
|
-
end
|
29
|
-
|
30
20
|
def self.method_missing(method_name, *args, &blk)
|
31
21
|
if method_name.to_s =~ /.*key$/
|
32
|
-
## Performance: define method so we can skip method_missing next time
|
33
|
-
if key_cache_methods
|
34
|
-
(class << self;self ;end).instance_eval do
|
35
|
-
define_method(method_name) do |*args|
|
36
|
-
build_key(:base => self.to_s.downcase, :name => method_name, :args => args)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
22
|
self.build_key(:base => self.to_s.downcase, :name => method_name, :args => args)
|
41
23
|
else
|
42
|
-
|
43
|
-
super
|
44
|
-
else
|
45
|
-
key_builder_alias_method_missing(method_name, *args, &blk)
|
46
|
-
end
|
24
|
+
super
|
47
25
|
end
|
48
26
|
end
|
49
27
|
end
|
@@ -62,69 +40,101 @@ module KeyBuilder
|
|
62
40
|
}
|
63
41
|
end
|
64
42
|
|
65
|
-
|
43
|
+
# sets up configuration options for individual keys
|
44
|
+
# alows us to define the keys without calling method missing
|
45
|
+
def cache_key( *args)
|
46
|
+
# coherce args into meaningful things
|
47
|
+
names = []; options = {}; args.each {|arg| arg.is_a?(Hash) ? options = arg : names << arg}
|
48
|
+
options.merge!(:name => name, :base => self.to_s.downcase)
|
49
|
+
|
50
|
+
# allow for loose naming of keys configuration symbols can use :key_prefix or just :prefix
|
51
|
+
options.keys.each do |key|
|
52
|
+
options["key_#{key}".to_sym] = options[key] if key.to_s !~ /^key_/
|
53
|
+
end
|
54
|
+
|
55
|
+
names.each do |name|
|
56
|
+
# define (cache) class method
|
57
|
+
(class << self;self ;end).instance_eval do
|
58
|
+
define_method("#{name}_key") do |*args|
|
59
|
+
options.merge!(:name => name, :base => self.to_s.downcase, :args => args)
|
60
|
+
build_key(options)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# define (cache) instance method
|
65
|
+
class_eval do
|
66
|
+
define_method("#{name}_key") do |*args|
|
67
|
+
options.merge!(:name => name, :args => args)
|
68
|
+
build_key(options)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
alias :cache_keys :cache_key
|
74
|
+
alias :define_key :cache_key
|
75
|
+
alias :define_keys :cache_key
|
76
|
+
|
77
|
+
# a way to define configurations for keytar using a hash
|
78
|
+
def key_config(options = {})
|
66
79
|
options.keys.each do |key|
|
67
80
|
eval("@@#{key} = options[key]") if key.to_s =~ /^key_.*/
|
68
81
|
end
|
69
82
|
end
|
83
|
+
alias :keyfig :key_config
|
70
84
|
|
71
85
|
# Call KeyBuilder.build_key or Foo.build_key with options
|
72
86
|
# :base => self.to_s.downcase, :name => method_name, :args => args
|
73
87
|
def build_key(options = {})
|
74
88
|
key_hash = build_key_hash(options)
|
75
89
|
key_array = key_hash_to_ordered_array(key_hash)
|
76
|
-
return key_from_array(key_array)
|
90
|
+
return key_from_array(key_array, options)
|
77
91
|
end
|
78
92
|
|
79
93
|
# takes input options and turns to a hash, which can be sorted based on key
|
80
94
|
def build_key_hash(options)
|
81
|
-
options[:name] = options[:name].to_s.gsub(/(key
|
82
|
-
|
95
|
+
options[:name] = options[:name].to_s.gsub(/(^key$|_key$)/, '')
|
96
|
+
{:prefix => options[:key_prefix]||self.key_prefix,
|
97
|
+
:suffix => options[:key_suffix]||self.key_suffix}.merge(options)
|
83
98
|
end
|
84
99
|
|
85
100
|
# orders the elements based on defaults or config
|
86
101
|
def key_hash_to_ordered_array(key_hash)
|
87
102
|
key_array ||= []
|
88
|
-
self.key_order.each do |key|
|
103
|
+
(key_hash[:key_order]||self.key_order).each do |key|
|
89
104
|
if key != :args
|
90
105
|
key_array << key_hash[key]
|
91
106
|
else
|
92
|
-
key_array << key_hash[key].map(&:to_s)
|
107
|
+
key_array << key_hash[key].map(&:to_s) unless key_hash[key].blank?
|
93
108
|
end
|
94
109
|
end
|
95
110
|
return key_array
|
96
111
|
end
|
97
112
|
|
98
113
|
# applys a delimter and appropriate case to final key
|
99
|
-
def key_from_array(key_array)
|
100
|
-
key = key_array.flatten.reject {|item| item.blank? }.join(self.key_delimiter)
|
101
|
-
|
102
|
-
key = key.
|
114
|
+
def key_from_array(key_array, options = {})
|
115
|
+
key = key_array.flatten.reject {|item| item.blank? }.join(options[:key_delimiter]||self.key_delimiter)
|
116
|
+
key_case = options[:key_case] || self.key_case
|
117
|
+
key = key.downcase if key_case == :downcase
|
118
|
+
key = key.upcase if key_case == :upcase
|
103
119
|
key
|
104
120
|
end
|
105
121
|
end
|
106
122
|
|
107
123
|
# build_key method for instances by default class is pluralized to create different key
|
108
|
-
def build_key(
|
109
|
-
base = self.class.to_s.downcase
|
110
|
-
|
111
|
-
|
112
|
-
|
124
|
+
def build_key(options = {})
|
125
|
+
options[:base] = options[:base]||self.class.to_s.downcase
|
126
|
+
if (options[:key_pluralize_instances] == true ) || (options[:key_pluralize_instances] != false && self.class.key_pluralize_instances.present?)
|
127
|
+
options[:base] = options[:key_plural]||self.class.key_plural||options[:base].pluralize
|
128
|
+
end
|
129
|
+
options[:unique] = eval("self.#{options[:key_unique]||self.class.key_unique}") unless eval("self.#{options[:key_unique]||self.class.key_unique}") == object_id
|
130
|
+
self.class.build_key(options)
|
113
131
|
end
|
114
132
|
|
115
133
|
|
116
134
|
|
117
135
|
def method_missing(method_name, *args, &blk)
|
118
136
|
if method_name.to_s =~ /.*key$/
|
119
|
-
|
120
|
-
if self.class.key_cache_methods
|
121
|
-
self.class.instance_eval do
|
122
|
-
define_method(method_name) do |*args|
|
123
|
-
build_key(method_name, *args)
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
build_key(method_name, *args)
|
137
|
+
build_key(:name => method_name, :args => args)
|
128
138
|
else
|
129
139
|
original_method_missing(method_name, *args, &blk)
|
130
140
|
end
|
@@ -1,203 +1,166 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
|
-
|
4
3
|
class Foo
|
5
|
-
include
|
6
|
-
end
|
4
|
+
include Keytar
|
7
5
|
|
6
|
+
def ymd
|
7
|
+
Time.now.strftime("%y%m%d")
|
8
|
+
end
|
9
|
+
end
|
8
10
|
|
9
11
|
describe KeyBuilder do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
Foo.key.should == "foo"
|
12
|
+
describe 'build_key class method' do
|
13
|
+
before do
|
14
|
+
@options = {:name => "foo", :args => nil}
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
describe 'build_key' do
|
18
|
+
it 'calls other class methods' do
|
19
|
+
Foo.should_receive(:build_key_hash)
|
20
|
+
Foo.should_receive(:key_hash_to_ordered_array)
|
21
|
+
Foo.should_receive(:key_from_array)
|
22
|
+
Foo.build_key(@options)
|
23
|
+
end
|
18
24
|
end
|
19
25
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
26
|
+
describe 'build_key_hash' do
|
27
|
+
it 'removes key and _key from the :name option' do
|
28
|
+
Foo.build_key_hash(@options.merge(:name => "foo_key"))[:name].should == "foo"
|
29
|
+
Foo.build_key_hash(@options.merge(:name => "key"))[:name].should == ""
|
30
|
+
Foo.build_key_hash(@options.merge(:name => "fookey"))[:name].should == "fookey"
|
31
|
+
end
|
24
32
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
33
|
+
describe 'prefix' do
|
34
|
+
it 'takes in prefix converts key_prefix to prefix' do
|
35
|
+
prefix = "prefix"
|
36
|
+
Foo.build_key_hash(@options.merge(:key_prefix => prefix))[:prefix].should == prefix
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'favors direct options over class settings' do
|
40
|
+
prefix = "prefix"
|
41
|
+
Foo.should_not_receive(:key_prefix)
|
42
|
+
Foo.build_key_hash(@options.merge(:key_prefix => prefix))[:prefix].should == prefix
|
43
|
+
end
|
44
|
+
|
45
|
+
it "defaults to class settings when no direct option is given" do
|
46
|
+
prefix = "classPrefix"
|
47
|
+
Foo.should_receive(:key_prefix).and_return(prefix)
|
48
|
+
Foo.build_key_hash(@options)[:prefix].should == prefix
|
49
|
+
end
|
50
|
+
end
|
31
51
|
|
52
|
+
describe "suffix" do
|
53
|
+
it 'takes in suffix and converts key_suffix to suffix' do
|
54
|
+
suffix = "sufix"
|
55
|
+
Foo.build_key_hash(@options.merge(:key_suffix => suffix))[:suffix].should == suffix
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'favors direct options over class settings' do
|
59
|
+
suffix = "suffix"
|
60
|
+
Foo.should_not_receive(:key_suffix)
|
61
|
+
Foo.build_key_hash(@options.merge(:key_suffix => suffix))[:suffix].should == suffix
|
62
|
+
end
|
63
|
+
|
64
|
+
it "defaults to class settings when no direct option is given" do
|
65
|
+
suffix = "classSuffix"
|
66
|
+
Foo.should_receive(:key_suffix).and_return(suffix)
|
67
|
+
Foo.build_key_hash(@options)[:suffix].should == suffix
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
32
71
|
|
72
|
+
describe 'key_hash_to_rdered_array' do
|
73
|
+
before do
|
74
|
+
@options.merge!(:prefix => "prefix", :base => "base", :name => "name", :suffix => "suffix", :version => 1)
|
75
|
+
end
|
33
76
|
|
34
|
-
|
35
|
-
|
36
|
-
Foo.thismethoddoesnotexist
|
37
|
-
rescue => ex
|
77
|
+
it "converts a hash to an array based on default order" do
|
78
|
+
Foo.key_hash_to_ordered_array(@options).should == [@options[:prefix], @options[:base], @options[:name], @options[:unique], @options[:suffix], @options[:version], @options[:v]]
|
38
79
|
end
|
39
|
-
ex.class.should == NoMethodError
|
40
|
-
end
|
41
|
-
end
|
42
80
|
|
81
|
+
it "order output using direct option before class config" do
|
82
|
+
Foo.should_not_receive(:key_order)
|
83
|
+
key_order = [:prefix, :base, :name, :unique, :args, :suffix, :version, :v].reverse
|
84
|
+
Foo.key_hash_to_ordered_array(@options.merge(:key_order => key_order)).should == [@options[:prefix], @options[:base], @options[:name], @options[:unique], @options[:suffix], @options[:version], @options[:v]].reverse
|
85
|
+
end
|
43
86
|
|
44
|
-
|
45
|
-
|
46
|
-
|
87
|
+
it "convert each arg in args to a string" do
|
88
|
+
args = ["hey", 1 , "what", 2, "up", []]
|
89
|
+
Foo.key_hash_to_ordered_array(@options.merge(:args => args)).include?(args.map(&:to_s)).should be_true
|
90
|
+
end
|
47
91
|
end
|
48
92
|
|
49
|
-
|
50
|
-
|
51
|
-
|
93
|
+
describe 'key_from_array' do
|
94
|
+
before do
|
95
|
+
@key_array = ["foo", "Bar", "oH", "YEAH"]
|
96
|
+
end
|
52
97
|
|
53
|
-
|
54
|
-
|
55
|
-
|
98
|
+
it "strip out nil from the array and have no spaces" do
|
99
|
+
Foo.key_from_array([nil, nil]).match(/nil/).should be_false
|
100
|
+
Foo.key_from_array([nil, nil]).match(/\s/).should be_false
|
101
|
+
end
|
56
102
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end
|
103
|
+
it "return a string" do
|
104
|
+
Foo.key_from_array(@key_array).class.should == String
|
105
|
+
end
|
61
106
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
@foo.respond_to?(:define_method_time_test_key).should be_true
|
66
|
-
key2.should_not == key1
|
67
|
-
end
|
107
|
+
it "keep the key case consistent (downcase by default)" do
|
108
|
+
Foo.key_from_array(@key_array).should == @key_array.map(&:downcase).join(":")
|
109
|
+
end
|
68
110
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
key2.should_not == key1
|
74
|
-
end
|
111
|
+
it "allow different cases to be passed in via options" do
|
112
|
+
Foo.should_not_receive(:key_case)
|
113
|
+
Foo.key_from_array(@key_array, :key_case => :upcase).should == @key_array.map(&:upcase).join(":")
|
114
|
+
end
|
75
115
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
rescue => ex
|
116
|
+
it "flattens all inputs" do
|
117
|
+
array = @key_array << [[["1"], ["2"]],["3"]]
|
118
|
+
Foo.key_from_array(array, :key_case => :upcase).should == array.flatten.map(&:upcase).join(":")
|
80
119
|
end
|
81
|
-
ex.class.should == NoMethodError
|
82
120
|
end
|
83
121
|
end
|
84
122
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
Foo.key_delimiter KeyBuilder::DEFAULTS[:key_delimiter]
|
90
|
-
Foo.key_order KeyBuilder::DEFAULTS[:key_order]
|
91
|
-
Foo.key_prefix KeyBuilder::DEFAULTS[:key_prefix]
|
92
|
-
Foo.key_suffix KeyBuilder::DEFAULTS[:key_suffix]
|
93
|
-
Foo.key_pluralize_instances KeyBuilder::DEFAULTS[:key_pluralize_instances]
|
94
|
-
Foo.key_case KeyBuilder::DEFAULTS[:key_case]
|
95
|
-
Foo.key_plural KeyBuilder::DEFAULTS[:key_plural]
|
96
|
-
Foo.key_unique KeyBuilder::DEFAULTS[:key_unique]
|
97
|
-
Foo.key_cache_methods KeyBuilder::DEFAULTS[:key_cache_methods]
|
98
|
-
end
|
99
|
-
|
100
|
-
it 'should change key_delimiter' do
|
101
|
-
key_delimiter = "|"
|
102
|
-
Foo.key_delimiter key_delimiter
|
103
|
-
Foo.key_delimiter.should == key_delimiter
|
104
|
-
Foo.awesome_key.should == "foo#{key_delimiter}awesome"
|
123
|
+
describe 'build_key instance method' do
|
124
|
+
before do
|
125
|
+
@options = {:name => "foo", :args => nil}
|
126
|
+
@foo = Foo.new
|
105
127
|
end
|
106
128
|
|
129
|
+
describe 'build_key' do
|
130
|
+
it 'sets_base to class name and pluralizes it' do
|
131
|
+
@foo.class.should_receive(:build_key).with(hash_including(:base => @foo.class.to_s.downcase + "s"))
|
132
|
+
@foo.build_key(@options)
|
133
|
+
end
|
107
134
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
end
|
135
|
+
it 'allows a manual over-ride of base' do
|
136
|
+
base = "base"
|
137
|
+
@foo.class.should_receive(:build_key).with(hash_including(:base => base + "s"))
|
138
|
+
@foo.build_key(@options.merge(:base => base))
|
139
|
+
end
|
114
140
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
end
|
141
|
+
it "don't pluralize base if key_pluralize_instances is set to false" do
|
142
|
+
@foo.class.should_not_receive(:key_pluralize_instances)
|
143
|
+
@foo.class.should_receive(:build_key).with(hash_including(:base => @foo.class.to_s.downcase))
|
144
|
+
@foo.build_key(@options.merge(:key_pluralize_instances => false))
|
145
|
+
end
|
121
146
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
end
|
147
|
+
it "don't pluralize base if key_pluralize_instances is set to false" do
|
148
|
+
@foo.class.should_not_receive(:key_pluralize_instances)
|
149
|
+
@foo.class.should_receive(:build_key).with(hash_including(:base => @foo.class.to_s.downcase))
|
150
|
+
@foo.build_key(@options.merge(:key_pluralize_instances => false))
|
151
|
+
end
|
128
152
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
foo.awesome_key.should == "foo:awesome"
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'should change key_case' do
|
138
|
-
key_case = :upcase
|
139
|
-
Foo.key_case key_case
|
140
|
-
Foo.key_case.should == key_case
|
141
|
-
Foo.awesome_key.should == "FOO:AWESOME"
|
142
|
-
end
|
143
|
-
|
144
|
-
it 'should change key_plural' do
|
145
|
-
key_plural = "fooz"
|
146
|
-
Foo.key_plural key_plural
|
147
|
-
Foo.key_plural.should == key_plural
|
148
|
-
foo = Foo.new
|
149
|
-
foo.awesome_key.should == "fooz:awesome"
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'should change key_unique' do
|
153
|
-
Foo.class_eval { def timeish; (Time.now.to_i * 0.01).floor; end}
|
154
|
-
key_unique = :timeish
|
155
|
-
Foo.key_unique key_unique
|
156
|
-
Foo.key_unique.should == key_unique
|
157
|
-
foo = Foo.new
|
158
|
-
foo.awesome_key.should == "foos:awesome:#{foo.timeish}"
|
159
|
-
end
|
160
|
-
|
161
|
-
# todo move tests and assertsions to seperate describe and it blocks
|
162
|
-
it 'should allow all configurations to be set using a hash' do
|
163
|
-
# variables
|
164
|
-
key_delimiter = "/"
|
165
|
-
key_order = [:prefix, :base, :suffix]
|
166
|
-
key_prefix = "before"
|
167
|
-
key_suffix = "after"
|
168
|
-
key_pluralize_instances = false
|
169
|
-
key_case = :upcase
|
170
|
-
key_plural = "zoosk"
|
171
|
-
key_unique = "doesn-t_apply_to_instance_methods"
|
172
|
-
key_cache_methods = false
|
173
|
-
# config
|
174
|
-
Foo.keyfig :key_delimiter => key_delimiter,
|
175
|
-
:key_order => key_order,
|
176
|
-
:key_prefix => key_prefix,
|
177
|
-
:key_suffix => key_suffix,
|
178
|
-
:key_pluralize_instances => key_pluralize_instances,
|
179
|
-
:key_case => key_case,
|
180
|
-
:key_plural => key_plural,
|
181
|
-
:key_unique => key_unique,
|
182
|
-
:key_cache_methods => key_cache_methods
|
183
|
-
# assertions
|
184
|
-
Foo.key_delimiter.should == key_delimiter
|
185
|
-
Foo.key_order.should == key_order
|
186
|
-
Foo.key_prefix.should == key_prefix
|
187
|
-
Foo.key_suffix.should == key_suffix
|
188
|
-
Foo.key_pluralize_instances.should == key_pluralize_instances
|
189
|
-
Foo.key_case.should == key_case
|
190
|
-
Foo.key_plural.should == key_plural
|
191
|
-
Foo.key_unique.should == key_unique
|
192
|
-
Foo.key_cache_methods == key_cache_methods
|
193
|
-
end
|
194
|
-
|
195
|
-
it 'should change key_cache_methods' do
|
196
|
-
Foo.key_cache_methods false
|
197
|
-
key1 = Foo.config_define_method_time_test_key(1)
|
198
|
-
Foo.respond_to?(:config_define_method_time_test_key).should be_false
|
199
|
-
end
|
153
|
+
it "allow unique method to be passed in via options" do
|
154
|
+
@foo.class.should_not_receive(:key_unique)
|
155
|
+
@foo.class.should_receive(:build_key).with(hash_including(:unique => @foo.ymd))
|
156
|
+
@foo.build_key(@options.merge(:key_unique => :ymd))
|
157
|
+
end
|
200
158
|
|
159
|
+
it "set unique based on configuration" do
|
160
|
+
@foo.class.should_receive(:key_unique).at_least(:once).and_return("ymd")
|
161
|
+
@foo.class.should_receive(:build_key).with(hash_including(:unique => @foo.ymd))
|
162
|
+
@foo.build_key
|
163
|
+
end
|
164
|
+
end
|
201
165
|
end
|
202
|
-
|
203
166
|
end
|
data/spec/keytar/keytar_spec.rb
CHANGED
@@ -1,17 +1,23 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
2
3
|
## Gives us ActiveRecord backed model Bar that we can test instances of
|
3
4
|
ActiveRecord::Base.establish_connection(
|
4
5
|
:adapter => "sqlite3",
|
5
6
|
:database => ":memory:",
|
6
7
|
:host => 'localhost')
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ActiveRecord::Schema.define do
|
10
|
+
create_table :bars do |t|
|
11
|
+
t.string :name, :null => false
|
12
|
+
end
|
13
|
+
end
|
12
14
|
|
13
|
-
class
|
15
|
+
class Foo
|
16
|
+
include Keytar
|
17
|
+
end
|
14
18
|
|
19
|
+
class Bar < ActiveRecord::Base
|
20
|
+
include Keytar
|
15
21
|
end
|
16
22
|
|
17
23
|
class BarNonActiveRecord
|
@@ -20,13 +26,191 @@ end
|
|
20
26
|
|
21
27
|
|
22
28
|
describe Keytar do
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
29
|
+
|
30
|
+
describe 'cache_key' do
|
31
|
+
it 'allows us to pre-define class methods' do
|
32
|
+
Foo.cache_key(:cached_method, :delimiter => "/", :key_prefix => "woo")
|
33
|
+
Foo.respond_to?(:cached_method_key).should be_true
|
34
|
+
puts Foo.cached_method_key(22).should == "woo/foo/cached_method/22"
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'allows us to pre-define instance methods' do
|
38
|
+
Foo.cache_key(:cached_instance_method, :delimiter => "|", :version => "3")
|
39
|
+
@foo = Foo.new
|
40
|
+
@foo.respond_to?(:cached_instance_method_key).should be_true
|
41
|
+
@foo.cached_instance_method_key.should == "foos|cached_instance_method|3"
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'taking an array' do
|
45
|
+
it 'allows us to pre-define multiple class key methods' do
|
46
|
+
Foo.cache_key(:m1, :m2, :m3, :delimiter => ":", :key_prefix => "foo")
|
47
|
+
Foo.respond_to?(:m1_key).should be_true
|
48
|
+
Foo.respond_to?(:m2_key).should be_true
|
49
|
+
Foo.respond_to?(:m3_key).should be_true
|
50
|
+
@foo = Foo.new
|
51
|
+
@foo.respond_to?(:m1_key).should be_true
|
52
|
+
@foo.respond_to?(:m2_key).should be_true
|
53
|
+
@foo.respond_to?(:m3_key).should be_true
|
27
54
|
end
|
28
55
|
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'class methods' do
|
59
|
+
it 'should respond to "key" method by returning downcase of class name' do
|
60
|
+
Foo.key.should == "foo"
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should respond to "awesome_key" method by returning :class, :delimiter, :name' do
|
64
|
+
Foo.awesome_key.should == "foo:awesome"
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should respond to "awesome_key(number)" method by returning :class, :delimiter, :name, :delimiter, :arg' do
|
68
|
+
number = rand(100)
|
69
|
+
Foo.awesome_key(number).should == "foo:awesome:#{number}"
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
it 'should call method_missing on a non-existant method' do
|
75
|
+
lambda{ Foo.thismethoddoesnotexist }.should raise_error(NoMethodError)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
describe 'instance methods' do
|
81
|
+
before(:each) do
|
82
|
+
@foo = Foo.new
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should respond to "key" method by returning pluralized downcase of class name' do
|
86
|
+
@foo.key.should == "foos"
|
87
|
+
end
|
29
88
|
|
89
|
+
it 'should respond to "awesome_key" method by returning :class, :delimiter, :name' do
|
90
|
+
@foo.awesome_key.should == "foos:awesome"
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should respond to "awesome_key(number)" method by returning :class, :delimiter, :name, :delimiter, :arg' do
|
94
|
+
number = rand(100)
|
95
|
+
@foo.awesome_key(number).should == "foos:awesome:#{number}"
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should call method_missing on a non-existant method' do
|
99
|
+
lambda{ @foo.thismethoddoesnotexist }.should raise_error(NoMethodError)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
# test last
|
104
|
+
describe 'class configurations' do
|
105
|
+
after(:each) do
|
106
|
+
# todo find a better way of resetting all these values
|
107
|
+
Foo.key_delimiter KeyBuilder::DEFAULTS[:key_delimiter]
|
108
|
+
Foo.key_order KeyBuilder::DEFAULTS[:key_order]
|
109
|
+
Foo.key_prefix KeyBuilder::DEFAULTS[:key_prefix]
|
110
|
+
Foo.key_suffix KeyBuilder::DEFAULTS[:key_suffix]
|
111
|
+
Foo.key_pluralize_instances KeyBuilder::DEFAULTS[:key_pluralize_instances]
|
112
|
+
Foo.key_case KeyBuilder::DEFAULTS[:key_case]
|
113
|
+
Foo.key_plural KeyBuilder::DEFAULTS[:key_plural]
|
114
|
+
Foo.key_unique KeyBuilder::DEFAULTS[:key_unique]
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'should change key_delimiter' do
|
118
|
+
key_delimiter = "|"
|
119
|
+
Foo.key_delimiter key_delimiter
|
120
|
+
Foo.key_delimiter.should == key_delimiter
|
121
|
+
Foo.awesome_key.should == "foo#{key_delimiter}awesome"
|
122
|
+
end
|
123
|
+
|
124
|
+
|
125
|
+
it 'should change key_order' do
|
126
|
+
order_array = [:prefix, :name, :unique, :base, :args, :suffix]
|
127
|
+
Foo.key_order order_array
|
128
|
+
Foo.key_order.should == order_array
|
129
|
+
Foo.awesome_key.should == "awesome:foo"
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'should change key_prefix' do
|
133
|
+
key_prefix = "memcache"
|
134
|
+
Foo.key_prefix key_prefix
|
135
|
+
Foo.key_prefix.should == key_prefix
|
136
|
+
Foo.awesome_key.should == "#{key_prefix}:foo:awesome"
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'should change key_suffix' do
|
140
|
+
key_suffix = "slave"
|
141
|
+
Foo.key_suffix key_suffix
|
142
|
+
Foo.key_suffix.should == key_suffix
|
143
|
+
Foo.awesome_key.should == "foo:awesome:#{key_suffix}"
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'should change key_pluralize_instances' do
|
147
|
+
key_pluralize_instances = false
|
148
|
+
Foo.key_pluralize_instances key_pluralize_instances
|
149
|
+
Foo.key_pluralize_instances.should == key_pluralize_instances
|
150
|
+
foo = Foo.new
|
151
|
+
foo.awesome_key.should == "foo:awesome"
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'should change key_case' do
|
155
|
+
key_case = :upcase
|
156
|
+
Foo.key_case key_case
|
157
|
+
Foo.key_case.should == key_case
|
158
|
+
Foo.awesome_key.should == "FOO:AWESOME"
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'should change key_plural' do
|
162
|
+
key_plural = "fooz"
|
163
|
+
Foo.key_plural key_plural
|
164
|
+
Foo.key_plural.should == key_plural
|
165
|
+
foo = Foo.new
|
166
|
+
foo.awesome_key.should == "fooz:awesome"
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'should change key_unique' do
|
170
|
+
Foo.class_eval { def timeish; (Time.now.to_i * 0.01).floor; end}
|
171
|
+
key_unique = :timeish
|
172
|
+
Foo.key_unique key_unique
|
173
|
+
Foo.key_unique.should == key_unique
|
174
|
+
foo = Foo.new
|
175
|
+
foo.awesome_key.should == "foos:awesome:#{foo.timeish}"
|
176
|
+
end
|
177
|
+
|
178
|
+
# todo move tests and assertsions to seperate describe and it blocks
|
179
|
+
it 'should allow all configurations to be set using a hash' do
|
180
|
+
# variables
|
181
|
+
key_delimiter = "/"
|
182
|
+
key_order = [:prefix, :base, :suffix]
|
183
|
+
key_prefix = "before"
|
184
|
+
key_suffix = "after"
|
185
|
+
key_pluralize_instances = false
|
186
|
+
key_case = :upcase
|
187
|
+
key_plural = "zoosk"
|
188
|
+
key_unique = "doesn-t_apply_to_instance_methods"
|
189
|
+
# config
|
190
|
+
Foo.keyfig :key_delimiter => key_delimiter,
|
191
|
+
:key_order => key_order,
|
192
|
+
:key_prefix => key_prefix,
|
193
|
+
:key_suffix => key_suffix,
|
194
|
+
:key_pluralize_instances => key_pluralize_instances,
|
195
|
+
:key_case => key_case,
|
196
|
+
:key_plural => key_plural,
|
197
|
+
:key_unique => key_unique
|
198
|
+
# assertions
|
199
|
+
Foo.key_delimiter.should == key_delimiter
|
200
|
+
Foo.key_order.should == key_order
|
201
|
+
Foo.key_prefix.should == key_prefix
|
202
|
+
Foo.key_suffix.should == key_suffix
|
203
|
+
Foo.key_pluralize_instances.should == key_pluralize_instances
|
204
|
+
Foo.key_case.should == key_case
|
205
|
+
Foo.key_plural.should == key_plural
|
206
|
+
Foo.key_unique.should == key_unique
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
describe 'requiring Keytar' do
|
30
214
|
it 'should allow ActiveRecord based objects to use their unique identifiers' do
|
31
215
|
name = "notblank"
|
32
216
|
b = Bar.create(:name => name)
|
@@ -36,10 +220,6 @@ describe Keytar do
|
|
36
220
|
end
|
37
221
|
|
38
222
|
describe 'requiring Keytar with ActiveRecord undefined' do
|
39
|
-
before do
|
40
|
-
begin; Object.send(:remove_const, "ActiveRecord"); rescue NameError; end
|
41
|
-
end
|
42
|
-
|
43
223
|
it 'does not automatically add KeyBuilder to the class' do
|
44
224
|
describe BarNonActiveRecord.ancestors do
|
45
225
|
it {should_not include( KeyBuilder)}
|
data/spec/keytar/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: keytar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
- 9
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Schneems
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-16 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -105,40 +105,19 @@ extensions: []
|
|
105
105
|
extra_rdoc_files:
|
106
106
|
- README.md
|
107
107
|
files:
|
108
|
-
- .DS_Store
|
109
108
|
- .rvmrc
|
110
109
|
- Gemfile
|
111
|
-
- Gemfile.lock
|
112
110
|
- README.md
|
113
111
|
- Rakefile
|
114
112
|
- VERSION
|
115
|
-
- db/migrate/001_create_bars.rb
|
116
113
|
- keytar.gemspec
|
117
114
|
- lib/.DS_Store
|
118
115
|
- lib/keytar.rb
|
119
116
|
- lib/keytar/key_builder.rb
|
120
117
|
- license.txt
|
121
|
-
- pkg/keytar-0.1.0.gem
|
122
|
-
- pkg/keytar-0.1.1.gem
|
123
118
|
- spec/keytar/key_builder_spec.rb
|
124
119
|
- spec/keytar/keytar_spec.rb
|
125
120
|
- spec/keytar/spec_helper.rb
|
126
|
-
- vendor/cache/activemodel-3.0.6.gem
|
127
|
-
- vendor/cache/activerecord-3.0.6.gem
|
128
|
-
- vendor/cache/activesupport-3.0.6.gem
|
129
|
-
- vendor/cache/arel-2.0.9.gem
|
130
|
-
- vendor/cache/builder-2.1.2.gem
|
131
|
-
- vendor/cache/diff-lcs-1.1.2.gem
|
132
|
-
- vendor/cache/git-1.2.5.gem
|
133
|
-
- vendor/cache/i18n-0.5.0.gem
|
134
|
-
- vendor/cache/jeweler-1.5.2.gem
|
135
|
-
- vendor/cache/rake-0.8.7.gem
|
136
|
-
- vendor/cache/rspec-2.5.0.gem
|
137
|
-
- vendor/cache/rspec-core-2.5.1.gem
|
138
|
-
- vendor/cache/rspec-expectations-2.5.0.gem
|
139
|
-
- vendor/cache/rspec-mocks-2.5.0.gem
|
140
|
-
- vendor/cache/sqlite3-1.3.3.gem
|
141
|
-
- vendor/cache/tzinfo-0.3.26.gem
|
142
121
|
has_rdoc: true
|
143
122
|
homepage: http://github.com/Schnems/keytar
|
144
123
|
licenses:
|
data/.DS_Store
DELETED
Binary file
|
data/Gemfile.lock
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: http://rubygems.org/
|
3
|
-
specs:
|
4
|
-
activemodel (3.0.6)
|
5
|
-
activesupport (= 3.0.6)
|
6
|
-
builder (~> 2.1.2)
|
7
|
-
i18n (~> 0.5.0)
|
8
|
-
activerecord (3.0.6)
|
9
|
-
activemodel (= 3.0.6)
|
10
|
-
activesupport (= 3.0.6)
|
11
|
-
arel (~> 2.0.2)
|
12
|
-
tzinfo (~> 0.3.23)
|
13
|
-
activesupport (3.0.6)
|
14
|
-
arel (2.0.9)
|
15
|
-
builder (2.1.2)
|
16
|
-
diff-lcs (1.1.2)
|
17
|
-
git (1.2.5)
|
18
|
-
i18n (0.5.0)
|
19
|
-
jeweler (1.5.2)
|
20
|
-
bundler (~> 1.0.0)
|
21
|
-
git (>= 1.2.5)
|
22
|
-
rake
|
23
|
-
rake (0.8.7)
|
24
|
-
rspec (2.5.0)
|
25
|
-
rspec-core (~> 2.5.0)
|
26
|
-
rspec-expectations (~> 2.5.0)
|
27
|
-
rspec-mocks (~> 2.5.0)
|
28
|
-
rspec-core (2.5.1)
|
29
|
-
rspec-expectations (2.5.0)
|
30
|
-
diff-lcs (~> 1.1.2)
|
31
|
-
rspec-mocks (2.5.0)
|
32
|
-
sqlite3 (1.3.3)
|
33
|
-
tzinfo (0.3.26)
|
34
|
-
|
35
|
-
PLATFORMS
|
36
|
-
ruby
|
37
|
-
|
38
|
-
DEPENDENCIES
|
39
|
-
activerecord (~> 3.0.4)
|
40
|
-
activesupport (~> 3.0.4)
|
41
|
-
jeweler (~> 1.5.2)
|
42
|
-
rake (~> 0.8.7)
|
43
|
-
rspec (~> 2.5)
|
44
|
-
sqlite3 (~> 1.3.3)
|
data/pkg/keytar-0.1.0.gem
DELETED
Binary file
|
data/pkg/keytar-0.1.1.gem
DELETED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/vendor/cache/arel-2.0.9.gem
DELETED
Binary file
|
Binary file
|
Binary file
|
data/vendor/cache/git-1.2.5.gem
DELETED
Binary file
|
data/vendor/cache/i18n-0.5.0.gem
DELETED
Binary file
|
Binary file
|
data/vendor/cache/rake-0.8.7.gem
DELETED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|