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

196 lines
5.4 KiB
Ruby

# Copyright 2015 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'active_support/inflector'
require 'google/apis/discovery_v1'
# Extend the discovery API classes with additional data needed to make
# code generation produce better results
module Google
module Apis
module DiscoveryV1
TYPE_MAP = {
'string' => 'String',
'boolean' => 'Boolean',
'number' => 'Float',
'integer' => 'Fixnum',
'any' => 'Object'
}
class JsonSchema
attr_accessor :name
attr_accessor :generated_name
attr_accessor :generated_class_name
attr_accessor :base_ref
attr_accessor :parent
attr_accessor :discriminant
attr_accessor :discriminant_value
attr_accessor :path
def properties
Hash[(@properties || {}).sort]
end
def qualified_name
parent.qualified_name + '::' + generated_class_name
end
def generated_type
case type
when 'string', 'boolean', 'number', 'integer', 'any'
return 'DateTime' if format == 'date-time'
return 'Date' if format == 'date'
return 'Fixnum' if format == 'int64'
return 'Fixnum' if format == 'uint64'
return TYPE_MAP[type]
when 'array'
if items == self
return sprintf('Array<%s>', qualified_name)
end
return sprintf('Array<%s>', items.generated_type)
when 'hash'
if additional_properties == self
return sprintf('Hash<String,%s>', qualified_name)
end
return sprintf('Hash<String,%s>', additional_properties.generated_type)
when 'object'
return qualified_name
end
end
end
class RestMethod
attr_accessor :generated_name
attr_accessor :parent
def parameters
Hash[(@parameters || {}).sort]
end
def path_parameters
return [] if parameter_order.nil? || parameters.nil?
parameter_order.map { |name| parameters[name] }.select { |param| param.location == 'path' }
end
def query_parameters
return [] if parameters.nil?
parameters.values.select { |param| param.location == 'query' }
end
def required_parameters
return [] if parameter_order.nil? || parameters.nil?
parameter_order.map { |name| parameters[name] }.select { |param| param.location == 'path' || param.required }
end
def optional_query_parameters
query_parameters.select { |param| param.required != true }
end
end
class RestResource
attr_accessor :parent
def api_methods
Hash[(@api_methods || {}).sort]
end
def resources
Hash[(@resources || {}).sort]
end
def all_methods
m = []
m << api_methods.values unless api_methods.nil?
m << resources.map { |_k, r| r.all_methods } unless resources.nil?
m.flatten
end
end
class RestDescription
attr_accessor :force_alt_json
alias_method :force_alt_json?, :force_alt_json
# Don't expose these in the API directly.
PARAMETER_BLACKLIST = %w(alt access_token bearer_token oauth_token pp prettyPrint
$.xgafv callback upload_protocol uploadType)
def version
ActiveSupport::Inflector.camelize(@version.gsub(/\W/, '-')).gsub(/-/, '_')
end
def name
ActiveSupport::Inflector.camelize(@name)
end
def module_name
name + version
end
def qualified_name
sprintf('Google::Apis::%s', module_name)
end
def base_path
ActiveSupport::Inflector.underscore(qualified_name)
end
def gem_name
base_path.tr("/", "-")
end
def service_name
class_name = (canonical_name || name).gsub(/\W/, '')
ActiveSupport::Inflector.camelize(sprintf('%sService', class_name))
end
def api_methods
Hash[(@api_methods || {}).sort]
end
def resources
Hash[(@resources || {}).sort]
end
def all_methods
m = []
m << api_methods.values unless api_methods.nil?
m << resources.map { |_k, r| r.all_methods } unless resources.nil?
m.flatten
end
def parameters
Hash[(@parameters || {}).sort].delete_if { |k, _v| PARAMETER_BLACKLIST.include?(k) }
end
def schemas
Hash[(@schemas || {}).sort]
end
class Auth
class Oauth2
class Scope
attr_accessor :constant
end
def scopes
Hash[(@scopes || {}).sort]
end
end
end
end
end
end
end