contentful_middleman 1.0.4 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +11 -8
- data/examples/mappers/backref.rb +59 -0
- data/lib/contentful_middleman/commands/contentful.rb +3 -1
- data/lib/contentful_middleman/core.rb +3 -0
- data/lib/contentful_middleman/import_task.rb +5 -4
- data/lib/contentful_middleman/instance.rb +15 -6
- data/lib/contentful_middleman/mappers/base.rb +6 -0
- data/lib/contentful_middleman/version.rb +1 -1
- data/lib/contentful_middleman/version_hash.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 702b32a151db22f1766007ab9037dd0f97514772
|
4
|
+
data.tar.gz: a1b77abea5946045d0ec3c0d78206a947cb91a37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9347872cd447c2be6ba366e98578320239d5335957bbf41b263055fed811a4b7320493bdf4dc18a4c9928d0bdf147a593a0834bd4b3836acd73962e194dc2122
|
7
|
+
data.tar.gz: b481b2f37faee22a12a9bfbc172dff6d7fa76765d3f7b022564ec42bdca689c902a7bb67832ae329b2357fd821a99a149f7f4da71a6c7610abc4a943392e9e0f
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 1.1.0
|
4
|
+
### Added
|
5
|
+
* New extension option: `use_preview_api`
|
6
|
+
* An example mapper that allows references from linked to linking entries
|
7
|
+
|
8
|
+
### Changed
|
9
|
+
* Make the all the entries available inside the mapper
|
10
|
+
|
11
|
+
### Fixed
|
12
|
+
* Calculate the version hash using the `updated_at` value of every entry instead of its revision
|
13
|
+
|
3
14
|
## 1.0.4
|
4
15
|
### Fixed
|
5
16
|
* Typo in the require statements
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Contentful Middleman
|
2
2
|
|
3
|
-
[![Build Status](https://travis-ci.org/contentful/contentful_middleman.
|
3
|
+
[![Build Status](https://travis-ci.org/contentful-labs/contentful_middleman.svg?branch=master)](https://travis-ci.org/contentful-labs/contentful_middleman)
|
4
4
|
|
5
5
|
Contentful Middleman is a [Middleman](http://middlemanapp.com/) extension to use the Middleman static site generator together with the API-driven [Contentful CMS](https://www.contentful.com). It is powered by the [Contentful Ruby Gem](https://github.com/contentful/contentful.rb).
|
6
6
|
|
@@ -44,12 +44,13 @@ activate :contentful do |f|
|
|
44
44
|
end
|
45
45
|
```
|
46
46
|
|
47
|
-
Parameter
|
48
|
-
----------
|
49
|
-
space
|
50
|
-
access_token
|
51
|
-
cda_query
|
52
|
-
content_types
|
47
|
+
Parameter | Description
|
48
|
+
---------- | ------------
|
49
|
+
space | Hash with an user choosen name for the space as key and the space id as value
|
50
|
+
access_token | Contentful Delivery API access token
|
51
|
+
cda_query | Hash describing query configuration. See [contentful.rb](https://github.com/contentful/contentful.rb) for more info (look for filter options there)
|
52
|
+
content_types | Hash describing the mapping applied to entries of the imported content types
|
53
|
+
use_preview_api | Boolean to toogle the used API. Set it to `false` to use `cdn.contentful.com` (default value). Set it to `true` to use `preview.contentful.com`. More info in [the documentation](https://www.contentful.com/developers/documentation/content-delivery-api/#preview-api)
|
53
54
|
|
54
55
|
You can activate the extension multiple times to import entries from different spaces.
|
55
56
|
## Entry mapping
|
@@ -81,7 +82,7 @@ end
|
|
81
82
|
If you don't want to map all the fields by hand inherit from the Base mappper:
|
82
83
|
|
83
84
|
```ruby
|
84
|
-
class MyAwesomeMapper < ContentfulMiddleman::
|
85
|
+
class MyAwesomeMapper < ContentfulMiddleman::Mapper::Base
|
85
86
|
def map(context, entry)
|
86
87
|
super
|
87
88
|
# After calling super the context object
|
@@ -91,6 +92,8 @@ class MyAwesomeMapper < ContentfulMiddleman::Mappers::Base
|
|
91
92
|
end
|
92
93
|
```
|
93
94
|
|
95
|
+
There's also an example back-reference mapper in the examples directory for adding back-references onto entries that are linked to by other entries.
|
96
|
+
|
94
97
|
## Configuration: examples
|
95
98
|
|
96
99
|
```ruby
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# A function that returns a Mapper class for adding back-references to
|
2
|
+
# contentful data files. If a Product content type had a "company" entry field
|
3
|
+
# that referenced a Company content type, using the following BackrefMapper on
|
4
|
+
# the Company content type would add a "products" field to the company data
|
5
|
+
# files with a list of all Products that reference that Company:
|
6
|
+
#
|
7
|
+
# BackrefMapper(EMPLOYEE_CONTENT_TYPE_ID, 'department', 'employees')
|
8
|
+
#
|
9
|
+
# For example, given these two files:
|
10
|
+
#
|
11
|
+
# ---
|
12
|
+
# :id: 12345
|
13
|
+
# :name: Jet-Propelled Tennis Shoes
|
14
|
+
# :company:
|
15
|
+
# - :id: 54321
|
16
|
+
# :name: Acme
|
17
|
+
#
|
18
|
+
# ---
|
19
|
+
# :id: 54321
|
20
|
+
# :name: Acme
|
21
|
+
# :website: http://acme.example.com/
|
22
|
+
#
|
23
|
+
# The Acme company YAML file would become:
|
24
|
+
#
|
25
|
+
# ---
|
26
|
+
# :id: 54321
|
27
|
+
# :name: Acme
|
28
|
+
# :website: http://acme.example.com/
|
29
|
+
# :products:
|
30
|
+
# - :id: 12345
|
31
|
+
# :name: Jet-Propelled Tennis Shoes
|
32
|
+
# :company:
|
33
|
+
# - :id: 54321
|
34
|
+
# :name: Acme
|
35
|
+
#
|
36
|
+
# Params:
|
37
|
+
# +content_type_id+:: The ID of the content_type that references the
|
38
|
+
# content_type that this mapper is being applied to
|
39
|
+
# +content_type_field+:: The field name on the content_type to look for
|
40
|
+
# references
|
41
|
+
# +backref_field+:: The new field to create to hold the list of references
|
42
|
+
def self.BackrefMapper(content_type_id, content_type_field, backref_field)
|
43
|
+
klass = Class.new ContentfulMiddleman::Mapper::Base do
|
44
|
+
|
45
|
+
@@content_type_id = content_type_id
|
46
|
+
@@content_type_field = content_type_field
|
47
|
+
@@backref_field = backref_field
|
48
|
+
|
49
|
+
def map(context, entry)
|
50
|
+
super
|
51
|
+
content_type_entries = @entries.select { |e| e.sys[:contentType].id == @@content_type_id }
|
52
|
+
referencing_entries = content_type_entries.select{ |e| e.send(@@content_type_field).map{|x| x.id}.include? entry.id }
|
53
|
+
referencing_ids = referencing_entries.map{ |e| e.id }
|
54
|
+
context.set(@@backref_field, map_value(referencing_ids))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
return klass
|
59
|
+
end
|
@@ -25,11 +25,12 @@ module ContentfulMiddleman
|
|
25
25
|
private
|
26
26
|
def local_data_files
|
27
27
|
entries.map do |entry|
|
28
|
-
|
29
|
-
content_type_name
|
30
|
-
context
|
28
|
+
content_type_mapper_class = @content_type_mappers.fetch(entry.content_type.id)
|
29
|
+
content_type_name = @content_type_names.fetch(entry.content_type.id).to_s
|
30
|
+
context = ContentfulMiddleman::Context.new
|
31
31
|
|
32
|
-
content_type_mapper.new
|
32
|
+
content_type_mapper = content_type_mapper_class.new(entries)
|
33
|
+
content_type_mapper.map(context, entry)
|
33
34
|
|
34
35
|
LocalData::File.new(context.to_yaml, File.join(@space_name, content_type_name, entry.id))
|
35
36
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module ContentfulMiddleman
|
2
2
|
class Instance
|
3
|
+
API_PREVIEW_URL = 'preview.contentful.com'
|
4
|
+
|
3
5
|
def initialize(extension)
|
4
6
|
@extension = extension
|
5
7
|
end
|
@@ -30,12 +32,19 @@ module ContentfulMiddleman
|
|
30
32
|
|
31
33
|
private
|
32
34
|
def client
|
33
|
-
@client ||= Contentful::Client.new(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
@client ||= Contentful::Client.new(client_options)
|
36
|
+
end
|
37
|
+
|
38
|
+
def client_options
|
39
|
+
client_options = {
|
40
|
+
access_token: options.access_token,
|
41
|
+
space: options.space.fetch(:id),
|
42
|
+
dynamic_entries: :auto,
|
43
|
+
raise_errors: true
|
44
|
+
}
|
45
|
+
|
46
|
+
client_options[:api_url] = API_PREVIEW_URL if options.use_preview_api
|
47
|
+
client_options
|
39
48
|
end
|
40
49
|
|
41
50
|
def options
|
@@ -3,6 +3,12 @@ require_relative '../commands/context'
|
|
3
3
|
module ContentfulMiddleman
|
4
4
|
module Mapper
|
5
5
|
class Base
|
6
|
+
attr_reader :entries
|
7
|
+
|
8
|
+
def initialize(entries)
|
9
|
+
@entries = entries
|
10
|
+
end
|
11
|
+
|
6
12
|
def map(context, entry)
|
7
13
|
context.id = entry.id
|
8
14
|
entry.fields.each {|k, v| map_field context, k, v}
|
@@ -12,7 +12,7 @@ module ContentfulMiddleman
|
|
12
12
|
|
13
13
|
def write_for_space_with_entries(space_name, entries)
|
14
14
|
sorted_entries = entries.sort {|a, b| a.id <=> b.id}
|
15
|
-
ids_and_revisions_string = sorted_entries.map {|e| "#{e.id}#{e.
|
15
|
+
ids_and_revisions_string = sorted_entries.map {|e| "#{e.id}#{e.updated_at}"}.join
|
16
16
|
entries_hash = Digest::SHA1.hexdigest( ids_and_revisions_string )
|
17
17
|
|
18
18
|
File.open(hashfilename(space_name), 'w') { |file| file.write(entries_hash) }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contentful_middleman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sascha Konietzke
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-04-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: middleman-core
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- Rakefile
|
87
87
|
- TODO
|
88
88
|
- contentful_middleman.gemspec
|
89
|
+
- examples/mappers/backref.rb
|
89
90
|
- lib/contentful_middleman.rb
|
90
91
|
- lib/contentful_middleman/commands/contentful.rb
|
91
92
|
- lib/contentful_middleman/commands/context.rb
|