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
         |