io_shuten 0.0.1.dev3 → 0.0.1.dev4

Sign up to get free protection for your applications and to get access to all the features.
data/.rdoc_options ADDED
@@ -0,0 +1,20 @@
1
+ --- !ruby/object:RDoc::Options
2
+ encoding: UTF-8
3
+ static_path: []
4
+ rdoc_include:
5
+ - "README.md"
6
+ - "lib/**/*.rb"
7
+ charset: UTF-8
8
+ exclude:
9
+ force_output: true
10
+ force_update: true
11
+ hyperlink_all: false
12
+ line_numbers: true
13
+ main_page: "README.md"
14
+ markup: rdoc
15
+ op_dir: doc
16
+ show_hash: false
17
+ tab_width: 2
18
+ title: "IO::shuten 【五百::終点】"
19
+ visibility: :protected
20
+ webcvs:
data/.yardoc/checksums ADDED
@@ -0,0 +1,5 @@
1
+ lib/io_shuten.rb 4aa27c4e6f67fc666a1f8ed61b6cc6a9cd7f08d3
2
+ lib/io_shuten/base.rb fe06f9d82d6cf2c0eec94312fa7e5eab221fdacd
3
+ lib/io_shuten/mongo.rb 493851f95e94e2b0b6c805e63452e86a0d7eb624
4
+ lib/io_shuten/redis.rb 5a9fb88ca56df048bbfea7bcc114db5e5c9e54b7
5
+ lib/io_shuten/version.rb 6cf0a70de0c812e4b08661bfa445e2bff87ad190
Binary file
Binary file
data/.yardopts ADDED
@@ -0,0 +1,4 @@
1
+ --title 'IO::shuten 【五百::終点】'
2
+ --no-private
3
+ --plugin rspec
4
+ --plugin blame
data/Gemfile CHANGED
@@ -15,6 +15,12 @@ group :development, :test do
15
15
  gem "simplecov-rcov", :require => false
16
16
  gem "simplecov-csv", :require => false
17
17
 
18
+ gem "redcarpet"
19
+ gem "rdoc"
20
+ gem "yard"
21
+ gem "yard-rspec"
22
+ gem "yard-blame"
23
+
18
24
  gem "pry"
19
25
  gem "pry-doc"
20
26
  end
data/Gemfile.lock CHANGED
@@ -12,6 +12,7 @@ GEM
12
12
  bundler (~> 1.0)
13
13
  git (>= 1.2.5)
14
14
  rake
15
+ json (1.6.5)
15
16
  method_source (0.6.7)
16
17
  ruby_parser (>= 2.3.1)
17
18
  mongo (1.5.2)
@@ -26,6 +27,9 @@ GEM
26
27
  pry (>= 0.9.0)
27
28
  yard (>= 0.6.4)
28
29
  rake (0.9.2.2)
30
+ rdoc (3.12)
31
+ json (~> 1.4)
32
+ redcarpet (2.0.1)
29
33
  redis (2.2.2)
30
34
  rspec (2.8.0)
31
35
  rspec-core (~> 2.8.0)
@@ -48,6 +52,10 @@ GEM
48
52
  simplecov (>= 0.4.1)
49
53
  slop (2.1.0)
50
54
  yard (0.7.4)
55
+ yard-blame (0.0.1)
56
+ yard
57
+ yard-rspec (0.1)
58
+ yard
51
59
 
52
60
  PLATFORMS
53
61
  ruby
@@ -60,8 +68,13 @@ DEPENDENCIES
60
68
  pry
61
69
  pry-doc
62
70
  rake
71
+ rdoc
72
+ redcarpet
63
73
  redis (~> 2.2.2)
64
74
  rspec (~> 2.8.0)
65
75
  simplecov
66
76
  simplecov-csv
67
77
  simplecov-rcov
78
+ yard
79
+ yard-blame
80
+ yard-rspec
data/README.md CHANGED
@@ -34,6 +34,7 @@ In japanese `io` means *500* or *big amount*, `shū・ten` means *endpoint* (tra
34
34
 
35
35
  An in-memory storage system (handles simple StringIO objects).
36
36
 
37
+ Offers write-to-disk for single instance and all instances.
37
38
 
38
39
  ### IO_shuten::Redis
39
40
 
data/Rakefile CHANGED
@@ -7,6 +7,10 @@ require "jeweler"
7
7
  require "rspec"
8
8
  require "rspec/core/rake_task"
9
9
 
10
+ require 'rdoc/task'
11
+ require "yard"
12
+
13
+
10
14
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
11
15
  require "io_shuten/version"
12
16
 
@@ -50,6 +54,18 @@ end
50
54
 
51
55
 
52
56
 
57
+ RDoc::Task.new do |rdoc|
58
+ #rdoc.main = "README.md"
59
+ rdoc.rdoc_files.include("README.md", "lib/**/*.rb")
60
+ end
61
+
62
+ YARD::Rake::YardocTask.new do |t|
63
+ t.files = ['lib/**/*.rb']
64
+ #t.options = ['--any', '--extra', '--opts']
65
+ end
66
+
67
+
68
+
53
69
  desc "Starts IRB with env"
54
70
  task :irb do
55
71
  sh "irb -I lib -r io_shuten"
data/io_shuten.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "io_shuten"
8
- s.version = "0.0.1.dev3"
8
+ s.version = "0.0.1.dev4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Christoph Grabo"]
@@ -18,10 +18,15 @@ Gem::Specification.new do |s|
18
18
  "README.md"
19
19
  ]
20
20
  s.files = [
21
+ ".rdoc_options",
21
22
  ".rspec",
22
23
  ".rvmrc",
23
24
  ".simplecov",
24
25
  ".travis.yml",
26
+ ".yardoc/checksums",
27
+ ".yardoc/objects/root.dat",
28
+ ".yardoc/proxy_types",
29
+ ".yardopts",
25
30
  "Gemfile",
26
31
  "Gemfile.lock",
27
32
  "LICENSE",
@@ -60,6 +65,11 @@ Gem::Specification.new do |s|
60
65
  s.add_development_dependency(%q<simplecov>, [">= 0"])
61
66
  s.add_development_dependency(%q<simplecov-rcov>, [">= 0"])
62
67
  s.add_development_dependency(%q<simplecov-csv>, [">= 0"])
68
+ s.add_development_dependency(%q<redcarpet>, [">= 0"])
69
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
70
+ s.add_development_dependency(%q<yard>, [">= 0"])
71
+ s.add_development_dependency(%q<yard-rspec>, [">= 0"])
72
+ s.add_development_dependency(%q<yard-blame>, [">= 0"])
63
73
  s.add_development_dependency(%q<pry>, [">= 0"])
64
74
  s.add_development_dependency(%q<pry-doc>, [">= 0"])
65
75
  else
@@ -73,6 +83,11 @@ Gem::Specification.new do |s|
73
83
  s.add_dependency(%q<simplecov>, [">= 0"])
74
84
  s.add_dependency(%q<simplecov-rcov>, [">= 0"])
75
85
  s.add_dependency(%q<simplecov-csv>, [">= 0"])
86
+ s.add_dependency(%q<redcarpet>, [">= 0"])
87
+ s.add_dependency(%q<rdoc>, [">= 0"])
88
+ s.add_dependency(%q<yard>, [">= 0"])
89
+ s.add_dependency(%q<yard-rspec>, [">= 0"])
90
+ s.add_dependency(%q<yard-blame>, [">= 0"])
76
91
  s.add_dependency(%q<pry>, [">= 0"])
77
92
  s.add_dependency(%q<pry-doc>, [">= 0"])
78
93
  end
@@ -87,6 +102,11 @@ Gem::Specification.new do |s|
87
102
  s.add_dependency(%q<simplecov>, [">= 0"])
88
103
  s.add_dependency(%q<simplecov-rcov>, [">= 0"])
89
104
  s.add_dependency(%q<simplecov-csv>, [">= 0"])
105
+ s.add_dependency(%q<redcarpet>, [">= 0"])
106
+ s.add_dependency(%q<rdoc>, [">= 0"])
107
+ s.add_dependency(%q<yard>, [">= 0"])
108
+ s.add_dependency(%q<yard-rspec>, [">= 0"])
109
+ s.add_dependency(%q<yard-blame>, [">= 0"])
90
110
  s.add_dependency(%q<pry>, [">= 0"])
91
111
  s.add_dependency(%q<pry-doc>, [">= 0"])
92
112
  end
data/lib/io_shuten.rb CHANGED
@@ -1,11 +1,15 @@
1
1
  # encoding: utf-8
2
+
3
+ # Namespace of the IO implementations
2
4
  module IO_shuten; end
3
5
 
4
6
  require "io_shuten/base"
5
7
  require "io_shuten/redis"
6
8
  require "io_shuten/mongo"
7
9
 
8
- # handy and short aliases
9
- IOM = IO::Mongo = IO_shuten::Mongo
10
- IOR = IO::Redis = IO_shuten::Redis
10
+ # IO::Mongo for a more intuitive usage
11
+ IO::Mongo = IO_shuten::Mongo
12
+
13
+ # IO::Redis for a more intuitive usage
14
+ IO::Redis = IO_shuten::Redis
11
15
 
@@ -1,21 +1,53 @@
1
1
  # encoding: utf-8
2
+
2
3
  module IO_shuten
4
+ # IO_shuten::Base is the in-memory implementation and parent class for other implementations.
3
5
  class Base
4
6
 
7
+ # Exception if a node object was not found
5
8
  class NodeNotFoundError < StandardError; end
6
- class NodeNameError < StandardError; end
7
- class NotImplementedYet < StandardError; end
9
+ # Exception if the node object name was of wrong type
10
+ class NodeNameError < StandardError; end
11
+ # Exception if file was not found
12
+ class FileNotFoundError < StandardError; end
13
+ # Exception if something went wrong on file handling
14
+ class FileAccessError < StandardError; end
15
+ # Exception for not yet implemented methods (stubs)
16
+ class NotYetImplemented < StandardError
17
+ # @private
18
+ def initialize callee = nil, pos = nil
19
+ msg = if callee
20
+ "Method :#{callee} is not (yet) supported. #{pos ? ''+pos+'' : ''}"
21
+ else
22
+ "The method is not (yet) supported."
23
+ end
24
+ super msg
25
+ end
26
+ end
8
27
 
28
+ # Storage of current Base instances of the running process
29
+ # @return [Array]
9
30
  @@instances = []
10
31
 
11
- attr_reader :object_name
12
- attr :container, :container_size
13
-
32
+ # Name of current node instance
33
+ # @return [String]
34
+ attr_reader :object_name
35
+
36
+ # holds StringIO object
37
+ # @return [StringIO]
38
+ attr :container
39
+
40
+ # Creates a new Base object and stores it in the pool
41
+ #
42
+ # @param [String] object_name Name of the node object (container)
43
+ # @param [Symbol] object_name also a symbol is allowed
44
+ # @param *args (not used)
45
+ # @return [Base]
46
+ # @raise [NodeNameError]
14
47
  def initialize(object_name = nil, *args)
15
48
  if [String,Symbol,NilClass].include?(object_name.class)
16
49
  @object_name = object_name
17
50
  @container = StringIO.new("","w+")
18
- @container_size = @container.size
19
51
 
20
52
  @@instances << self unless @@instances.include?(self)
21
53
  else
@@ -25,14 +57,24 @@ module IO_shuten
25
57
 
26
58
  class << self
27
59
 
60
+ # @return [Array] current instances
28
61
  def instances
29
62
  @@instances
30
63
  end
31
64
 
32
- def purge_instances
65
+ # Deletes ALL instances in the pool!
66
+ #
67
+ # @return [Boolean]
68
+ def purge_instances!
33
69
  @@instances = []
70
+ true
34
71
  end
35
72
 
73
+ # Deletes a single instance of the pool
74
+ #
75
+ # @param [Base] object
76
+ # @param [String] name of object as String
77
+ # @param [Symbol] name of object as Symbol
36
78
  def delete_instance object_name_or_instance
37
79
  @@instances.delete_if do |object|
38
80
  (object_name_or_instance.is_a?(Symbol) && object.object_name == object_name_or_instance) ||
@@ -41,12 +83,16 @@ module IO_shuten
41
83
  end
42
84
  end
43
85
 
86
+ # @return [Base] itself on success if no block was given
87
+ # @return [Boolean] true on success if block was given
88
+ # @raise [NodeNotFoundError]
44
89
  def open object_name, *args
45
90
  if Base.exists? object_name
46
91
  if block_given?
47
92
  base = Base.send :load, object_name
48
93
  yield(base)
49
94
  base.close
95
+ true
50
96
 
51
97
  else
52
98
  Base.send :load, object_name
@@ -57,13 +103,16 @@ module IO_shuten
57
103
  end
58
104
  end
59
105
 
60
- def exists? object_name
106
+ # @return [Boolean]
107
+ def exists? o_name = nil
108
+ o_name ||= self.object_name
61
109
  false
62
110
  end
63
111
  alias_method :exist?, :exists?
64
112
 
65
113
  private
66
114
 
115
+ # @private
67
116
  def load object_name
68
117
  obj = Base.new object_name
69
118
  obj.string ""
@@ -73,23 +122,68 @@ module IO_shuten
73
122
 
74
123
  end
75
124
 
76
- def respond_to_missing? sym, include_private = true
77
- unless object_respond_to?(sym, include_private)
78
- raise NotImplementedYet, "Method :#{sym} is not (yet) supported by #{self.class} or #{self.container.class}."
125
+ ### instance methods
126
+
127
+ # @return [Base] itself on success
128
+ # @raise [FileNotFoundError]
129
+ def load_from_file file_name = nil
130
+ file_name ||= self.object_name
131
+ if file_exists? file_name
132
+ self.container.string = File.read(file_name)
133
+ self
79
134
  else
80
- true
135
+ raise FileNotFoundError, self.object_name
136
+ end
137
+ end
138
+
139
+ # @return [Base] itself on success
140
+ # @raise [FileAccessError]
141
+ def save_to_file file_name = nil
142
+ file_name ||= self.object_name
143
+ begin
144
+ File.open(file_name, 'w') do |fh|
145
+ fh.write(self.container.string)
146
+ end
147
+ self
148
+ rescue Exception => e
149
+ raise FileAccessError, "Reason: #{e.message}"
150
+ end
151
+ end
152
+
153
+ # @return [Boolean]
154
+ def file_exists? file_name = nil
155
+ file_name ||= self.object_name
156
+ File.exists?(file_name)
157
+ end
158
+ alias_method :file_exist?, :file_exists?
159
+
160
+ # @private
161
+ def respond_to? sym
162
+ !!self.methods.include?(sym) || respond_to_missing?(sym)
163
+ end
164
+
165
+ # @private
166
+ def respond_to_missing? sym, include_private = true
167
+ !!container_respond_to?(sym, include_private)
168
+ end
169
+
170
+ # @private
171
+ def method_missing method, *args, &block
172
+ if respond_to_missing? method
173
+ @container.send method, *args, &block
81
174
  end
82
175
  end
83
176
 
84
177
  private
85
178
 
86
- def object_respond_to? sym, include_private
87
- @container.respond_to? sym, include_private
179
+ # @private
180
+ def not_yet_implemented! callee = nil, pos = nil
181
+ raise NotYetImplemented, callee, pos
88
182
  end
89
183
 
90
- def set_object_content object_content
91
- @container.string = object_content.to_s
92
- @container_size = @container.size
184
+ # @private
185
+ def container_respond_to? sym, include_private
186
+ @container.respond_to? sym, include_private
93
187
  end
94
188
 
95
189
  end
@@ -1,5 +1,9 @@
1
1
  # encoding: utf-8
2
+
2
3
  module IO_shuten
4
+ # Implementation of the MongoDB storage
5
+ #
6
+ # @todo Needs two backends (default database interface and GridFS)!
3
7
  class Mongo < IO_shuten::Base
4
8
 
5
9
  end
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
+
2
3
  module IO_shuten
4
+ # Implementation of the Redis storage
3
5
  class Redis < IO_shuten::Base
4
6
 
5
7
  end
@@ -1,4 +1,5 @@
1
1
  # encoding: utf-8
2
2
  module IO_shuten
3
- VERSION = [0,0,1,'dev3'].join('.')
3
+ # @private
4
+ VERSION = [0,0,1,'dev4'].join('.')
4
5
  end
@@ -4,7 +4,12 @@ require "logger"
4
4
 
5
5
  describe "Logger" do
6
6
  it "accepts an IO_shuten::Base as logdev" do
7
- logdev = IO_shuten::Base.new("logdev")
7
+ logdev = IO_shuten::Base.new(:logdev)
8
8
  logger = Logger.new(logdev)
9
+ logger.info "Foo log."
10
+ logger.info "Test message."
11
+ logger.info "Bar log."
12
+
13
+ logdev.string.should =~ /Test message/
9
14
  end
10
15
  end
@@ -35,16 +35,16 @@ describe Base do
35
35
  end
36
36
 
37
37
  describe "class based memory storage" do
38
- describe :purge_instances do
38
+ describe :purge_instances! do
39
39
  it "purges all instances" do
40
- Base.purge_instances
40
+ Base.purge_instances!
41
41
  Base.instances.should have(0).items
42
42
  end
43
43
  end
44
44
 
45
45
  describe :instances do
46
46
  it "retrieves all @@instances" do
47
- Base.purge_instances
47
+ Base.purge_instances!
48
48
  objects = %w[first second last]
49
49
  objects.each do |object_name|
50
50
  Base.new(object_name)
@@ -56,7 +56,7 @@ describe Base do
56
56
 
57
57
  describe :delete_instance do
58
58
  before do
59
- Base.purge_instances
59
+ Base.purge_instances!
60
60
  @object_names = %w[first second last]
61
61
  @objects = @object_names.inject([]) do |store, object_name|
62
62
  store << Base.new(object_name)
@@ -75,7 +75,7 @@ describe Base do
75
75
  end
76
76
 
77
77
  it "removes an instance by symbolized name from store" do
78
- Base.purge_instances
78
+ Base.purge_instances!
79
79
  @object_names = %w[first second last].map(&:to_sym)
80
80
  @objects = @object_names.inject([]) do |store, object_name|
81
81
  store << Base.new(object_name)
@@ -86,12 +86,55 @@ describe Base do
86
86
  end
87
87
 
88
88
  end
89
- end
89
+
90
+ describe "batch tasks" do
91
+
92
+ before do
93
+ Base.purge_instances!
94
+
95
+ @tmp_path = File.expand_path("../../../tmp", __FILE__)
96
+
97
+ Dir.mkdir(@tmp_path) unless File.exists?(@tmp_path)
98
+
99
+ example_content = "This is a dummy file!"
100
+
101
+ @file_names = %w[file1 file2 file3]
102
+
103
+ @file_names.each do |file_name|
104
+ File.open("#{@tmp_path}/#{file_name}",'w') do |fh|
105
+ fh.puts example_content
106
+ end
107
+ end
108
+ end
109
+
110
+ after do
111
+ @file_names.each do |file_name|
112
+ File.unlink("#{@tmp_path}/#{file_name}") if File.exists?("#{@tmp_path}/#{file_name}")
113
+ end
114
+ Base.purge_instances!
115
+ end
116
+
117
+ describe :save_instances do
118
+ it "writes all instances to disk" do
119
+ pending
120
+ end
121
+ end
122
+
123
+ describe :load_instances do
124
+ it "loads instances from disk" do
125
+ pending
126
+ end
127
+ end
128
+
129
+ end
130
+
131
+
132
+ end # class based memory storage
90
133
 
91
134
  describe :open do
92
135
 
93
136
  before do
94
- Base.purge_instances
137
+ Base.purge_instances!
95
138
  end
96
139
 
97
140
  context "without any args" do
@@ -128,16 +171,12 @@ describe Base do
128
171
 
129
172
  context "with name and block" do
130
173
  it "opens object, yields the block and closes object" do
131
-
174
+ pending
132
175
  end
133
176
  end
134
177
 
135
178
  end # open
136
179
 
137
- describe :close do
138
- it :TODO
139
- end
140
-
141
180
  end # Class Methods
142
181
 
143
182
  describe "Instance Methods" do
@@ -168,6 +207,118 @@ describe Base do
168
207
  end
169
208
  end
170
209
 
210
+ describe "method stub with #not_yet_implemented! call" do
211
+ it "raises NotYetImplemented" do
212
+ ios = Base.new
213
+ ios.instance_eval do
214
+ def not_implemented_method
215
+ not_yet_implemented! __method__, "#{__FILE__}:#{__LINE__}"
216
+ end
217
+ end
218
+ expect { ios.not_implemented_method }.to raise_error(Base::NotYetImplemented)
219
+ end
220
+ end
221
+
222
+ describe "loading and writing" do
223
+
224
+ before do
225
+ @tmp_path = File.expand_path("../../../tmp", __FILE__)
226
+ @tmp_true_file = "#{@tmp_path}/base.exist_true.txt"
227
+ @tmp_save_file = "#{@tmp_path}/base.save_true.txt"
228
+ @tmp_false_file = "#{@tmp_path}/base.exist_false.txt"
229
+ @denied_path = "/invalid_file.txt"
230
+
231
+ Dir.mkdir(@tmp_path) unless File.exists?(@tmp_path)
232
+ f = File.new(@tmp_true_file,'w')
233
+ f.puts("true content")
234
+ f.close
235
+ end
236
+
237
+ after do
238
+ File.unlink(@tmp_true_file)
239
+ File.unlink(@tmp_save_file) if File.exists?(@tmp_save_file)
240
+ Base.purge_instances!
241
+ end
242
+
243
+ describe :file_exists? do
244
+
245
+ it "returns true if path is a file" do
246
+ ios = Base.new(@tmp_true_file)
247
+ ios.file_exists?.should be_true
248
+ end
249
+
250
+ it "returns true if custom path is a file" do
251
+ ios = Base.new(:different_name)
252
+ ios.file_exists?(@tmp_true_file).should be_true
253
+ end
254
+
255
+ it "returns false if path is not a file" do
256
+ ios = Base.new(@tmp_false_file)
257
+ ios.file_exists?.should be_false
258
+ end
259
+
260
+ end
261
+
262
+ describe :load_from_file do
263
+
264
+ context "file exists" do
265
+
266
+ it "reads file and stores content into container" do
267
+ ios = Base.new(@tmp_true_file)
268
+ ios.load_from_file.should be_true
269
+ ios.string.should =~ /true content/
270
+ end
271
+
272
+ it "reads file with custom name" do
273
+ ios = Base.new(:different_name)
274
+ ios.load_from_file(@tmp_true_file).should be_true
275
+ ios.string.should =~ /content/
276
+ end
277
+
278
+ end
279
+
280
+ context "file does not exist" do
281
+ it "raises FileNotFoundError" do
282
+ ios = Base.new(@tmp_false_file)
283
+ expect { ios.load_from_file }.to raise_error(Base::FileNotFoundError)
284
+ end
285
+ end
286
+
287
+ end
288
+
289
+ describe :save_to_file do
290
+
291
+ context "file path accessible" do
292
+ context "with container name as default" do
293
+ it "writes container into the file" do
294
+ ios = Base.new(@tmp_save_file)
295
+ ios.puts = "Test string"
296
+ ios.save_to_file.should be_true
297
+ end
298
+ end
299
+
300
+ context "with custom name" do
301
+ it "writes container into the file" do
302
+ ios = Base.new(:different_name)
303
+ ios.puts = "Test string"
304
+ ios.save_to_file(@tmp_save_file).should be_true
305
+ end
306
+ end
307
+
308
+ end
309
+
310
+ context "path not accessible" do
311
+ it "raises FileAccessError with corresponding reason" do
312
+ ios = Base.new(@denied_path)
313
+ ios.puts = "Test string"
314
+ expect { ios.save_to_file }.to raise_error(Base::FileAccessError, /Reason/)
315
+ end
316
+ end
317
+
318
+ end
319
+
320
+ end # loading and writing
321
+
171
322
  end
172
323
 
173
324
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: io_shuten
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.dev3
4
+ version: 0.0.1.dev4
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-01-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hiredis
16
- requirement: &23011240 !ruby/object:Gem::Requirement
16
+ requirement: &21837220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.4
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *23011240
24
+ version_requirements: *21837220
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: redis
27
- requirement: &23010760 !ruby/object:Gem::Requirement
27
+ requirement: &21834920 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.2.2
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *23010760
35
+ version_requirements: *21834920
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bson_ext
38
- requirement: &23010280 !ruby/object:Gem::Requirement
38
+ requirement: &21849760 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.5.2
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *23010280
46
+ version_requirements: *21849760
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mongo
49
- requirement: &23009800 !ruby/object:Gem::Requirement
49
+ requirement: &21847480 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.5.2
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *23009800
57
+ version_requirements: *21847480
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &23009320 !ruby/object:Gem::Requirement
60
+ requirement: &21845600 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *23009320
68
+ version_requirements: *21845600
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: jeweler
71
- requirement: &23008840 !ruby/object:Gem::Requirement
71
+ requirement: &21844520 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *23008840
79
+ version_requirements: *21844520
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec
82
- requirement: &23008360 !ruby/object:Gem::Requirement
82
+ requirement: &22283120 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 2.8.0
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *23008360
90
+ version_requirements: *22283120
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: simplecov
93
- requirement: &23007880 !ruby/object:Gem::Requirement
93
+ requirement: &22281600 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *23007880
101
+ version_requirements: *22281600
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: simplecov-rcov
104
- requirement: &23007400 !ruby/object:Gem::Requirement
104
+ requirement: &22279920 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *23007400
112
+ version_requirements: *22279920
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: simplecov-csv
115
- requirement: &23006920 !ruby/object:Gem::Requirement
115
+ requirement: &22277620 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,65 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *23006920
123
+ version_requirements: *22277620
124
+ - !ruby/object:Gem::Dependency
125
+ name: redcarpet
126
+ requirement: &22275260 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *22275260
135
+ - !ruby/object:Gem::Dependency
136
+ name: rdoc
137
+ requirement: &22290240 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *22290240
146
+ - !ruby/object:Gem::Dependency
147
+ name: yard
148
+ requirement: &22288860 !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: *22288860
157
+ - !ruby/object:Gem::Dependency
158
+ name: yard-rspec
159
+ requirement: &22287200 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ type: :development
166
+ prerelease: false
167
+ version_requirements: *22287200
168
+ - !ruby/object:Gem::Dependency
169
+ name: yard-blame
170
+ requirement: &22285220 !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: *22285220
124
179
  - !ruby/object:Gem::Dependency
125
180
  name: pry
126
- requirement: &23006440 !ruby/object:Gem::Requirement
181
+ requirement: &22284360 !ruby/object:Gem::Requirement
127
182
  none: false
128
183
  requirements:
129
184
  - - ! '>='
@@ -131,10 +186,10 @@ dependencies:
131
186
  version: '0'
132
187
  type: :development
133
188
  prerelease: false
134
- version_requirements: *23006440
189
+ version_requirements: *22284360
135
190
  - !ruby/object:Gem::Dependency
136
191
  name: pry-doc
137
- requirement: &23005960 !ruby/object:Gem::Requirement
192
+ requirement: &22297540 !ruby/object:Gem::Requirement
138
193
  none: false
139
194
  requirements:
140
195
  - - ! '>='
@@ -142,7 +197,7 @@ dependencies:
142
197
  version: '0'
143
198
  type: :development
144
199
  prerelease: false
145
- version_requirements: *23005960
200
+ version_requirements: *22297540
146
201
  description: IO::shuten – Use databases as IO handler like you would do with files
147
202
  and streams.
148
203
  email:
@@ -154,10 +209,15 @@ extra_rdoc_files:
154
209
  - LICENSE.de
155
210
  - README.md
156
211
  files:
212
+ - .rdoc_options
157
213
  - .rspec
158
214
  - .rvmrc
159
215
  - .simplecov
160
216
  - .travis.yml
217
+ - .yardoc/checksums
218
+ - .yardoc/objects/root.dat
219
+ - .yardoc/proxy_types
220
+ - .yardopts
161
221
  - Gemfile
162
222
  - Gemfile.lock
163
223
  - LICENSE
@@ -190,7 +250,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
250
  version: '0'
191
251
  segments:
192
252
  - 0
193
- hash: 2524218372988733480
253
+ hash: -2605549533017634266
194
254
  required_rubygems_version: !ruby/object:Gem::Requirement
195
255
  none: false
196
256
  requirements: