middleman-wordpress 0.0.1
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 +7 -0
- data/.gitignore +5 -0
- data/Gemfile +19 -0
- data/README.md +32 -0
- data/Rakefile +14 -0
- data/features/support/env.rb +4 -0
- data/lib/middleman-wordpress.rb +8 -0
- data/lib/middleman-wordpress/commands/wordpress.rb +128 -0
- data/lib/middleman-wordpress/core.rb +25 -0
- data/lib/middleman-wordpress/version.rb +3 -0
- data/lib/middleman_extension.rb +1 -0
- data/middleman-wordpress.gemspec +27 -0
- metadata +86 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a2e98f72df5ee4e68c6582e6f65cc0a707421d35
|
4
|
+
data.tar.gz: 82d7df54de017b726ea3694aa1e25b60058fdee2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2fcf67f21d416c0d1586b4fc63c2d7ab0a24b6bd99c5db74e39f75da674d58745ac5a18a30472bb2910e0848872afa12f44a8405a82242b3c44f60f82e87b22d
|
7
|
+
data.tar.gz: 95b6a9cee59b3e0e94e9c47cf37d4fcade837c652350685ce4cd1a77589637e89a255690099c0eb7d89402f84249c18b0710cfbc16a8fae220a2c28c8b553db3
|
data/.gitignore
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# If you do not have OpenSSL installed, update
|
2
|
+
# the following line to use "http://" instead
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in middleman-wordpress.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem 'rake'
|
10
|
+
gem 'rdoc'
|
11
|
+
gem 'yard'
|
12
|
+
end
|
13
|
+
|
14
|
+
group :test do
|
15
|
+
gem 'cucumber'
|
16
|
+
gem 'fivemat'
|
17
|
+
gem 'aruba'
|
18
|
+
gem 'rspec'
|
19
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# middleman-wordpress
|
2
|
+
|
3
|
+
An extension for Middleman that pulls content from WordPress.
|
4
|
+
|
5
|
+
## About
|
6
|
+
|
7
|
+
This extension pulls content from WordPress via the WP REST API plugin for WordPress.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
```
|
12
|
+
gem install middleman-wordpress
|
13
|
+
```
|
14
|
+
|
15
|
+
## Configuration
|
16
|
+
|
17
|
+
in `config.rb`
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
activate :wordpress do |wp|
|
21
|
+
wp.uri = 'example.com'
|
22
|
+
wp.custom_post_types = [:events, :resources, :other_things]
|
23
|
+
end
|
24
|
+
```
|
25
|
+
|
26
|
+
## Import Data
|
27
|
+
|
28
|
+
To import data, run:
|
29
|
+
|
30
|
+
```
|
31
|
+
middleman wordpress
|
32
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'cucumber/rake/task'
|
5
|
+
|
6
|
+
Cucumber::Rake::Task.new(:cucumber, 'Run features that should pass') do |t|
|
7
|
+
t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}"
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'rake/clean'
|
11
|
+
|
12
|
+
task test: ['cucumber']
|
13
|
+
|
14
|
+
task default: :test
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'middleman-core/cli'
|
4
|
+
require 'wp/api'
|
5
|
+
|
6
|
+
module Middleman
|
7
|
+
module Cli
|
8
|
+
class WordPress < Thor
|
9
|
+
include Thor::Actions
|
10
|
+
|
11
|
+
# Path where Middleman expects the local data to be stored
|
12
|
+
MIDDLEMAN_LOCAL_DATA_FOLDER = 'data'
|
13
|
+
|
14
|
+
check_unknown_options!
|
15
|
+
|
16
|
+
namespace :wordpress
|
17
|
+
desc 'wordpress', 'Import data from WordPress'
|
18
|
+
|
19
|
+
# @todo option to rebuild site if data changes
|
20
|
+
# method_option "rebuild", aliases: "-r", desc: "Rebuilds the site if there were changes to the imported data"
|
21
|
+
|
22
|
+
def self.source_root
|
23
|
+
ENV['MM_ROOT']
|
24
|
+
end
|
25
|
+
|
26
|
+
# Tell Thor to exit with a nonzero exit code on failure
|
27
|
+
def self.exit_on_failure?
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
def wordpress
|
32
|
+
::Middleman::Application.server.inst
|
33
|
+
|
34
|
+
# Create data directory if it does not exist
|
35
|
+
Dir.mkdir('data') unless File.exists?('data')
|
36
|
+
|
37
|
+
# Remove all WordPress files
|
38
|
+
FileUtils.rm_rf(Dir.glob('data/wordpress_*'))
|
39
|
+
|
40
|
+
# Instantiate the client
|
41
|
+
@api = WP::API[MiddlemanWordPress.options.uri]
|
42
|
+
|
43
|
+
# Build-up posts
|
44
|
+
posts = []
|
45
|
+
posts.concat fetch_pages_collection
|
46
|
+
posts.concat fetch_posts_collection(:posts)
|
47
|
+
|
48
|
+
MiddlemanWordPress.options.custom_post_types.each do |post_type|
|
49
|
+
posts.concat fetch_posts_collection(post_type)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Strip out headers; keep attributes
|
53
|
+
posts.map!{|post| post.attributes}
|
54
|
+
|
55
|
+
# Derive all the post types
|
56
|
+
post_types = []
|
57
|
+
posts.each{|post| post_types << post['type']}
|
58
|
+
post_types.uniq!
|
59
|
+
|
60
|
+
# Save the posts out to disc in collections by post type
|
61
|
+
post_types.each do |post_type|
|
62
|
+
collection_name = post_type.pluralize
|
63
|
+
collection = posts.select{|post| post['type'] == post_type}
|
64
|
+
extension = "json"
|
65
|
+
|
66
|
+
File.open("data/wordpress_#{collection_name}.#{extension}", "w") do |f|
|
67
|
+
f.write(collection.to_json)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
protected
|
73
|
+
|
74
|
+
def fetch_pages_collection
|
75
|
+
pages = []
|
76
|
+
page = 1
|
77
|
+
limit = 10
|
78
|
+
|
79
|
+
tmp_pages = fetch_pages(page, limit)
|
80
|
+
while !tmp_pages.empty?
|
81
|
+
pages.concat tmp_pages
|
82
|
+
page = page + 1
|
83
|
+
tmp_pages = fetch_pages(page, limit)
|
84
|
+
end
|
85
|
+
|
86
|
+
pages
|
87
|
+
end
|
88
|
+
|
89
|
+
def fetch_posts_collection(type)
|
90
|
+
type = type.to_s.singularize
|
91
|
+
posts = []
|
92
|
+
page = 1
|
93
|
+
limit = 10
|
94
|
+
|
95
|
+
tmp_posts = fetch_posts(type, page, limit)
|
96
|
+
while !tmp_posts.empty?
|
97
|
+
posts.concat tmp_posts
|
98
|
+
page = page + 1
|
99
|
+
tmp_posts = fetch_posts(type, page, limit)
|
100
|
+
end
|
101
|
+
|
102
|
+
posts
|
103
|
+
end
|
104
|
+
|
105
|
+
def fetch_pages(page, limit)
|
106
|
+
begin
|
107
|
+
pages = @api.pages(page: page, posts_per_page: limit)
|
108
|
+
rescue WP::API::ResourceNotFoundError => e
|
109
|
+
# Who cares? We've reached the end of the list
|
110
|
+
pages = []
|
111
|
+
end
|
112
|
+
|
113
|
+
pages
|
114
|
+
end
|
115
|
+
|
116
|
+
def fetch_posts(type, page, limit)
|
117
|
+
begin
|
118
|
+
posts = @api.posts(type: type, page: page, posts_per_page: limit)
|
119
|
+
rescue WP::API::ResourceNotFoundError => e
|
120
|
+
# Who cares? We've reached the end of the list
|
121
|
+
posts = []
|
122
|
+
end
|
123
|
+
|
124
|
+
posts
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module MiddlemanWordPress
|
2
|
+
class << self
|
3
|
+
attr_reader :options
|
4
|
+
end
|
5
|
+
|
6
|
+
class Core < Middleman::Extension
|
7
|
+
option :uri, nil, "The WordPress API uri"
|
8
|
+
option :custom_post_types, [], "Custom post types"
|
9
|
+
|
10
|
+
def initialize(app, options_hash={}, &block)
|
11
|
+
super
|
12
|
+
|
13
|
+
MiddlemanWordPress.instance_variable_set('@options', options)
|
14
|
+
end
|
15
|
+
|
16
|
+
helpers do
|
17
|
+
Dir["data/wordpress_*"].each do |file|
|
18
|
+
define_method(file.gsub("data/wordpress_", "")) do
|
19
|
+
file = File.read(file)
|
20
|
+
return JSON.parse(file)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'middleman-wordpress'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
require 'middleman-wordpress/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "middleman-wordpress"
|
8
|
+
s.version = MiddlemanWordPress::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.authors = ["Nickolas Kenyeres"]
|
11
|
+
s.email = ["nkenyeres@gmail.com"]
|
12
|
+
s.homepage = "https://github.com/knicklabs/middleman-wordpress"
|
13
|
+
s.summary = %q{An extension for Middleman that pulls content from WordPress via WP REST API}
|
14
|
+
s.description = %q{An extension for Middleman that enables the building of static websites using WordPress-managed content. This extension pulls content from WordPress via the WP REST API plugin for WordPress.}
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# The version of middleman-core your extension depends on
|
22
|
+
s.add_runtime_dependency("middleman-core", [">= 3.3.12"])
|
23
|
+
s.add_runtime_dependency("wp-api", [">= 0.1.3"])
|
24
|
+
|
25
|
+
# Additional dependencies
|
26
|
+
# s.add_runtime_dependency("gem-name", "gem-version")
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-wordpress
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nickolas Kenyeres
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: middleman-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.3.12
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.3.12
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: wp-api
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.1.3
|
41
|
+
description: An extension for Middleman that enables the building of static websites
|
42
|
+
using WordPress-managed content. This extension pulls content from WordPress via
|
43
|
+
the WP REST API plugin for WordPress.
|
44
|
+
email:
|
45
|
+
- nkenyeres@gmail.com
|
46
|
+
executables: []
|
47
|
+
extensions: []
|
48
|
+
extra_rdoc_files: []
|
49
|
+
files:
|
50
|
+
- ".gitignore"
|
51
|
+
- Gemfile
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- features/support/env.rb
|
55
|
+
- lib/middleman-wordpress.rb
|
56
|
+
- lib/middleman-wordpress/commands/wordpress.rb
|
57
|
+
- lib/middleman-wordpress/core.rb
|
58
|
+
- lib/middleman-wordpress/version.rb
|
59
|
+
- lib/middleman_extension.rb
|
60
|
+
- middleman-wordpress.gemspec
|
61
|
+
homepage: https://github.com/knicklabs/middleman-wordpress
|
62
|
+
licenses: []
|
63
|
+
metadata: {}
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
requirements: []
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 2.2.2
|
81
|
+
signing_key:
|
82
|
+
specification_version: 4
|
83
|
+
summary: An extension for Middleman that pulls content from WordPress via WP REST
|
84
|
+
API
|
85
|
+
test_files:
|
86
|
+
- features/support/env.rb
|