keytar 0.1.1 → 0.9.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.
data/.rvmrc ADDED
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ruby_string="ree-1.8.7-2011.03"
4
+ gemset_name="keytar"
5
+
6
+ if rvm list strings | grep -q "${ruby_string}" ; then
7
+
8
+ rvm use "${ruby_string}@${gemset_name}" --create
9
+
10
+ # Complain if bundler isn't installed
11
+ if [[ -z "`gem which bundler 2>&1 | grep -v ERROR`" ]]; then
12
+ echo "You need bundler:"
13
+ echo ""
14
+ echo " gem install bundler"
15
+ echo ""
16
+ fi
17
+ else
18
+ echo "${ruby_string} was not found, please run 'rvm install ${ruby_string}' and then cd back into the project directory."
19
+ fi
data/Gemfile CHANGED
@@ -1,13 +1,13 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  group :development do
4
- gem 'activerecord' ## not needed if you're just using KeyBuilder
5
- gem 'activesupport' ## KeyBuilder relys on several helper methods, can be re-factored to not need this
6
- gem 'rake'
7
- gem 'jeweler'
4
+ gem 'activerecord', '~>3.0.4' ## not needed if you're just using KeyBuilder
5
+ gem 'activesupport', '~>3.0.4' ## KeyBuilder relies on several helper methods, can be re-factored to not need this
6
+ gem 'rake', '~>0.8.7'
7
+ gem 'jeweler', '~>1.5.2'
8
8
  end
9
9
 
10
10
  group :test do
11
- gem 'sqlite3'
11
+ gem 'sqlite3', '~> 1.3.3'
12
12
  gem 'rspec', '~> 2.5'
13
13
  end
@@ -36,9 +36,9 @@ PLATFORMS
36
36
  ruby
37
37
 
38
38
  DEPENDENCIES
39
- activerecord
40
- activesupport
41
- jeweler
42
- rake
39
+ activerecord (~> 3.0.4)
40
+ activesupport (~> 3.0.4)
41
+ jeweler (~> 1.5.2)
42
+ rake (~> 0.8.7)
43
43
  rspec (~> 2.5)
44
- sqlite3
44
+ sqlite3 (~> 1.3.3)
data/README.md CHANGED
@@ -2,41 +2,40 @@ Keytar
2
2
  ======
3
3
 
4
4
  **1.** A keyboard that is designed to be played standing up, like a guitar.
5
- **2.** A crazy simple ruby-on-rails library for making re-usable keys
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
  KeyBuilder
8
8
  ----------
9
9
 
10
- Keytar is a Ruby on Rails gem for KeyBuilder. Use KeyBuilder to automatically generate keys based on class name instead of cluttering model definitions with tons of redundant key method declarations.
10
+ Keytar is an amazingly easy way to auto-magically 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 automatically generates keys based on class name instead of cluttering model definitions with tons of redundant key method declarations.
11
11
 
12
- quit littering your code with junk like this:
12
+ ___quit___ littering your code with junk like this:
13
13
 
14
+ class User
14
15
  def some_distributed_no_sql_datastore_key
15
16
  "foos:some_distributed_no_sql_datastore:#{self.id}"
16
17
  end
17
-
18
- Seriously, quit it
19
-
18
+ end
20
19
 
20
+ Seriously, ___quit it___!
21
21
 
22
22
 
23
23
  Installation
24
24
  ------------
25
- gem install keytar
26
-
27
- in your Gemfile add
25
+ In your Ruby on Rails Gemfile add
28
26
 
29
27
  gem 'keytar'
30
28
 
31
- now, you're good to go. See below for examples and config documentation
29
+ then run
32
30
 
33
- Example:
34
- --------
31
+ bundle install
35
32
 
36
- Keytar in action
33
+ now, you're good to go. Not using RoR? No worries, just drop `include Keytar` in any Ruby model you want.
37
34
 
38
- class User < ActiveRecord::Base
39
- end
35
+
36
+ Example:
37
+ --------
38
+ keytar auto-magically generates keys using method names ending in `"_key"` or simply "key".
40
39
 
41
40
  User.key #=> "user"
42
41
  User.memcache_key #=> "user:memcache"
@@ -49,74 +48,81 @@ Keytar in action
49
48
  u.sweet_key #=> "users:sweet:2"
50
49
 
51
50
 
51
+
52
52
  It's that simple
53
53
 
54
54
  Config
55
55
  ------
56
56
 
57
- There's a ton of configuration options. Call the below methods in your class to configure it's options.
57
+ These options can be configured by passing in a hash to keyfig:
58
+
59
+ class User < ActiveRecord::Base
60
+ keyfig :key_delimiter => ":", :key_order => [:unique, :suffix], :key_prefix => "before"
61
+ end
62
+
63
+ Or by calling class methods
58
64
 
59
65
  class User < ActiveRecord::Base
60
66
  key_delimiter ":"
61
67
  key_order [:prefix, :base, :name, :unique, :args, :suffix]
62
68
  key_prefix nil
63
- key_suffix nil
64
- key_pluralize_instances true
65
- key_plural nil
66
- key_case :downcase
67
- key_unique "id"
68
69
  end
69
70
 
71
+ Config Options Breakdown
72
+ ------------------------
70
73
  Here is a run down of what each does
71
74
 
75
+ **key_delimeter** sets the separating argument in keys
76
+
72
77
  User.key_delimeter "|"
73
78
  user.redis_key #=> "users|redis"
74
79
 
75
- key_delimeter sets the separating argument in keys
80
+
81
+ **key_order** sets the location of key parts, if a symbol is omitted, it will not show up in the final key
76
82
 
77
83
  User.key_order [:name, :base]
78
84
  user.redis_key #=> "redis:users"
79
-
80
- key_order sets the location of key parts, if a symbol is omitted, it will not show up in the final key
81
85
 
86
+ **key_unique** sets the unique value of the instance that is used to build the key
87
+
88
+ By default all instance keys have an identifying unique element included in the key, specifying `key_unique` allows you to change the field that is used to specify a unique key. (defaults to database backed id, but will not use id if object.id == object.object_id)
89
+
90
+ user = User.create(:username => "Schneems", :id => 9)
91
+ user.id #=> 9
92
+ user.redis_key #=> "users:redis:9"
93
+
94
+ User.key_unique("username")
95
+ user.redis_key #=> "users:redis:schneems"
96
+
97
+ **key_prefix** sets the a prefix to your key for that class
98
+
82
99
  User.key_prefix "woot"
83
100
  user.redis_key #=> "woot:users:redis"
84
101
 
85
- key_prefix sets the a prefix to your key for that class
102
+ **key_suffix** sets the a suffix to your key for that class
86
103
 
87
104
  User.key_suffix "slave"
88
105
  user.redis_key #=> "users:redis:slave"
89
106
 
90
- key_suffix sets the a suffix to your key for that class
107
+ **`key_pluralize_instances`** allows you to toggle pluralizing instance keys (note the 's' in 'users' is not there)
91
108
 
92
109
  User.key_pluralize_instances false
93
110
  user.redis_key #=> "user:redis"
94
111
 
95
- key_pluralize_instances allows you to toggle pluralizing instance keys (note the 's' in 'users' is not there)
112
+
113
+ **key_plural** allows you to over-ride the default pluralize method with custom spelling
96
114
 
97
115
  User.key_plural "uzerz"
98
116
  user.redis_key #=> "uzerz:redis"
99
117
 
100
- key_plural allows you to over-ride the default pluralize method with custom spelling
118
+ **key_case** allows you to specify the case of your key
101
119
 
102
120
  User.key_case :upcase
103
121
  user.redis_key #=> "USERS:REDIS"
104
122
 
105
- key_case allows you to specify the case of your key
106
-
107
- User.key_unique "username"
108
-
109
- `key_unique`: By default all instance keys have an identifying unique element included in the key, specifying `key_unique` allows you to change the field that is used to specify a unique key. (defaults to database backed id, but will not use id if object.id == object.object_id)
110
-
111
- user = User.create(:username => "Schneems", :id => 9)
112
- user.id #=> 9
113
- user.redis_key #=> "users:redis:9"
114
-
115
- User.key_unique("username")
116
- user.redis_key #=> "users:redis:schneems"
117
-
118
-
119
-
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.
120
126
 
121
127
 
122
128
 
@@ -175,5 +181,11 @@ Since this library is sooooo simple, here is a ASCII keytar for you. Thanks for
175
181
  ,::::~:,7:::
176
182
 
177
183
 
184
+ Contribution
185
+ ============
186
+
187
+ Fork away. If you want to chat about a feature idea, or a question you can find me on the twitters [@schneems](http://twitter.com/schneems). Put any major changes into feature branches. Make sure all tests stay green, and make sure your changes are covered.
188
+
189
+
178
190
  Copyright (c) 2011 Schneems. See LICENSE.txt for
179
191
  further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.9.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{keytar}
8
- s.version = "0.1.1"
8
+ s.version = "0.9.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-04-20}
12
+ s.date = %q{2011-05-08}
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
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  ]
22
22
  s.files = [
23
23
  ".DS_Store",
24
+ ".rvmrc",
24
25
  "Gemfile",
25
26
  "Gemfile.lock",
26
27
  "README.md",
@@ -36,7 +37,23 @@ Gem::Specification.new do |s|
36
37
  "pkg/keytar-0.1.1.gem",
37
38
  "spec/keytar/key_builder_spec.rb",
38
39
  "spec/keytar/keytar_spec.rb",
39
- "spec/keytar/spec_helper.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"
40
57
  ]
41
58
  s.homepage = %q{http://github.com/Schnems/keytar}
42
59
  s.licenses = ["MIT"]
@@ -53,23 +70,23 @@ Gem::Specification.new do |s|
53
70
  s.specification_version = 3
54
71
 
55
72
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
56
- s.add_development_dependency(%q<activerecord>, [">= 0"])
57
- s.add_development_dependency(%q<activesupport>, [">= 0"])
58
- s.add_development_dependency(%q<rake>, [">= 0"])
59
- s.add_development_dependency(%q<jeweler>, [">= 0"])
73
+ s.add_development_dependency(%q<activerecord>, ["~> 3.0.4"])
74
+ s.add_development_dependency(%q<activesupport>, ["~> 3.0.4"])
75
+ s.add_development_dependency(%q<rake>, ["~> 0.8.7"])
76
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
60
77
  s.add_development_dependency(%q<rspec>, [">= 0"])
61
78
  else
62
- s.add_dependency(%q<activerecord>, [">= 0"])
63
- s.add_dependency(%q<activesupport>, [">= 0"])
64
- s.add_dependency(%q<rake>, [">= 0"])
65
- s.add_dependency(%q<jeweler>, [">= 0"])
79
+ s.add_dependency(%q<activerecord>, ["~> 3.0.4"])
80
+ s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
81
+ s.add_dependency(%q<rake>, ["~> 0.8.7"])
82
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
66
83
  s.add_dependency(%q<rspec>, [">= 0"])
67
84
  end
68
85
  else
69
- s.add_dependency(%q<activerecord>, [">= 0"])
70
- s.add_dependency(%q<activesupport>, [">= 0"])
71
- s.add_dependency(%q<rake>, [">= 0"])
72
- s.add_dependency(%q<jeweler>, [">= 0"])
86
+ s.add_dependency(%q<activerecord>, ["~> 3.0.4"])
87
+ s.add_dependency(%q<activesupport>, ["~> 3.0.4"])
88
+ s.add_dependency(%q<rake>, ["~> 0.8.7"])
89
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
73
90
  s.add_dependency(%q<rspec>, [">= 0"])
74
91
  end
75
92
  end
@@ -1,7 +1,10 @@
1
1
  require 'rubygems'
2
- require 'active_record'
2
+ begin; require 'active_record'; rescue; end
3
3
 
4
4
  module Keytar
5
5
  autoload :KeyBuilder, 'keytar/key_builder'
6
- ActiveRecord::Base.class_eval %{ include KeyBuilder }
6
+ ActiveRecord::Base.class_eval { include KeyBuilder } if defined?(ActiveRecord::Base)
7
+ def self.included(klass)
8
+ klass.class_eval {include KeyBuilder}
9
+ end
7
10
  end
@@ -12,12 +12,13 @@ module KeyBuilder
12
12
  :key_pluralize_instances => true,
13
13
  :key_case => :downcase,
14
14
  :key_plural => nil,
15
- :key_unique => "id"
15
+ :key_unique => "id",
16
+ :key_cache_methods => true
16
17
  }
17
18
 
18
19
  def self.included(klass)
19
20
  # setup method missing on class
20
- klass.class_eval %{
21
+ klass.class_eval do
21
22
  extend KeyBuilder::Ext
22
23
  # if method_missing doesn't already exist, aliasing and calling it will create an infinite loop
23
24
  @@key_builder_jump_to_superclass = true
@@ -28,6 +29,14 @@ module KeyBuilder
28
29
 
29
30
  def self.method_missing(method_name, *args, &blk)
30
31
  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
31
40
  self.build_key(:base => self.to_s.downcase, :name => method_name, :args => args)
32
41
  else
33
42
  if @@key_builder_jump_to_superclass
@@ -37,7 +46,7 @@ module KeyBuilder
37
46
  end
38
47
  end
39
48
  end
40
- }
49
+ end
41
50
  end
42
51
 
43
52
  # class methods to be extended
@@ -53,6 +62,11 @@ module KeyBuilder
53
62
  }
54
63
  end
55
64
 
65
+ def keyfig(options = {})
66
+ options.keys.each do |key|
67
+ eval("@@#{key} = options[key]") if key.to_s =~ /^key_.*/
68
+ end
69
+ end
56
70
 
57
71
  # Call KeyBuilder.build_key or Foo.build_key with options
58
72
  # :base => self.to_s.downcase, :name => method_name, :args => args
@@ -102,6 +116,14 @@ module KeyBuilder
102
116
 
103
117
  def method_missing(method_name, *args, &blk)
104
118
  if method_name.to_s =~ /.*key$/
119
+ ## Performance: define method so we can skip method_missing next time
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
105
127
  build_key(method_name, *args)
106
128
  else
107
129
  original_method_missing(method_name, *args, &blk)
Binary file
@@ -1,4 +1,5 @@
1
- require 'spec_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
2
3
 
3
4
  class Foo
4
5
  include KeyBuilder
@@ -21,6 +22,15 @@ describe KeyBuilder do
21
22
  Foo.awesome_key(number).should == "foo:awesome:#{number}"
22
23
  end
23
24
 
25
+ it 'should dynamically define a class method capeable of producing different keys' do
26
+ key1 = Foo.define_method_time_test_key(1)
27
+ key2 = Foo.define_method_time_test_key(2)
28
+ Foo.respond_to?(:define_method_time_test_key).should be_true
29
+ key2.should_not == key1
30
+ end
31
+
32
+
33
+
24
34
  it 'should call method_missing on a non-existant method' do
25
35
  begin
26
36
  Foo.thismethoddoesnotexist
@@ -49,6 +59,20 @@ describe KeyBuilder do
49
59
  @foo.awesome_key(number).should == "foos:awesome:#{number}"
50
60
  end
51
61
 
62
+ it 'should dynamically define an instance method capeable of producing different keys' do
63
+ key1 = @foo.define_method_time_test_key(1)
64
+ key2 = @foo.define_method_time_test_key(2)
65
+ @foo.respond_to?(:define_method_time_test_key).should be_true
66
+ key2.should_not == key1
67
+ end
68
+
69
+ it 'should dynamically define an instance method capeable of producing different keys' do
70
+ key1 = @foo.define_method_time_test_key(1)
71
+ key2 = @foo.define_method_time_test_key(2)
72
+ @foo.respond_to?(:define_method_time_test_key).should be_true
73
+ key2.should_not == key1
74
+ end
75
+
52
76
  it 'should call method_missing on a non-existant method' do
53
77
  begin
54
78
  @foo.thismethoddoesnotexist
@@ -70,6 +94,7 @@ describe KeyBuilder do
70
94
  Foo.key_case KeyBuilder::DEFAULTS[:key_case]
71
95
  Foo.key_plural KeyBuilder::DEFAULTS[:key_plural]
72
96
  Foo.key_unique KeyBuilder::DEFAULTS[:key_unique]
97
+ Foo.key_cache_methods KeyBuilder::DEFAULTS[:key_cache_methods]
73
98
  end
74
99
 
75
100
  it 'should change key_delimiter' do
@@ -132,6 +157,47 @@ describe KeyBuilder do
132
157
  foo = Foo.new
133
158
  foo.awesome_key.should == "foos:awesome:#{foo.timeish}"
134
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
200
+
135
201
  end
136
202
 
137
203
  end
@@ -1,31 +1,66 @@
1
- require 'spec_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  ## Gives us ActiveRecord backed model Bar that we can test instances of
3
3
  ActiveRecord::Base.establish_connection(
4
4
  :adapter => "sqlite3",
5
5
  :database => ":memory:",
6
6
  :host => 'localhost')
7
- ActiveRecord::Migrator.migrate('../../db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil )
8
- ## Gives us ActiveRecord backed model Bar that we can test instances of
9
7
 
8
+ ## Gives us ActiveRecord backed model Bar that we can test instances of
9
+ ActiveRecord::Migrator.migrate(
10
+ File.expand_path(File.dirname(__FILE__) + "../../../db/migrate") ,
11
+ ENV["VERSION"] ? ENV["VERSION"].to_i : nil )
10
12
 
11
13
  class Bar < ActiveRecord::Base
12
14
 
13
15
  end
14
16
 
17
+ class BarNonActiveRecord
18
+
19
+ end
20
+
15
21
 
16
22
  describe Keytar do
17
23
  describe 'requiring Keytar' do
18
- it 'should load keybuilder into ActiveRecord::Base' do
24
+ it 'should load keybuilder into ActiveRecord::Base if defined' do
19
25
  describe Bar.ancestors do
20
26
  it {should include( KeyBuilder)}
21
27
  end
22
28
  end
23
29
 
24
- it 'should ' do
30
+ it 'should allow ActiveRecord based objects to use their unique identifiers' do
25
31
  name = "notblank"
26
32
  b = Bar.create(:name => name)
27
33
  b.name.should == name
28
34
  b.awesome_key.should == "bars:awesome:#{b.id}"
29
35
  end
30
36
  end
37
+
38
+ describe 'requiring Keytar with ActiveRecord undefined' do
39
+ before do
40
+ begin; Object.send(:remove_const, "ActiveRecord"); rescue NameError; end
41
+ end
42
+
43
+ it 'does not automatically add KeyBuilder to the class' do
44
+ describe BarNonActiveRecord.ancestors do
45
+ it {should_not include( KeyBuilder)}
46
+ end
47
+ end
48
+
49
+ describe 'allows non ActiveRecord based classes to use keytar directly' do
50
+ it 'includes keybuilder when it is included' do
51
+ BarNonActiveRecord.class_eval do
52
+ include Keytar
53
+ end
54
+ describe BarNonActiveRecord.ancestors do
55
+ it {should include( KeyBuilder)}
56
+ end
57
+ end
58
+
59
+ it 'should allow ActiveRecord based objects to use their unique identifiers' do
60
+ BarNonActiveRecord.awesome_key.should == "barnonactiverecord:awesome"
61
+ end
62
+ end
63
+ end
64
+
65
+
31
66
  end
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: 25
4
+ hash: 59
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
8
+ - 9
9
+ - 0
10
+ version: 0.9.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-04-20 00:00:00 -05:00
18
+ date: 2011-05-08 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -23,12 +23,14 @@ dependencies:
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
26
- - - ">="
26
+ - - ~>
27
27
  - !ruby/object:Gem::Version
28
- hash: 3
28
+ hash: 15
29
29
  segments:
30
+ - 3
30
31
  - 0
31
- version: "0"
32
+ - 4
33
+ version: 3.0.4
32
34
  name: activerecord
33
35
  version_requirements: *id001
34
36
  prerelease: false
@@ -37,12 +39,14 @@ dependencies:
37
39
  requirement: &id002 !ruby/object:Gem::Requirement
38
40
  none: false
39
41
  requirements:
40
- - - ">="
42
+ - - ~>
41
43
  - !ruby/object:Gem::Version
42
- hash: 3
44
+ hash: 15
43
45
  segments:
46
+ - 3
44
47
  - 0
45
- version: "0"
48
+ - 4
49
+ version: 3.0.4
46
50
  name: activesupport
47
51
  version_requirements: *id002
48
52
  prerelease: false
@@ -51,12 +55,14 @@ dependencies:
51
55
  requirement: &id003 !ruby/object:Gem::Requirement
52
56
  none: false
53
57
  requirements:
54
- - - ">="
58
+ - - ~>
55
59
  - !ruby/object:Gem::Version
56
- hash: 3
60
+ hash: 49
57
61
  segments:
58
62
  - 0
59
- version: "0"
63
+ - 8
64
+ - 7
65
+ version: 0.8.7
60
66
  name: rake
61
67
  version_requirements: *id003
62
68
  prerelease: false
@@ -65,12 +71,14 @@ dependencies:
65
71
  requirement: &id004 !ruby/object:Gem::Requirement
66
72
  none: false
67
73
  requirements:
68
- - - ">="
74
+ - - ~>
69
75
  - !ruby/object:Gem::Version
70
- hash: 3
76
+ hash: 7
71
77
  segments:
72
- - 0
73
- version: "0"
78
+ - 1
79
+ - 5
80
+ - 2
81
+ version: 1.5.2
74
82
  name: jeweler
75
83
  version_requirements: *id004
76
84
  prerelease: false
@@ -98,6 +106,7 @@ extra_rdoc_files:
98
106
  - README.md
99
107
  files:
100
108
  - .DS_Store
109
+ - .rvmrc
101
110
  - Gemfile
102
111
  - Gemfile.lock
103
112
  - README.md
@@ -114,6 +123,22 @@ files:
114
123
  - spec/keytar/key_builder_spec.rb
115
124
  - spec/keytar/keytar_spec.rb
116
125
  - 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
117
142
  has_rdoc: true
118
143
  homepage: http://github.com/Schnems/keytar
119
144
  licenses: