diff --git a/lib/aviator/core/cli/describer.rb b/lib/aviator/core/cli/describer.rb index a6ad850..06a1c33 100644 --- a/lib/aviator/core/cli/describer.rb +++ b/lib/aviator/core/cli/describer.rb @@ -33,8 +33,9 @@ def self.describe_provider(provider_name) def self.describe_request(provider_name, service_name, api_version, endpoint_type, request_name) service = Aviator::Service.new :provider => provider_name, :service => service_name - request_class = "Aviator::#{ provider_name.camelize }::#{ service_name.camelize }::Requests::"\ - "#{ api_version.camelize }::#{ endpoint_type.camelize }::#{ request_name.camelize }".constantize + request_class = "Aviator::#{ StrUtil.camelize(provider_name) }::#{ StrUtil.camelize(service_name) }::Requests::"\ + "#{ StrUtil.camelize(api_version) }::#{ StrUtil.camelize(endpoint_type) }::#{ StrUtil.camelize(request_name) }" + request_class = StrUtil.constantize(request_class) display = "Request: #{ request_name }\n" @@ -119,7 +120,7 @@ def self.describe_service(provider_name, service_name) str = "Available requests for #{ provider_name } #{ service_name }_service:\n" requests.each do |klass| - str << " #{ klass.api_version } #{ klass.endpoint_type } #{ klass.name.split('::').last.underscore }\n" + str << " #{ klass.api_version } #{ klass.endpoint_type } #{ StrUtil.underscore(klass.name.split('::').last) }\n" end str diff --git a/lib/aviator/core/request_builder.rb b/lib/aviator/core/request_builder.rb index ac55901..a0f3495 100644 --- a/lib/aviator/core/request_builder.rb +++ b/lib/aviator/core/request_builder.rb @@ -40,12 +40,12 @@ def define_request(root_namespace, request_name, options, &block) ] namespace = namespace_arr.inject(root_namespace) do |namespace, sym| - const_name = sym.to_s.camelize + const_name = StrUtil.camelize(sym.to_s) namespace.const_set(const_name, Module.new) unless namespace.const_defined?(const_name, false) namespace.const_get(const_name, false) end - klassname = request_name.to_s.camelize + klassname = StrUtil.camelize(request_name.to_s) if namespace.const_defined?(klassname, false) raise RequestAlreadyDefinedError.new(namespace, klassname) @@ -66,11 +66,11 @@ def get_request_class(root_namespace, request_class_arr) end full_request_class_arr.inject(root_namespace) do |namespace, sym| - namespace.const_get(sym.to_s.camelize, false) + namespace.const_get(StrUtil.camelize(sym.to_s), false) end rescue NameError => e - if Aviator.const_defined?(full_request_class_arr[0].to_s.camelize) - provider = "Aviator::#{ full_request_class_arr[0] }::Provider".constantize + if Aviator.const_defined?(StrUtil.camelize(full_request_class_arr[0].to_s)) + provider = StrUtil.constantize("Aviator::#{ full_request_class_arr[0] }::Provider") arr = ['..'] + full_request_class_arr arr[-1,1] = arr.last.to_s + '.rb' path = Pathname.new(provider.root_dir).join(*arr.map{|i| i.to_s }).expand_path @@ -79,7 +79,7 @@ def get_request_class(root_namespace, request_class_arr) if provider && path.exist? require path full_request_class_arr.inject(root_namespace) do |namespace, sym| - namespace.const_get(sym.to_s.camelize, false) + namespace.const_get(StrUtil.camelize(sym.to_s), false) end else raise BaseRequestNotFoundError.new(request_class_arr) @@ -99,4 +99,4 @@ def define_request(request_name, options={ :inherit => [:request] }, &block) end # class << self -end \ No newline at end of file +end diff --git a/lib/aviator/core/service.rb b/lib/aviator/core/service.rb index f316455..d7f0137 100644 --- a/lib/aviator/core/service.rb +++ b/lib/aviator/core/service.rb @@ -47,7 +47,7 @@ def initialize(request_name, options) class MissingServiceEndpointError < StandardError def initialize(service_name, request_name) - request_name = request_name.to_s.split('::').last.underscore + request_name = StrUtil.underscore(request_name.to_s.split('::').last) super "The session's service catalog does not have an entry for the #{ service_name } "\ "service. Therefore, I don't know to which base URL the request should be sent. "\ "This may be because you are using a default or unscoped token. If this is not your "\ @@ -147,10 +147,10 @@ def load_requests constant_parts = request_file_paths \ .map{|rf| rf.to_s.match(/#{provider}\/#{service}\/([\w\/]+)\.rb$/) } \ - .map{|rf| rf[1].split('/').map{|c| c.camelize }.join('::') } + .map{|rf| rf[1].split('/').map{|c| StrUtil.camelize(c) }.join('::') } @request_classes = constant_parts.map do |cp| - "Aviator::#{provider.camelize}::#{service.camelize}::#{cp}".constantize + StrUtil.constantize("Aviator::#{StrUtil.camelize(provider)}::#{StrUtil.camelize(service)}::#{cp}") end end @@ -161,7 +161,7 @@ def log_file def provider_module - @provider_module ||= "Aviator::#{provider.camelize}::Provider".constantize + @provider_module ||= StrUtil.constantize("Aviator::#{StrUtil.camelize(provider)}::Provider") end end diff --git a/lib/aviator/core/utils/string.rb b/lib/aviator/core/utils/string.rb index 25d24b6..ff1615f 100644 --- a/lib/aviator/core/utils/string.rb +++ b/lib/aviator/core/utils/string.rb @@ -1,24 +1,26 @@ -class String +module Aviator - unless instance_methods.include? 'camelize' - define_method :camelize do - word = self.slice(0,1).capitalize + self.slice(1..-1) - word.gsub(/_([a-zA-Z\d])/) { "#{$1.capitalize}" } - end - end + class StrUtil + + class < base_arr do; end base_klass = base_arr.insert(2, :requests).inject(builder) do |namespace, sym| - namespace.const_get(sym.to_s.camelize, false) + namespace.const_get(Aviator::StrUtil.camelize(sym.to_s), false) end child_klass = child_arr.insert(2, :requests).inject(builder) do |namespace, sym| - namespace.const_get(sym.to_s.camelize, false) + namespace.const_get(Aviator::StrUtil.camelize(sym.to_s), false) end base_klass.wont_be_nil @@ -180,4 +180,4 @@ def builder end -end \ No newline at end of file +end diff --git a/test/aviator/core/service_test.rb b/test/aviator/core/service_test.rb index f2197d4..74eccd0 100644 --- a/test/aviator/core/service_test.rb +++ b/test/aviator/core/service_test.rb @@ -83,17 +83,18 @@ def service(default_session_data=nil) it 'returns an array of the request classes' do provider_name = config[:provider] service_name = config[:auth_service][:name] - provider_module = "Aviator::#{ provider_name.camelize }::Provider".constantize + provider_module = "Aviator::#{ Aviator::StrUtil.camelize(provider_name) }::Provider" + provider_module = Aviator::StrUtil.constantize(provider_module) request_file_paths = provider_module.request_file_paths(service_name) request_file_paths.each{ |path| require path } constant_parts = request_file_paths \ .map{|rf| rf.to_s.match(/#{ provider_name }\/#{ service_name }\/([\w\/]+)\.rb$/) } \ - .map{|rf| rf[1].split('/').map{|c| c.camelize }.join('::') } + .map{|rf| rf[1].split('/').map{|c| Aviator::StrUtil.camelize(c) }.join('::') } classes = constant_parts.map do |cp| - "Aviator::#{ provider_name.camelize }::#{ service_name.camelize }::#{ cp }".constantize + Aviator::StrUtil.constantize("Aviator::#{ Aviator::StrUtil.camelize(provider_name) }::#{ Aviator::StrUtil.camelize(service_name) }::#{ cp }") end service.request_classes.must_equal classes diff --git a/test/support/dummy/provider.rb b/test/support/dummy/provider.rb index 957f044..da2d18d 100644 --- a/test/support/dummy/provider.rb +++ b/test/support/dummy/provider.rb @@ -8,8 +8,8 @@ module Provider class << self def find_request(service, name, session_data, options) - fqrn = "Aviator::Dummy::#{service.to_s.camelize}::Requests::V1::Public::#{name.to_s.camelize}" - fqrn.constantize + fqrn = "Aviator::Dummy::#{Aviator::StrUtil.camelize(service.to_s)}::Requests::V1::Public::#{Aviator::StrUtil.camelize(name.to_s)}" + Aviator::StrUtil.constantize(fqrn) rescue NameError => e raise NameError.new("#{fqrn} not found: #{e.message}") end diff --git a/test/support/request_helper.rb b/test/support/request_helper.rb index ff0c0ac..0051ffd 100644 --- a/test/support/request_helper.rb +++ b/test/support/request_helper.rb @@ -50,7 +50,7 @@ def admin_bootstrap_session_data(api_version=nil) def get_request_class(parent, *path) - const_name = path.shift.to_s.camelize.gsub(/\.rb$/, '') + const_name = Aviator::StrUtil.camelize(path.shift.to_s).gsub(/\.rb$/, '') const = if parent.const_defined?(const_name) parent.const_get(const_name) diff --git a/test/support/test_base_class.rb b/test/support/test_base_class.rb index d6fbb11..c5a93cb 100644 --- a/test/support/test_base_class.rb +++ b/test/support/test_base_class.rb @@ -17,8 +17,9 @@ def cassette_name .gsub(/^Aviator::Test::/, '') \ .gsub(/::#/, '/i_') \ .gsub(/::::/, '/c_') \ - .gsub(/::/, '/') \ - .underscore + .gsub(/::/, '/') + + path = Aviator::StrUtil.underscore(path) basename = __name__.gsub(/test_\d+_/, '') diff --git a/test/support/vcr_setup.rb b/test/support/vcr_setup.rb index 0a575d4..2b454fe 100644 --- a/test/support/vcr_setup.rb +++ b/test/support/vcr_setup.rb @@ -50,7 +50,7 @@ [:username, :password, :tenantName, :tokenId].each do |key| configs.each do |config| c.filter_sensitive_data("<#{ config.to_s.upcase }_#{key.to_s.upcase}>") do - env.send(config)[:auth_credentials][key] || env.send(config)[:auth_credentials][key.to_s.underscore] + env.send(config)[:auth_credentials][key] || env.send(config)[:auth_credentials][Aviator::StrUtil.underscore(key.to_s)] end end end