factual-api 1.0.3 → 1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/README.md +21 -0
- data/lib/factual.rb +6 -2
- data/lib/factual/api.rb +15 -5
- metadata +2 -2
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -402,5 +402,26 @@ You can query Factual for the detailed schema of any specific table in Factual.
|
|
402
402
|
factual.table("global").schema
|
403
403
|
````
|
404
404
|
|
405
|
+
# Raw Read Queries
|
405
406
|
|
407
|
+
You can perform any read queries documented in the Factual API using the
|
408
|
+
raw read query. Just supply the full path (including the first
|
409
|
+
forward-slash) and the request will be made using your OAuth token:
|
406
410
|
|
411
|
+
````ruby
|
412
|
+
# Find rows in the restaurant database whose name begins with "Star" and return both the data and a total count of the matched rows
|
413
|
+
factual.read('/t/restaurants-us?filters={"name":{"$bw":"Star"}}&include_count=true')
|
414
|
+
````
|
415
|
+
|
416
|
+
# Debug Mode
|
417
|
+
|
418
|
+
To see the query paths generated by the driver you can use it in debug mode by passing true as
|
419
|
+
the third argument of the Factual constructor. Here is an example in irb:
|
420
|
+
|
421
|
+
|
422
|
+
````ruby
|
423
|
+
> factual = Factual.new(key, secret, true)
|
424
|
+
> factual.table("places").filters("name" => {"$bw" => "starbucks"})
|
425
|
+
Request: http://api.v3.factual.com/t/places?filters=%7B%22name%22%3A%7B%22%24bw%22%3A%22starbucks%22%7D%7D
|
426
|
+
=> [{"address"=>"11290 Donner Pass Rd", "category"=>"Food & Beverage > Cafes, Coffee Houses & Tea Houses", ...
|
427
|
+
````
|
data/lib/factual.rb
CHANGED
@@ -5,8 +5,8 @@ require 'factual/query/resolve'
|
|
5
5
|
require 'factual/query/crosswalk'
|
6
6
|
|
7
7
|
class Factual
|
8
|
-
def initialize(key, secret)
|
9
|
-
@api = API.new(generate_token(key, secret))
|
8
|
+
def initialize(key, secret, debug_mode = false)
|
9
|
+
@api = API.new(generate_token(key, secret), debug_mode)
|
10
10
|
end
|
11
11
|
|
12
12
|
def table(table_id_or_alias)
|
@@ -25,6 +25,10 @@ class Factual
|
|
25
25
|
Query::Resolve.new(@api, :values => values)
|
26
26
|
end
|
27
27
|
|
28
|
+
def read(path)
|
29
|
+
@api.raw_read(path)
|
30
|
+
end
|
31
|
+
|
28
32
|
private
|
29
33
|
|
30
34
|
def generate_token(key, secret)
|
data/lib/factual/api.rb
CHANGED
@@ -7,8 +7,9 @@ class Factual
|
|
7
7
|
DRIVER_VERSION_TAG = "factual-ruby-driver-1.0"
|
8
8
|
PARAM_ALIASES = { :search => :q, :sort_asc => :sort }
|
9
9
|
|
10
|
-
def initialize(access_token)
|
10
|
+
def initialize(access_token, debug_mode = false)
|
11
11
|
@access_token = access_token
|
12
|
+
@debug_mode = debug_mode
|
12
13
|
end
|
13
14
|
|
14
15
|
def execute(query, other_params={})
|
@@ -20,18 +21,27 @@ class Factual
|
|
20
21
|
handle_request(:schema, query.path + "/schema", query.params)["view"]
|
21
22
|
end
|
22
23
|
|
24
|
+
def raw_read(path)
|
25
|
+
payload = JSON.parse(make_request("#{API_V3_HOST}#{path}").body)
|
26
|
+
handle_payload(payload)
|
27
|
+
end
|
28
|
+
|
23
29
|
private
|
24
30
|
|
25
31
|
def handle_request(action, path, params)
|
26
|
-
|
32
|
+
url = "#{API_V3_HOST}/#{path}?#{query_string(params)}"
|
33
|
+
puts "Request: #{url}" if @debug_mode
|
34
|
+
payload = JSON.parse(make_request(url).body)
|
35
|
+
handle_payload(payload)
|
36
|
+
end
|
37
|
+
|
38
|
+
def handle_payload(payload)
|
27
39
|
raise StandardError.new(payload["message"]) unless payload["status"] == "ok"
|
28
40
|
payload["response"]
|
29
41
|
end
|
30
42
|
|
31
|
-
def make_request(
|
32
|
-
url = "#{API_V3_HOST}/#{path}?#{query_string(params)}"
|
43
|
+
def make_request(url)
|
33
44
|
headers = { "X-Factual-Lib" => DRIVER_VERSION_TAG }
|
34
|
-
|
35
45
|
@access_token.get(url, headers)
|
36
46
|
end
|
37
47
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: factual-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: "1.1"
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Rudiger Lippert
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2012-03-
|
14
|
+
date: 2012-03-30 00:00:00 +08:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|