Class: CometEditGenerator

Inherits:
CrailsEditGenerator show all
Defined in:
lib/metarecord/generators/comet/edit_generator.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from CrailsEditGenerator

#_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

Methods inherited from GeneratorBase

#_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_includesObject



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