ykk 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.markdown +4 -0
  2. data/VERSION +1 -1
  3. data/lib/ykk.rb +12 -6
  4. data/spec/ykk_spec.rb +22 -1
  5. metadata +2 -2
@@ -34,6 +34,10 @@ use as instance:
34
34
  YKK_A['foo'] = 'bar'
35
35
  puts YKK_A['foo'] #=> bar
36
36
 
37
+ sub directory:
38
+
39
+ YKK['bar/xxx'] = 'xxx' # store to bar/xxx
40
+
37
41
  License
38
42
  --------
39
43
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.2.0
data/lib/ykk.rb CHANGED
@@ -3,8 +3,6 @@ require 'yaml'
3
3
  require 'fileutils'
4
4
 
5
5
  class YKK
6
- @instance = self.new
7
-
8
6
  def self.method_missing(method, *args, &block)
9
7
  if @instance.respond_to?(method)
10
8
  @instance.__send__(method, *args, &block)
@@ -17,10 +15,11 @@ class YKK
17
15
  @instance.inspect
18
16
  end
19
17
 
20
- attr_accessor :dir
18
+ attr_accessor :dir, :partition_size
21
19
 
22
- def initialize(dir = nil)
23
- self.dir = dir
20
+ def initialize(options = {})
21
+ self.dir = options[:dir]
22
+ self.partition_size = options[:partition_size] || 0
24
23
  end
25
24
 
26
25
  def <<(value)
@@ -56,7 +55,12 @@ class YKK
56
55
  key = key.to_s
57
56
  raise ArgumentError, 'invalid key' unless key =~ /^[\w\/]+$/
58
57
  raise "dir is not specified" unless dir
59
- File.join(dir, key)
58
+ File.join(dir, *partition(key))
59
+ end
60
+
61
+ def partition(key)
62
+ return [key] if /\// =~ key || self.partition_size <= 0
63
+ key.scan(/.{1,#{partition_size}}/)
60
64
  end
61
65
 
62
66
  def key_gen(value)
@@ -69,4 +73,6 @@ class YKK
69
73
  }
70
74
  "YKK(#{pairs.join ', '})"
71
75
  end
76
+
77
+ @instance = self.new
72
78
  end
@@ -8,6 +8,20 @@ describe YKK do
8
8
  @tmpdir = Dir.tmpdir + '/ykk_test'
9
9
  FileUtils.rm_rf(@tmpdir)
10
10
  YKK.dir = @tmpdir
11
+ YKK.partition_size = 0
12
+ end
13
+
14
+ describe 'enable_partition = false' do
15
+ before do
16
+ YKK.partition_size = 2
17
+ end
18
+
19
+ it 'generates file path' do
20
+ YKK.file_of('foo').should == @tmpdir + '/fo/o'
21
+ YKK.file_of('fooooo').should == @tmpdir + '/fo/oo/oo'
22
+ YKK.file_of('/fooooo').should == @tmpdir + '/fooooo' # 先頭に / を付けると fooooo というキーを使いつつディレクトリを分割しないという裏技が可能に!
23
+ YKK.file_of('foo/bar').should == @tmpdir + '/foo/bar' # / を使うと任意の箇所でディレクトリ階層を分けることが可能に!
24
+ end
11
25
  end
12
26
 
13
27
  it 'generates file path' do
@@ -24,6 +38,13 @@ describe YKK do
24
38
  File.exists?(YKK.file_of('a/b')).should be_true
25
39
  end
26
40
 
41
+ it 'should raise error when bump filename and dirname' do
42
+ YKK['foo'] = 'foo'
43
+ lambda {
44
+ YKK['foo/bar'] = 'foo bar'
45
+ }.should raise_error(Errno::ENOTDIR)
46
+ end
47
+
27
48
  it 'should store data with "<<"' do
28
49
  key = YKK << {:a => 'b', :c => 'd'}
29
50
  YKK[key].should == {:a => 'b', :c => 'd'}
@@ -89,7 +110,7 @@ describe YKK do
89
110
  before do
90
111
  @tmpdir_for_foo = Dir.tmpdir + '/ykk_test_foo'
91
112
  FileUtils.rm_rf(@tmpdir_for_foo)
92
- @ykk = YKK.new(@tmpdir_for_foo)
113
+ @ykk = YKK.new(:dir => @tmpdir_for_foo)
93
114
  end
94
115
 
95
116
  it 'generates file path' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ykk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - jugyo
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-09 00:00:00 +09:00
12
+ date: 2010-01-15 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency