papertime_client 0.0.3

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 (2) hide show
  1. data/lib/papertime_client.rb +108 -0
  2. metadata +79 -0
@@ -0,0 +1,108 @@
1
+ require 'httpclient'
2
+ require 'json'
3
+ require 'uri'
4
+
5
+ # Use by creating a client given the domain where papertime is to be found
6
+ # e.g. client = PapertimeClient.new('http://localhost:3001')
7
+ #
8
+ # then making requests like so:
9
+ #
10
+ # client.get_publication_dates(:domain => 'op.no', :production_days => 6)
11
+ # client.get_deadline_date(:domain => 'amta.no', :publication_date => Date.today+9, :production_days => 4)
12
+
13
+
14
+ class PapertimeClient
15
+ def initialize(domain)
16
+ @base_uri = URI.parse(domain)+'api/v1/'
17
+ end
18
+
19
+ def base_url
20
+ return @base_uri.to_s
21
+ end
22
+
23
+ def host_from_url(url)
24
+ return unless url
25
+ host = URI.parse(url).host
26
+ host ||= url
27
+ host.gsub('www.', '')
28
+ end
29
+
30
+ # Get all viable publication dates after today given a required processing time
31
+ # of :production_days for the publication identified with the :domain
32
+ # e.g. client.get_publication_dates(:domain => 'op.no', :production_days => 6)
33
+ # returns a hash with the single key 'issues' which points to an array of Date-objects
34
+ def get_publication_dates(params)
35
+ params[:domain] = host_from_url(params[:domain])
36
+ uri = @base_uri+'publication_dates'
37
+ uri.query = "domain=#{params[:domain]}&production_days=#{params[:production_days]}"
38
+ result = content_from(uri)
39
+ result['issues'] = result['issues'].map{|date| Date.parse(date)}
40
+ result
41
+ end
42
+
43
+ # Compute the deadline for publication on :publication_date given a processing time
44
+ # of :production_days for the publication identified with the :domain
45
+ # e.g. client.get_deadline_date(:domain => 'amta.no', :publication_date => Date.today+9, :production_days => 4)
46
+ # returns the Date
47
+ def get_deadline_date(params)
48
+ params[:domain] = host_from_url(params[:domain])
49
+ uri = @base_uri+'deadline_date'
50
+ uri.query = "domain=#{params[:domain]}&publication_date=#{params[:publication_date]}&production_days=#{params[:production_days]}"
51
+ result = content_from(uri)
52
+ return Date.parse(result['deadline']) if result['deadline']
53
+ result
54
+ end
55
+
56
+ # Compute the nearest possible publication date from a :domain and :desired_publication_date
57
+ # e.g. client.get_nearest_publication_date(:domain => 'amta.no', :desired_publication_date => Date.today+9)
58
+ # returns the Date
59
+ def get_nearest_publication_date(params = {})
60
+ raise ArgumentError, "Cannot retrieve publication date without domain" unless params[:domain]
61
+ raise ArgumentError, "Cannot retrieve publication date without desired publication date" unless params[:desired_publication_date]
62
+ domain = host_from_url(params[:domain])
63
+ uri = @base_uri + 'nearest_publication_date'
64
+ uri.query = "domain=#{domain}&desired_publication_date=#{params[:desired_publication_date]}"
65
+ result = content_from(uri)
66
+ return if result.nil?
67
+ return Date.parse(result['publication_date']) if result['publication_date']
68
+ result
69
+ end
70
+
71
+ def find_publication_by_domain(domain)
72
+ raise ArgumentError, "Cannot retrieve publication without domain" unless domain
73
+ domain = host_from_url(domain)
74
+ uri = @base_uri + 'find_publication_by_domain'
75
+ uri.query = "domain=#{domain}"
76
+ content_from(uri)
77
+ end
78
+
79
+ def find_publications_by_lat_lon(lat,lon)
80
+ raise ArgumentError, "Cannot retrieve publications without lat/lon" unless (lat and lon)
81
+ uri = @base_uri + 'find_publications_by_lat_lon'
82
+ uri.query = "lat=#{lat}&lon=#{lon}"
83
+ content_from(uri)
84
+ end
85
+
86
+ def coverage_areas
87
+ uri = @base_uri + 'coverage_areas.json'
88
+ content_from(uri)
89
+ end
90
+
91
+ private
92
+
93
+ def content_from(uri)
94
+ begin
95
+ client = HTTPClient.new.get_content(uri)
96
+ return JSON.parse(client)
97
+ rescue Errno::ECONNREFUSED => e
98
+ puts("Could not connect to papertime server: #{e.message}")
99
+ puts e.inspect
100
+ puts e.backtrace
101
+ rescue Exception => e
102
+ puts("Something went wrong while calling papertime api: #{e.message}")
103
+ puts e.inspect
104
+ puts e.backtrace
105
+ end
106
+ end
107
+
108
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: papertime_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Origogruppen AS
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: httpclient
16
+ requirement: &70130659978060 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70130659978060
25
+ - !ruby/object:Gem::Dependency
26
+ name: json
27
+ requirement: &70130659977060 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70130659977060
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &70130659975100 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70130659975100
47
+ description: Papertime is a server giving details about Norwegian newspapers. This
48
+ is a client for connecting to that server.
49
+ email: post@origo.no
50
+ executables: []
51
+ extensions: []
52
+ extra_rdoc_files: []
53
+ files:
54
+ - lib/papertime_client.rb
55
+ homepage: https://github.com/origo/papertime_client
56
+ licenses: []
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 1.8.10
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: For talking to Papertime server
79
+ test_files: []