Class: CrailsQueryGenerator

Inherits:
GeneratorBase show all
Defined in:
lib/metarecord/generators/crails/query_generator.rb

Class Method Summary collapse

Instance Method Summary collapse

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, #should_generate_for, #should_generate_from_manifest, #should_skip_on_client?, sourcefile_to_destfile, #unindent, use, #visibility

Class Method Details

.extensionObject



72
# File 'lib/metarecord/generators/crails/query_generator.rb', line 72

def extension ; ".queries.hpp" ; end

.make_file(filename, data) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/metarecord/generators/crails/query_generator.rb', line 74

def make_file filename, data
  base = "lib/" + filename[0...-3]
  include = base + ".hpp"
  file_define = "_#{filename[0...-3].upcase.gsub "/", "_"}_QUERIES_HPP"
  source = <<CPP
#ifndef  #{file_define}
# define #{file_define}
#{(collect_includes_for filename).join "\n"}
#{data[:bodies].join "\n"}
#endif
CPP
end

Instance Method Details

#_join_based_has_many(type, name, options) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/metarecord/generators/crails/query_generator.rb', line 44

def _join_based_has_many type, name, options
  tptr = ptr_type type
  list_type = "std::list<#{tptr} >"
  singular_name = get_singular_name name

  outer_name = (name.split(/-|_|\s/).each do |i| i.capitalize! end).join
  query_object = "#{@finalklass.split("::").join}By#{outer_name}"

  _append <<CPP
#pragma db view pointer(std::shared_ptr) object(#{type}) object(#{@finalklass} inner)
struct #{query_object}
{
  std::string get_database_name() const { return #{type}().get_database_name(); }
  #{id_type} get_id() const { return self ? self->get_id() : #{null_id}; }
  std::shared_ptr<#{@finalklass}> self;
  operator #{@finalklass}() const { return *self; }

  #pragma db view pointer(std::shared_ptr) object(#{type}) object(#{@finalklass} inner)
  struct Count
  {
    #pragma db column("count(" + #{@finalklass}::id + ")")
    size_t value;
  };
};
CPP
end

#generate_for(object) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/metarecord/generators/crails/query_generator.rb', line 11

def generate_for object
  @headerfile = object[:header]
  unless @headerfile.nil?
    @modelname = object[:name].underscore
    @klassname = get_classname(object)
    @finalklass = object[:classname]
    reset
    self.instance_eval &object[:block]
    "# include \"#{@headerfile}\"\n" + @src
  else
    @src
  end
end

#has_many(type, name, options = {}) ⇒ Object



37
38
39
40
41
42
# File 'lib/metarecord/generators/crails/query_generator.rb', line 37

def has_many type, name, options = {}
  type = get_type type
  if options[:joined] != false
    _join_based_has_many type, name, options
  end
end

#has_one(type, name, options = {}) ⇒ Object



34
35
# File 'lib/metarecord/generators/crails/query_generator.rb', line 34

def has_one type, name, options = {}
end

#property(type, name, options = {}) ⇒ Object



28
29
# File 'lib/metarecord/generators/crails/query_generator.rb', line 28

def property type, name, options = {}
end

#resetObject



6
7
8
9
# File 'lib/metarecord/generators/crails/query_generator.rb', line 6

def reset
  super
  @required_params = []
end

#resource_name(name) ⇒ Object



25
26
# File 'lib/metarecord/generators/crails/query_generator.rb', line 25

def resource_name name
end

#validation(type, name, data) ⇒ Object



31
32
# File 'lib/metarecord/generators/crails/query_generator.rb', line 31

def validation type, name, data
end