| # |
| # Simplify access to JSON files in the /public/ directory |
| # |
| |
| require 'json' |
| #require 'wunderbar' |
| require 'net/https' |
| require 'fileutils' |
| |
| module Public |
| # location of where public files are placed on the web |
| DATAURI = 'https://whimsy.apache.org/public/' |
| |
| # contents of a given public file, read from local copy if possible, |
| # fetched from the web otherwise |
| def self.getfile(pubname) |
| local_copy = File.expand_path('../../../www/public/'+pubname, __FILE__.untaint).untaint |
| if File.exist? local_copy |
| # Wunderbar.info "Using local copy of #{pubname}" |
| File.read(local_copy) |
| else |
| # Wunderbar.info "Fetching remote copy of #{pubname}" |
| response = Net::HTTP.get_response(URI(DATAURI+pubname)) |
| raise ArgumentError, "'#{pubname}' #{response.message}" unless response.is_a?(Net::HTTPSuccess) |
| response.body |
| end |
| end |
| |
| # contents of a given public file, read from local copy if possible, |
| # fetched from the web otherwise; parsed as JSON |
| def self.getJSON(pubname) |
| JSON.parse(getfile(pubname)) |
| end |
| end |
| |
| # for test purposes |
| if __FILE__ == $0 |
| puts Public.getJSON('public_podling_status.json')['last_updated'] |
| puts Public.getJSON('public_ldap_services.json')['lastTimestamp'] |
| end |