Sha256: 340d1b8b536a20d5f0dd6eb1c073a3f67f36608c37fbc8ca9f9456e40441959e
Contents?: true
Size: 1.95 KB
Versions: 2
Compression:
Stored size: 1.95 KB
Contents
module ComicVine class Api module ApiMethods def types api_call('types', {}) end def search(args = {}) api_call('search', args) end def initial_define_api_methods # types data from API has bug(s), in json file data are fixed path = File.join(File.dirname(__FILE__), '../../../config/types.json') stored_types = JSON.parse(File.read(path)) define_api_methods(stored_types) end # Maybe in future ComicVine devs will fix bug in types, # when it happened then you can still work with new endpoints, # just run #redefine_api_methods method, def redefine_api_methods define_api_methods(types.results, true) end private def define_api_methods(stored_types, redefine = false) stored_types.each do |type| define_collection_method(type, redefine) define_entity_method(type, redefine) end end def define_collection_method(type, redefine) resource_name = type['list_resource_name'] optional_define_api_method(resource_name, redefine) do |method_name| self.class.send(:define_method, method_name) do |args = {}| api_call(resource_name, args) end end end def define_entity_method(type, redefine) resource_name = type['detail_resource_name'] optional_define_api_method(resource_name, redefine) do |method_name| self.class.send(:define_method, method_name) do |id, args = {}| path = "#{resource_name}/#{type['id']}-#{id}" api_call(path, args) end end end def optional_define_api_method(type, redefine) return if redefine || (!redefine && self.class.method_defined?(type)) method_name = :"#{type}_#{Time.now.to_f.to_s.tr('.', '_')}" yield(method_name) self.class.send(:alias_method, type.to_sym, method_name) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
comic_vine-api-0.1.1 | lib/comic_vine/api/api_methods.rb |
comic_vine-api-0.1.0 | lib/comic_vine/api/api_methods.rb |