ine-places 0.1.3 → 0.1.4
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 +4 -4
- data/README.md +34 -0
- data/bin/console +1 -1
- data/ine-places.gemspec +2 -1
- data/lib/ine/places.rb +17 -0
- data/lib/ine/places/place.rb +4 -0
- data/lib/ine/places/version.rb +1 -1
- metadata +28 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2aeb712180cbc9f2584a43b30e9d99057416fc28
|
|
4
|
+
data.tar.gz: ae8db3e9b905b2072c81725132de81e48d43287e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 901d1a2771bd5a74d8d294ed08dc1b0a247ae46285006528885718978110d412665f0c3e0dd92f1721cfa7b3f1675896aad3aa3a32b5bab976b2711369f95c8e
|
|
7
|
+
data.tar.gz: b6a293d00f5ab63684070025e9e01ade125b40c56018ab5dee805d3ff4b9432385c22596260bc05c0709464a11dde20a6750e1dcec3f1f862111aae30a9b4eb9
|
data/README.md
CHANGED
|
@@ -165,6 +165,40 @@ INE::Places::Place.find_by_slug('burjassot')
|
|
|
165
165
|
=> #<INE::Places::Place id="46078", name="Burjassot", slug="burjassot", province_id="46", lon="-0.4135963", lat="39.5096699", province=#<INE::Places::Province id="46", name="Valencia/València", slug="valencia", autonomous_region_id="10", lon="-0.3762881", lat="39.4699075", autonomous_region=#<INE::Places::AutonomousRegion id="10", name="Comunidad Valenciana", slug="comunidad-valenciana", lon="-0.7532808999999999", lat="39.4840108">>>
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
+
## Hydratating models with data (experimental feature)
|
|
169
|
+
|
|
170
|
+
It's quite common to work with data related with the entities provided by this gem. For example, to know the debt of a place, the amount of schools, the number of inhabitants, and so on. This data lives in external sources, such a CSV or a JSON file, or an API endpoint but can be co-related with the entities using an ID column.
|
|
171
|
+
|
|
172
|
+
Hydratation feature helps you with this issue. For the moment it's very experimental but allows you to add basics sets of data from a local CSV file.
|
|
173
|
+
|
|
174
|
+
For example, given a CSV file with a single row:
|
|
175
|
+
|
|
176
|
+
```csv
|
|
177
|
+
municipio,value
|
|
178
|
+
28079,33
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
You could hydratate the model `INE::Places::Place` using the `.hydrate` function:
|
|
182
|
+
|
|
183
|
+
```ruby
|
|
184
|
+
INE::Places.hydratate INE::Places::Place, 'spec/fixtures/happiness.csv', id_column: 'municipio',
|
|
185
|
+
as: :happiness,
|
|
186
|
+
value_column: 'value'
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
You just need to provide:
|
|
190
|
+
|
|
191
|
+
- id column, to match the IDs
|
|
192
|
+
- the `as` column, with the name of the new method
|
|
193
|
+
- the value column, to know exactly where the value is
|
|
194
|
+
|
|
195
|
+
After hydratating a class, every object of the class has the new method in the `.data` property:
|
|
196
|
+
|
|
197
|
+
```ruby
|
|
198
|
+
place.data.happiness
|
|
199
|
+
#> 100
|
|
200
|
+
```
|
|
201
|
+
|
|
168
202
|
## Development
|
|
169
203
|
|
|
170
204
|
After checking out the repository, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/bin/console
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
3
|
require "bundler/setup"
|
|
4
|
-
require_relative "../lib/ine/places
|
|
4
|
+
require_relative "../lib/ine/places"
|
|
5
5
|
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
data/ine-places.gemspec
CHANGED
|
@@ -27,9 +27,10 @@ Gem::Specification.new do |spec|
|
|
|
27
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
28
28
|
spec.require_paths = ["lib"]
|
|
29
29
|
|
|
30
|
-
spec.add_runtime_dependency "activesupport", "
|
|
30
|
+
spec.add_runtime_dependency "activesupport", ">= 4.2", "<= 5.1"
|
|
31
31
|
|
|
32
32
|
spec.add_development_dependency "bundler", "~> 1.12"
|
|
33
33
|
spec.add_development_dependency "rake", "~> 11.1"
|
|
34
34
|
spec.add_development_dependency "rspec", "~> 3.4"
|
|
35
|
+
spec.add_development_dependency "byebug", '~> 9.0', '>= 9.0.5'
|
|
35
36
|
end
|
data/lib/ine/places.rb
CHANGED
|
@@ -2,6 +2,7 @@ require "ine/places/version"
|
|
|
2
2
|
require "csv"
|
|
3
3
|
require "ostruct"
|
|
4
4
|
require "active_support/all"
|
|
5
|
+
require "byebug"
|
|
5
6
|
|
|
6
7
|
module INE
|
|
7
8
|
module Places
|
|
@@ -23,5 +24,21 @@ module INE
|
|
|
23
24
|
|
|
24
25
|
nil
|
|
25
26
|
end
|
|
27
|
+
|
|
28
|
+
def self.hydratate(klass, data_path, options)
|
|
29
|
+
unless File.file?(data_path)
|
|
30
|
+
raise "Missing data file: #{data_path}"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
data = CSV.read(data_path, headers: true)
|
|
34
|
+
klass.all.map do |obj|
|
|
35
|
+
obj.tap do
|
|
36
|
+
value = if r = data.detect{|row| row[options[:id_column]] == obj.id }
|
|
37
|
+
r[options[:value_column]]
|
|
38
|
+
end
|
|
39
|
+
obj.data.send((options[:as].to_s + '=').to_sym, value)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
26
43
|
end
|
|
27
44
|
end
|
data/lib/ine/places/place.rb
CHANGED
data/lib/ine/places/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ine-places
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Fernando Blat
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-06-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '4.2'
|
|
20
|
-
- - "
|
|
20
|
+
- - "<="
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version:
|
|
22
|
+
version: '5.1'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
|
-
- - "
|
|
27
|
+
- - ">="
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
29
|
version: '4.2'
|
|
30
|
-
- - "
|
|
30
|
+
- - "<="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version:
|
|
32
|
+
version: '5.1'
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: bundler
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -72,6 +72,26 @@ dependencies:
|
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
74
|
version: '3.4'
|
|
75
|
+
- !ruby/object:Gem::Dependency
|
|
76
|
+
name: byebug
|
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - "~>"
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '9.0'
|
|
82
|
+
- - ">="
|
|
83
|
+
- !ruby/object:Gem::Version
|
|
84
|
+
version: 9.0.5
|
|
85
|
+
type: :development
|
|
86
|
+
prerelease: false
|
|
87
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
88
|
+
requirements:
|
|
89
|
+
- - "~>"
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: '9.0'
|
|
92
|
+
- - ">="
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: 9.0.5
|
|
75
95
|
description: Work with Spanish regions using INE codes and data
|
|
76
96
|
email:
|
|
77
97
|
- ferblape@gmail.com
|