google-api-ruby-client/google-apis-generator/lib/google/apis/generator/helpers.rb

79 lines
2.6 KiB
Ruby
Raw Normal View History

require 'active_support/inflector'
module Google
module Apis
# @private
class Generator
# Methods for validating & normalizing symbols
module NameHelpers
KEYWORDS = %w(__ENCODING__ def in self __LINE__ defined? module super __FILE__ do next then BEGIN
else nil true END elsif not undef alias end or unless and ensure redo until begin
false rescue when break for retry while case if return yield class command)
PLURAL_METHODS = %w(list search)
# Check to see if the method name should be plauralized
# @return [Boolean]
def pluralize_method?(method_name)
PLURAL_METHODS.include?(method_name)
end
# Check to see if the method is either a keyword or built-in method on object
# @return [Boolean]
def reserved?(name)
keyword?(name) || object_method?(name)
end
# Check to see if the name is a ruby keyword
# @return [Boolean]
def keyword?(name)
KEYWORDS.include?(name)
end
# Check to see if the method already exists on ruby objects
# @return [Boolean]
def object_method?(name)
Object.new.respond_to?(name)
end
# Convert a parameter name to ruby conventions
# @param [String] name
# @return [String] updated param name
def normalize_param_name(name)
name = name.gsub(/\W/, '_')
name = name.gsub(/IPv4/, 'Ipv4')
name = ActiveSupport::Inflector.underscore(name)
if reserved?(name)
logger.warn { sprintf('Found reserved keyword \'%1$s\'', name) }
name += '_'
logger.warn { sprintf('Changed to \'%1$s\'', name) }
end
name
end
# Convert a property name to ruby conventions
# @param [String] name
# @return [String]
def normalize_property_name(name)
name = ActiveSupport::Inflector.underscore(name.gsub(/\W/, '_'))
if object_method?(name)
logger.warn { sprintf('Found reserved property \'%1$s\'', name) }
name += '_prop'
logger.warn { sprintf('Changed to \'%1$s\'', name) }
end
name
end
# Converts a scope string into a ruby constant
# @param [String] url
# Url to convert
# @return [String]
def constantize_scope(url)
scope = Addressable::URI.parse(url).path[1..-1].upcase.gsub(/\W/, '_')
scope = 'AUTH_SCOPE' if scope.nil? || scope.empty?
scope
end
end
end
end
end