jekyll-everypolitician 0.2.0 → 0.3.0

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
2
  SHA1:
3
- metadata.gz: df7c92e1d38d1a4ba4e7675ec40f6b225966b5e1
4
- data.tar.gz: d5ecc1fb4943a25e7d2694ec8145e6a60e0fa420
3
+ metadata.gz: 9387daa16bfcd547db3dcf3c7b7927d72af361ac
4
+ data.tar.gz: 7530ef6cd4232c9ed4f07bc723d6ccd142e67938
5
5
  SHA512:
6
- metadata.gz: c61a1c1bac048520a7a1aa29e57b00b19df6d5ad273663bdf72f2f32e1d49c0bffbc1b66e93948e82baea53c8f58741ba4cd168b2d041df068972fbf63388cfb
7
- data.tar.gz: 1cd95835ec1f3c1f68ed429036e158b9af00e2594e02d2d0f1d7ff31e448e37defbc8d76adb545b057c8e607afa633f8befae368b80bba9bf131e297bb4b959c
6
+ metadata.gz: de2310fa3695a3ab4b8a89e9a95018914cab6315d6b0ff06246fea9300196a5225a4a7e202a2b85c0f2a75ff82ae80373050af98ee5fce00560b0a948e0d99bf
7
+ data.tar.gz: 6bfd4923784f3ea99103a0213cd6bcb819ebc890231d1367607d44af761c7ad7a63ca2dbb4f64ec1dd19ce5a6609273809fe52361b975398924b105108456fee
data/.travis.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  language: ruby
2
+ cache: bundler
2
3
  rvm:
4
+ - 2.0.0
5
+ - 2.1.7
3
6
  - 2.2.3
4
7
  before_install: gem install bundler -v 1.10.6
data/CHANGELOG.md CHANGED
@@ -2,9 +2,16 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
- ## 0.1.0 - 2015-12-02
5
+ ## [0.3.0] - 2015-12-02
6
6
 
7
- - Initial release
7
+ ### Changed
8
+
9
+ - `everypolitician_url` in `_config.yml` has been renamed to `everypolitician` and is now a hash. See the [Usage section in the README](https://github.com/everypolitician/jekyll-everypolitician/blob/2d9d9d562e99608b33038f712305c179e0196c8e/README.md#usage) for more details on how to use this. This means you can specify multiple sources for your data [#2](https://github.com/everypolitician/jekyll-everypolitician/issues/2)
10
+ - `persons` collection is now called `people` [#3](https://github.com/everypolitician/jekyll-everypolitician/issues/3)
11
+
12
+ ### Fixed
13
+
14
+ - We no longer raise an error if the config is missing.
8
15
 
9
16
  ## [0.2.0] - 2015-12-02
10
17
 
@@ -12,4 +19,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
12
19
 
13
20
  - You can now set `everypolitician_url` in `_config.yml` to an everypolitician popolo url
14
21
 
22
+ ## 0.1.0 - 2015-12-02
23
+
24
+ - Initial release
25
+
26
+
15
27
  [0.2.0]: https://github.com/everypolitician/jekyll-everypolitician/compare/v0.1.0...v0.2.0
28
+ [0.3.0]: https://github.com/everypolitician/jekyll-everypolitician/compare/v0.2.0...v0.3.0
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Jekyll::Everypolitician
1
+ # Jekyll::Everypolitician [![Build Status](https://travis-ci.org/everypolitician/jekyll-everypolitician.svg?branch=master)](https://travis-ci.org/everypolitician/jekyll-everypolitician)
2
2
 
3
3
  Use [EveryPolitician](http://everypolitician.org) data in your Jekyll generated site.
4
4
 
@@ -29,7 +29,32 @@ gems:
29
29
 
30
30
  ## Usage
31
31
 
32
- TODO: Write usage instructions here
32
+ You need to configure Jekyll so it knows which data to use. In your `_config.yml` add the following to tell jekyll-everypolitician where to get the data from:
33
+
34
+ ```yaml
35
+ everypolitician:
36
+ sources:
37
+ - https://github.com/everypolitician/everypolitician-data/raw/master/data/Australia/Representatives/ep-popolo-v1.0.json
38
+ ```
39
+
40
+ This tells it to use the data for the Australian Representatives, and specifies which version of the data to use, in this case `master`.
41
+
42
+ When sources is an array, as in the example above, the collections that are created are `people`, `organizations`, `areas` and `events`.
43
+
44
+ Sometimes you'll want more than one source, for example you might want the upper house as well. For this case you can specify sources as a hash:
45
+
46
+ ```yaml
47
+ everypolitician:
48
+ sources:
49
+ assembly: https://github.com/everypolitician/everypolitician-data/raw/master/data/Australia/Representatives/ep-popolo-v1.0.json
50
+ senate: https://github.com/everypolitician/everypolitician-data/raw/master/data/Australia/Senate/ep-popolo-v1.0.json
51
+ ```
52
+
53
+ When `sources` is a hash like this the collections that are created are prefixed with the key of the hash, e.g. `assembly_people`, `senate_people`, `assembly_areas` etc.
54
+
55
+ ### Layouts
56
+
57
+ This plugin will try and use layouts that are named after the generated collections. So in the examples above if you'd specified `sources` as an array then it would try to use `_layouts/people.html` as the layout for the `people` collection. Similarly if you specify `sources` as a hash then it would try to use something like `_layouts/assembly_people.html` for the `assembly_people` collection.
33
58
 
34
59
  ## Development
35
60
 
data/bin/console CHANGED
@@ -6,9 +6,8 @@ require 'jekyll/everypolitician'
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.
8
8
 
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
9
+ SITE = Jekyll::Site.new(Jekyll.configuration)
10
+ SITE.config['everypolitician_url'] = 'test/fixtures/vatican-ep-popolo-v1.0.json'
12
11
 
13
- require 'irb'
14
- IRB.start
12
+ require 'pry'
13
+ Pry.start
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'bundler', '~> 1.10'
25
25
  spec.add_development_dependency 'rake', '~> 10.0'
26
26
  spec.add_development_dependency 'minitest'
27
+ spec.add_development_dependency 'pry'
27
28
  end
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Everypolitician
3
- VERSION = '0.2.0'
3
+ VERSION = '0.3.0'
4
4
  end
5
5
  end
@@ -10,44 +10,72 @@ require 'active_support/core_ext/string'
10
10
  module Jekyll
11
11
  module Everypolitician
12
12
  class Generator < Jekyll::Generator
13
+ COLLECTION_MAPPING = {
14
+ 'persons' => 'people'
15
+ }
16
+
13
17
  def generate(site)
14
- popolo = JSON.parse(open(site.config['everypolitician_url']).read)
18
+ return unless site.config.key?('everypolitician')
19
+ sources = site.config['everypolitician']['sources']
20
+ if sources.is_a?(Array)
21
+ generate_collections(site, sources.first)
22
+ elsif sources.is_a?(Hash)
23
+ sources.each do |prefix, source|
24
+ generate_collections(site, source, prefix)
25
+ end
26
+ end
27
+ end
28
+
29
+ def generate_collections(site, source, prefix = nil)
30
+ popolo = JSON.parse(open(source).read)
15
31
  memberships = popolo['memberships']
16
- popolo.keys.each do |collection_name|
17
- next unless popolo[collection_name].is_a?(Array)
32
+ popolo.keys.each do |type|
33
+ next unless popolo[type].is_a?(Array)
34
+ collection_name = collection_name_for(type, prefix)
18
35
  collection = Collection.new(site, collection_name)
19
- popolo[collection_name].each do |item|
36
+ popolo[type].each do |item|
20
37
  next unless item['id']
21
38
  path = File.join(site.source, "_#{collection_name}", "#{item['id'].parameterize}.md")
22
39
  doc = Document.new(path, collection: collection, site: site)
23
40
  doc.merge_data!(item)
24
41
  doc.merge_data!(
25
42
  'title' => item['name'],
26
- 'layout' => collection_name,
27
- 'memberships' => memberships_for(item, collection_name, memberships)
43
+ 'memberships' => memberships_for(item, type, memberships)
28
44
  )
45
+ if site.layouts.key?(collection_name)
46
+ doc.merge_data!('layout' => collection_name)
47
+ end
29
48
  collection.docs << doc
30
49
  end
31
50
  site.collections[collection_name] = collection
32
51
  end
33
52
 
34
53
  memberships.each do |membership|
35
- membership['person'] = site.collections['persons'].docs.find { |p| p.data['id'] == membership['person_id'] }
36
- membership['area'] = site.collections['areas'].docs.find { |a| a.data['id'] == membership['area_id'] }
37
- membership['legislative_period'] = site.collections['events'].docs.find { |e| e.data['id'] == membership['legislative_period_id'] }
38
- membership['organization'] = site.collections['organizations'].docs.find { |o| o.data['id'] == membership['organization_id'] }
39
- membership['party'] = site.collections['organizations'].docs.find { |o| o.data['id'] == membership['on_behalf_of_id'] }
54
+ membership['person'] = site.collections[collection_name_for('persons', prefix)].docs.find { |p| p.data['id'] == membership['person_id'] }
55
+ membership['area'] = site.collections[collection_name_for('areas', prefix)].docs.find { |a| a.data['id'] == membership['area_id'] }
56
+ membership['legislative_period'] = site.collections[collection_name_for('events', prefix)].docs.find { |e| e.data['id'] == membership['legislative_period_id'] }
57
+ membership['organization'] = site.collections[collection_name_for('organizations', prefix)].docs.find { |o| o.data['id'] == membership['organization_id'] }
58
+ membership['party'] = site.collections[collection_name_for('organizations', prefix)].docs.find { |o| o.data['id'] == membership['on_behalf_of_id'] }
59
+ end
60
+ end
61
+
62
+ def collection_name_for(type, prefix = nil)
63
+ name = COLLECTION_MAPPING[type] || type
64
+ if prefix
65
+ [prefix, name].join('_')
66
+ else
67
+ name
40
68
  end
41
69
  end
42
70
 
43
- def memberships_for(item, collection_name, memberships)
71
+ def memberships_for(item, type, memberships)
44
72
  map = {
45
73
  'areas' => 'area_id',
46
74
  'persons' => 'person_id',
47
75
  'events' => 'legislative_period_id',
48
76
  'organizations' => 'on_behalf_of_id'
49
77
  }
50
- memberships.find_all { |m| m[map[collection_name]] == item['id'] }
78
+ memberships.find_all { |m| m[map[type]] == item['id'] }
51
79
  end
52
80
  end
53
81
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-everypolitician
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Mytton
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description:
84
98
  email:
85
99
  - chrismytton@gmail.com