Class: CometEditGenerator
Class Method Summary
collapse
Instance Method Summary
collapse
-
#_append_macro(str) ⇒ Object
-
#generate_json_methods(object) ⇒ Object
-
#has_many(type, name, options = {}) ⇒ Object
-
#has_many_fetch(type, name, options) ⇒ Object
-
#has_one(type, name, options = {}) ⇒ Object
-
#has_one_getter(type, name, options) ⇒ Object
-
#joined_has_one_edit(type, name, options) ⇒ Object
-
#property(type, name, options = {}) ⇒ Object
-
#validation(type, name, data) ⇒ Object
#_id_based_has_many, #_join_based_has_many, extension, #generate_edit_method, #generate_for, #generate_parameter_validator, #generate_relations, #has_one_setter, make_file, #rendering_edit?, #reset, #resource_name
#_append, _use_by_files, _use_by_models, #get_classname, #get_pluralized_name, #get_singular_name, #get_type, #get_value, #id_type, #indent, is_file_based?, #make_block, #null_id, #order_by, prepare, #ptr_type, #reset, #resource_name, #should_generate_for, #should_generate_from_manifest, #should_skip_on_client?, #unindent, use, #visibility
Class Method Details
.generate_includes ⇒ Object
136
137
138
139
140
141
142
143
144
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 136
def generate_includes
<<CPP
#ifndef #{CometDataGenerator.client_define}
#{super}
#else
# include <crails/odb/helpers.hpp>
#endif
CPP
end
|
.sourcefile_to_destfile(sourcefile) ⇒ Object
146
147
148
149
150
151
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 146
def sourcefile_to_destfile sourcefile
base = super sourcefile
basepath = Pathname.new base
parentdir = basepath.dirname.to_s + "/shared"
"#{parentdir}/#{basepath.basename}"
end
|
Instance Method Details
#_append_macro(str) ⇒ Object
4
5
6
7
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 4
def _append_macro str
@src ||= ""
@src += str + "\n"
end
|
#generate_json_methods(object) ⇒ Object
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 9
def generate_json_methods object
super
@rendering_from_json = true
_append_macro "#ifdef #{CometDataGenerator.client_define}"
_append "void #{@klassname}::from_json(Data data)"
_append "{"
@indent += 1
_append "id = data[\"id\"].defaults_to<#{id_type}>(#{null_id});"
_append "edit(data);"
@indent -= 1
_append "}"
_append_macro "#endif"
@rendering_from_json = false
end
|
#has_many(type, name, options = {}) ⇒ Object
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 113
def has_many type, name, options = {}
if options[:read_only] == true && rendering_edit?
options[:read_only] = false
_append_macro "#ifdef #{CometDataGenerator.client_define}"
super
_append_macro "#endif"
else
super
end
end
|
#has_many_fetch(type, name, options) ⇒ Object
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 75
def has_many_fetch type, name, options
tptr = ptr_type type
singular_name = get_singular_name name
_append_macro "#ifndef #{CometDataGenerator.client_define}"
super type, name, options
_append_macro "#else"
_append "Comet::Promise #{@klassname}::fetch_#{name}()"
_append "{"
@indent += 1
_append "std::vector<Comet::Promise> promises;\n"
_append "for (auto id : #{singular_name}_ids)"
_append "{"
@indent += 1
_append "#{tptr} model;\n"
_append "model->set_id(id);"
_append "promises.push_back(model->fetch());"
_append "#{name}.push_back(model);"
_append "#{name}_fetched = true;"
@indent -= 1
_append "}"
_append "return Comet::Promise::all(promises);"
@indent -= 1
_append "}"
_append_macro "#endif"
end
|
#has_one(type, name, options = {}) ⇒ Object
124
125
126
127
128
129
130
131
132
133
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 124
def has_one type, name, options = {}
if options[:read_only] == true && rendering_edit?
options[:read_only] = false
_append_macro "#ifdef #{CometDataGenerator.client_define}"
super
_append_macro "#endif"
else
super
end
end
|
#has_one_getter(type, name, options) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 34
def has_one_getter type, name, options
type = get_type type
tptr = ptr_type type
_append_macro "#ifndef #{CometDataGenerator.client_define}"
super
_append_macro "#else"
_append "#{tptr} #{@klassname}::get_#{name}() const"
_append "{"
_append " #{tptr} model = std::make_shared<#{type}>();"
_append " model->set_id(get_#{name}_id());"
_append " model->fetch();"
_append " return model;"
_append "}"
_append_macro "#endif"
end
|
#joined_has_one_edit(type, name, options) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 50
def joined_has_one_edit type, name, options
data_id = "data[\"#{name}_id\"]"
inline_data = "data[\"#{name}\"]"
_append_macro "#ifndef #{CometDataGenerator.client_define}"
super
_append_macro "#else"
_append "{"
_append " if (#{data_id} == 0)"
_append " set_#{name}(nullptr);"
_append " else if (!get_#{name}() || #{data_id} != get_#{name}()->get_id())"
_append " {"
_append " auto linked_resource = std::make_shared<#{type}>();"
_append " linked_resource->set_id(#{data_id}.as<#{id_type}>());"
_append " set_#{name}(linked_resource);"
_append " }"
_append "}"
_append "else if (#{inline_data}.exists())"
_append "{"
_append " auto linked_resource = std::make_shared<#{type}>();"
_append " linked_resource->from_json(#{inline_data});"
_append " set_#{name}(linked_resource);"
_append "}"
_append_macro "#endif"
end
|
#property(type, name, options = {}) ⇒ Object
102
103
104
105
106
107
108
109
110
111
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 102
def property type, name, options = {}
if options[:ready_only] == true && rendering_edit?
options[:read_only] = false
_append_macro "#ifdef #{CometDataGenerator.client_define}"
super
_append_macro "#endif"
else
super
end
end
|
#validation(type, name, data) ⇒ Object
24
25
26
27
28
29
30
31
32
|
# File 'lib/metarecord/generators/comet/edit_generator.rb', line 24
def validation type, name, data
if data[:uniqueness] == true
_append_macro "#ifndef #{CometDataGenerator.client_define}"
_append validate_uniqueness type, name
_append_macro "#endif"
data[:uniqueness] = false
end
super type, name, data
end
|