Class: Divine::BabelHelperMethods
- Inherits:
-
Object
- Object
- Divine::BabelHelperMethods
- Defined in:
- lib/divine/code_generators/code_generator.rb
Overview
Support methods needed when generating source code files
Direct Known Subclasses
CsharpHelperMethods, JavaHelperMethods, JavascriptHelperMethods, RubyHelperMethods
Instance Method Summary collapse
-
#camelize(*str) ⇒ Object
Camelize comming args * Args : - *str -> list of arguments needed to be camelized.
-
#format_src(first_indent, following_indent, is, spc = " ") ⇒ Object
Handle indentation.
-
#get_fresh_variable_name ⇒ Object
Return new variable name.
-
#get_header_comment_text ⇒ Object
Return Header comments for generated files.
-
#sanity_check(ss) ⇒ Object
Sanity check the different revisions of the struct.
Instance Method Details
#camelize(*str) ⇒ Object
Camelize comming args
-
Args :
-
*str -> list of arguments needed to be camelized
76 77 78 79 |
# File 'lib/divine/code_generators/code_generator.rb', line 76 def camelize(*str) ss = str.map(&:to_s).join("_").split(/_/).flatten "#{ss.first.downcase}#{ss[1..-1].map(&:downcase).map(&:capitalize).join}" end |
#format_src(first_indent, following_indent, is, spc = " ") ⇒ Object
Handle indentation
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/divine/code_generators/code_generator.rb', line 48 def format_src(first_indent, following_indent, is, spc = " ") indent = "#{spc * first_indent}" is.flatten.compact.map do |i| case i when :indent indent << spc * following_indent nil when :deindent indent = indent[0..-(following_indent+1)] nil else "#{indent}#{i}" end end.compact.join("\n") end |
#get_fresh_variable_name ⇒ Object
Return new variable name
67 68 69 70 |
# File 'lib/divine/code_generators/code_generator.rb', line 67 def get_fresh_variable_name @vindex = (@vindex || 0xFF) + 1 return "var_#{@vindex.to_s(16)}" end |
#get_header_comment_text ⇒ Object
Return Header comments for generated files
84 85 86 87 88 89 90 91 |
# File 'lib/divine/code_generators/code_generator.rb', line 84 def get_header_comment_text return [ "", "-- DO NOT EDIT THIS FILE --", "", "This file was generated by Divine #{Divine::VERSION} (#{Time.now.to_s})", "", "-- DO NOT EDIT THIS FILE --", "" ] end |
#sanity_check(ss) ⇒ Object
Sanity check the different revisions of the struct
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/divine/code_generators/code_generator.rb', line 96 def sanity_check(ss) vos = ss.sort do |x,y| v1,v2 = [x,y].map(&:version) v1 <=> v2 end # Check version numbers unless vos.map(&:version).uniq.size == ss.size raise "Inconsistent version numbering for '#{ss.first.name}': #{vos.map(&:version).join(', ')}" end # Check that we don't have multiple variables with same name vos.each do |s| names = s.fields.group_by(&:name) names.each_pair do |k, v| raise "Multiple fields with same name '#{k}' is defined in '#{s.name}', version #{s.version}" unless v.size == 1 end end # Check types between versions check_field_types(vos) # Check for changed definitions check_freezed_structs(vos) # Return them ordered by version vos end |