blendris 0.0.2 → 0.0.3

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/Manifest CHANGED
@@ -4,7 +4,6 @@ PostInstall.txt
4
4
  README.markdown
5
5
  Rakefile
6
6
  autotest/discover.rb
7
- blendris.gemspec
8
7
  lib/blendris.rb
9
8
  lib/blendris/accessor.rb
10
9
  lib/blendris/errors.rb
data/README.markdown CHANGED
@@ -1,6 +1,6 @@
1
1
  # Blendris #
2
2
 
3
- * http://github.com/alexmchale/blendris
3
+ http://github.com/alexmchale/blendris
4
4
 
5
5
 
6
6
 
@@ -20,13 +20,13 @@ PLEASE DON'T USE IT FOR ANYTHING IMPORTANT YET!!!
20
20
 
21
21
  # REQUIREMENTS #
22
22
 
23
- * Blendris uses the redis RubyGem.
23
+ Blendris uses the redis RubyGem.
24
24
 
25
25
 
26
26
 
27
27
  # INSTALL #
28
28
 
29
- * gem install blendris
29
+ gem install blendris
30
30
 
31
31
 
32
32
 
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ require "redis"
9
9
  require "fileutils"
10
10
  require "./lib/blendris"
11
11
 
12
- Echoe.new("blendris", "0.0.2") do |p|
12
+ Echoe.new("blendris", "0.0.3") do |p|
13
13
 
14
14
  p.description = "A redis library for Ruby"
15
15
  p.url = "http://github.com/alexmchale/blendris"
data/blendris.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{blendris}
5
- s.version = "0.0.2"
5
+ s.version = "0.0.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Alex McHale"]
9
9
  s.cert_chain = ["/Users/amchale/Dropbox/Security/gem-public_cert.pem"]
10
- s.date = %q{2010-02-11}
10
+ s.date = %q{2010-02-15}
11
11
  s.description = %q{A redis library for Ruby}
12
12
  s.email = %q{alexmchale@gmail.com}
13
13
  s.extra_rdoc_files = ["README.markdown", "lib/blendris.rb", "lib/blendris/accessor.rb", "lib/blendris/errors.rb", "lib/blendris/integer.rb", "lib/blendris/list.rb", "lib/blendris/model.rb", "lib/blendris/node.rb", "lib/blendris/reference.rb", "lib/blendris/reference_base.rb", "lib/blendris/reference_set.rb", "lib/blendris/set.rb", "lib/blendris/string.rb", "lib/blendris/types.rb", "lib/blendris/utils.rb", "tasks/rspec.rake"]
14
- s.files = ["History.txt", "Manifest", "PostInstall.txt", "README.markdown", "Rakefile", "autotest/discover.rb", "blendris.gemspec", "lib/blendris.rb", "lib/blendris/accessor.rb", "lib/blendris/errors.rb", "lib/blendris/integer.rb", "lib/blendris/list.rb", "lib/blendris/model.rb", "lib/blendris/node.rb", "lib/blendris/reference.rb", "lib/blendris/reference_base.rb", "lib/blendris/reference_set.rb", "lib/blendris/set.rb", "lib/blendris/string.rb", "lib/blendris/types.rb", "lib/blendris/utils.rb", "script/console", "script/destroy", "script/generate", "spec/list_spec.rb", "spec/model_spec.rb", "spec/redis-tools_spec.rb", "spec/ref_spec.rb", "spec/set_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "spec/string_spec.rb", "tasks/rspec.rake"]
14
+ s.files = ["History.txt", "Manifest", "PostInstall.txt", "README.markdown", "Rakefile", "autotest/discover.rb", "lib/blendris.rb", "lib/blendris/accessor.rb", "lib/blendris/errors.rb", "lib/blendris/integer.rb", "lib/blendris/list.rb", "lib/blendris/model.rb", "lib/blendris/node.rb", "lib/blendris/reference.rb", "lib/blendris/reference_base.rb", "lib/blendris/reference_set.rb", "lib/blendris/set.rb", "lib/blendris/string.rb", "lib/blendris/types.rb", "lib/blendris/utils.rb", "script/console", "script/destroy", "script/generate", "spec/list_spec.rb", "spec/model_spec.rb", "spec/redis-tools_spec.rb", "spec/ref_spec.rb", "spec/set_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "spec/string_spec.rb", "tasks/rspec.rake", "blendris.gemspec"]
15
15
  s.homepage = %q{http://github.com/alexmchale/blendris}
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Blendris", "--main", "README.markdown"]
17
17
  s.require_paths = ["lib"]
@@ -1,5 +1,8 @@
1
1
  module Blendris
2
2
 
3
+ # This module serves as a gateway to the Redis library. Any object
4
+ # that needs to access Redis directly should include it.
5
+
3
6
  module RedisAccessor
4
7
 
5
8
  include Utils
@@ -12,10 +15,8 @@ module Blendris
12
15
  $_redis_connection ||= Redis.new
13
16
  end
14
17
 
15
- def prefix
16
- RedisAccessor.prefix
17
- end
18
-
18
+ # Generate a key for the given model class with the given values list.
19
+ # This is used to determine a new object's key in the Model.create method.
19
20
  def generate_key(klass, values)
20
21
  value_index = 0
21
22
 
@@ -41,18 +42,14 @@ module Blendris
41
42
  end.compact.join(":")
42
43
  end
43
44
 
44
- def self.prefix
45
- $_redis_prefix ||= ""
46
- end
47
-
48
- def self.prefix=(prefix)
49
- $_redis_prefix = prefix.to_s
45
+ # Change which database we're accessing in Redis.
46
+ def self.database=(index)
47
+ $_redis_connection = Redis.new(:db => index.to_i)
50
48
  end
51
49
 
52
- def self.flush_keys
53
- redis.keys("#{prefix}*").each do |key|
54
- redis.del key
55
- end
50
+ # This will delete all keys in the current database. Dangerous!
51
+ def self.flushdb
52
+ redis.flushdb
56
53
  end
57
54
 
58
55
  end
@@ -1,5 +1,8 @@
1
1
  module Blendris
2
2
 
3
+ # RedisInteger is a string-value in Redis wrapped up to make
4
+ # sure that it is used as an integer.
5
+
3
6
  class RedisInteger
4
7
 
5
8
  include RedisNode
@@ -7,7 +10,7 @@ module Blendris
7
10
  def self.cast_to_redis(value, options = {})
8
11
  raise TypeError.new("#{value.class.name} is not an integer") unless value.kind_of? Fixnum
9
12
 
10
- value
13
+ value.to_s
11
14
  end
12
15
 
13
16
  def self.cast_from_redis(value, options = {})
data/lib/blendris/list.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Blendris
2
2
 
3
+ # RedisList is a wrapper for the Redis LIST data type.
4
+
3
5
  class RedisList
4
6
 
5
7
  include RedisNode
@@ -8,6 +10,7 @@ module Blendris
8
10
  def initialize(key, options = {})
9
11
  @key = key.to_s
10
12
  @options = options
13
+ @on_change = options[:on_change]
11
14
  end
12
15
 
13
16
  def each
@@ -17,10 +20,14 @@ module Blendris
17
20
  end
18
21
 
19
22
  def <<(value)
20
- [ value ].flatten.compact.each do |v|
23
+ values = [ value ].flatten.compact
24
+
25
+ values.flatten.compact.each do |v|
21
26
  redis.rpush key, v
22
27
  end
23
28
 
29
+ notify_changed if values.count > 0
30
+
24
31
  self
25
32
  end
26
33
 
@@ -30,6 +37,8 @@ module Blendris
30
37
 
31
38
  def delete(value)
32
39
  redis.lrem key, 0, value
40
+ ensure
41
+ notify_changed
33
42
  end
34
43
 
35
44
  end
@@ -1,18 +1,29 @@
1
1
  module Blendris
2
2
 
3
+ # Model is the main driver for Blendris. All Blendris objects
4
+ # will inherit from it to function as a database model.
5
+
3
6
  class Model
4
7
 
5
8
  include RedisAccessor
6
9
 
7
10
  attr_reader :key
8
11
 
12
+ # Instantiate a new instance of this model. We do some basic
13
+ # checking to make sure that this object already exists in Redis
14
+ # as the requested type. This is to prevent keys being used in
15
+ # the wrong way.
16
+
17
+ # If the :verify option isn't set to false, then each field of
18
+ # this model is also verified.
19
+
9
20
  def initialize(new_key, options = {})
10
21
  @key = sanitize_key(new_key)
11
- actual_type = constantize(redis.get(prefix + key))
22
+ actual_type = constantize(redis.get(key))
12
23
 
13
24
  raise ArgumentError.new("#{self.class.name} second argument must be a hash") unless options.kind_of? Hash
14
- raise TypeError.new("#{prefix + key} does not exist, not a #{self.class.name} - you may want create instead of new") if !actual_type
15
- raise TypeError.new("#{prefix + key} is a #{actual_type}, not a #{self.class.name}") if actual_type != self.class
25
+ raise TypeError.new("#{key} does not exist, not a #{self.class.name} - you may want create instead of new") if !actual_type
26
+ raise TypeError.new("#{key} is a #{actual_type}, not a #{self.class.name}") if actual_type != self.class
16
27
 
17
28
  if options[:verify] != false
18
29
  parameters = self.class.local_parameters.find_all {|s| s.kind_of? Symbol}
@@ -23,16 +34,21 @@ module Blendris
23
34
  end
24
35
  end
25
36
 
37
+ # An object's id is considered to be the SHA1 digest of its key. This is
38
+ # to ensure that all objects that represent the same key return the same id.
26
39
  def id
27
40
  Digest::SHA1.hexdigest key
28
41
  end
29
42
 
43
+ # TODO: Create the methods in the initialize method instead of depending
44
+ # on method_missing to dispatch to the correct methods. This will make
45
+ # these objects better for mocking and stubbing.
30
46
  def method_missing(method_sym, *arguments)
31
47
  (name, setter) = method_sym.to_s.scan(/(.*[^=])(=)?/).first
32
48
 
33
49
  if node = redis_symbol(name)
34
50
  if setter
35
- return node.set *arguments
51
+ return node.set(*arguments)
36
52
  else
37
53
  return node.get
38
54
  end
@@ -41,6 +57,9 @@ module Blendris
41
57
  super
42
58
  end
43
59
 
60
+ # Look up the given symbol by its name. The list of symbols are defined
61
+ # when the model is declared.
62
+ # TODO: This can also probably go away when I remove the need for method_missing.
44
63
  def redis_symbol(name)
45
64
  subkey = self.subkey(name)
46
65
 
@@ -48,23 +67,44 @@ module Blendris
48
67
 
49
68
  return unless options
50
69
 
51
- options = options.merge(:model => self)
70
+ on_change = lambda { self.fire_on_change_for name }
71
+ options = options.merge(:model => self, :on_change => on_change)
52
72
 
53
73
  options[:type].new subkey, options
54
74
  end
55
75
 
56
- def subkey(key)
57
- sanitize_key "#{self.key}:#{key}"
76
+ # Calculate the key to address the given child node.
77
+ def subkey(child)
78
+ sanitize_key "#{self.key}:#{child}"
58
79
  end
59
80
 
81
+ # Compare two instances. If two instances have the same class and key, they are equal.
60
82
  def ==(other)
61
83
  return false unless self.class == other.class
62
84
  return self.key == other.key
63
85
  end
64
86
 
87
+ # Return a list of field names for this model.
88
+ def fields
89
+ self.class.redis_symbols.map {|name, field| name.to_s}
90
+ end
91
+
92
+ # Fire the list of blocks called when the given symbol changes.
93
+ def fire_on_change_for(symbol)
94
+ blocks = [ self.class.on_change_table[nil], self.class.on_change_table[symbol.to_s] ]
95
+
96
+ blocks.flatten!
97
+ blocks.compact!
98
+
99
+ blocks.each do |block|
100
+ self.instance_exec symbol.to_s, &block
101
+ end
102
+ end
103
+
65
104
  class << self
66
105
 
67
106
  include RedisAccessor
107
+ include Enumerable
68
108
 
69
109
  # This method will instantiate a new object with the correct key
70
110
  # and assign the values passed to it.
@@ -79,13 +119,14 @@ module Blendris
79
119
  end
80
120
 
81
121
  key = generate_key(self, args)
82
- current_model = redis.get(prefix + key)
122
+ current_model = redis.get(key)
83
123
 
84
124
  if current_model && current_model != self.name
85
125
  raise ArgumentError.new("#{key} is a #{current_model}, not a #{self.name}")
86
126
  end
87
127
 
88
- redis.set(prefix + key, self.name)
128
+ redis.set key, self.name
129
+ redis.sadd index_key, key
89
130
 
90
131
  obj = new(key, :verify => false)
91
132
 
@@ -105,6 +146,14 @@ module Blendris
105
146
  nil
106
147
  end
107
148
 
149
+ def each
150
+ RedisSet.new(index_key).each {|k| yield new(k)}
151
+ end
152
+
153
+ def index_key
154
+ "index:model:#{self.name}"
155
+ end
156
+
108
157
  # Defines a new data type for Blendris:Model construction.
109
158
  def type(name, klass)
110
159
  (class << self; self; end).instance_eval do
@@ -136,6 +185,27 @@ module Blendris
136
185
  options[:type].cast_to_redis value, options
137
186
  end
138
187
 
188
+ # Define a block to call when one of the given symbol values changes.
189
+ def on_change(*symbols, &block)
190
+ symbols.flatten!
191
+ symbols.compact!
192
+
193
+ if symbols.count == 0
194
+ on_change_table[nil] ||= []
195
+ on_change_table[nil] << block
196
+ else
197
+ symbols.each do |symbol|
198
+ on_change_table[symbol.to_s] ||= []
199
+ on_change_table[symbol.to_s] << block
200
+ end
201
+ end
202
+ end
203
+
204
+ # The hash of blocks called when fields on this object change.
205
+ def on_change_table
206
+ @on_change_table ||= {}
207
+ end
208
+
139
209
  end
140
210
 
141
211
  end
data/lib/blendris/node.rb CHANGED
@@ -1,16 +1,22 @@
1
1
  module Blendris
2
2
 
3
3
  # RedisNode is used to compose all Redis value wrapper classes.
4
+
4
5
  module RedisNode
5
6
 
6
7
  include RedisAccessor
7
8
 
9
+ attr_reader :key
10
+
8
11
  def initialize(key, options = {})
9
12
  @key = sanitize_key(key)
10
13
  @default = options[:default]
11
14
  @options = options
15
+ @on_change = options[:on_change]
12
16
 
13
- set(@default) if @default && !redis.exists(self.key)
17
+ if @default && !redis.exists(self.key)
18
+ redis.set key, self.class.cast_to_redis(@default, @options)
19
+ end
14
20
  end
15
21
 
16
22
  def set(value)
@@ -19,18 +25,18 @@ module Blendris
19
25
  else
20
26
  redis.del key
21
27
  end
28
+ ensure
29
+ notify_changed
22
30
  end
23
31
 
24
32
  def get
25
33
  self.class.cast_from_redis redis.get(self.key), @options
26
34
  end
27
35
 
28
- def key
29
- prefix + @key
30
- end
31
-
32
36
  def clear
33
37
  redis.del key
38
+ ensure
39
+ notify_changed
34
40
  end
35
41
 
36
42
  def type
@@ -41,6 +47,10 @@ module Blendris
41
47
  redis.exists key
42
48
  end
43
49
 
50
+ def notify_changed
51
+ @on_change.call if @on_change
52
+ end
53
+
44
54
  end
45
55
 
46
56
  end
@@ -1,5 +1,8 @@
1
1
  module Blendris
2
2
 
3
+ # RedisReference is a wrapper to a Redis string value and serves
4
+ # as a pointer to another blendris object.
5
+
3
6
  class RedisReference < RedisReferenceBase
4
7
 
5
8
  include RedisNode
@@ -22,7 +25,10 @@ module Blendris
22
25
  modified = true
23
26
  end
24
27
 
25
- apply_reverse_delete(old_obj) if modified
28
+ if modified
29
+ apply_reverse_delete(old_obj)
30
+ notify_changed
31
+ end
26
32
 
27
33
  obj
28
34
  end
@@ -1,5 +1,8 @@
1
1
  module Blendris
2
2
 
3
+ # RedisReferenceBase holds the methods that are common to
4
+ # RedisReference objects and RedisReferenceSet objects.
5
+
3
6
  class RedisReferenceBase
4
7
 
5
8
  include RedisNode
@@ -10,6 +13,7 @@ module Blendris
10
13
  @key = sanitize_key(key)
11
14
  @reverse = options[:reverse]
12
15
  @options = options
16
+ @on_change = options[:on_change]
13
17
 
14
18
  @klass = options[:class] || Model
15
19
  @klass = constantize(camelize @klass) if @klass.kind_of? String
@@ -52,7 +56,7 @@ module Blendris
52
56
  expect = constantize(expect) if expect.kind_of? String
53
57
  expect = Model unless expect.ancestors.include? Model
54
58
 
55
- klass = constantize(redis.get(prefix + refkey)) if refkey
59
+ klass = constantize(redis.get(refkey)) if refkey
56
60
 
57
61
  if klass == nil
58
62
  nil
@@ -1,5 +1,8 @@
1
1
  module Blendris
2
2
 
3
+ # RedisReferenceSet is a wrapper to a Redis set value and serves
4
+ # as a pointer to multiple other blendris objects.
5
+
3
6
  class RedisReferenceSet < RedisReferenceBase
4
7
 
5
8
  include RedisNode
@@ -9,6 +12,7 @@ module Blendris
9
12
  @refs ||= RedisSet.new(@key)
10
13
  end
11
14
 
15
+ # TODO set should be a real set, while << appends
12
16
  def set(*objs)
13
17
  objs.flatten!
14
18
  objs.compact!
@@ -20,6 +24,8 @@ module Blendris
20
24
  end
21
25
  end
22
26
 
27
+ notify_changed if objs.count > 0
28
+
23
29
  self
24
30
  end
25
31
  alias :<< :set
@@ -28,6 +34,7 @@ module Blendris
28
34
  if refkey = self.class.cast_to_redis(obj, @options)
29
35
  deleted = refs.delete(refkey)
30
36
  apply_reverse_delete(obj) if deleted
37
+ notify_changed
31
38
  deleted
32
39
  end
33
40
  end
data/lib/blendris/set.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Blendris
2
2
 
3
+ # RedisSet is a wrapper to the Redis SET data type.
4
+
3
5
  class RedisSet
4
6
 
5
7
  include RedisNode
@@ -8,6 +10,7 @@ module Blendris
8
10
  def initialize(key, options = {})
9
11
  @key = key.to_s
10
12
  @options = options
13
+ @on_change = options[:on_change]
11
14
  end
12
15
 
13
16
  def each
@@ -24,6 +27,8 @@ module Blendris
24
27
  end
25
28
 
26
29
  self
30
+ ensure
31
+ notify_changed
27
32
  end
28
33
 
29
34
  def get
@@ -32,6 +37,8 @@ module Blendris
32
37
 
33
38
  def delete(value)
34
39
  redis.srem key, value
40
+ ensure
41
+ notify_changed
35
42
  end
36
43
 
37
44
  end
@@ -1,5 +1,7 @@
1
1
  module Blendris
2
2
 
3
+ # RedisString is a wrapper to the Redis string data type.
4
+
3
5
  class RedisString
4
6
 
5
7
  include RedisNode
@@ -1,5 +1,7 @@
1
1
  module Blendris
2
2
 
3
+ # Define what types are built into blendris models.
4
+
3
5
  class Model
4
6
 
5
7
  type :string, RedisString
@@ -1,5 +1,7 @@
1
1
  module Blendris
2
2
 
3
+ # This module provides a few utility methods that are used throughout Blendris.
4
+
3
5
  module Utils
4
6
 
5
7
  # Method lifted from Rails.
data/spec/model_spec.rb CHANGED
@@ -48,6 +48,21 @@ describe Model do
48
48
  fav.food.should == @onion
49
49
  end
50
50
 
51
+ it "should have a valid list of fields" do
52
+
53
+ fields = %w( name foods )
54
+
55
+ @vegetable.fields.should == fields
56
+
57
+ end
58
+
59
+ it "should use its on_change field correctly" do
60
+ @apple.calories.should == 0
61
+ @apple.description = "good"
62
+ @apple.description = "bad"
63
+ @apple.calories.should == 2
64
+ end
65
+
51
66
  context "with single reference" do
52
67
 
53
68
  it "should reverse to a single reference" do
@@ -177,4 +192,27 @@ describe Model do
177
192
 
178
193
  end
179
194
 
195
+ it "should enumerable all foods" do
196
+ Food.count.should == 5
197
+
198
+ count = 0
199
+
200
+ Food.each do |food|
201
+ count += 1
202
+ food.should be_a(Food)
203
+ end
204
+
205
+ count.should == 5
206
+ end
207
+
208
+ it "should call its on_change method for all fields" do
209
+ o = OnChangeTestModel.create
210
+ lambda { o.string = "test" }.should raise_exception TestEx
211
+ lambda { o.integer = 123 }.should raise_exception TestEx
212
+ lambda { o.set = [1,2,3] }.should raise_exception TestEx
213
+ lambda { o.list = [1,5,8] }.should raise_exception TestEx
214
+ lambda { o.ref = o }.should raise_exception TestEx
215
+ lambda { o.refs << o }.should raise_exception TestEx
216
+ end
217
+
180
218
  end
@@ -5,7 +5,7 @@ describe "redis connection accessor" do
5
5
  it "should connect for reading and writing" do
6
6
  extend RedisAccessor
7
7
 
8
- testkey = prefix + "test-string"
8
+ testkey = "test-string"
9
9
 
10
10
  redis.get(testkey).should == nil
11
11
  redis.set(testkey, "foo").should == true
data/spec/spec_helper.rb CHANGED
@@ -29,6 +29,10 @@ module TestFixtures
29
29
  refs :friends, :class => Food, :reverse => :friends
30
30
  ref :something
31
31
 
32
+ on_change :description do
33
+ self.calories += 1
34
+ end
35
+
32
36
  end
33
37
 
34
38
  class Category < Model
@@ -58,14 +62,29 @@ module TestFixtures
58
62
  refs :sister_sites, :class => Website, :reverse => :sister_sites
59
63
  end
60
64
 
65
+ class OnChangeTestModel < Blendris::Model
66
+ key "fixed"
67
+
68
+ string :string
69
+ integer :integer
70
+ set :set
71
+ list :list
72
+ ref :ref
73
+ refs :refs
74
+
75
+ on_change { raise TestEx.new }
76
+ end
77
+
78
+ class TestEx < Exception; end
79
+
61
80
  end
62
81
 
63
82
  Spec::Runner.configure do |config|
64
83
  include TestFixtures
65
84
 
66
85
  config.before(:each) do
67
- RedisAccessor.prefix = "blendris-spec:"
68
- RedisAccessor.flush_keys
86
+ RedisAccessor.database = 11
87
+ RedisAccessor.flushdb
69
88
 
70
89
  @vegetable = Category.create("vegetable")
71
90
  @onion = Food.create("onion")
@@ -80,7 +99,7 @@ Spec::Runner.configure do |config|
80
99
  end
81
100
 
82
101
  config.after(:each) do
83
- RedisAccessor.flush_keys
102
+ RedisAccessor.flushdb
84
103
  end
85
104
  end
86
105
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blendris
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex McHale
@@ -30,7 +30,7 @@ cert_chain:
30
30
  V3OoCfxVK/4Dqg==
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2010-02-11 00:00:00 -06:00
33
+ date: 2010-02-15 00:00:00 -06:00
34
34
  default_executable:
35
35
  dependencies: []
36
36
 
@@ -64,7 +64,6 @@ files:
64
64
  - README.markdown
65
65
  - Rakefile
66
66
  - autotest/discover.rb
67
- - blendris.gemspec
68
67
  - lib/blendris.rb
69
68
  - lib/blendris/accessor.rb
70
69
  - lib/blendris/errors.rb
@@ -91,6 +90,7 @@ files:
91
90
  - spec/spec_helper.rb
92
91
  - spec/string_spec.rb
93
92
  - tasks/rspec.rake
93
+ - blendris.gemspec
94
94
  has_rdoc: true
95
95
  homepage: http://github.com/alexmchale/blendris
96
96
  licenses: []
metadata.gz.sig CHANGED
Binary file