wikidata-client 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +7 -0
  5. data/Gemfile.lock +69 -0
  6. data/LICENCE +21 -0
  7. data/README.md +180 -0
  8. data/Rakefile +5 -0
  9. data/config/mapping.yml +19 -0
  10. data/config/settings.yml +4 -0
  11. data/lib/wikidata.rb +39 -0
  12. data/lib/wikidata/client.rb +36 -0
  13. data/lib/wikidata/config.rb +23 -0
  14. data/lib/wikidata/entity.rb +83 -0
  15. data/lib/wikidata/item.rb +41 -0
  16. data/lib/wikidata/property.rb +29 -0
  17. data/lib/wikidata/property/base.rb +16 -0
  18. data/lib/wikidata/property/globe_coordinate.rb +13 -0
  19. data/lib/wikidata/property/string.rb +6 -0
  20. data/lib/wikidata/property/time.rb +66 -0
  21. data/lib/wikidata/property/url.rb +6 -0
  22. data/lib/wikidata/resource.rb +69 -0
  23. data/lib/wikidata/response.rb +31 -0
  24. data/lib/wikidata/search_response.rb +35 -0
  25. data/lib/wikidata/version.rb +3 -0
  26. data/spec/fixtures/vcr/Wikidata_Entity/properties/entities/should_allow_to_return_only_entities_ids_from_a_key.yml +160 -0
  27. data/spec/fixtures/vcr/Wikidata_Entity/properties/entities/should_allow_to_return_only_entities_ids_from_an_id.yml +160 -0
  28. data/spec/fixtures/vcr/Wikidata_Entity/properties/entities/should_return_entities_property_from_a_key_children_here_.yml +518 -0
  29. data/spec/fixtures/vcr/Wikidata_Entity/properties/entities/should_return_entities_property_from_an_id_P40_for_children_here_.yml +516 -0
  30. data/spec/fixtures/vcr/Wikidata_Entity/properties/properties/of_type_date/should_return_Time_from_a_a_key_date_of_birth_here_.yml +162 -0
  31. data/spec/fixtures/vcr/Wikidata_Entity/properties/properties/of_type_date/should_return_Time_from_a_property_id_P569_for_date_of_birth_here_.yml +162 -0
  32. data/spec/fixtures/vcr/Wikidata_Entity/properties/properties/of_type_globe_coordinate/should_return_GlobeCoordinate_from_a_key_coordinate_location_here_.yml +58 -0
  33. data/spec/fixtures/vcr/Wikidata_Entity/properties/properties/of_type_globe_coordinate/should_return_GlobeCoordinate_from_a_property_id_P625_for_coordinate_location_here_.yml +58 -0
  34. data/spec/fixtures/vcr/Wikidata_Entity/properties/properties/of_type_string/should_return_String_from_a_key_freebase_identifier_here_.yml +160 -0
  35. data/spec/fixtures/vcr/Wikidata_Entity/properties/properties/of_type_string/should_return_String_from_a_property_id_P646_for_freebase_identifier_here_.yml +160 -0
  36. data/spec/fixtures/vcr/Wikidata_Entity/properties/properties/of_type_url/should_return_Url_from_a_key_official_website_here_.yml +78 -0
  37. data/spec/fixtures/vcr/Wikidata_Entity/properties/properties/of_type_url/should_return_Url_from_a_property_id_P856_for_official_website_here_.yml +78 -0
  38. data/spec/fixtures/vcr/Wikidata_Entity/properties/should_return_aliases.yml +176 -0
  39. data/spec/fixtures/vcr/Wikidata_Entity/properties/should_return_descriptions.yml +178 -0
  40. data/spec/fixtures/vcr/Wikidata_Entity/properties/should_return_id.yml +176 -0
  41. data/spec/fixtures/vcr/Wikidata_Entity/properties/should_return_labels.yml +176 -0
  42. data/spec/fixtures/vcr/Wikidata_Entity/properties/should_return_sitelinks.yml +176 -0
  43. data/spec/fixtures/vcr/Wikidata_Entity/properties/should_return_url.yml +178 -0
  44. data/spec/fixtures/vcr/Wikidata_Item/_find_/should_find_by_id.yml +319 -0
  45. data/spec/fixtures/vcr/Wikidata_Item/_find_/should_find_by_ids.yml +441 -0
  46. data/spec/fixtures/vcr/Wikidata_Item/_find_/should_find_by_title.yml +319 -0
  47. data/spec/fixtures/vcr/Wikidata_Item/_find_/should_find_by_titles.yml +441 -0
  48. data/spec/fixtures/vcr/Wikidata_Item/_find_/should_return_nil_if_item_not_found.yml +58 -0
  49. data/spec/fixtures/vcr/Wikidata_Item/_search/should_fetch_all_all_items_of_the_collection.yml +656 -0
  50. data/spec/fixtures/vcr/Wikidata_Item/_search/should_return_a_response_with_an_empty_array_of_results_if_search_missing.yml +57 -0
  51. data/spec/fixtures/vcr/Wikidata_Item/_search/should_return_an_array_of_Wikidata_Item.yml +654 -0
  52. data/spec/fixtures/vcr/Wikidata_Item/_search/should_return_the_next_page_offset.yml +123 -0
  53. data/spec/fixtures/vcr/Wikidata_Item/_search/should_return_the_total_number_of_hits.yml +123 -0
  54. data/spec/spec_helper.rb +28 -0
  55. data/spec/wikidata/client_spec.rb +4 -0
  56. data/spec/wikidata/entity_spec.rb +139 -0
  57. data/spec/wikidata/item_spec.rb +64 -0
  58. data/spec/wikidata/property/time_spec.rb +61 -0
  59. data/spec/wikidata_spec.rb +20 -0
  60. data/wikidata-client.gemspec +27 -0
  61. metadata +262 -0
@@ -0,0 +1,123 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.wikidata.org/w/api.php?action=query&format=json&list=search&srlimit=10&sroffset=0&srsearch=Michael%20Jackson
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.0
12
+ Expect:
13
+ - ''
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ Server:
20
+ - Apache
21
+ X-Content-Type-Options:
22
+ - nosniff
23
+ Cache-Control:
24
+ - private
25
+ X-Frame-Options:
26
+ - DENY
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Vary:
30
+ - Accept-Encoding,X-Forwarded-Proto,X-Use-HHVM
31
+ X-Varnish:
32
+ - 1526867630, 3175927500, 2581305905
33
+ Via:
34
+ - 1.1 varnish, 1.1 varnish, 1.1 varnish
35
+ Transfer-Encoding:
36
+ - chunked
37
+ Date:
38
+ - Mon, 29 Sep 2014 09:07:30 GMT
39
+ Age:
40
+ - '0'
41
+ Connection:
42
+ - keep-alive
43
+ X-Cache:
44
+ - cp1065 miss (0), amssq52 miss (0), amssq59 frontend miss (0)
45
+ X-Analytics:
46
+ - php=zend
47
+ Set-Cookie:
48
+ - GeoIP=FR:Sainte-luce-sur-loire:47.2500:-1.5000:v4; Path=/; Domain=.wikidata.org
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: '{"query-continue":{"search":{"sroffset":10}},"query":{"searchinfo":{"totalhits":416},"search":[{"ns":0,"title":"Q2831","snippet":"<span
52
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
53
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
54
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
55
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
56
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
57
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
58
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
59
+ \u121b\u12ed\u12ad\u120d \u1303\u12ad\u1230\u1295 <span class=\"searchmatch\">Michael</span>
60
+ <span class=\"searchmatch\">Jackson</span> \u0645\u0627\u064a\u0643\u0644
61
+ \u062c\u0627\u0643\u0633\u0648\u0646","size":8234,"wordcount":890,"timestamp":"2014-09-18T07:35:04Z"},{"ns":0,"title":"Q167877","snippet":"<span
62
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
63
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
64
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
65
+ \u041c\u0430\u0439\u043a\u044a\u043b \u0414\u0436\u0430\u043a\u0441\u044a\u043d
66
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
67
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
68
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
69
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
70
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
71
+ Michael","size":1216,"wordcount":132,"timestamp":"2014-09-14T15:28:24Z"},{"ns":0,"title":"Q507175","snippet":"<span
72
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
73
+ The Best of <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
74
+ The Best of <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
75
+ The Best of <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
76
+ The Best of <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
77
+ The Best of <span class=\"searchmatch\">Michael</span> Jackson","size":1503,"wordcount":233,"timestamp":"2014-06-04T10:27:12Z"},{"ns":0,"title":"Q956149","snippet":"\u0e2a\u0e1b\u0e35\u0e0a\u0e40\u0e25\u0e2a\u0e2a\u0e4c
78
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
79
+ Single von <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
80
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
81
+ song chanson de <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
82
+ Speechless (chanson de <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>)
83
+ Speechless","size":720,"wordcount":73,"timestamp":"2014-08-20T02:07:57Z"},{"ns":0,"title":"Q25158","snippet":"<span
84
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
85
+ del 2002 Album von <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
86
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
87
+ Love Songs Love Songs (<span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
88
+ album) Love Songs (album, <span class=\"searchmatch\">Michael</span> <span
89
+ class=\"searchmatch\">Jackson</span>)","size":368,"wordcount":55,"timestamp":"2014-05-09T22:51:53Z"},{"ns":0,"title":"Q1308224","snippet":"Experience
90
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
91
+ The Experience <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
92
+ The Experience <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
93
+ The Experience <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
94
+ The Experience <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
95
+ The","size":1131,"wordcount":124,"timestamp":"2014-05-05T08:15:06Z"},{"ns":0,"title":"Q7244161","snippet":"Prince
96
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
97
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
98
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
99
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
100
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
101
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
102
+ I \u067e\u0631\u0646\u0633","size":447,"wordcount":60,"timestamp":"2014-08-22T21:39:22Z"},{"ns":0,"title":"Q756785","snippet":"Cry
103
+ Cry Cry (b\u00e0i h\u00e1t c\u1ee7a <span class=\"searchmatch\">Michael</span>
104
+ <span class=\"searchmatch\">Jackson</span>) \u0e04\u0e23\u0e32\u0e22 chanson
105
+ de <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
106
+ singolo di <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
107
+ del 2001 <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
108
+ song recorded by American","size":835,"wordcount":117,"timestamp":"2014-08-20T02:40:03Z"},{"ns":0,"title":"Q1638445","snippet":"di
109
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
110
+ del 2012 <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
111
+ album Kompilationsalbum von <span class=\"searchmatch\">Michael</span> <span
112
+ class=\"searchmatch\">Jackson</span> Icon (<span class=\"searchmatch\">Michael</span>-<span
113
+ class=\"searchmatch\">Jackson</span>-Album) Icon (album c\u1ee7a <span class=\"searchmatch\">Michael</span>
114
+ <span class=\"searchmatch\">Jackson</span>) Icon","size":287,"wordcount":43,"timestamp":"2014-05-07T03:24:35Z"},{"ns":0,"title":"Q44376","snippet":"<span
115
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
116
+ album album di <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
117
+ del 2001 album by <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
118
+ Album von <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
119
+ \u00e1lbum de <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
120
+ \u00e1lbum de <span class=\"searchmatch\">Michael</span> Jackson","size":2167,"wordcount":217,"timestamp":"2014-08-27T21:11:08Z"}]}}'
121
+ http_version:
122
+ recorded_at: Mon, 29 Sep 2014 09:07:30 GMT
123
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,123 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.wikidata.org/w/api.php?action=query&format=json&list=search&srlimit=10&sroffset=0&srsearch=Michael%20Jackson
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.0
12
+ Expect:
13
+ - ''
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ Server:
20
+ - Apache
21
+ X-Content-Type-Options:
22
+ - nosniff
23
+ Cache-Control:
24
+ - private
25
+ X-Frame-Options:
26
+ - DENY
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Vary:
30
+ - Accept-Encoding,X-Forwarded-Proto,X-Use-HHVM
31
+ X-Varnish:
32
+ - 1526867147, 3175927351, 2469776956
33
+ Via:
34
+ - 1.1 varnish, 1.1 varnish, 1.1 varnish
35
+ Transfer-Encoding:
36
+ - chunked
37
+ Date:
38
+ - Mon, 29 Sep 2014 09:07:30 GMT
39
+ Age:
40
+ - '0'
41
+ Connection:
42
+ - keep-alive
43
+ X-Cache:
44
+ - cp1065 miss (0), amssq52 miss (0), amssq38 frontend miss (0)
45
+ X-Analytics:
46
+ - php=zend
47
+ Set-Cookie:
48
+ - GeoIP=FR:Sainte-luce-sur-loire:47.2500:-1.5000:v4; Path=/; Domain=.wikidata.org
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: '{"query-continue":{"search":{"sroffset":10}},"query":{"searchinfo":{"totalhits":416},"search":[{"ns":0,"title":"Q2831","snippet":"<span
52
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
53
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
54
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
55
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
56
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
57
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
58
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
59
+ \u121b\u12ed\u12ad\u120d \u1303\u12ad\u1230\u1295 <span class=\"searchmatch\">Michael</span>
60
+ <span class=\"searchmatch\">Jackson</span> \u0645\u0627\u064a\u0643\u0644
61
+ \u062c\u0627\u0643\u0633\u0648\u0646","size":8234,"wordcount":890,"timestamp":"2014-09-18T07:35:04Z"},{"ns":0,"title":"Q167877","snippet":"<span
62
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
63
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
64
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
65
+ \u041c\u0430\u0439\u043a\u044a\u043b \u0414\u0436\u0430\u043a\u0441\u044a\u043d
66
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
67
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
68
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
69
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
70
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
71
+ Michael","size":1216,"wordcount":132,"timestamp":"2014-09-14T15:28:24Z"},{"ns":0,"title":"Q507175","snippet":"<span
72
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
73
+ The Best of <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
74
+ The Best of <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
75
+ The Best of <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
76
+ The Best of <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
77
+ The Best of <span class=\"searchmatch\">Michael</span> Jackson","size":1503,"wordcount":233,"timestamp":"2014-06-04T10:27:12Z"},{"ns":0,"title":"Q956149","snippet":"\u0e2a\u0e1b\u0e35\u0e0a\u0e40\u0e25\u0e2a\u0e2a\u0e4c
78
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
79
+ Single von <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
80
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
81
+ song chanson de <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
82
+ Speechless (chanson de <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>)
83
+ Speechless","size":720,"wordcount":73,"timestamp":"2014-08-20T02:07:57Z"},{"ns":0,"title":"Q25158","snippet":"<span
84
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
85
+ del 2002 Album von <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
86
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
87
+ Love Songs Love Songs (<span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
88
+ album) Love Songs (album, <span class=\"searchmatch\">Michael</span> <span
89
+ class=\"searchmatch\">Jackson</span>)","size":368,"wordcount":55,"timestamp":"2014-05-09T22:51:53Z"},{"ns":0,"title":"Q1308224","snippet":"Experience
90
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
91
+ The Experience <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
92
+ The Experience <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
93
+ The Experience <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
94
+ The Experience <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>:
95
+ The","size":1131,"wordcount":124,"timestamp":"2014-05-05T08:15:06Z"},{"ns":0,"title":"Q7244161","snippet":"Prince
96
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
97
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
98
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
99
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
100
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
101
+ I Prince <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
102
+ I \u067e\u0631\u0646\u0633","size":447,"wordcount":60,"timestamp":"2014-08-22T21:39:22Z"},{"ns":0,"title":"Q756785","snippet":"Cry
103
+ Cry Cry (b\u00e0i h\u00e1t c\u1ee7a <span class=\"searchmatch\">Michael</span>
104
+ <span class=\"searchmatch\">Jackson</span>) \u0e04\u0e23\u0e32\u0e22 chanson
105
+ de <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
106
+ singolo di <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
107
+ del 2001 <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
108
+ song recorded by American","size":835,"wordcount":117,"timestamp":"2014-08-20T02:40:03Z"},{"ns":0,"title":"Q1638445","snippet":"di
109
+ <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
110
+ del 2012 <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
111
+ album Kompilationsalbum von <span class=\"searchmatch\">Michael</span> <span
112
+ class=\"searchmatch\">Jackson</span> Icon (<span class=\"searchmatch\">Michael</span>-<span
113
+ class=\"searchmatch\">Jackson</span>-Album) Icon (album c\u1ee7a <span class=\"searchmatch\">Michael</span>
114
+ <span class=\"searchmatch\">Jackson</span>) Icon","size":287,"wordcount":43,"timestamp":"2014-05-07T03:24:35Z"},{"ns":0,"title":"Q44376","snippet":"<span
115
+ class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
116
+ album album di <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
117
+ del 2001 album by <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
118
+ Album von <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
119
+ \u00e1lbum de <span class=\"searchmatch\">Michael</span> <span class=\"searchmatch\">Jackson</span>
120
+ \u00e1lbum de <span class=\"searchmatch\">Michael</span> Jackson","size":2167,"wordcount":217,"timestamp":"2014-08-27T21:11:08Z"}]}}'
121
+ http_version:
122
+ recorded_at: Mon, 29 Sep 2014 09:07:30 GMT
123
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,28 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
4
+ require 'wikidata'
5
+ require 'vcr'
6
+ require 'pry'
7
+
8
+ RSpec.configure do |config|
9
+ config.expect_with :rspec do |expectations|
10
+ expectations.syntax = [:should, :expect]
11
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
12
+ end
13
+
14
+ config.mock_with :rspec do |mocks|
15
+ mocks.verify_partial_doubles = true
16
+ end
17
+
18
+ config.filter_run focus: true
19
+ config.run_all_when_everything_filtered = true
20
+
21
+ VCR.configure do |c|
22
+ c.cassette_library_dir = 'spec/fixtures/vcr'
23
+ c.default_cassette_options = { record: :new_episodes }
24
+ c.hook_into :webmock
25
+ c.allow_http_connections_when_no_cassette = true
26
+ c.configure_rspec_metadata!
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wikidata::Client do
4
+ end
@@ -0,0 +1,139 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wikidata::Entity, :vcr do
4
+ let(:sid) { Wikidata::Item.find_by_title 'Sid Vicious' }
5
+ let(:homer) { Wikidata::Item.find_by_title 'Homer Simpson' }
6
+ let(:batofar) { Wikidata::Item.find_by_title 'Le Batofar' }
7
+ let(:github) { Wikidata::Item.find_by_title 'GitHub' }
8
+
9
+ describe 'properties' do
10
+
11
+ it 'should return id' do
12
+ sid.id.should eq 'Q47878'
13
+ end
14
+
15
+ it 'should return url' do
16
+ sid.url.should eq 'http://www.wikidata.org/wiki/Q47878'
17
+ end
18
+
19
+ it 'should return labels' do
20
+ sid.labels.en.value.should eq 'Sid Vicious'
21
+ sid.labels.ja.value.should eq 'シド・ヴィシャス'
22
+ end
23
+
24
+ it 'should return aliases' do
25
+ sid.aliases.en.map(&:value).should eq ['John Simon Ritchie', 'Здох через шлюху'] # ?!?
26
+ sid.aliases.ja.map(&:value).should eq ['シド・ビシャス']
27
+ end
28
+
29
+ it 'should return descriptions' do
30
+ sid.descriptions.en.value.should eq 'Bassist, songwriter, composer'
31
+ end
32
+
33
+ it 'should return sitelinks' do
34
+ sid.sitelinks.frwiki.should eq({"site"=>"frwiki", "title"=>"Sid Vicious", "badges"=>[]})
35
+ end
36
+
37
+ describe 'entities' do
38
+
39
+ it 'should return entities property from an id (P40 for children here)' do
40
+ homer.properties('P40').tap do |children|
41
+ children.size.should eq 3
42
+ children.each{|c| c.should be_kind_of Wikidata::Item }
43
+ children.map{|c| c.labels['en']['value'] }.should eq ['Bart Simpson', 'Lisa Simpson', 'Maggie Simpson']
44
+ end
45
+ end
46
+
47
+ it 'should return entities property from a key (children here)' do
48
+ homer.children.tap do |children|
49
+ children.size.should eq 3
50
+ children.each{|c| c.should be_kind_of Wikidata::Item }
51
+ children.map{|c| c.labels['en']['value'] }.should eq ['Bart Simpson', 'Lisa Simpson', 'Maggie Simpson']
52
+ end
53
+ end
54
+
55
+ it 'should allow to return only entities ids from an id' do
56
+ homer.property_ids('P40').should eq ["Q5480", "Q5846", "Q7834"]
57
+ end
58
+
59
+ it 'should allow to return only entities ids from a key' do
60
+ homer.children_ids.should eq ["Q5480", "Q5846", "Q7834"]
61
+ end
62
+ end
63
+
64
+ describe 'properties' do
65
+
66
+ context 'of type date' do
67
+ it 'should return Time from a property id (P569 for date of birth here)' do
68
+ homer.property('P569').tap do |date|
69
+ date.should be_kind_of Wikidata::Property::Time
70
+ date.date.should eq DateTime.new(1956, 6, 18)
71
+ date.range.should eq(
72
+ (DateTime.new(1956, 6, 18, 0, 0, 0)..DateTime.new(1956, 6, 19, 23, 59, 59))
73
+ )
74
+ end
75
+ end
76
+
77
+ it 'should return Time from a a key (date_of_birth here)' do
78
+ homer.date_of_birth.tap do |date|
79
+ date.should be_kind_of Wikidata::Property::Time
80
+ date.date.should eq DateTime.new(1956, 6, 18)
81
+ date.range.should eq(
82
+ (DateTime.new(1956, 6, 18, 0, 0, 0)..DateTime.new(1956, 6, 19, 23, 59, 59))
83
+ )
84
+ end
85
+ end
86
+ end
87
+
88
+ context 'of type globe coordinate' do
89
+ it 'should return GlobeCoordinate from a property id (P625 for coordinate location here)' do
90
+ batofar.property('P625').tap do |c|
91
+ c.should be_kind_of Wikidata::Property::GlobeCoordinate
92
+ c.latitude.should eq 48.83337778
93
+ c.longitude.should eq 2.37925278
94
+ end
95
+ end
96
+
97
+ it 'should return GlobeCoordinate from a key (coordinate_location here)' do
98
+ batofar.coordinate_location.tap do |c|
99
+ c.should be_kind_of Wikidata::Property::GlobeCoordinate
100
+ c.latitude.should eq 48.83337778
101
+ c.longitude.should eq 2.37925278
102
+ end
103
+ end
104
+ end
105
+
106
+ context 'of type string' do
107
+ it 'should return String from a property id (P646 for freebase identifier here)' do
108
+ homer.property('P646').tap do |c|
109
+ c.should be_kind_of Wikidata::Property::String
110
+ c.value.should eq '/m/0h545'
111
+ end
112
+ end
113
+
114
+ it 'should return String from a key (freebase_identifier here)' do
115
+ homer.freebase_identifier.tap do |c|
116
+ c.should be_kind_of Wikidata::Property::String
117
+ c.value.should eq '/m/0h545'
118
+ end
119
+ end
120
+ end
121
+
122
+ context 'of type url' do
123
+ it 'should return Url from a property id (P856 for official website here)' do
124
+ github.property('P856').tap do |c|
125
+ c.should be_kind_of Wikidata::Property::Url
126
+ c.value.should eq 'https://github.com'
127
+ end
128
+ end
129
+
130
+ it 'should return Url from a key (official_website here)' do
131
+ github.official_website.tap do |c|
132
+ c.should be_kind_of Wikidata::Property::Url
133
+ c.value.should eq 'https://github.com'
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe Wikidata::Item, :vcr do
4
+
5
+ describe '#find:' do
6
+ let(:entity_by_id) { Wikidata::Item.find 'Q2831' }
7
+ let(:entity_by_title) { Wikidata::Item.find_by_title 'Michael Jackson' }
8
+ let(:collection_by_id) { Wikidata::Item.find ['Q2831', 'Q47878'] }
9
+ let(:collection_by_title) { Wikidata::Item.find_by_title ['Michael Jackson', 'Sid Vicious'] }
10
+
11
+ it 'should return nil if item not found' do
12
+ Wikidata::Item.find('THISISNOTAVALIDID').should be_nil
13
+ end
14
+
15
+ it 'should find by id' do
16
+ entity_by_id.should be_kind_of Wikidata::Item
17
+ end
18
+
19
+ it 'should find by title' do
20
+ entity_by_title.should be_kind_of Wikidata::Item
21
+ end
22
+
23
+ it 'should find by ids' do
24
+ collection_by_id.size.should eq 2
25
+ collection_by_id.should be_kind_of Wikidata::Response
26
+ collection_by_id.results.each{|i| i.should be_kind_of Wikidata::Item }
27
+ end
28
+
29
+ it 'should find by titles' do
30
+ collection_by_title.size.should eq 2
31
+ collection_by_title.should be_kind_of Wikidata::Response
32
+ collection_by_title.results.each{|i| i.should be_kind_of Wikidata::Item }
33
+ end
34
+ end
35
+
36
+ describe '#search' do
37
+ let(:search) { Wikidata::Item.search 'Michael Jackson' }
38
+
39
+ it 'should return a response with an empty array of results if search missing' do
40
+ Wikidata::Item.search('').tap do |s|
41
+ s.should be_kind_of Wikidata::Response
42
+ s.results.should be_empty
43
+ end
44
+ end
45
+
46
+ it 'should return an array of Wikidata::Item' do
47
+ search.size.should eq 10
48
+ search.should be_kind_of Wikidata::SearchResponse
49
+ search.results.each{|i| i.should be_kind_of Wikidata::Item }
50
+ end
51
+
52
+ it 'should return the total number of hits' do
53
+ search.total_hits.should eq 416
54
+ end
55
+
56
+ it 'should return the next page offset' do
57
+ search.next_page_offset.should eq 10
58
+ end
59
+
60
+ it 'should fetch all all items of the collection' do
61
+ search.results.first.descriptions.pl.value.should eq 'amerykański muzyk, kompozytor i autor tekstów'
62
+ end
63
+ end
64
+ end