instance_storage 0.0.1 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d979de0479edc2e246b2dec5074f04aa378fd8e4
4
- data.tar.gz: 5ce55b2dfd968ceec11d720d0594e5d4fa52736e
3
+ metadata.gz: 2ab3fca4c92a0d5c88ff4fff5751feda09592ede
4
+ data.tar.gz: db4128fe44f81bd8895e9c9b3c38fe695047d034
5
5
  SHA512:
6
- metadata.gz: 612331ea0098cfc273c31b8aeae1e79a9332bc062fa0691aad3f00c327ccc0ea98944621a1eec6ee9907e0b5840bc0113ab82149c12abcb1ff4958916ca455ad
7
- data.tar.gz: 4cee8191d7c163848b0a1ebe2dc12c6c8a5fa3554da2ddb7d6e94034736ab5c81e5725865b51bc14d448d57ce1fa8c0ab5ec60bb4853e8ec1cfc20fd1ea3204d
6
+ metadata.gz: 747dabd4ac2cc2c925fc0127422bf350455d032ba79f9177b8cd29f8cef6ff4051ef9d9264923a93f714ad3046b9883e25e775feb7241d84cae51995d507a367
7
+ data.tar.gz: 6b590975c1845dba1ce2db36b315c35835332d7b57b384c1d5aefeb45f6375e02201a26728c64838a9453506faac5fc48c9e2555a177eafa400701713125bbec
@@ -11,8 +11,10 @@ module InstanceStorage
11
11
  alias to_sym name
12
12
 
13
13
  def self.included(klass)
14
- klass.extend InstanceStorageExtend
15
- klass.clear!
14
+ super
15
+ klass.class_eval do
16
+ extend InstanceStorageExtend
17
+ end
16
18
  end
17
19
 
18
20
  def initialize(name)
@@ -25,10 +27,15 @@ module InstanceStorage
25
27
  @name.to_s end
26
28
 
27
29
  module InstanceStorageExtend
30
+ def instances_dict
31
+ @instances ||= {} end
32
+
33
+ def storage_lock
34
+ @storage_lock ||= Mutex.new end
35
+
28
36
  # 定義されているインスタンスを全て削除する
29
37
  def clear!
30
- @instances = {}
31
- @storage_lock = Mutex.new end
38
+ @instances = @storage_lock = nil end
32
39
 
33
40
  # インスタンス _event_name_ を返す。既に有る場合はそのインスタンス、ない場合は新しく作って返す。
34
41
  # ==== Args
@@ -37,26 +44,26 @@ module InstanceStorage
37
44
  # Event
38
45
  def [](name)
39
46
  name_sym = name.to_sym
40
- if @instances.has_key?(name_sym)
41
- @instances[name_sym]
47
+ if instances_dict.has_key?(name_sym)
48
+ instances_dict[name_sym]
42
49
  else
43
- @storage_lock.synchronize{
44
- if @instances.has_key?(name_sym)
45
- @instances[name_sym]
50
+ storage_lock.synchronize{
51
+ if instances_dict.has_key?(name_sym)
52
+ instances_dict[name_sym]
46
53
  else
47
- @instances[name_sym] = self.new(name_sym) end } end end
54
+ instances_dict[name_sym] = self.new(name_sym) end } end end
48
55
 
49
56
  # このクラスのインスタンスを全て返す
50
57
  # ==== Return
51
58
  # インスタンスの配列(Array)
52
59
  def instances
53
- @instances.values end
60
+ instances_dict.values end
54
61
 
55
62
  # このクラスのインスタンスの名前を全て返す
56
63
  # ==== Return
57
64
  # インスタンスの名前の配列(Array)
58
65
  def instances_name
59
- @instances.keys end
66
+ instances_dict.keys end
60
67
 
61
68
  # 名前 _name_ に対応するインスタンスが存在するか否かを返す
62
69
  # ==== Args
@@ -64,7 +71,7 @@ module InstanceStorage
64
71
  # ==== Return
65
72
  # インスタンスが存在するなら真
66
73
  def instance_exist?(name)
67
- @instances.has_key? name.to_sym end
74
+ instances_dict.has_key? name.to_sym end
68
75
 
69
76
  # _name_ に対応するインスタンスが既にあれば真
70
77
  # ==== Args
@@ -72,9 +79,9 @@ module InstanceStorage
72
79
  # ==== Return
73
80
  # インスタンスかnil
74
81
  def instance(name)
75
- @instances[name.to_sym] end
82
+ instances_dict[name.to_sym] end
76
83
 
77
84
  def destroy(name)
78
- @instances.delete(name.to_sym) end
85
+ instances_dict.delete(name.to_sym) end
79
86
  end
80
87
  end
@@ -1,3 +1,3 @@
1
1
  module InstanceStorage
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -46,4 +46,12 @@ describe(InstanceStorage) do
46
46
  assert_equal(klass[:a], klass.instance(:a))
47
47
  end
48
48
 
49
+ it "should support inherited class" do
50
+ klass = Class.new do
51
+ include InstanceStorage end
52
+ child = Class.new(klass)
53
+ assert_same(child[:foo], child[:foo])
54
+ refute_same(child[:foo], klass[:foo])
55
+ end
56
+
49
57
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: instance_storage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toshiaki Asai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-29 00:00:00.000000000 Z
11
+ date: 2015-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler