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