open-weather-api 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 49dda5814718454abaf2b857407b17e071a19f6d
4
- data.tar.gz: b3037f267453d565228cf4357fcb01923b31f359
3
+ metadata.gz: 65b0e18d84c87ea5d6bc9709a9a816e8d3255f95
4
+ data.tar.gz: e875db9ab10e3106fdebfc71c167e5c59e9fb783
5
5
  SHA512:
6
- metadata.gz: 1e980c13e0c064cc4861093438275f131abc1a30ad591f687ab272fef2a6d26d14a7bebc8aeebfb55b38a77b70bdb4f499c182e1ff6275742b8856a3c4ca0ddb
7
- data.tar.gz: c3b5a7c89c8cbc4dd052fbb5e46627c841e9b87d66e5e0b214302c7f3048b57e2e7cc1aeb8b90c88123dd27df320ddab1a77f58c3a860c6753cd94f9550c8741
6
+ metadata.gz: 3a4b690505ec259f619696b0bbe217fcab3acb5972c9683fb101154aa248a5a75912b5be20828aff24c2d9f33cfd6fea12cf458597793235973dbcb84ad5d4eb
7
+ data.tar.gz: c60e78f5eddd4aae49efe20392035c728de3731cb9d56f27d36982c08cc6caaafa9afbf1fab55fa3c3b0f1d15d48b716358a86949ca9dfa33be89edad287fa1b
data/README.md CHANGED
@@ -96,17 +96,27 @@ json = open_weather_api.current circle: { lat: -16.3319, lon: 28.5046 }, cities_
96
96
  You can also use ruby blocks to handle the response:
97
97
 
98
98
  ````ruby
99
- open_weather_api.current city: 'Santa Cruz de Tenerife', country_code: 'es' do |json|
99
+ json = open_weather_api.current city: 'Santa Cruz de Tenerife', country_code: 'es' do |json|
100
100
  puts JSON.pretty_generate(json)
101
101
  end
102
102
  ````
103
103
 
104
- For more information about the API, visit (http://openweathermap.org/current)[http://openweathermap.org/current].
104
+ For more information about the API, visit [http://openweathermap.org/current](http://openweathermap.org/current).
105
105
 
106
106
  ### Forecast
107
107
 
108
108
  TODO.
109
109
 
110
+ ### Other
111
+
112
+ Retrieve icon url:
113
+
114
+ ````ruby
115
+ api.current city: 'Santa Cruz de Tenerife', country_code: 'es' do |json|
116
+ puts "Icon url: #{api.icon_url json['weather'].first['icon']}"
117
+ end
118
+ ````
119
+
110
120
  ## Authors ##
111
121
 
112
122
  This project has been developed by:
@@ -117,7 +127,7 @@ This project has been developed by:
117
127
 
118
128
  ## Contributing
119
129
 
120
- 1. Fork it ( http://github.com/wikiti/open-weather-api/fork )
130
+ 1. Fork it ( [https://gitlab.com/wikiti-random-stuff/open-weather-api/fork/new](https://gitlab.com/wikiti-random-stuff/open-weather-api/fork/new) )
121
131
  2. Create your feature branch (`git checkout -b my-new-feature`)
122
132
  3. Commit your changes (`git commit -am 'Add some feature'`)
123
133
  4. Push to the branch (`git push origin my-new-feature`)
@@ -6,6 +6,8 @@ require 'rest-client'
6
6
  require 'json'
7
7
 
8
8
  # Main files
9
- require 'open-weather-api/resources/base_resource'
9
+ require 'open-weather-api/resources/base'
10
10
  require 'open-weather-api/resources/current'
11
+ require 'open-weather-api/resources/handlers/base'
12
+ require 'open-weather-api/resources/handlers/current'
11
13
  require 'open-weather-api/api'
@@ -1,157 +1,45 @@
1
1
  module OpenWeatherAPI
2
2
  module Resources
3
- class Current < Base
4
- private
5
-
3
+ class Current < Base
4
+
6
5
  def base_url
7
- return super + 'group' if is_multiple_city_id?
8
- return super + 'weather' if is_city? || is_city_id? || is_geolocation? || is_zipcode?
9
- return super + 'box/city' if is_bbox?
10
- return super + 'find' if is_circle?
6
+ return super + 'group' if city_id.multiple?
7
+ return super + 'weather' if [city, city_id, geolocation, zipcode].any? { |h| h.can? }
8
+ return super + 'box/city' if bbox.can?
9
+ return super + 'find' if circle.can?
11
10
  end
12
11
 
13
12
  def build_params(parameters = {})
14
- super build_for_city || build_for_multiple || build_for_city_id || build_for_geolocation || build_for_zipcode || build_for_bbox || build_for_circle
15
- end
16
-
17
- # Basic city
18
- # ------------------
19
-
20
- # For city
21
- def is_city?
22
- city != nil
13
+ super [city, city_id, geolocation, zipcode, bbox, circle].each{ |h| break h.handle if h.can? }
23
14
  end
24
15
 
16
+ # Simple handlers
25
17
  def city
26
- @parameters[:city]
18
+ City.new @parameters
27
19
  end
28
20
 
29
- def country_code
30
- @parameters[:country_code] || @api_obj.default_country_code
31
- end
32
-
33
- def build_for_city
34
- return { q: [city, country_code].compact.flatten.join(',') } if is_city?
35
- end
36
-
37
- # For city id
38
- def is_city_id?
39
- city_id != nil
40
- end
41
-
42
- def is_multiple_city_id?
43
- city_id.is_a? Array
44
- end
45
-
46
21
  def city_id
47
- @parameters[:id] || @parameters[:city_id]
48
- end
49
-
50
- def build_for_city_id
51
- return { id: city_id } if is_city_id?
52
- end
53
-
54
- def build_for_multiple
55
- return { id: city_id.compact.join(',') } if is_multiple_city_id?
56
- end
57
-
58
- # For geolocation
59
- def is_geolocation?
60
- geolocation[:lat] != nil && geolocation[:lon] != nil
22
+ CityID.new @parameters
61
23
  end
62
24
 
63
25
  def geolocation
64
- {
65
- lat: latitude,
66
- lon: longitude
67
- }
68
- end
69
-
70
- def latitude
71
- @parameters[:latitude] || @parameters[:lat]
72
- end
73
-
74
- def longitude
75
- @parameters[:longitude] || @parameters[:lon]
76
- end
77
-
78
- def build_for_geolocation
79
- return geolocation if is_geolocation?
80
- end
81
-
82
- # For zip code
83
- def is_zipcode?
84
- zipcode != nil
26
+ Geolocation.new @parameters
85
27
  end
86
28
 
87
29
  def zipcode
88
- @parameters[:zipcode] || @parameters[:zip]
89
- end
90
-
91
- def build_for_zipcode
92
- return { zip: [zipcode, country_code].compact.flatten.join(',') } if is_zipcode?
30
+ Zipcode.new @parameters
93
31
  end
94
32
 
95
- # Multiples cities
33
+ # Other handlers
96
34
  # ------------------
97
-
98
- def cities_count
99
- @parameters[:count] || @parameters[:cnt] || @parameters[:cities_count]
100
- end
101
-
102
- def cluster
103
- @parameters[:cluster] if @parameters[:cluster].to_s == 'yes' || @parameters[:cluster].to_s == 'no'
104
- end
105
-
106
- # Bounding box
107
- def is_bbox?
108
- bbox != nil
109
- end
110
-
111
- def bbox_top
112
- [ bbox[:topleft][:lat], bbox[:topleft][:lon] ].join(',')
113
- end
114
-
115
- def bbox_bottom
116
- [ bbox[:bottomright][:lat], bbox[:bottomright][:lon] ].join(',')
117
- end
118
-
119
- def bbox_zoom
120
- bbox[:zoom] || bbox[:map_zoom] || 10
121
- end
122
-
123
35
  def bbox
124
- @parameters[:box] || @parameters[:box] || @parameters[:rect] || @parameters[:rectangle]
125
- end
126
-
127
- def build_for_bbox
128
- if is_bbox?
129
- hash = { bbox: [bbox_top, bbox_bottom, bbox_zoom].join(',') }
130
- hash[:cnt] = cities_count if cities_count
131
- hash[:cluster] = cluster if cluster
132
-
133
- hash
134
- end
36
+ BoundingBox.new @parameters
135
37
  end
136
-
137
- # Circle
138
- def is_circle?
139
- circle != nil
140
- end
141
-
38
+
142
39
  def circle
143
- @parameters[:circle]
40
+ Circle.new @parameters
144
41
  end
145
42
 
146
- def build_for_circle
147
- if is_circle?
148
- hash = { lat: circle[:lat], lon: circle[:lon]}
149
- hash[:cnt] = cities_count if cities_count
150
- hash[:cluster] = cluster if cluster
151
-
152
- hash
153
- end
154
- end
155
43
  end
156
44
  end
157
45
  end
@@ -0,0 +1,48 @@
1
+ module OpenWeatherAPI
2
+ module Resources
3
+
4
+ class QueryHandler
5
+ def initialize(parameters = {})
6
+ @parameters = parameters
7
+ end
8
+
9
+ def handle
10
+ build if can?
11
+ end
12
+
13
+ def can?
14
+ value != nil
15
+ end
16
+
17
+ private
18
+
19
+ def value
20
+ true
21
+ end
22
+
23
+ def build
24
+ @parameters
25
+ end
26
+
27
+ def country_code
28
+ @parameters[:country_code] || @api_obj.default_country_code
29
+ end
30
+
31
+ def cities_count
32
+ @parameters[:count] || @parameters[:cnt] || @parameters[:cities_count]
33
+ end
34
+
35
+ def cluster
36
+ @parameters[:cluster] if @parameters[:cluster].to_s == 'yes' || @parameters[:cluster].to_s == 'no'
37
+ end
38
+
39
+ def fill(hash)
40
+ hash[:cnt] = cities_count if cities_count
41
+ hash[:cluster] = cluster if cluster
42
+
43
+ hash
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,104 @@
1
+ module OpenWeatherAPI
2
+ module Resources
3
+
4
+ class Current
5
+ private
6
+
7
+ class City < QueryHandler
8
+ private
9
+
10
+ def build
11
+ { q: [value, country_code].compact.flatten.join(',') }
12
+ end
13
+
14
+ def value
15
+ @parameters[:city]
16
+ end
17
+ end
18
+
19
+ class CityID < QueryHandler
20
+ def multiple?
21
+ value.is_a? Array
22
+ end
23
+
24
+ private
25
+
26
+ def build
27
+ { q: [value].flatten.compact.join(',') }
28
+ end
29
+
30
+ def value
31
+ @parameters[:id] || @parameters[:city_id]
32
+ end
33
+ end
34
+
35
+ class Geolocation < QueryHandler
36
+ def can?
37
+ latitude != nil && longitude != nil
38
+ end
39
+
40
+ private
41
+
42
+ def build
43
+ { lat: latitude, lon: longitude }
44
+ end
45
+
46
+ def latitude
47
+ @parameters[:latitude] || @parameters[:lat]
48
+ end
49
+
50
+ def longitude
51
+ @parameters[:longitude] || @parameters[:lon]
52
+ end
53
+ end
54
+
55
+ class Zipcode < QueryHandler
56
+ private
57
+
58
+ def build
59
+ { zip: [value, country_code].compact.flatten.join(',') }
60
+ end
61
+
62
+ def value
63
+ @parameters[:zipcode] || @parameters[:zip]
64
+ end
65
+ end
66
+
67
+ class BoundingBox < QueryHandler
68
+ private
69
+
70
+ def topleft
71
+ [ value[:topleft][:lat], value[:topleft][:lon] ].join(',')
72
+ end
73
+
74
+ def bottomright
75
+ [ value[:bottomright][:lat], value[:bottomright][:lon] ].join(',')
76
+ end
77
+
78
+ def zoom
79
+ value[:zoom] || value[:map_zoom] || 10
80
+ end
81
+
82
+ def value
83
+ @parameters[:box] || @parameters[:box] || @parameters[:rect] || @parameters[:rectangle]
84
+ end
85
+
86
+ def build
87
+ fill bbox: [topleft, bottomright, zoom].join(',')
88
+ end
89
+ end
90
+
91
+ class Circle < QueryHandler
92
+ private
93
+
94
+ def value
95
+ @parameters[:circle]
96
+ end
97
+
98
+ def build
99
+ fill lat: value[:lat], lon: value[:lon]
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,3 +1,3 @@
1
1
  module OpenWeatherApi
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open-weather-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wikiti
@@ -38,8 +38,10 @@ files:
38
38
  - doc/icon.png
39
39
  - lib/open-weather-api.rb
40
40
  - lib/open-weather-api/api.rb
41
- - lib/open-weather-api/resources/base_resource.rb
41
+ - lib/open-weather-api/resources/base.rb
42
42
  - lib/open-weather-api/resources/current.rb
43
+ - lib/open-weather-api/resources/handlers/base.rb
44
+ - lib/open-weather-api/resources/handlers/current.rb
43
45
  - lib/open-weather-api/version.rb
44
46
  - open-weather-api.gemspec
45
47
  homepage: https://gitlab.com/wikiti-random-stuff/open-weather-api