Class: ObjCGenerator::ClassInterfaceGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/ObjCGenerator/class_interface_generator.rb,
lib/ObjCGenerator/class_implementation_generator.rb

Instance Method Summary collapse

Instance Method Details

#class_implementation(class_name, vars) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 12

def class_implementation (class_name, vars)

  incipit = generate_incipit()

  @import_other_classes       =  generate_import_other_classes(vars)
  @init_method                = generate_init_method(vars)
  @init_with_dict_method      =  generate_init_with_dict_method(vars)
  @class_init_with_dict       = generate_class_init_with_dict(class_name)
  @to_dict_method             = generate_to_dict_method(vars)
  @is_equals_method           = generate_is_equals_method(class_name)
  @is_equals_to_Object_method = generate_is_equals_to_Object_method(class_name, vars)
  @description_method         = generate_description_method( vars)
  @copy_method                = generate_copy_method( class_name, vars)
  @hash_method                = generate_hash_method( class_name, vars)

  class_implementation = File.read(template_path('class_implementation'))
  return incipit + ERB.new(class_implementation).result(binding)
end

#generate_class_header(class_name, variables) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/ObjCGenerator/class_interface_generator.rb', line 15

def generate_class_header (class_name, variables)
  incipit = generate_incipit()

  @class_predefinitions = generate_import_classes(variables)
  @class_name           = "@interface #{class_name} : NSObject <NSCopying>"
  @class_properties     = generate_class_properties(variables)
  @class_methods        = generate_class_methods(class_name)

  header_template      = File.read(template_path('class_header'))
  class_header =  ERB.new(header_template).result(binding)

  return incipit  + class_header

end

#generate_class_init_with_dict(class_name) ⇒ Object



58
59
60
61
62
63
64
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 58

def generate_class_init_with_dict class_name
  @lowercaseClassName = class_name.dup
  @lowercaseClassName[0] = @lowercaseClassName[0].chr.downcase

  template = File.read(template_path('method_class_init_with_dict'))
  return ERB.new(template).result(binding)
end

#generate_class_methods(class_name) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/ObjCGenerator/class_interface_generator.rb', line 39

def generate_class_methods class_name
  lowercase_class_name = class_name.dup
  lowercase_class_name[0] = lowercase_class_name[0].chr.downcase

  methods_definition_template      = File.read(template_path('methods_definition'))
  methods_definition =  ERB.new(methods_definition_template).result(binding)

end

#generate_class_properties(variables) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/ObjCGenerator/class_interface_generator.rb', line 29

def generate_class_properties(variables)
  result = []
  result = variables.map { |var| var.property_definition() }

  result = ObjCGenerator::vertical_align_vars( result, /( )/, 4)
  result = result.intersperse("\n")

  result.inject("") { |mem, var| mem << var }
end

#generate_copy_method(class_name, vars) ⇒ Object



104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 104

def generate_copy_method(class_name, vars)
  @lowercaseClassName = class_name.dup
  @lowercaseClassName[0] = @lowercaseClassName[0].chr.downcase
  newName = "#{@lowercaseClassName}Copy"
  @copy_rows = vars.map { |var| var.copyrow(newName) }
  @copy_rows = ObjCGenerator::vertical_align_vars @copy_rows, /( = )/, 0

  @class_name = class_name
  @varname = newName

  template = File.read(template_path('method_copy'))
  return ERB.new(template).result(binding)
end

#generate_description_method(vars) ⇒ Object



93
94
95
96
97
98
99
100
101
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 93

def generate_description_method vars
  @description_rows = vars.map { |var| "[NSString stringWithFormat:#{var.description_row}]," }
  @description_rows[-1] = @description_rows[-1][0...-1]
  @description_rows = ObjCGenerator::vertical_align_vars @description_rows, /( = )/, 0
  @description_rows = ObjCGenerator::vertical_align_vars @description_rows, /( , )/, 0

  template = File.read(template_path('method_description'))
  return ERB.new(template).result(binding)
end

#generate_hash_method(class_name, vars) ⇒ Object



119
120
121
122
123
124
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 119

def generate_hash_method(class_name, vars)
  @hash_rows = vars.map { |var| "#{var.hash_row};" }
  template = File.read(template_path('method_hash'))

  return ERB.new(template).result(binding)
end

#generate_import_classes(variables) ⇒ Object



48
49
50
51
# File 'lib/ObjCGenerator/class_interface_generator.rb', line 48

def generate_import_classes variables
  custom_objects = variables.select { | var | var.is_a? TypeCustomObject }
  custom_objects.inject("") { |mem, var| mem << "@class #{var.var_type};"  + "\n"}
end

#generate_import_other_classes(vars) ⇒ Object



31
32
33
34
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 31

def generate_import_other_classes vars
  custom_objects = vars.select { | var | var.is_a? TypeCustomObject }
  custom_objects.inject("") { |mem, var| mem << "#import \"#{var.var_type}.h\""  + "\n"}
end

#generate_incipitObject



8
9
10
11
12
13
# File 'lib/ObjCGenerator/class_interface_generator.rb', line 8

def generate_incipit()
  author = "Ignazioc"

  incipit_template = File.read(template_path('incipit'))
  ERB.new(incipit_template).result(binding)
end

#generate_init_method(vars) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 36

def generate_init_method vars
  @init_rows = vars.map { |var | "_#{var.varname} = #{var.default_value};" }
  @init_rows = ObjCGenerator::vertical_align_vars @init_rows, /(=)/, 0

  init_method = File.read(template_path('method_init'))
  return ERB.new(init_method).result(binding)
end

#generate_init_with_dict_method(vars) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 44

def generate_init_with_dict_method vars
  @initWithDictRows = vars.map { |var|
    conversion_type = var.conversion_value("val")
    "if ((val = dict[@\"#{var.varname}\"]))  { _#{var.varname} = #{conversion_type}; } else { NSLog(@\"Error initWithDict: Unable to find: #{var.varname}\"); }"
  }
  @initWithDictRows = ObjCGenerator::vertical_align_vars @initWithDictRows,  /(\)\))/, 1
  @initWithDictRows = ObjCGenerator::vertical_align_vars @initWithDictRows,  /( = )/, 2
  @initWithDictRows = ObjCGenerator::vertical_align_vars @initWithDictRows,  /( } )/, 0

  init_with_dict_method = File.read(template_path('method_init_with_dictionary'))
  return ERB.new(init_with_dict_method).result(binding)

end

#generate_is_equals_method(class_name) ⇒ Object



76
77
78
79
80
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 76

def generate_is_equals_method class_name
  @class_name = class_name
  template = File.read(template_path('method_is_equal'))
  return ERB.new(template).result(binding)
end

#generate_is_equals_to_Object_method(class_name, vars) ⇒ Object



82
83
84
85
86
87
88
89
90
91
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 82

def generate_is_equals_to_Object_method (class_name, vars)
  @class_name = class_name

  @is_equal_rows = vars.map { |var|  "if (#{var.inEquality_test("other")}) return NO;" }
  @is_equal_rows = ObjCGenerator::vertical_align_vars @is_equal_rows, /(  )/, 0
  @is_equal_rows = ObjCGenerator::vertical_align_vars @is_equal_rows, /(\) )/, 0

  template = File.read(template_path('method_is_equal_to'))
  return ERB.new(template).result(binding)
end

#generate_to_dict_method(vars) ⇒ Object



66
67
68
69
70
71
72
73
74
# File 'lib/ObjCGenerator/class_implementation_generator.rb', line 66

def generate_to_dict_method vars
  @to_ditc_rows = vars.map { |var|  var.to_dictionary_item + ","}
  @to_ditc_rows[-1] = @to_ditc_rows[-1][0...-1]
  @to_ditc_rows = ObjCGenerator::vertical_align_vars @to_ditc_rows, /( : )/, 0
  @to_ditc_rows = ObjCGenerator::vertical_align_vars @to_ditc_rows, /( \?: )/, 0

  template = File.read(template_path('method_to_dict'))
  return ERB.new(template).result(binding)
end

#template_path(filename) ⇒ Object



4
5
6
# File 'lib/ObjCGenerator/class_interface_generator.rb', line 4

def template_path filename
  File.join(File.expand_path("../..", File.dirname(__FILE__)), "templates/#{filename}.erb")
end