Sha256: 371d208a6b55f3ceb6696558241af605f12f670dac09dc89b0488759da5572c5
Contents?: true
Size: 1.86 KB
Versions: 1
Compression:
Stored size: 1.86 KB
Contents
# -*- coding: utf-8 -*- require 'open-uri' require 'net/http' require 'json' require 'ostruct' module Kindai::Util::Database ENDPOINT = URI.parse 'http://gigaschema.appspot.com/hitode909/kindai.json' def self.items @items ||= JSON.parse(open(ENDPOINT).read)['data'].map{|item| begin hash = JSON.parse(item['value']) self.validate(hash) OpenStruct.new(hash) rescue => error Kindai::Util.logger.warn error end }.compact end def self.item_for_book(book) self.items.find{|item| item.uri == book.permalink_uri} end def self.save_item(book, info) previous_item = self.item_for_book(book) if previous_item and previous_item.version >= Kindai::VERSION Kindai::Util.logger.warn "Database has newer version of #{book.title}. To save, delete it first." return false end send_data = { 'uri' => book.permalink_uri, 'title' => book.title, 'author' => book.author, 'x' => info[:x], 'y' => info[:y], 'width' => info[:width], 'height' => info[:height], 'version' => Kindai::VERSION } self.validate(send_data) res = Net::HTTP.start(ENDPOINT.host, ENDPOINT.port){|http| request = Net::HTTP::Post.new(ENDPOINT.path) request.set_form_data({:value => send_data.to_json}) http.request(request) } case res.code when '200' JSON.parse(res.body) else raise res end end def self.validate(info) %w{uri title author}.each{|key| raise "key #{key} is required" unless info.has_key? key raise "key #{key} must be kind of String" unless info[key].kind_of? String } %w{x y width height version}.each{|key| raise "key #{key} is required" unless info.has_key? key raise "key #{key} must be kind of Numeric" unless info[key].kind_of? Numeric } end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
kindai-1.6.0 | lib/kindai/util/database.rb |