sphonglepress 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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ pkg/*
4
+ .redcar/*
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.2@sphonglepress
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in sphonglepress.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,100 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ sphonglepress (0.0.1)
5
+ activerecord
6
+ haml
7
+ middleman
8
+ thor
9
+ tilt
10
+
11
+ GEM
12
+ remote: http://rubygems.org/
13
+ specs:
14
+ activemodel (3.0.9)
15
+ activesupport (= 3.0.9)
16
+ builder (~> 2.1.2)
17
+ i18n (~> 0.5.0)
18
+ activerecord (3.0.9)
19
+ activemodel (= 3.0.9)
20
+ activesupport (= 3.0.9)
21
+ arel (~> 2.0.10)
22
+ tzinfo (~> 0.3.23)
23
+ activesupport (3.0.9)
24
+ arel (2.0.10)
25
+ builder (2.1.2)
26
+ chunky_png (1.2.0)
27
+ coffee-script (2.2.0)
28
+ coffee-script-source
29
+ execjs
30
+ coffee-script-source (1.1.1)
31
+ compass (0.11.2)
32
+ chunky_png (~> 1.1)
33
+ fssm (>= 0.2.7)
34
+ sass (~> 3.1)
35
+ crack (0.1.8)
36
+ daemons (1.1.4)
37
+ eventmachine (0.12.10)
38
+ execjs (1.2.0)
39
+ multi_json (~> 1.0)
40
+ fssm (0.2.7)
41
+ haml (3.1.2)
42
+ http_router (0.7.10)
43
+ rack (>= 1.0.0)
44
+ url_mount (~> 0.2.1)
45
+ httparty (0.7.8)
46
+ crack (= 0.1.8)
47
+ i18n (0.5.0)
48
+ middleman (1.2.8)
49
+ coffee-script (~> 2.2.0)
50
+ compass (= 0.11.2)
51
+ haml (~> 3.1.0)
52
+ httparty (~> 0.7.0)
53
+ padrino-core (~> 0.9.23)
54
+ padrino-helpers (~> 0.9.23)
55
+ rack (~> 1.0)
56
+ rack-test (~> 0.5.0)
57
+ sass (~> 3.1.0)
58
+ shotgun (~> 0.8.0)
59
+ sinatra (~> 1.2.0)
60
+ thin (~> 1.2.0)
61
+ thor (~> 0.14.0)
62
+ tilt (~> 1.3.0)
63
+ uglifier (~> 0.5.0)
64
+ multi_json (1.0.3)
65
+ padrino-core (0.9.29)
66
+ activesupport (>= 3.0.0)
67
+ http_router (~> 0.7.8)
68
+ sinatra (~> 1.2.6)
69
+ thor (>= 0.14.3)
70
+ tilt (~> 1.3.0)
71
+ padrino-helpers (0.9.29)
72
+ i18n (>= 0.4.1)
73
+ padrino-core (= 0.9.29)
74
+ rack (1.3.0)
75
+ rack-test (0.5.7)
76
+ rack (>= 1.0)
77
+ sass (3.1.4)
78
+ shotgun (0.8)
79
+ rack (>= 1.0)
80
+ sinatra (1.2.6)
81
+ rack (~> 1.1)
82
+ tilt (< 2.0, >= 1.2.2)
83
+ thin (1.2.11)
84
+ daemons (>= 1.0.9)
85
+ eventmachine (>= 0.12.6)
86
+ rack (>= 1.0.0)
87
+ thor (0.14.6)
88
+ tilt (1.3.2)
89
+ tzinfo (0.3.29)
90
+ uglifier (0.5.4)
91
+ execjs (>= 0.3.0)
92
+ multi_json (>= 1.0.2)
93
+ url_mount (0.2.1)
94
+ rack
95
+
96
+ PLATFORMS
97
+ ruby
98
+
99
+ DEPENDENCIES
100
+ sphonglepress!
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ === 0.0.1 2011-07-01
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,11 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ lib/sphonglepress.rb
7
+ script/console
8
+ script/destroy
9
+ script/generate
10
+ test/test_helper.rb
11
+ test/test_sphonglepress.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,7 @@
1
+
2
+ For more information on sphonglepress, see http://sphonglepress.rubyforge.org
3
+
4
+ NOTE: Change this information in PostInstall.txt
5
+ You can also delete it if you don't want it.
6
+
7
+
data/README.rdoc ADDED
@@ -0,0 +1,62 @@
1
+ = sphonglepress
2
+
3
+ * http://github.com/nhemsley/sphonglepress
4
+
5
+ == DESCRIPTION:
6
+
7
+ Sphonglepress is a command line utility for interacting with & making the task of importing content into a wordpress site
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * FIX (list of features or problems)
12
+
13
+ == SYNOPSIS:
14
+
15
+ sphonglepress clean_wp # clean up the wordpress directory of the external files from middleman
16
+ sphonglepress create_static_files # create the static files to import into wordpress from (you will need a sitemap.yml)
17
+ sphonglepress dump_db # dump the current database as latest dump to load from
18
+ sphonglepress export_layout # export the layout and static files from middleman to wordpress
19
+ sphonglepress headers_footers # export headers and footers to wordpress directory
20
+ sphonglepress help [TASK] # Describe available tasks or one specific task
21
+ sphonglepress import_site # Import the site from sitemap and static files
22
+ sphonglepress init # Initialize wordpress directory
23
+ sphonglepress load_db # load the most recent 'clean' database dump
24
+
25
+
26
+ == REQUIREMENTS:
27
+
28
+ thor
29
+ middleman
30
+ activerecord
31
+ tilt
32
+ haml
33
+
34
+ == INSTALL:
35
+
36
+
37
+ * TODO upload to rubygems
38
+
39
+ == LICENSE:
40
+
41
+ (The MIT License)
42
+
43
+ Copyright (c) 2011 FIXME full name
44
+
45
+ Permission is hereby granted, free of charge, to any person obtaining
46
+ a copy of this software and associated documentation files (the
47
+ 'Software'), to deal in the Software without restriction, including
48
+ without limitation the rights to use, copy, modify, merge, publish,
49
+ distribute, sublicense, and/or sell copies of the Software, and to
50
+ permit persons to whom the Software is furnished to do so, subject to
51
+ the following conditions:
52
+
53
+ The above copyright notice and this permission notice shall be
54
+ included in all copies or substantial portions of the Software.
55
+
56
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
57
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
58
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
59
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
60
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
61
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
62
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/sphonglepress ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems" # ruby1.9 doesn't "require" it though
4
+
5
+ require File.expand_path(File.dirname(__FILE__)) << "/../lib/sphonglepress.rb"
6
+
7
+ Sphonglepress::App.start
@@ -0,0 +1,34 @@
1
+ require 'yaml'
2
+ require 'fileutils'
3
+
4
+ module Sphonglepress
5
+ class Config
6
+ class << self
7
+ def create_config(config)
8
+ FileUtils.mkdir("config")
9
+ write_config config
10
+ end
11
+
12
+ def write_config(config)
13
+ FileUtils.cp(config["sitemap_file"] || "#{::Sphonglepress::App::TEMPLATE_DIR}/config/sitemap.yml", "config/sitemap.yml")
14
+ File.open("config/settings.yml", 'w') {|f| f.write(config.to_yaml.to_s)}
15
+ end
16
+
17
+ def config
18
+ begin
19
+ c = YAML::load(IO.read(::Sphonglepress::CONFIG_DIR.join("settings.yml")))
20
+ c["db"] = YAML::load(IO.read(::Sphonglepress::CONFIG_DIR.join("database.yml")))
21
+ c["middleman_dir"] = Pathname.new(c["middleman_dir"])
22
+ c["wp_clone_dir"] = Pathname.new(c["wp_clone_dir"])
23
+ return c
24
+ rescue
25
+ return {}
26
+ end
27
+ end
28
+
29
+ def wp_theme_dir
30
+ config["wp_clone_dir"].join("wp-content/themes", config["wp_theme_dir"])
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,31 @@
1
+ module Sphonglepress
2
+ class Database
3
+ class << self
4
+ def drop(config)
5
+ db = config["db"][::Sphonglepress::ENV_MODE]
6
+ cmd = "echo \"drop database \\`#{db["database"]}\\`\" | mysql #{db_opts_no_db(CONFIG)}"
7
+ puts cmd
8
+ `#{cmd}`
9
+ end
10
+
11
+ def create(config)
12
+ db = config["db"][::Sphonglepress::ENV_MODE]
13
+ cmd = "echo \"create database \\`#{db["database"]}\\`\" | mysql #{db_opts_no_db(CONFIG)}"
14
+ puts cmd
15
+ `#{cmd}`
16
+
17
+ end
18
+
19
+ def db_opts(config)
20
+ db = config["db"][::Sphonglepress::ENV_MODE]
21
+ db_opts_no_db(config) << db["database"]
22
+ end
23
+
24
+ def db_opts_no_db(config)
25
+ db = config["db"][::Sphonglepress::ENV_MODE]
26
+ "-u #{db["username"]} " << (db["password"] ? "-p #{db["password"]} " : " ")
27
+
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,43 @@
1
+ module Sphonglepress
2
+ class Export
3
+ class << self
4
+ def headers_footers
5
+ build_dir = ::Sphonglepress::Config.config["middleman_dir"].join("build")
6
+ puts build_dir
7
+
8
+ default_file = build_dir.join("default.html")
9
+ default_parts = split_file(IO.read(default_file))
10
+
11
+ other_files = Dir["#{build_dir}/*.html"]. #without default.html
12
+ reject {|file| Pathname.new(file).basename.to_s == "default.html"}
13
+
14
+ others = {}
15
+ other_files.each do |file|
16
+ others[File.basename(file, '.*')] = split_file(IO.read(file))
17
+ end
18
+
19
+ File.open(::Sphonglepress::Config.wp_theme_dir.join("header.php"), 'w') {|file| file.write(default_parts[:header])}
20
+ File.open(::Sphonglepress::Config.wp_theme_dir.join("footer.php"), 'w') {|file| file.write(default_parts[:footer])}
21
+
22
+ others.each do |name, parts|
23
+ File.open(::Sphonglepress::Config.wp_theme_dir.join("header-#{name}.php"), 'w') {|file| file.write(parts[:header])}
24
+ File.open(::Sphonglepress::Config.wp_theme_dir.join("footer-#{name}.php"), 'w') {|file| file.write(parts[:footer])}
25
+ File.open(::Sphonglepress::Config.wp_theme_dir.join("#{name}.php"), 'w') {|file| file.write(parts[:content])}
26
+ end
27
+ end
28
+
29
+ def files
30
+ cmd = "cp -r #{CONFIG["middleman_dir"]}/build/*/ #{::Sphonglepress::WP_DIR}"
31
+ `#{cmd}`
32
+ end
33
+
34
+ def split_file(contents)
35
+ first = contents.split("<!-- BEGIN_BODY -->")
36
+ second = first.last.split("<!-- END_BODY -->")
37
+
38
+ {:header => first.first, :content => second.first, :footer => second.last}
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,17 @@
1
+ class Object
2
+ def self.subclasses(direct = false)
3
+ classes = []
4
+ if direct
5
+ ObjectSpace.each_object(Class) do |c|
6
+ next unless c.superclass == self
7
+ classes << c
8
+ end
9
+ else
10
+ ObjectSpace.each_object(Class) do |c|
11
+ next unless c.ancestors.include?(self) and (c != self)
12
+ classes << c
13
+ end
14
+ end
15
+ classes
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+
2
+ module Sphonglepress
3
+ class Git
4
+ class << self
5
+ def clone(options)
6
+ clone_cmd = "git clone #{options['wp_git_url']} #{options['wp_clone_dir']}"
7
+
8
+ puts clone_cmd
9
+ `#{clone_cmd}`
10
+ end
11
+
12
+ def checkout(options)
13
+ checkout_cmd = "git --git-dir=#{options['wp_clone_dir']}/.git --work-tree=#{options['wp_clone_dir']} checkout #{options['wp_git_tag']}"
14
+ puts checkout_cmd
15
+ `#{checkout_cmd}`
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,105 @@
1
+ require 'tilt'
2
+ require 'haml'
3
+
4
+ require 'sphonglepress/models/page'
5
+
6
+ module Sphonglepress
7
+ class Importer
8
+ class << self
9
+ def import(hash)
10
+ structure(hash)
11
+ end
12
+
13
+ def structure(hash, parent=nil)
14
+ i=0
15
+ sorted = hash.keys.sort {|a,b| a[0].to_i <=> b[0].to_i }
16
+ pages = []
17
+ page = nil
18
+ sorted.each do |key|
19
+ title = key[2..key.length].gsub("_", " ").upcase
20
+ if parent
21
+ page = Models::Page.new(:post_title => title, :post_type => "page", :menu_order => i, :parent => parent)
22
+ parent.posts << page
23
+ else
24
+ page = Models::Page.new(:post_title => title, :post_type => "page", :menu_order => i)
25
+ end
26
+ #puts page.post_title
27
+ page.post_name = page.post_title.downcase.split(" ").join("-")
28
+ page.post_date = page.post_modified = DateTime.now
29
+ page.post_date_gmt = page.post_modified_gmt = DateTime.now.new_offset(0)
30
+ pages << page
31
+
32
+ page_content_file = ::Sphonglepress::STATIC_DIR.join(full_path_for_page(page)).to_s << ".html.haml"
33
+
34
+ begin
35
+ if File.exist?(page_content_file)
36
+ #puts "found #{page_content_file}"
37
+ page.post_content = Tilt.new(page_content_file).render
38
+ else
39
+ puts "Couldnt find #{page_content_file} in the static directory"
40
+ end
41
+ rescue Haml::SyntaxError => e
42
+ puts "Error on line #{e.line}: #{e.message}"
43
+ raise
44
+ end
45
+
46
+ i += 10
47
+
48
+
49
+ if hash[key].is_a? Hash
50
+ structure(hash[key], page)
51
+ end
52
+ end
53
+ pages
54
+ end
55
+
56
+ def persist(page)
57
+ page.save
58
+ page.posts.each {|p| persist(p)}
59
+ end
60
+
61
+ def visit(page)
62
+ Visitor.subclasses.each do |v|
63
+ v.visit(page)
64
+ page.posts.each do |p|
65
+ visit(p)
66
+ end
67
+ end
68
+ end
69
+
70
+ def filenames_for_site(pages)
71
+ filenames = []
72
+ pages.each do |page|
73
+ filenames.concat(filenames_for_page(page))
74
+ end
75
+ filenames
76
+ end
77
+
78
+ private
79
+
80
+ # http://stackoverflow.com/questions/1939333/how-to-make-a-ruby-string-safe-for-a-filesystem
81
+ def sanitize_filename(filename)
82
+ filename.strip.gsub(/^.*(\\|\/)/, '').gsub(/[^0-9A-Za-z.\-]/, '-')
83
+ end
84
+
85
+ def full_path_for_page(page)
86
+ return "" unless page
87
+ path = full_path_for_page(page.parent)
88
+ join = path.length > 0 ? "_" : ""
89
+ return "#{path << join}" << "#{sanitize_filename(page.post_title)}"
90
+ end
91
+
92
+ def filenames_for_page(page)
93
+ filenames = []
94
+
95
+ filenames << full_path_for_page(page)
96
+ page.posts.each do |child|
97
+ filenames.concat filenames_for_page(child)
98
+ end
99
+ filenames
100
+ end
101
+
102
+
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,24 @@
1
+ module Sphonglepress
2
+ class Middleman
3
+
4
+
5
+ class << self
6
+ def init(site)
7
+ puts "Creating Middleman static site"
8
+ `mm-init #{site}`
9
+
10
+ `cp #{::Sphonglepress::App::TEMPLATE_DIR.join("middleman/layout.haml")} #{site}/views`
11
+ `cp #{::Sphonglepress::App::TEMPLATE_DIR.join("middleman/default.html.haml")} #{site}/views`
12
+
13
+ end
14
+
15
+ def build
16
+ cwd = Dir.pwd
17
+ Dir.chdir ::Sphonglepress::Config.config["middleman_dir"]
18
+ puts `mm-build`
19
+ Dir.chdir cwd
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ module Sphonglepress::Models
2
+ class Attachment < BasePost
3
+ attr_accessor :file
4
+
5
+ scope :attachments, where(:post_type => "attachment")
6
+
7
+ before_save :do_stuff
8
+
9
+ private
10
+
11
+ def do_stuff
12
+ return if !@file
13
+ self.post_type = "attachment"
14
+ now = DateTime.now
15
+ year = now.year
16
+ month = now.month
17
+ random = rand(36**8).to_s(36)
18
+ ext = File.extname(@file)
19
+ monthed_dir = now.strftime("%Y/%m")
20
+ upload_dir = ::Sphonglepress::WP_UPLOAD_DIR.join(monthed_dir)
21
+ bare_file_name = "#{random}#{ext}"
22
+
23
+ self.post_title = self.post_name = bare_file_name
24
+ self.post_status = "inherit"
25
+ self.guid = url = "/wp-content/uploads/#{monthed_dir}/#{bare_file_name}"
26
+ self.post_mime_type = "image/jpeg"
27
+ file_name = upload_dir.join(bare_file_name)
28
+ FileUtils.mkdir_p upload_dir
29
+ FileUtils.cp(@file, file_name)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ module Sphonglepress::Models
2
+ class BasePost < ActiveRecord::Base
3
+ set_table_name :wp_posts
4
+ set_primary_key :ID
5
+
6
+ has_many :children, :foreign_key => 'post_parent', :class_name => self.class
7
+ belongs_to :parent, :foreign_key => 'post_parent', :class_name => self.class
8
+
9
+ after_initialize :set_dates
10
+
11
+ private
12
+ def set_dates
13
+ self.post_date = DateTime.now
14
+ self.post_modified_gmt = DateTime.now
15
+ self.post_modified = DateTime.now
16
+ self.post_date_gmt = DateTime.now
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ require 'active_record'
2
+
3
+ module Sphonglepress::Models
4
+ class Page < ActiveRecord::Base
5
+ set_table_name :wp_posts
6
+ set_primary_key :ID
7
+
8
+ scope :pages, where(:post_type => "page")
9
+
10
+ has_many :posts, :foreign_key => 'post_parent', :class_name => "Page"
11
+ belongs_to :parent, :foreign_key => 'post_parent', :class_name => "Page"
12
+
13
+ after_initialize :set_dates
14
+
15
+ private
16
+ def set_dates
17
+ self.post_date = DateTime.now
18
+ self.post_modified_gmt = DateTime.now
19
+ self.post_modified = DateTime.now
20
+ self.post_date_gmt = DateTime.now
21
+ end
22
+ end
23
+ end
File without changes
@@ -0,0 +1,3 @@
1
+ module Sphonglepress
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,13 @@
1
+ module Sphonglepress
2
+ class Visitor
3
+ class << self
4
+ #override this to visit each page
5
+ def visit(page)
6
+ end
7
+
8
+ #run this once per import
9
+ def once
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,150 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'active_record'
5
+ require 'pathname'
6
+ require 'logger'
7
+ require "thor"
8
+
9
+ begin
10
+ ActiveRecord::Base.logger = Logger.new('sql.log')
11
+ ActiveRecord::Base.configurations = YAML::load(IO.read('config/database.yml'))
12
+ ActiveRecord::Base.establish_connection("development")
13
+ rescue
14
+ end
15
+
16
+ require "sphonglepress/extensions.rb"
17
+ require "sphonglepress/git.rb"
18
+ require "sphonglepress/middleman.rb"
19
+ require "sphonglepress/config.rb"
20
+ require "sphonglepress/export.rb"
21
+ require "sphonglepress/database.rb"
22
+
23
+
24
+ begin
25
+ require "sphonglepress/importer.rb"
26
+ require "sphonglepress/visitor.rb"
27
+
28
+ require "sphonglepress/models/base_post"
29
+ require "sphonglepress/models/attachment"
30
+ rescue
31
+ end
32
+
33
+ module Sphonglepress
34
+ VERSION = '0.0.1'
35
+
36
+ class App < Thor
37
+ desc "init", "Initialize wordpress directory"
38
+ method_options :wp_git_url => :string, :wp_git_tag => :string, :wp_clone_dir => :string, :sitemap_file => :string
39
+ def init
40
+ opts = DEFAULT_OPTIONS.merge options
41
+ Git.clone(opts)
42
+ Git.checkout(opts)
43
+ Middleman.init(opts["middleman_dir"])
44
+ Config.create_config(opts)
45
+ end
46
+
47
+ desc "headers_footers", "export headers and footers to wordpress directory"
48
+ def headers_footers
49
+ Middleman.build
50
+ Export.headers_footers
51
+ end
52
+
53
+ desc "clean_wp", "clean up the wordpress directory of the external files from middleman"
54
+ def clean_wp
55
+ dirs = Dir[LAYOUT_DIR.join("public").to_s << "/*/"]
56
+ full_dirs = dirs.map {|d| WP_DIR.join(Pathname.new(d).basename)}.join(" ")
57
+ cmd = "rm -rf #{full_dirs}"
58
+ puts cmd
59
+ `#{cmd}`
60
+ cmd = "rm -rf #{WP_UPLOAD_DIR.to_s}/*"
61
+ `#{cmd}`
62
+ end
63
+
64
+ desc "import_site", "Import the site from sitemap and static files"
65
+ method_options :visitor => :string
66
+ def import_site
67
+ pages = Importer.import sitemap_hash
68
+ pages.each { |page| Importer.persist page }
69
+ visitors = Dir[CONFIG_DIR.join("visitors").to_s << "/*.rb"].map{|v| "config/visitors/" << Pathname.new(v).basename}
70
+ visitors.each do |v|
71
+ puts "requiring #{v}"
72
+ require v
73
+ end
74
+ pages.each { |page| Importer.visit page }
75
+ Visitor.subclasses.each {|s| s.once}
76
+ end
77
+
78
+ desc "load_db", "load the most recent 'clean' database dump"
79
+ def load_db
80
+ Database.drop(CONFIG)
81
+ Database.create(CONFIG)
82
+ db_opts = Database.db_opts(CONFIG)
83
+ latest_dump = Dir["#{::Sphonglepress::DB_DUMP_DIR}/*.sql"].sort_by{ |f| File.ctime(f) }.last
84
+ puts "mysql #{db_opts} < #{latest_dump}"
85
+ `mysql #{db_opts} < #{latest_dump}`
86
+ end
87
+
88
+ desc "dump_db", "dump the current database as latest dump to load from"
89
+ def dump_db
90
+ random = rand(36**8).to_s(36)
91
+ dump_file = "#{::Sphonglepress::DB_DUMP_DIR.join("#{CONFIG['db']['development']['database']}")}-#{random}.sql"
92
+ puts "file: #{dump_file}"
93
+ db_opts = Database.db_opts(CONFIG)
94
+
95
+ `mysqldump #{db_opts} > #{dump_file}`
96
+ end
97
+
98
+ desc "create_static_files", "create the static files to import into wordpress from (you will need a sitemap.yml)"
99
+ def create_static_files
100
+ site = sitemap_hash
101
+ pages = Importer.structure(site)
102
+
103
+ FileUtils.mkdir_p(STATIC_DIR)
104
+
105
+ filenames = Importer.filenames_for_site pages
106
+
107
+ full_files = filenames.map {|file| STATIC_DIR.join("#{file}.html.haml").to_s }
108
+
109
+ FileUtils.touch(full_files)
110
+ end
111
+
112
+ desc "export_layout", "export the layout and static files from middleman to wordpress"
113
+ def export_layout
114
+ Middleman.build
115
+ Export.files
116
+ end
117
+
118
+ desc "full_refresh", "do a full refresh of the whole shebang (layouts, headers, database, import content)"
119
+ def full_refresh
120
+ clean_wp
121
+ headers_footers
122
+ export_layout
123
+ load_db
124
+ import_site
125
+ end
126
+
127
+ private
128
+
129
+ def sitemap_hash
130
+ YAML::load(IO.read(::Sphonglepress::CONFIG_DIR.join("sitemap.yml")))
131
+ end
132
+
133
+ APP_DIR = Pathname.new(File.expand_path(File.dirname(__FILE__))).join("..")
134
+ TEMPLATE_DIR = APP_DIR.join("templates")
135
+ DEFAULT_OPTIONS = YAML::load(IO.read(TEMPLATE_DIR.join("config/settings.yml")))
136
+ end
137
+
138
+ PROJECT_DIR = Pathname.new(File.expand_path(Dir.pwd))
139
+ CONFIG_DIR = PROJECT_DIR.join("config")
140
+ ENV_MODE = "development"
141
+ CONFIG = Config.config
142
+
143
+
144
+ DB_DIR = PROJECT_DIR.join("db")
145
+ DB_DUMP_DIR = PROJECT_DIR.join("db/dumps")
146
+ STATIC_DIR = PROJECT_DIR.join(CONFIG["static_dir"]) rescue nil
147
+ WP_DIR = PROJECT_DIR.join(CONFIG["wp_clone_dir"]) rescue nil
148
+ WP_UPLOAD_DIR = WP_DIR.join("wp-content/uploads") rescue nil
149
+ LAYOUT_DIR = PROJECT_DIR.join(CONFIG["middleman_dir"]) rescue nil
150
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/sphonglepress.rb'}"
9
+ puts "Loading sphonglepress gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "sphonglepress/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "sphonglepress"
7
+ s.version = Sphonglepress::VERSION
8
+ s.authors = ["Nicholas Hemsley"]
9
+ s.email = ["nick.hems@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Gem for populating wordpress}
12
+ s.description = %q{Sphonglepress is a command line utility for interacting with & making the task of importing content into a wordpress site}
13
+
14
+ s.rubyforge_project = "sphonglepress"
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
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+
25
+ s.add_dependency('thor')
26
+ s.add_dependency('middleman')
27
+ s.add_dependency('activerecord')
28
+ s.add_dependency('tilt')
29
+ s.add_dependency('haml')
30
+
31
+ end
@@ -0,0 +1,12 @@
1
+ # SQLite version 3.x
2
+ # gem install sqlite3
3
+ development:
4
+ adapter: mysql2
5
+ database: development
6
+ pool: 5
7
+ timeout: 5000
8
+
9
+ adapter: mysql2
10
+ database: production
11
+ pool: 5
12
+ timeout: 5000
@@ -0,0 +1,7 @@
1
+ ---
2
+ wp_git_tag: v3.1.3
3
+ wp_clone_dir: wordpress
4
+ wp_git_url: https://github.com/dxw/wordpress
5
+ wp_theme_dir: twentyten
6
+ middleman_dir: middleman
7
+ static_dir: static
File without changes
File without changes
@@ -0,0 +1,39 @@
1
+ !!! 5
2
+ %html{ :lang => "en" }
3
+ %head
4
+ %title <?php wp_title(); ?>
5
+ %meta{ :charset => "utf-8" }
6
+
7
+ / Always force latest IE rendering engine (even in intranet) & Chrome Frame
8
+ %meta{ :content => "IE=edge,chrome=1", "http-equiv" => "X-UA-Compatible" }
9
+
10
+ / Comment in layout
11
+
12
+ = stylesheet_link_tag "style.css"
13
+
14
+ = javascript_include_tag "jquery"
15
+ = javascript_include_tag "application.js"
16
+
17
+ = yield_content :head
18
+
19
+ %body{ :class => "#{page_classes}" }
20
+ #main
21
+ #header
22
+ %a#logo{:href => "/"}
23
+ %img{:src=>"/images/logo.png"}
24
+ #menu
25
+ %ul
26
+ :plain
27
+ <?php wp_list_pages('sort_column=menu_order&title_li=');?>
28
+ #content-wrapper
29
+ = yield_content :sidebar
30
+ #content
31
+ %h1
32
+ :plain
33
+ <?php wp_title(); ?>
34
+
35
+ /BEGIN_BODY
36
+
37
+ = yield
38
+
39
+ /END_BODY
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/sphonglepress'
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestSphonglepress < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sphonglepress
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Nicholas Hemsley
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-08-24 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: &84388670 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *84388670
25
+ - !ruby/object:Gem::Dependency
26
+ name: middleman
27
+ requirement: &84388460 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *84388460
36
+ - !ruby/object:Gem::Dependency
37
+ name: activerecord
38
+ requirement: &84388250 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *84388250
47
+ - !ruby/object:Gem::Dependency
48
+ name: tilt
49
+ requirement: &84388040 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *84388040
58
+ - !ruby/object:Gem::Dependency
59
+ name: haml
60
+ requirement: &84387830 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *84387830
69
+ description: Sphonglepress is a command line utility for interacting with & making
70
+ the task of importing content into a wordpress site
71
+ email:
72
+ - nick.hems@gmail.com
73
+ executables:
74
+ - sphonglepress
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - .gitignore
79
+ - .rvmrc
80
+ - Gemfile
81
+ - Gemfile.lock
82
+ - History.txt
83
+ - Manifest.txt
84
+ - PostInstall.txt
85
+ - README.rdoc
86
+ - Rakefile
87
+ - bin/sphonglepress
88
+ - lib/sphonglepress.rb
89
+ - lib/sphonglepress/config.rb
90
+ - lib/sphonglepress/database.rb
91
+ - lib/sphonglepress/export.rb
92
+ - lib/sphonglepress/extensions.rb
93
+ - lib/sphonglepress/git.rb
94
+ - lib/sphonglepress/importer.rb
95
+ - lib/sphonglepress/middleman.rb
96
+ - lib/sphonglepress/models/attachment.rb
97
+ - lib/sphonglepress/models/base_post.rb
98
+ - lib/sphonglepress/models/page.rb
99
+ - lib/sphonglepress/models/post.rb
100
+ - lib/sphonglepress/version.rb
101
+ - lib/sphonglepress/visitor.rb
102
+ - script/console
103
+ - script/destroy
104
+ - script/generate
105
+ - sphonglepress.gemspec
106
+ - templates/config/database.yml
107
+ - templates/config/settings.yml
108
+ - templates/config/sitemap.yml
109
+ - templates/middleman/default.html.haml
110
+ - templates/middleman/layout.haml
111
+ - test/test_helper.rb
112
+ - test/test_sphonglepress.rb
113
+ homepage: ''
114
+ licenses: []
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ! '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ requirements: []
132
+ rubyforge_project: sphonglepress
133
+ rubygems_version: 1.8.6
134
+ signing_key:
135
+ specification_version: 3
136
+ summary: Gem for populating wordpress
137
+ test_files: []