lib/clever-ruby/util.rb in clever-ruby-0.6.2 vs lib/clever-ruby/util.rb in clever-ruby-0.7.0

- old
+ new

@@ -1,8 +1,16 @@ module Clever # Library helper methods module Util + # Check if a given word is singular + # @api private + # @param word [String] Word to check + # @return [Boolean] False if plural, true if singular + def self.singular?(word) + word.singularize == word + end + # Check if a given ID is a valid format (MongoDB BSON ObjectID) # @api private # @param id [String] ID to check # @return [Boolean] Whether or not it was valid def self.valid_id?(id) @@ -25,36 +33,27 @@ else h end end - # Convert the name of a resource to its APIResource class - # @api private - # @return [APIResource] - def self.types_to_clever_class(type) - types = { - 'students' => Student, - 'sections' => Section, - 'teachers' => Teacher, - 'districts' => District, - 'schools' => School, - 'events' => Event - } - types.fetch type - end - # Convert an object containing data from Clever into a CleverObject # @api private # @return [CleverObject] def self.convert_to_clever_object(resp) case resp when Array resp.map { |i| convert_to_clever_object i } when Hash # Try converting to a known object class. If none available, fall back to generic # APIResource. - klass_name = %r{/v1.1/([a-z]+)/\S+$}.match(resp[:uri])[1] - klass = types_to_clever_class klass_name if klass_name + if resp.key? :uri + uri = resp[:uri] + else + uri = resp[:links].select { |l| l[:rel] == 'self' }[0][:uri] + end + + klass_name = %r{/v1.1/([a-z]+)/\S+$}.match(uri)[1] + klass = APIResource.named klass_name if klass_name klass ||= CleverObject klass.construct_from resp[:data] else resp end