Class: Twfy::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/twfy.rb

Defined Under Namespace

Classes: APIError, Error, ServiceArgumentError

Instance Method Summary collapse

Constructor Details

#initialize(api_key, log_to = $stderr) ⇒ Client

Returns a new instance of Client.



23
24
25
26
# File 'lib/twfy.rb', line 23

def initialize(api_key, log_to=$stderr)
  @api_key = api_key
  @logger = Logger.new(log_to)
end

Instance Method Details

#comments(params = {}) ⇒ Object



103
104
105
# File 'lib/twfy.rb', line 103

def comments(params={})
  service :getComments, validate(params, :allow => [:date, :search, :user_id, :pid, :page, :num])
end

#committee(params = {}) ⇒ Object



78
79
80
# File 'lib/twfy.rb', line 78

def committee(params={})
  service :getCommittee, validate(params, :require => :name, :allow => :date)
end

#constituencies(params = {}) ⇒ Object



42
43
44
# File 'lib/twfy.rb', line 42

def constituencies(params={})
  service :getConstituencies, validate(params, :allow => [:date, :search, :longitude, :latitude, :distance]), Constituency
end

#constituency(params = {}) ⇒ Object



38
39
40
# File 'lib/twfy.rb', line 38

def constituency(params={})
  service :getConstituency, validate(params, :require => :postcode), Constituency
end

#convert_url(params = {}) ⇒ Object



32
33
34
35
36
# File 'lib/twfy.rb', line 32

def convert_url(params={})
  service :convertURL, validate(params, :require => :url) do |value|
    URI.parse(value['url'])
  end
end

#debates(params = {}) ⇒ Object



82
83
84
85
86
87
# File 'lib/twfy.rb', line 82

def debates(params={})
  service :getDebates, validate(params, :require => :type, :require_one_of => [:date, :person, :search, :gid], :allow_dependencies => {
    :search => [:order, :page, :num],
    :person => [:order, :page, :num]
  })
end

#geometry(params = {}) ⇒ Object



74
75
76
# File 'lib/twfy.rb', line 74

def geometry(params={})
  service :getGeometry, validate(params, :allow => :name), Geometry
end

#log(message, level = :info) ⇒ Object



28
29
30
# File 'lib/twfy.rb', line 28

def log(message, level=:info)
  @logger.send(level, message) if $DEBUG
end

#lord(params = {}) ⇒ Object



58
59
60
# File 'lib/twfy.rb', line 58

def lord(params={})
  service :getLord, validate(params, :require => :id)
end

#lords(params = {}) ⇒ Object



62
63
64
# File 'lib/twfy.rb', line 62

def lords(params={})
  service :getLords, validate(params, :allow => [:date, :search])
end

#mlas(params = {}) ⇒ Object



66
67
68
# File 'lib/twfy.rb', line 66

def mlas(params={})
  service :getMLAs, validate(params, :allow => [:date, :party, :search])
end

#mp(params = {}) ⇒ Object



46
47
48
# File 'lib/twfy.rb', line 46

def mp(params={})
  service :getMP, validate(params, :allow => [:postcode, :constituency, :id, :always_return]), MP
end

#mp_info(params = {}) ⇒ Object



50
51
52
# File 'lib/twfy.rb', line 50

def mp_info(params={})
  service :getMPInfo, validate(params, :require => :id)
end

#mps(params = {}) ⇒ Object



54
55
56
# File 'lib/twfy.rb', line 54

def mps(params={})
  service :getMPs, validate(params, :allow => [:date, :search]), MP
end

#msps(params = {}) ⇒ Object



70
71
72
# File 'lib/twfy.rb', line 70

def msps(params={})
  service :getMSPs, validate(params, :allow => [:date, :party, :search])
end

#service(name, params = {}, target = OpenStruct, &block) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/twfy.rb', line 107

def service(name, params={}, target=OpenStruct, &block)
  log "Calling service #{name}"
  url = BASE + name.to_s
  url.query = build_query(params)
  result = JSON.parse(url.read)
  log result.inspect
  unless result.kind_of?(Enumerable)
    raise Error, "Could not handle result: #{result.inspect}"
  end
  if result.kind_of?(Hash) && result['error']
    raise APIError, result['error'].to_s
  else
    structure result, block || target
  end
end

#wms(params = {}) ⇒ Object



96
97
98
99
100
101
# File 'lib/twfy.rb', line 96

def wms(params={})
  service :getWMS, validate(params, :require_one_of => [:date, :person, :search, :gid], :allow_dependencies => {
    :search => [:order, :page, :num],
    :person => [:order, :page, :num]
  } )
end

#wrans(params = {}) ⇒ Object



89
90
91
92
93
94
# File 'lib/twfy.rb', line 89

def wrans(params={})
  service :getWrans, validate(params, :require_one_of => [:date, :person, :search, :gid], :allow_dependencies => {
    :search => [:order, :page, :num],
    :person => [:order, :page, :num]
  } )
end