wikidata-client 0.0.10 → 0.1.0.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f1655d478193402c9455bdf4027548e2a95411e5
4
- data.tar.gz: 593c96be6c9035915abc295ef4ee576ae202d1bb
2
+ SHA256:
3
+ metadata.gz: 3a8b1ca5db1a94adb4890a6dfa8c6dfa7eaa2e8e802b097d16e48f2932049888
4
+ data.tar.gz: 59e71242e4542335fbb4e13ff3bada7db08ba48272be638ab26cf529edae23bb
5
5
  SHA512:
6
- metadata.gz: 71fa5689135d4115bff1b7d8fba869d9eb7c899de139af565bf78e747d7d4f4cc006d902463a8ea0aa2570598dc2b98d6a565ddc567cc59c62abd0c9433da6ac
7
- data.tar.gz: 7c3d990412f62d6a7432ba70e4599f15c042747e103201f7d864895215e2a2f3a3f5765339c17c1350164de47dabee16ab4ed7156583e66889a6421dbc820b9d
6
+ metadata.gz: 8fd41ca92856865b23e73ff5b04c96af1cec255c7852b7b33b5e226db42ec4cc8a7fd5d31e4e66c00c675e956bda34fe7b6b5859ec9b18221f0ca609b373105c
7
+ data.tar.gz: 1ccf018cd1255ad71ecaa0cc125c2d51d3d1efd45c04a2e541581cbf772630f90537ff203257e0b727b44415aba5ddb720649c4e52f6b86f9aaabb0720130064
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.0.11
4
+
5
+ * Add `property_name` and `property_keys` to `Entity`
6
+
3
7
  ## 0.0.10
4
8
 
5
9
  * Wikidata now uses https scheme
data/README.md CHANGED
@@ -1,10 +1,6 @@
1
1
  # Wikidata API Client
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/wikidata-client.svg)](http://badge.fury.io/rb/wikidata-client)
4
- [![Build Status](https://travis-ci.org/klacointe/wikidata-client.svg?branch=master)](https://travis-ci.org/klacointe/wikidata-client)
5
- [![Code Climate](https://codeclimate.com/github/klacointe/wikidata-client/badges/gpa.svg)](https://codeclimate.com/github/klacointe/wikidata-client)
6
- [![Test Coverage](https://codeclimate.com/github/klacointe/wikidata-client/badges/coverage.svg)](https://codeclimate.com/github/klacointe/wikidata-client)
7
- [![Dependency Status](https://gemnasium.com/klacointe/wikidata-client.svg)](https://gemnasium.com/klacointe/wikidata-client)
8
4
 
9
5
 
10
6
  [Wikidata](http://www.wikidata.org/) client library for Ruby.
@@ -15,7 +11,7 @@ their contents.
15
11
 
16
12
  ## Installation
17
13
 
18
- In bundler: `gem 'wikidata-client', '~> 0.0.9', require: 'wikidata'`
14
+ In bundler: `gem 'wikidata-client', '~> 0.0.10', require: 'wikidata'`
19
15
 
20
16
  Otherwise: `gem install wikidata-client`
21
17
 
@@ -33,7 +29,7 @@ Wikidata.configure do |config|
33
29
  open_timeout: 2
34
30
  }
35
31
  }
36
- config.faraday = -> (builder) { builder.adapter :patron }
32
+ config.adapter = :excon
37
33
  end
38
34
  ```
39
35
 
@@ -6,7 +6,7 @@ module Wikidata
6
6
 
7
7
  attr_accessor :query, :total_pages
8
8
 
9
- def initialize query = {}
9
+ def initialize(query = {})
10
10
  @query = DEFAULT_QUERY.merge(query)
11
11
  end
12
12
 
@@ -28,9 +28,9 @@ module Wikidata
28
28
  def api
29
29
  opts = Wikidata.options.merge url: Wikidata.settings.api.url
30
30
  Faraday.new(opts) do |faraday|
31
+ faraday.adapter Wikidata.adapter
31
32
  faraday.request :url_encoded
32
33
  faraday.response :json, content_type: /\bjson$/
33
- Wikidata.faraday.call faraday
34
34
  end
35
35
  end
36
36
  end
@@ -1,23 +1,23 @@
1
1
  module Wikidata
2
2
  class Config
3
3
  class << self
4
- attr_accessor :options, :faraday, :settings, :mapping
4
+ attr_accessor :options, :adapter, :settings, :mapping
5
5
 
6
- def configure &block
6
+ def configure
7
7
  yield self
8
8
  end
9
9
  end
10
10
 
11
11
  @options = {}
12
- @faraday = -> (builder) { builder.adapter :excon }
12
+ @adapter = :excon
13
13
  @settings = Hashie::Mash.new(
14
14
  YAML.load_file(
15
- File.expand_path('../../../config/settings.yml', __FILE__)
15
+ File.expand_path('../../config/settings.yml', __dir__)
16
16
  )
17
17
  )
18
18
  @mapping = Hashie::Mash.new(
19
19
  YAML.load_file(
20
- File.expand_path('../../../config/mapping.yml', __FILE__)
20
+ File.expand_path('../../config/mapping.yml', __dir__)
21
21
  )
22
22
  )
23
23
  end
@@ -1,24 +1,23 @@
1
1
  module Wikidata
2
- class Entity
2
+ class Entity < Hashie::Mash
3
3
  extend Forwardable
4
4
 
5
- attr_accessor :hash
6
- def_delegators :@hash, :id, :labels, :aliases, :descriptions, :sitelinks
5
+ disable_warnings
7
6
 
8
- def initialize hash
9
- @hash = Hashie::Mash.new hash
7
+ def initialize(hash, opts = {})
8
+ super(hash, opts)
10
9
  @_properties = {}
11
10
  end
12
11
 
13
12
  def id
14
- return hash['id'] if hash['id']
15
- return hash['title'] if hash['title']
13
+ self['id'] || self['title']
16
14
  end
17
15
 
18
16
  def title
19
17
  return labels['en'].value if labels && labels['en']
20
18
  return sitelinks['en'].value if sitelinks && sitelinks['en']
21
- hash['title'] if hash['title']
19
+
20
+ title
22
21
  end
23
22
 
24
23
  def url
@@ -31,27 +30,35 @@ module Wikidata
31
30
  define_method k do
32
31
  resource ? property(code) : properties(code)
33
32
  end
34
- define_method (resource ? "#{k}_id" : "#{k}_ids") do
33
+ define_method(resource ? "#{k}_id" : "#{k}_ids") do
35
34
  resource ? property_id(code) : property_ids(code)
36
35
  end
37
36
  end
38
37
  end
39
38
 
40
- def properties code
41
- @_properties[code] ||= Array(raw_property(code)).map {|a| Wikidata::Property.build a }
39
+ def property_keys
40
+ claims.keys
41
+ end
42
+
43
+ def property_name(code)
44
+ Wikidata::Item.find(code).title
45
+ end
46
+
47
+ def properties(code)
48
+ @_properties[code] ||= Array(raw_property(code)).map { |a| Wikidata::Property.build a }
42
49
  end
43
50
 
44
- def property_ids code
51
+ def property_ids(code)
45
52
  Array(raw_property(code)).map do |attribute|
46
53
  self.class.entity_id attribute
47
54
  end.compact
48
55
  end
49
56
 
50
- def property code
57
+ def property(code)
51
58
  properties(code).first
52
59
  end
53
60
 
54
- def property_id code
61
+ def property_id(code)
55
62
  property_ids(code).first
56
63
  end
57
64
 
@@ -60,17 +67,17 @@ module Wikidata
60
67
  end
61
68
 
62
69
  class << self
63
-
64
- # TODO Handle other types
70
+ # TODO: Handle other types
65
71
  # http://www.wikidata.org/wiki/Wikidata:Glossary#Entities.2C_items.2C_properties_and_queries
66
- def entity_id attribute
72
+ def entity_id(attribute)
67
73
  return unless attribute.mainsnak.datavalue
74
+
68
75
  attribute.mainsnak.datavalue.value.tap do |h|
69
76
  case h['entity-type']
70
- when 'item'
71
- return "Q#{h['numeric-id']}"
72
- else
73
- return nil
77
+ when 'item'
78
+ return "Q#{h['numeric-id']}"
79
+ else
80
+ return nil
74
81
  end
75
82
  end
76
83
  end
@@ -78,9 +85,10 @@ module Wikidata
78
85
 
79
86
  private
80
87
 
81
- def raw_property code
82
- return unless hash.claims
83
- hash.claims[code]
88
+ def raw_property(code)
89
+ return unless claims
90
+
91
+ claims[code]
84
92
  end
85
93
  end
86
94
  end
@@ -1,11 +1,12 @@
1
+ require 'wikidata/property/hash'
2
+
1
3
  module Wikidata
2
4
  module Property
3
-
4
5
  class Base
5
6
  attr_reader :property
6
7
 
7
- def initialize property
8
- @property = Hashie::Mash.new(property)
8
+ def initialize(property)
9
+ @property = Wikidata::Property::Hash.new(property)
9
10
  end
10
11
 
11
12
  def value
@@ -0,0 +1,7 @@
1
+ module Wikidata
2
+ module Property
3
+ class Hash < Hashie::Mash
4
+ disable_warnings :hash
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ module Wikidata
2
+ module Property
3
+ class Quantity < Wikidata::Property::Base
4
+ def amount
5
+ value.amount.to_f
6
+ end
7
+ def upperBound
8
+ value.upperBound.to_f
9
+ end
10
+ def lowerBound
11
+ value.lowerBound.to_f
12
+ end
13
+ def unit
14
+ value.unit
15
+ end
16
+ end
17
+ end
18
+ end
@@ -2,16 +2,16 @@ module Wikidata
2
2
  module Property
3
3
  class Time < Wikidata::Property::Base
4
4
  DATE_PRECISION = {
5
- 0 => { key: nil, value: 1_000_000_000 * 365 * 24 * 3600 },
6
- 1 => { key: nil, value: 100_000_000 * 365 * 24 * 3600 },
7
- 2 => { key: nil, value: 10_000_000 * 365 * 24 * 3600 },
8
- 3 => { key: nil, value: 1_000_000 * 365 * 24 * 3600 },
9
- 4 => { key: nil, value: 100_000 * 365 * 24 * 3600 },
10
- 5 => { key: nil, value: 10_000 * 365 * 24 * 3600 },
11
- 6 => { key: nil, value: 1000 * 365 * 24 * 3600 },
12
- 7 => { key: :century, value: 100 * 365 * 24 * 3600 },
13
- 8 => { key: :decade, value: 10 * 365 * 24 * 3600 },
14
- 9 => { key: :year, value: 365 * 24 * 3600 },
5
+ 0 => { key: nil, value: 1_000_000_000 * 365 * 24 * 3600 },
6
+ 1 => { key: nil, value: 100_000_000 * 365 * 24 * 3600 },
7
+ 2 => { key: nil, value: 10_000_000 * 365 * 24 * 3600 },
8
+ 3 => { key: nil, value: 1_000_000 * 365 * 24 * 3600 },
9
+ 4 => { key: nil, value: 100_000 * 365 * 24 * 3600 },
10
+ 5 => { key: nil, value: 10_000 * 365 * 24 * 3600 },
11
+ 6 => { key: nil, value: 1000 * 365 * 24 * 3600 },
12
+ 7 => { key: :century, value: 100 * 365 * 24 * 3600 },
13
+ 8 => { key: :decade, value: 10 * 365 * 24 * 3600 },
14
+ 9 => { key: :year, value: 365 * 24 * 3600 },
15
15
  10 => { key: :month, value: 30 * 24 * 3600 },
16
16
  11 => { key: :day, value: 24 * 3600 },
17
17
  12 => { key: nil, value: 3600 },
@@ -36,13 +36,14 @@ module Wikidata
36
36
 
37
37
  def date
38
38
  return @_date if @_date
39
- d = Hash[[:year, :month, :day, :hour, :min, :sec].zip(
39
+
40
+ d = ::Hash[%i[year month day hour min sec].zip(
40
41
  value.time.scan(/(-?\d+)-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/).first.map(&:to_i)
41
42
  )]
42
- [:month, :day].each do |k|
43
+ %i[month day].each do |k|
43
44
  d[k] = (d[k] == 0 ? 1 : d[k])
44
45
  end
45
- @_date ||= DateTime.new *d.values
46
+ @_date ||= DateTime.new(*d.values)
46
47
  end
47
48
 
48
49
  def timestamp
@@ -78,12 +79,18 @@ module Wikidata
78
79
  protected
79
80
 
80
81
  def generic_range
81
- from = before > 0 ?
82
- timestamp - (before.to_i * precision) : timestamp
83
- to = after > 0 ?
84
- timestamp + (after.to_i * precision) : timestamp
85
-
86
- @_range ||= (to_datetime ::Time.at(from).utc)..(to_datetime ::Time::at(to).utc)
82
+ from = if before > 0
83
+ timestamp - (before.to_i * precision)
84
+ else
85
+ timestamp
86
+ end
87
+ to = if after > 0
88
+ timestamp + (after.to_i * precision)
89
+ else
90
+ timestamp
91
+ end
92
+
93
+ @_range ||= (to_datetime ::Time.at(from).utc)..(to_datetime ::Time.at(to).utc)
87
94
  end
88
95
 
89
96
  def century_range
@@ -117,11 +124,11 @@ module Wikidata
117
124
  end
118
125
 
119
126
  def month_range
120
- if date.month == 2 && self.class.leap_year?(date.year)
121
- last_day = 29
122
- else
123
- last_day = DAYS_IN_MONTH[date.month]
124
- end
127
+ last_day = if date.month == 2 && self.class.leap_year?(date.year)
128
+ 29
129
+ else
130
+ DAYS_IN_MONTH[date.month]
131
+ end
125
132
  from = DateTime.new(date.year, date.month, 1, 0, 0, 0)
126
133
  to = DateTime.new(date.year, date.month, last_day, 23, 59, 59)
127
134
  @_range ||= (from..to)
@@ -137,7 +144,7 @@ module Wikidata
137
144
  DateTime.new t.year, t.month, t.day, t.hour, t.min, t.sec
138
145
  end
139
146
 
140
- def self.leap_year? year
147
+ def self.leap_year?(year)
141
148
  (year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0)
142
149
  end
143
150
  end
@@ -1,7 +1,8 @@
1
1
  module Wikidata
2
2
  module Property
3
- def self.build attribute
4
- return if %w{somevalue novalue}.include? attribute.mainsnak.snaktype
3
+ def self.build(attribute)
4
+ return if %w[somevalue novalue].include? attribute.mainsnak.snaktype
5
+
5
6
  case attribute.mainsnak.datatype
6
7
  when 'string', 'external-id'
7
8
  Wikidata::Property::String.new attribute
@@ -17,6 +18,8 @@ module Wikidata
17
18
  Wikidata::Property::CommonsMedia.new attribute
18
19
  when 'monolingualtext'
19
20
  Wikidata::Property::MonolingualText.new attribute
21
+ when 'quantity'
22
+ Wikidata::Property::Quantity.new attribute
20
23
  else
21
24
  puts "Unkown property type #{attribute.mainsnak.datatype}"
22
25
  end
@@ -1,3 +1,3 @@
1
1
  module Wikidata
2
- VERSION = "0.0.10".freeze
2
+ VERSION = "0.1.0-rc1".freeze
3
3
  end
data/lib/wikidata.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'faraday'
2
- require 'faraday_middleware'
2
+ require 'faraday/excon'
3
3
  require 'hashie'
4
4
  require 'yaml'
5
5
 
@@ -7,12 +7,12 @@ require 'wikidata/config'
7
7
 
8
8
  module Wikidata
9
9
  class << self
10
- def configure &block
11
- Config.configure &block
10
+ def configure(&block)
11
+ Config.configure(&block)
12
12
  end
13
13
 
14
- def faraday
15
- Config.faraday
14
+ def adapter
15
+ Config.adapter
16
16
  end
17
17
 
18
18
  def options
@@ -38,6 +38,7 @@ require 'wikidata/property/url'
38
38
  require 'wikidata/property/globe_coordinate'
39
39
  require 'wikidata/property/commons_media'
40
40
  require 'wikidata/property/monolingual_text'
41
+ require 'wikidata/property/quantity'
41
42
  require 'wikidata/entity'
42
43
  require 'wikidata/item'
43
44
  require 'wikidata/response'