Class: MemoRack::Locals
- Inherits:
-
Hash
- Object
- Hash
- MemoRack::Locals
- Defined in:
- lib/memorack/locals.rb
Direct Known Subclasses
Class Method Summary collapse
-
.define_key(name, &block) ⇒ Object
キーにメソッドを登録する.
-
.value_method(name) ⇒ Object
値を取出すメソッド名.
Instance Method Summary collapse
-
#[](key) ⇒ Object
値を取出す.
-
#context ⇒ Object
コールバック登録用のハッシュ.
-
#context=(value) ⇒ Object
コールバック登録用のハッシュを代入する(merge用).
-
#define_key(name, &block) ⇒ Object
キーにコールバックを登録する.
-
#has_key?(key) ⇒ Boolean
キーがあるか?.
-
#merge(hash) ⇒ Object
マージ.
- #super_has_key? ⇒ Object
-
#value(name) ⇒ Object
値をメソッドから取出す.
-
#value_method?(name) ⇒ Boolean
値を取出すメソッドがあるか?.
Class Method Details
.define_key(name, &block) ⇒ Object
キーにメソッドを登録する
64 65 66 |
# File 'lib/memorack/locals.rb', line 64 def self.define_key(name, &block) define_method(value_method(name), &block) end |
.value_method(name) ⇒ Object
値を取出すメソッド名
59 60 61 |
# File 'lib/memorack/locals.rb', line 59 def self.value_method(name) :"value_#{name}" end |
Instance Method Details
#[](key) ⇒ Object
値を取出す
9 10 11 12 13 14 15 |
# File 'lib/memorack/locals.rb', line 9 def [](key) return super if super_has_key?(key) return context[key].call(self, key) if context[key] return value(key) if value_method?(key) super end |
#context ⇒ Object
コールバック登録用のハッシュ
34 35 36 |
# File 'lib/memorack/locals.rb', line 34 def context @context ||= {} end |
#context=(value) ⇒ Object
コールバック登録用のハッシュを代入する(merge用)
39 40 41 |
# File 'lib/memorack/locals.rb', line 39 def context=(value) @context = value end |
#define_key(name, &block) ⇒ Object
キーにコールバックを登録する
44 45 46 |
# File 'lib/memorack/locals.rb', line 44 def define_key(name, &block) context[name] = block end |
#has_key?(key) ⇒ Boolean
キーがあるか?
18 19 20 21 22 23 24 |
# File 'lib/memorack/locals.rb', line 18 def has_key?(key) return true if super return true if context.has_key?(key) return true if value_method?(key) false end |
#merge(hash) ⇒ Object
マージ
27 28 29 30 31 |
# File 'lib/memorack/locals.rb', line 27 def merge(hash) new_hash = super new_hash.context = context.dup new_hash end |
#super_has_key? ⇒ Object
6 |
# File 'lib/memorack/locals.rb', line 6 alias :super_has_key? has_key? |
#value(name) ⇒ Object
値をメソッドから取出す
54 55 56 |
# File 'lib/memorack/locals.rb', line 54 def value(name) send(Locals.value_method(name), name) end |
#value_method?(name) ⇒ Boolean
値を取出すメソッドがあるか?
49 50 51 |
# File 'lib/memorack/locals.rb', line 49 def value_method?(name) respond_to?(Locals.value_method(name)) end |