Class: Generate
- Inherits:
-
Object
- Object
- Generate
- Defined in:
- lib/crust/generate.rb
Instance Attribute Summary collapse
-
#file_name ⇒ Object
Returns the value of attribute file_name.
Instance Method Summary collapse
- #extends_class(data) ⇒ string
- #extract_properties(properties) ⇒ array
- #extract_variable_names(keys) ⇒ array
- #generate_files ⇒ array
- #get_array_converters(properties) ⇒ array
- #get_contains(properties) ⇒ array
- #get_import(data) ⇒ string
-
#initialize(file_name, data, base_only) ⇒ Generate
constructor
A new instance of Generate.
- #match_type(in_type) ⇒ string
- #retained(type) ⇒ boolean
- #snake_to_camel(file_name) ⇒ string
Constructor Details
#initialize(file_name, data, base_only) ⇒ Generate
7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/crust/generate.rb', line 7 def initialize(file_name, data, base_only) @file_name = file_name @data = data @base_only = base_only @generated_class = self.snake_to_camel(File.basename(file_name, '.json')) @properties = self.extract_properties(data['properties']) @variable_names = self.extract_variable_names(data['properties'].keys) @extends_class = self.extends_class(data) @import = self.get_import(data) @contains_classes = self.get_contains(data['properties']) @array_converters = self.get_array_converters(data['properties']) end |
Instance Attribute Details
#file_name ⇒ Object
Returns the value of attribute file_name.
5 6 7 |
# File 'lib/crust/generate.rb', line 5 def file_name @file_name end |
Instance Method Details
#extends_class(data) ⇒ string
93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/crust/generate.rb', line 93 def extends_class(data) if data['extends'].to_s == '' 'MTLModel<MTLJSONSerializing>' else if data['extends'].is_a? String '_' << self.snake_to_camel(Pathname.new(data['extends']).basename('.json').to_s) else '_' << self.snake_to_camel(Pathname.new(data['extends']['$ref']).basename('.json').to_s) end end end |
#extract_properties(properties) ⇒ array
123 124 125 126 127 128 129 130 131 132 |
# File 'lib/crust/generate.rb', line 123 def extract_properties(properties) extracted_properties = [] properties.each do |name, type_info| type = match_type(type_info['type']) extracted_properties << "@property(nonatomic#{self.retained(type) ? ', copy' : ''}, readonly) #{type} #{self.retained(type) ? '*' : ''}#{name};" end extracted_properties end |
#extract_variable_names(keys) ⇒ array
107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/crust/generate.rb', line 107 def extract_variable_names(keys) extracted_variables_names = [] if keys.length > 1 last = keys.pop keys.each { |key| extracted_variables_names << "@\"#{key}\" : @\"#{key}\"," } extracted_variables_names << "@\"#{last}\" : @\"#{last}\"" else extracted_variables_names << "@\"#{keys[0]}\" : @\"#{keys[0]}\"" end extracted_variables_names end |
#generate_files ⇒ array
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/crust/generate.rb', line 23 def generate_files output = {} output["_#{@generated_class}.h"] = Mustache.render(File.read(File.dirname(__FILE__) + '/tpl/base_header.mustache'), :class_name => @generated_class, :extends_class => @extends_class, :import => @import, :description => @data['description'], :properties => @properties) output["_#{@generated_class}.m"] = Mustache.render(File.read(File.dirname(__FILE__) + '/tpl/base_implementation.mustache'), :class_name => @generated_class, :properties => @variable_names, :extends => !@import.nil?, :contains => @contains_classes, :array_converters => @array_converters) unless @base_only output["#{@generated_class}.h"] = Mustache.render(File.read(File.dirname(__FILE__) + '/tpl/header.mustache'), :class_name => @generated_class) output["#{@generated_class}.m"] = Mustache.render(File.read(File.dirname(__FILE__) + '/tpl/implementation.mustache'), :class_name => @generated_class) end output end |
#get_array_converters(properties) ⇒ array
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/crust/generate.rb', line 67 def get_array_converters(properties) array_converters = [] properties.each do |name, type_info| if match_type(type_info['type']) == 'NSArray' && type_info['items']['$ref'] != nil extends = type_info['items']['$ref'] != '#' ? self.snake_to_camel(Pathname.new(type_info['items']['$ref']).basename('.json').to_s) : @generated_class array_converters << "+ (NSValueTransformer *)#{name}JSONTransformer {\n return [NSValueTransformer mtl_JSONDictionaryTransformerWithModelClass:_#{extends}.class];\n}" end end array_converters end |
#get_contains(properties) ⇒ array
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/crust/generate.rb', line 53 def get_contains(properties) contains = [] properties.each do |name, type_info| if match_type(type_info['type']) == 'NSArray' && type_info['items']['$ref'] != nil && type_info['items']['$ref'] != '#' contains << "#import \"_#{self.snake_to_camel(Pathname.new(type_info['items']['$ref']).basename('.json').to_s)}.h\"" end end contains end |
#get_import(data) ⇒ string
82 83 84 85 86 87 88 89 |
# File 'lib/crust/generate.rb', line 82 def get_import(data) if data['extends'].to_s == '' nil else import = data['extends'].is_a?(String) ? '_' << self.snake_to_camel(data['extends'].sub('.json', '')) : '_' << self.snake_to_camel(File.basename(data['extends']['$ref'], '.json')) "#import \"#{import}.h\"" end end |
#match_type(in_type) ⇒ string
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/crust/generate.rb', line 142 def match_type(in_type) case in_type when 'string' 'NSString' when 'number', 'long' 'NSNumber' when 'integer' 'NSInteger' when 'boolean' 'BOOL' when 'object', 'any' 'NSObject' when 'array' 'NSArray' when 'null' 'NSNull' else 'NSObject' end end |
#retained(type) ⇒ boolean
136 137 138 |
# File 'lib/crust/generate.rb', line 136 def retained(type) type != 'NSInteger' && type != 'BOOL' end |
#snake_to_camel(file_name) ⇒ string
165 166 167 |
# File 'lib/crust/generate.rb', line 165 def snake_to_camel(file_name) (file_name.split('_').length > 1) ? file_name.split('_').map { |w| w.capitalize }.join('') : file_name.capitalize end |