14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/active_window/active_tree_store/index.rb', line 14
def index_by(column)
by = %Q~by_#{column}~
raise "cannot index by #{column}, it is already applied" if public_instance_methods.include?("find_#{by}")
class_eval " def find_\#{by}!(val)\n find_\#{by}(val) || raise(\"cannot find by \#{column}: '\\\#{val}'\")\n end\n def find_\#{by}(val)\n if ref = has_\#{column}?(val)\n self.get_iter(ref.path)\n end\n end\n def has_\#{column}?(val)\n index_\#{by}[val]\n end\n def remember_iter_\#{by}(iter)\n val = iter[ self.class.column_id[:\#{column}] ]\n index_\#{by}[val] = reference_for(iter)\n end\n def index_\#{by}\n @index_\#{by} ||= {}\n end\n def add_with_index_\#{by}(*args)\n iter = add_without_index_\#{by}(*args)\n remember_iter_\#{by}(iter)\n iter\n end\n alias_method_chain :add, :index_\#{by}\n def remove_with_index_\#{by}(iter)\n index_\#{by}.delete iter[ self.class.column_id[:\#{column}] ]\n remove_without_index_\#{by}(iter)\n end\n alias_method_chain :remove, :index_\#{by}\n EOCODE\nend\n"
|