contentful_middleman 1.0.4 → 1.1.0
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/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
|
-
[](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
|