Module: MetaMongo
- Defined in:
- lib/meta_mongo.rb,
lib/meta_mongo/utils.rb,
lib/meta_mongo/version.rb
Defined Under Namespace
Modules: Utils
Classes: BadHash
Constant Summary
collapse
- VERSION =
"0.2.0"
Class Method Summary
collapse
Class Method Details
.check_missing_keys(obj, *keys) ⇒ Object
28
29
30
31
32
|
# File 'lib/meta_mongo.rb', line 28
def check_missing_keys(obj, *keys)
keys.each do |key|
missing_key(key) if !obj.key?(key)
end
end
|
.create_method(klass, method, block) ⇒ Object
18
19
20
|
# File 'lib/meta_mongo.rb', line 18
def create_method(klass, method, block)
klass.singleton_class.send(:define_method, :foo, &block)
end
|
.create_model(name) ⇒ Object
10
11
12
|
# File 'lib/meta_mongo.rb', line 10
def create_model(name)
Utils.create_class(name)
end
|
.include_module(klass, mod) ⇒ Object
22
23
24
25
26
|
# File 'lib/meta_mongo.rb', line 22
def include_module(klass, mod)
klass.class_eval do
include mod
end
end
|
.init(hash) ⇒ Object
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/meta_mongo.rb', line 62
def init(hash)
models = hash["models"]
missing_key("models") unless models
wrong_type("models") unless models.is_a?(Array)
models.each do |model|
check_missing_keys(model, "name", "attributes")
if !model["attributes"].is_a?(Array)
wrong_type("attributes")
end
attrs = parse_attributes(model["attributes"])
klass = MetaMongo.create_model(model["name"])
MetaMongo.include_module(klass, Mongoid::Document)
attrs.each do |att|
MetaMongo.run_method(klass, :field, att[:field], type: att[:type])
att[:vals].each do |val|
MetaMongo.run_method(klass, :validates, att[:field], val)
end
end
end
end
|
.missing_key(key) ⇒ Object
34
35
36
|
# File 'lib/meta_mongo.rb', line 34
def missing_key(key)
raise BadHash.new("Missing '#{key}' key")
end
|
.parse_attributes(attrs) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/meta_mongo.rb', line 42
def parse_attributes(attrs)
out = []
attrs.each do |my_attr|
check_missing_keys my_attr, "field", "name", "type", "validations"
out << {
name: my_attr["name"],
field: my_attr["field"],
type: Utils.to_class(my_attr["type"]),
vals: my_attr["validations"]
}
wrong_type("validations") if !out.last[:vals].is_a?(Array)
end
out
end
|
.run_method(klass, method, *args) ⇒ Object
14
15
16
|
# File 'lib/meta_mongo.rb', line 14
def run_method(klass, method, *args)
klass.send(method, *args)
end
|
.wrong_type(key) ⇒ Object
38
39
40
|
# File 'lib/meta_mongo.rb', line 38
def wrong_type(key)
raise BadHash.new("Invalid '#{key}' type")
end
|