| 1 |
require 'net/http' |
|---|
| 2 |
require 'uri' |
|---|
| 3 |
require 'json' |
|---|
| 4 |
|
|---|
| 5 |
Net::HTTP.version_1_2 |
|---|
| 6 |
|
|---|
| 7 |
class Wedata |
|---|
| 8 |
def initialize(apikey) |
|---|
| 9 |
@apikey = apikey |
|---|
| 10 |
end |
|---|
| 11 |
def get_database(name) |
|---|
| 12 |
WedataDatabase.new(name, @apikey) |
|---|
| 13 |
end |
|---|
| 14 |
def create_database(name, require_keys, optional_keys, permit_other_keys) |
|---|
| 15 |
query_hash = { |
|---|
| 16 |
"name"=>name, |
|---|
| 17 |
"required_keys"=>required_keys, |
|---|
| 18 |
"optional_keys"=>optional_keys, |
|---|
| 19 |
"permit_other_keys"=>permit_other_keys |
|---|
| 20 |
} |
|---|
| 21 |
Net::HTTP.start('wedata.net') do |http| |
|---|
| 22 |
query = query_hash.map do |key, value| |
|---|
| 23 |
"data[#{URI.encode(key)}]=#{URI.encode(value)}" |
|---|
| 24 |
end.join("&")+"&api_key=#{@apikey}" |
|---|
| 25 |
|
|---|
| 26 |
res = http.post("/databases", query) |
|---|
| 27 |
puts "#{res.code}" |
|---|
| 28 |
get_database name |
|---|
| 29 |
end |
|---|
| 30 |
end |
|---|
| 31 |
end |
|---|
| 32 |
|
|---|
| 33 |
class WedataDatabase |
|---|
| 34 |
attr_reader :name, :info, :required_keys, :optional_keys |
|---|
| 35 |
def initialize(name, apikey) |
|---|
| 36 |
@apikey = apikey |
|---|
| 37 |
|
|---|
| 38 |
Net::HTTP.start('wedata.net') do |http| |
|---|
| 39 |
res1 = http.get("/databases/#{URI.encode(name)}.json") |
|---|
| 40 |
res2 = http.get("/databases/#{URI.encode(name)}/items.json") |
|---|
| 41 |
if res1.code == '200' && res2.code == '200' |
|---|
| 42 |
@name = name |
|---|
| 43 |
@info = JSON.parse(res1.body) |
|---|
| 44 |
@data = JSON.parse(res2.body) |
|---|
| 45 |
@required_keys = @info["required_keys"].scan(/\w+/) |
|---|
| 46 |
@optional_keys = @info["optional_keys"].scan(/\w+/) |
|---|
| 47 |
else puts 'Request Error' |
|---|
| 48 |
end |
|---|
| 49 |
end |
|---|
| 50 |
end |
|---|
| 51 |
def get_item(name) |
|---|
| 52 |
WedataItem.new(@data.find {|item| name == item['name']}, @apikey, @required_keys, @optional_keys) |
|---|
| 53 |
end |
|---|
| 54 |
def create_item(name, data) |
|---|
| 55 |
condition = true |
|---|
| 56 |
@required_keys.each{|i| condition = false unless data.has_key?(i) } |
|---|
| 57 |
unless condition |
|---|
| 58 |
puts "Please enter required_keys" |
|---|
| 59 |
return |
|---|
| 60 |
end |
|---|
| 61 |
query = data.map do |key, value| |
|---|
| 62 |
"data[#{URI.encode(key)}]=#{URI.encode(value)}" |
|---|
| 63 |
end.join("&")+"&api_key=#{@apikey}&name=#{URI.encode(name)}" |
|---|
| 64 |
puts query |
|---|
| 65 |
Net::HTTP.start('wedata.net') do |http| |
|---|
| 66 |
res = http.post("/databases/#{URI.encode(@name)}/items", query) |
|---|
| 67 |
puts "#{res.code}" |
|---|
| 68 |
end |
|---|
| 69 |
end |
|---|
| 70 |
def delete |
|---|
| 71 |
http = Net::HTTP.new('wedata.net', 80) |
|---|
| 72 |
req = Net::HTTP::Delete.new("/databases/#{URI.encode(@name)}") |
|---|
| 73 |
req.body = "api_key=#{@apikey}" |
|---|
| 74 |
res = http.request(req) |
|---|
| 75 |
puts "#{res.code}" |
|---|
| 76 |
end |
|---|
| 77 |
def get_items |
|---|
| 78 |
items = Array.new |
|---|
| 79 |
@data.each do |item| |
|---|
| 80 |
items.push(WedataItem.new(item, @apikey, @required_keys, @optional_keys)) |
|---|
| 81 |
end |
|---|
| 82 |
return items |
|---|
| 83 |
end |
|---|
| 84 |
end |
|---|
| 85 |
|
|---|
| 86 |
class WedataItem |
|---|
| 87 |
@@re = /items\/(\d+)$/ |
|---|
| 88 |
attr_reader :name, :data, :url, :required_keys, :optional_keys |
|---|
| 89 |
def initialize(data, apikey, required_keys, optional_keys) |
|---|
| 90 |
@name = data['name'] |
|---|
| 91 |
@data = data['data'] |
|---|
| 92 |
@url = data['resource_url'] |
|---|
| 93 |
@apikey = apikey |
|---|
| 94 |
@required_keys = required_keys |
|---|
| 95 |
@optional_keys = optional_keys |
|---|
| 96 |
end |
|---|
| 97 |
def update(data) |
|---|
| 98 |
@required_keys.each{|i| data[i] = @data[i] unless data.has_key?(i) } |
|---|
| 99 |
@optional_keys.each{|i| data[i] = @data[i] if (!data.has_key?(i) && @data.has_key?(i))} |
|---|
| 100 |
query = data.map do |key, value| |
|---|
| 101 |
"data[#{URI.encode(key)}]=#{URI.encode(value)}" |
|---|
| 102 |
end.join("&")+"&api_key=#{@apikey}" |
|---|
| 103 |
puts query |
|---|
| 104 |
|
|---|
| 105 |
@url =~ @@re |
|---|
| 106 |
http = Net::HTTP.new('wedata.net', 80) |
|---|
| 107 |
req = Net::HTTP::Put.new("/items/#{$1}") |
|---|
| 108 |
req.body = query |
|---|
| 109 |
res = http.request(req) |
|---|
| 110 |
puts "#{res.code}" |
|---|
| 111 |
end |
|---|
| 112 |
def delete |
|---|
| 113 |
@url =~ @@re |
|---|
| 114 |
http = Net::HTTP.new('wedata.net', 80) |
|---|
| 115 |
req = Net::HTTP::Delete.new("/items/#{$1}") |
|---|
| 116 |
req.body = "api_key=#{@apikey}" |
|---|
| 117 |
res = http.request(req) |
|---|
| 118 |
puts "#{res.code}" |
|---|
| 119 |
end |
|---|
| 120 |
end |
|---|
| 121 |
|
|---|