Class: MemoRack::Locals

Inherits:
Hash
  • Object
show all
Defined in:
lib/memorack/locals.rb

Direct Known Subclasses

AppLocals, BaseLocals, PageInfo

Class Method Summary collapse

Instance Method Summary collapse

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

#contextObject

コールバック登録用のハッシュ



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

キーがあるか?

Returns:

  • (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

値を取出すメソッドがあるか?

Returns:

  • (Boolean)


49
50
51
# File 'lib/memorack/locals.rb', line 49

def value_method?(name)
	respond_to?(Locals.value_method(name))
end