We need clear extension points. We would benefit from intent-revealing (clearly named) module scoping for abstraction-supported modules and another for vendor-specific. For 2.0.

On Fri, Mar 28, 2014 at 9:57 AM, Kyle Rames <notifications@github.com>
wrote:

>>          raise ArgumentError.new("#{provider} has no identity service")
>>        end
>> +
>> +      require "fog/#{provider}/identity"
>> +      begin
>> +        Fog::Identity.const_get(Fog.providers[provider]).new(attributes)
>> +      rescue
>> +        Fog::const_get(Fog.providers[provider]).const_get("Identity").new(attributes)
>> +      end
> The general idea is that services that have an abstraction use a namespace in the form of `Fog::Service::Provider`. Those that do not have a generalized abstraction take the form of `Fog::Provider::Service`. I believe this was done to provide a less evasive upgrade path for end users as well as make them aware of the state of abstraction. This unfortunately seems to be tribal knowledge. 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/fog/fog-core/pull/30/files#r11066615