sphonglepress 0.0.1 → 0.0.3
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/lib/sphonglepress.rb +90 -19
- data/lib/sphonglepress/config.rb +2 -1
- data/lib/sphonglepress/export.rb +12 -6
- data/lib/sphonglepress/importer.rb +11 -7
- data/lib/sphonglepress/middleman.rb +15 -4
- data/lib/sphonglepress/models/attachment.rb +31 -18
- data/lib/sphonglepress/models/page.rb +10 -0
- data/lib/sphonglepress/version.rb +1 -1
- data/lib/sphonglepress/visitors/attachment_visitor.rb +18 -0
- data/lib/sphonglepress/visitors/document_importer.rb +103 -0
- data/lib/sphonglepress/visitors/visitor.rb +13 -0
- data/lib/sphonglepress/watcher.rb +61 -0
- data/sphonglepress.gemspec +6 -0
- data/templates/config/database.yml +2 -7
- data/templates/config/settings.yml +4 -3
- data/templates/config/sitemap.yml +1 -0
- data/templates/splash/middleman/home.html.haml +8 -0
- data/templates/splash/middleman/index.html.haml +8 -0
- data/templates/{middleman → splash/middleman}/layout.haml +0 -0
- data/templates/splash/visitors/splash.rb +11 -0
- data/vendor/html_cleaner.rb +47 -0
- metadata +66 -16
- data/lib/sphonglepress/visitor.rb +0 -13
- data/templates/middleman/default.html.haml +0 -0
    
        data/lib/sphonglepress.rb
    CHANGED
    
    | @@ -5,29 +5,41 @@ require 'active_record' | |
| 5 5 | 
             
            require 'pathname'
         | 
| 6 6 | 
             
            require 'logger'
         | 
| 7 7 | 
             
            require "thor"
         | 
| 8 | 
            +
            require 'fileutils'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            require "sphonglepress/config.rb"
         | 
| 8 11 |  | 
| 9 12 | 
             
            begin
         | 
| 10 | 
            -
               | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 13 | 
            +
              if File.exist? 'config/database.yml'
         | 
| 14 | 
            +
                ActiveRecord::Base.logger = Logger.new('sql.log')
         | 
| 15 | 
            +
                ActiveRecord::Base.configurations = YAML::load(IO.read('config/database.yml'))
         | 
| 16 | 
            +
                ActiveRecord::Base.establish_connection("development")
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            rescue Exception => e
         | 
| 19 | 
            +
              puts "Error configuring active record:"
         | 
| 20 | 
            +
              puts e.to_s
         | 
| 14 21 | 
             
            end
         | 
| 15 22 |  | 
| 16 23 | 
             
            require "sphonglepress/extensions.rb"
         | 
| 17 24 | 
             
            require "sphonglepress/git.rb"
         | 
| 18 25 | 
             
            require "sphonglepress/middleman.rb"
         | 
| 19 | 
            -
            require "sphonglepress/config.rb"
         | 
| 20 26 | 
             
            require "sphonglepress/export.rb"
         | 
| 21 27 | 
             
            require "sphonglepress/database.rb"
         | 
| 28 | 
            +
            require "sphonglepress/watcher.rb"
         | 
| 22 29 |  | 
| 23 30 |  | 
| 24 31 | 
             
            begin
         | 
| 25 32 | 
             
              require "sphonglepress/importer.rb"
         | 
| 26 | 
            -
              require "sphonglepress/visitor.rb"
         | 
| 27 | 
            -
              
         | 
| 33 | 
            +
              require "sphonglepress/visitors/visitor.rb"
         | 
| 34 | 
            +
              require "sphonglepress/visitors/attachment_visitor.rb"
         | 
| 35 | 
            +
              require "sphonglepress/visitors/document_importer.rb"
         | 
| 36 | 
            +
             | 
| 37 | 
            +
             | 
| 28 38 | 
             
              require "sphonglepress/models/base_post"
         | 
| 29 39 | 
             
              require "sphonglepress/models/attachment"
         | 
| 30 | 
            -
            rescue
         | 
| 40 | 
            +
            rescue Exception => e
         | 
| 41 | 
            +
              puts "Error requiring importer, visitor & activemodel classes (this can probably be ignored):"
         | 
| 42 | 
            +
              puts e.to_s
         | 
| 31 43 | 
             
            end
         | 
| 32 44 |  | 
| 33 45 | 
             
            module Sphonglepress
         | 
| @@ -40,8 +52,12 @@ module Sphonglepress | |
| 40 52 | 
             
                  opts = DEFAULT_OPTIONS.merge options
         | 
| 41 53 | 
             
                  Git.clone(opts)
         | 
| 42 54 | 
             
                  Git.checkout(opts)
         | 
| 43 | 
            -
                  Middleman.init(opts | 
| 55 | 
            +
                  Middleman.init(opts)
         | 
| 44 56 | 
             
                  Config.create_config(opts)
         | 
| 57 | 
            +
                  
         | 
| 58 | 
            +
                  #FIXME: move this somewhere better
         | 
| 59 | 
            +
                  visitors_dir = TEMPLATE_DIR.join(opts['template'], "visitors")
         | 
| 60 | 
            +
                  `cp -r #{visitors_dir} config/`
         | 
| 45 61 | 
             
                end
         | 
| 46 62 |  | 
| 47 63 | 
             
                desc "headers_footers", "export headers and footers to wordpress directory"
         | 
| @@ -52,8 +68,8 @@ module Sphonglepress | |
| 52 68 |  | 
| 53 69 | 
             
                desc "clean_wp", "clean up the wordpress directory of the external files from middleman"
         | 
| 54 70 | 
             
                def clean_wp
         | 
| 55 | 
            -
                  dirs = Dir[LAYOUT_DIR.join(" | 
| 56 | 
            -
                  full_dirs = dirs.map {|d|  | 
| 71 | 
            +
                  dirs = Dir[LAYOUT_DIR.join("source").to_s << "/*/"]
         | 
| 72 | 
            +
                  full_dirs = dirs.map {|d| ::Sphonglepress::Config.wp_theme_dir.join(Pathname.new(d).basename)}.join(" ")
         | 
| 57 73 | 
             
                  cmd = "rm -rf #{full_dirs}"
         | 
| 58 74 | 
             
                  puts cmd
         | 
| 59 75 | 
             
                  `#{cmd}`
         | 
| @@ -64,23 +80,34 @@ module Sphonglepress | |
| 64 80 | 
             
                desc "import_site", "Import the site from sitemap and static files"
         | 
| 65 81 | 
             
                method_options :visitor => :string
         | 
| 66 82 | 
             
                def import_site
         | 
| 67 | 
            -
                  pages = Importer.import sitemap_hash
         | 
| 83 | 
            +
                  pages = ::Sphonglepress::Importer.import sitemap_hash
         | 
| 68 84 | 
             
                  pages.each { |page| Importer.persist page }
         | 
| 69 | 
            -
                  visitors = Dir[CONFIG_DIR.join("visitors").to_s << "/*.rb"].map{|v| "config/visitors/" << Pathname.new(v).basename}
         | 
| 85 | 
            +
                  visitors = Dir[CONFIG_DIR.join("visitors").to_s << "/*.rb"].map{|v| "config/visitors/" << Pathname.new(v).basename.to_s}
         | 
| 70 86 | 
             
                  visitors.each do |v|
         | 
| 71 87 | 
             
                    puts "requiring #{v}"
         | 
| 72 | 
            -
                    require v
         | 
| 88 | 
            +
                    require Dir.pwd.to_s << "/" << v
         | 
| 73 89 | 
             
                  end
         | 
| 90 | 
            +
                  ::Sphonglepress::Visitors::Visitor.subclasses.each {|s| s.instance.once}
         | 
| 91 | 
            +
                  
         | 
| 74 92 | 
             
                  pages.each { |page| Importer.visit page }
         | 
| 75 | 
            -
                  Visitor.subclasses.each {|s| s.once}
         | 
| 76 93 | 
             
                end
         | 
| 77 94 |  | 
| 95 | 
            +
                desc "create_db", "create the wordpress database"
         | 
| 96 | 
            +
                def create_db
         | 
| 97 | 
            +
                  Database.create(CONFIG)
         | 
| 98 | 
            +
                end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                desc "drop_db", "drop the wordpress database"
         | 
| 101 | 
            +
                def drop_db
         | 
| 102 | 
            +
                  Database.drop(CONFIG)
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
             | 
| 78 105 | 
             
                desc "load_db", "load the most recent 'clean' database dump"
         | 
| 79 106 | 
             
                def load_db
         | 
| 80 107 | 
             
                  Database.drop(CONFIG)
         | 
| 81 108 | 
             
                  Database.create(CONFIG)
         | 
| 82 109 | 
             
                  db_opts = Database.db_opts(CONFIG)
         | 
| 83 | 
            -
                  latest_dump = Dir["#{::Sphonglepress::DB_DUMP_DIR}/*.sql"].sort_by{ |f| File. | 
| 110 | 
            +
                  latest_dump = Dir["#{::Sphonglepress::DB_DUMP_DIR}/*.sql"].sort_by{ |f| File.mtime(f) }.last
         | 
| 84 111 | 
             
                  puts "mysql #{db_opts} < #{latest_dump}"
         | 
| 85 112 | 
             
                  `mysql #{db_opts} < #{latest_dump}`
         | 
| 86 113 | 
             
                end
         | 
| @@ -91,6 +118,18 @@ module Sphonglepress | |
| 91 118 | 
             
                  dump_file = "#{::Sphonglepress::DB_DUMP_DIR.join("#{CONFIG['db']['development']['database']}")}-#{random}.sql"
         | 
| 92 119 | 
             
                  puts "file: #{dump_file}"
         | 
| 93 120 | 
             
                  db_opts = Database.db_opts(CONFIG)
         | 
| 121 | 
            +
                  FileUtils.mkdir_p ::Sphonglepress::DB_DUMP_DIR
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                  `mysqldump #{db_opts} > #{dump_file}`
         | 
| 124 | 
            +
                end
         | 
| 125 | 
            +
                
         | 
| 126 | 
            +
                desc "dump_db_live", "dump the current database as database to go live with"
         | 
| 127 | 
            +
                def dump_db_live
         | 
| 128 | 
            +
                  random = rand(36**8).to_s(36)
         | 
| 129 | 
            +
                  dump_file = "#{::Sphonglepress::DB_DUMP_DIR_LIVE.join("#{CONFIG['db']['development']['database']}")}-#{random}.sql"
         | 
| 130 | 
            +
                  puts "file: #{dump_file}"
         | 
| 131 | 
            +
                  db_opts = Database.db_opts(CONFIG)
         | 
| 132 | 
            +
                  FileUtils.mkdir_p ::Sphonglepress::DB_DUMP_DIR_LIVE
         | 
| 94 133 |  | 
| 95 134 | 
             
                  `mysqldump #{db_opts} > #{dump_file}`
         | 
| 96 135 | 
             
                end
         | 
| @@ -104,7 +143,9 @@ module Sphonglepress | |
| 104 143 |  | 
| 105 144 | 
             
                  filenames = Importer.filenames_for_site pages
         | 
| 106 145 |  | 
| 107 | 
            -
                  full_files = filenames. | 
| 146 | 
            +
                  full_files = filenames.
         | 
| 147 | 
            +
                                map {|file| STATIC_DIR.join("#{file}.html.haml").to_s }.
         | 
| 148 | 
            +
                                reject {|file| File.exist? file }
         | 
| 108 149 |  | 
| 109 150 | 
             
                  FileUtils.touch(full_files)
         | 
| 110 151 | 
             
                end
         | 
| @@ -115,14 +156,43 @@ module Sphonglepress | |
| 115 156 | 
             
                  Export.files
         | 
| 116 157 | 
             
                end
         | 
| 117 158 |  | 
| 159 | 
            +
                desc "export", "copy static files to wordpress"
         | 
| 160 | 
            +
                def export
         | 
| 161 | 
            +
                  Middleman.build
         | 
| 162 | 
            +
                  Export.files
         | 
| 163 | 
            +
                  Export.headers_footers
         | 
| 164 | 
            +
                end
         | 
| 165 | 
            +
                
         | 
| 118 166 | 
             
                desc "full_refresh", "do a full refresh of the whole shebang (layouts, headers, database, import content)"
         | 
| 119 167 | 
             
                def full_refresh
         | 
| 120 168 | 
             
                  clean_wp
         | 
| 121 | 
            -
                   | 
| 122 | 
            -
                   | 
| 169 | 
            +
                  Middleman.clean
         | 
| 170 | 
            +
                  export
         | 
| 123 171 | 
             
                  load_db
         | 
| 124 172 | 
             
                  import_site
         | 
| 125 173 | 
             
                end
         | 
| 174 | 
            +
                
         | 
| 175 | 
            +
                desc "watch", "monitor directory & reload on change"
         | 
| 176 | 
            +
                def watch
         | 
| 177 | 
            +
                  Signal.trap("INT") { exit! }
         | 
| 178 | 
            +
                  Signal.trap("QUIT") { full_refresh }
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                  puts "Watching"
         | 
| 181 | 
            +
                  Watcher.new(self).watch
         | 
| 182 | 
            +
                end
         | 
| 183 | 
            +
                
         | 
| 184 | 
            +
                require 'ruby-debug'
         | 
| 185 | 
            +
                desc "import_static_from_doc", "Try and import site structure from site.odt file in the static/document directory"
         | 
| 186 | 
            +
                def import_static_from_doc
         | 
| 187 | 
            +
                  pages = ::Sphonglepress::Importer.import sitemap_hash
         | 
| 188 | 
            +
                  document_importer_klass = ::Sphonglepress::Visitors::DocumentImporter
         | 
| 189 | 
            +
                  document_importer_klass.instance.once
         | 
| 190 | 
            +
                  pages.each { |page| Importer.visit page, [document_importer_klass]}
         | 
| 191 | 
            +
                end
         | 
| 192 | 
            +
                
         | 
| 193 | 
            +
                
         | 
| 194 | 
            +
                
         | 
| 195 | 
            +
                #desc "populate_static_from_doc"
         | 
| 126 196 |  | 
| 127 197 | 
             
                private
         | 
| 128 198 |  | 
| @@ -143,6 +213,7 @@ module Sphonglepress | |
| 143 213 |  | 
| 144 214 | 
             
              DB_DIR = PROJECT_DIR.join("db")
         | 
| 145 215 | 
             
              DB_DUMP_DIR = PROJECT_DIR.join("db/dumps")
         | 
| 216 | 
            +
              DB_DUMP_DIR_LIVE = PROJECT_DIR.join("db/live_dumps")
         | 
| 146 217 | 
             
              STATIC_DIR = PROJECT_DIR.join(CONFIG["static_dir"]) rescue nil
         | 
| 147 218 | 
             
              WP_DIR = PROJECT_DIR.join(CONFIG["wp_clone_dir"]) rescue nil
         | 
| 148 219 | 
             
              WP_UPLOAD_DIR = WP_DIR.join("wp-content/uploads") rescue nil
         | 
    
        data/lib/sphonglepress/config.rb
    CHANGED
    
    | @@ -12,12 +12,13 @@ module Sphonglepress | |
| 12 12 | 
             
                  def write_config(config)
         | 
| 13 13 | 
             
                    FileUtils.cp(config["sitemap_file"] || "#{::Sphonglepress::App::TEMPLATE_DIR}/config/sitemap.yml", "config/sitemap.yml")
         | 
| 14 14 | 
             
                    File.open("config/settings.yml", 'w') {|f| f.write(config.to_yaml.to_s)}
         | 
| 15 | 
            +
                    FileUtils.cp("#{::Sphonglepress::App::TEMPLATE_DIR}/config/database.yml", "config/database.yml")
         | 
| 15 16 | 
             
                  end
         | 
| 16 17 |  | 
| 17 18 | 
             
                  def config
         | 
| 18 19 | 
             
                    begin
         | 
| 19 20 | 
             
                      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["db"] = YAML::load(IO.read(::Sphonglepress::CONFIG_DIR.join("database.yml"))) rescue nil
         | 
| 21 22 | 
             
                      c["middleman_dir"] = Pathname.new(c["middleman_dir"])
         | 
| 22 23 | 
             
                      c["wp_clone_dir"] = Pathname.new(c["wp_clone_dir"])
         | 
| 23 24 | 
             
                      return c
         | 
    
        data/lib/sphonglepress/export.rb
    CHANGED
    
    | @@ -1,24 +1,27 @@ | |
| 1 | 
            +
            require 'fileutils'
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module Sphonglepress
         | 
| 2 4 | 
             
              class Export
         | 
| 3 5 | 
             
                class << self
         | 
| 4 6 | 
             
                  def headers_footers
         | 
| 5 7 | 
             
                    build_dir = ::Sphonglepress::Config.config["middleman_dir"].join("build")
         | 
| 6 | 
            -
                     | 
| 7 | 
            -
                    
         | 
| 8 | 
            -
                    default_file = build_dir.join("default.html")
         | 
| 8 | 
            +
                    default_file = build_dir.join("index.html")
         | 
| 9 9 | 
             
                    default_parts = split_file(IO.read(default_file))
         | 
| 10 10 |  | 
| 11 11 | 
             
                    other_files = Dir["#{build_dir}/*.html"]. #without default.html
         | 
| 12 | 
            -
                                reject {|file| Pathname.new(file).basename.to_s == " | 
| 12 | 
            +
                                reject {|file| Pathname.new(file).basename.to_s == "index.html"}
         | 
| 13 13 |  | 
| 14 14 | 
             
                    others = {}
         | 
| 15 15 | 
             
                    other_files.each do |file|
         | 
| 16 16 | 
             
                      others[File.basename(file, '.*')] = split_file(IO.read(file))
         | 
| 17 17 | 
             
                    end
         | 
| 18 18 |  | 
| 19 | 
            +
                    FileUtils.mkdir_p ::Sphonglepress::Config.wp_theme_dir unless Dir.exist? ::Sphonglepress::Config.wp_theme_dir
         | 
| 20 | 
            +
                    
         | 
| 19 21 | 
             
                    File.open(::Sphonglepress::Config.wp_theme_dir.join("header.php"), 'w') {|file| file.write(default_parts[:header])}
         | 
| 20 22 | 
             
                    File.open(::Sphonglepress::Config.wp_theme_dir.join("footer.php"), 'w') {|file| file.write(default_parts[:footer])}
         | 
| 21 | 
            -
                    
         | 
| 23 | 
            +
                    File.open(::Sphonglepress::Config.wp_theme_dir.join("index.php"), 'w') {|file| file.write(default_parts[:content])}
         | 
| 24 | 
            +
             | 
| 22 25 | 
             
                    others.each do |name, parts|
         | 
| 23 26 | 
             
                      File.open(::Sphonglepress::Config.wp_theme_dir.join("header-#{name}.php"), 'w') {|file| file.write(parts[:header])}
         | 
| 24 27 | 
             
                      File.open(::Sphonglepress::Config.wp_theme_dir.join("footer-#{name}.php"), 'w') {|file| file.write(parts[:footer])}
         | 
| @@ -27,7 +30,10 @@ module Sphonglepress | |
| 27 30 | 
             
                  end
         | 
| 28 31 |  | 
| 29 32 | 
             
                  def files
         | 
| 30 | 
            -
                    cmd = "cp -r #{CONFIG["middleman_dir"]}/build/*/ #{::Sphonglepress:: | 
| 33 | 
            +
                    cmd = "cp -r #{CONFIG["middleman_dir"]}/build/*/ #{::Sphonglepress::Config.config["wp_clone_dir"]}"
         | 
| 34 | 
            +
                    `#{cmd}`
         | 
| 35 | 
            +
                    cmd = "cp -r #{CONFIG["middleman_dir"]}/build/stylesheets/*.css #{::Sphonglepress::Config.wp_theme_dir}/"
         | 
| 36 | 
            +
                    puts cmd
         | 
| 31 37 | 
             
                    `#{cmd}`
         | 
| 32 38 | 
             
                  end
         | 
| 33 39 |  | 
| @@ -12,11 +12,11 @@ module Sphonglepress | |
| 12 12 |  | 
| 13 13 | 
             
                  def structure(hash, parent=nil)
         | 
| 14 14 | 
             
                    i=0
         | 
| 15 | 
            -
                    sorted = hash.keys.sort {|a,b| a | 
| 15 | 
            +
                    sorted = hash.keys.sort {|a,b| a.split("_").first.to_i <=> b.split("_").first.to_i }
         | 
| 16 16 | 
             
                    pages = []
         | 
| 17 17 | 
             
                    page = nil
         | 
| 18 18 | 
             
                    sorted.each do |key|
         | 
| 19 | 
            -
                      title = key[2..key.length].gsub("_", " ") | 
| 19 | 
            +
                      title = key[2..key.length].gsub("_", " ")
         | 
| 20 20 | 
             
                      if parent
         | 
| 21 21 | 
             
                        page = Models::Page.new(:post_title => title, :post_type => "page", :menu_order => i, :parent => parent)
         | 
| 22 22 | 
             
                        parent.posts << page
         | 
| @@ -34,7 +34,7 @@ module Sphonglepress | |
| 34 34 | 
             
                      begin 
         | 
| 35 35 | 
             
                        if File.exist?(page_content_file)
         | 
| 36 36 | 
             
                          #puts "found #{page_content_file}"
         | 
| 37 | 
            -
                          page.post_content = Tilt.new(page_content_file).render
         | 
| 37 | 
            +
                          page.post_content = Tilt.new(page_content_file, :ugly => true).render
         | 
| 38 38 | 
             
                        else
         | 
| 39 39 | 
             
                          puts "Couldnt find #{page_content_file} in the static directory"
         | 
| 40 40 | 
             
                        end
         | 
| @@ -58,11 +58,12 @@ module Sphonglepress | |
| 58 58 | 
             
                    page.posts.each {|p| persist(p)}
         | 
| 59 59 | 
             
                  end
         | 
| 60 60 |  | 
| 61 | 
            -
                  def visit(page)
         | 
| 62 | 
            -
                     | 
| 63 | 
            -
                      v. | 
| 61 | 
            +
                  def visit(page, visitors = Visitors::Visitor.subclasses)
         | 
| 62 | 
            +
                    visitors.each do |v|
         | 
| 63 | 
            +
                      visitor = v.instance
         | 
| 64 | 
            +
                      visitor.visit(page)
         | 
| 64 65 | 
             
                      page.posts.each do |p|
         | 
| 65 | 
            -
                        visit(p)
         | 
| 66 | 
            +
                        visitor.visit(p)
         | 
| 66 67 | 
             
                      end
         | 
| 67 68 | 
             
                    end
         | 
| 68 69 | 
             
                  end
         | 
| @@ -99,6 +100,9 @@ module Sphonglepress | |
| 99 100 | 
             
                    filenames
         | 
| 100 101 | 
             
                  end
         | 
| 101 102 |  | 
| 103 | 
            +
                  def images_for_page(page)
         | 
| 104 | 
            +
                    
         | 
| 105 | 
            +
                  end
         | 
| 102 106 |  | 
| 103 107 | 
             
                end
         | 
| 104 108 | 
             
              end
         | 
| @@ -3,12 +3,16 @@ module Sphonglepress | |
| 3 3 |  | 
| 4 4 |  | 
| 5 5 | 
             
                class << self
         | 
| 6 | 
            -
                  def init( | 
| 6 | 
            +
                  def init(options)
         | 
| 7 | 
            +
                    site = options['middleman_dir']
         | 
| 7 8 | 
             
                    puts "Creating Middleman static site"
         | 
| 8 9 | 
             
                    `mm-init #{site}`
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                    ` | 
| 11 | 
            -
                     | 
| 10 | 
            +
             | 
| 11 | 
            +
                    `rm #{site}/source/*.erb`
         | 
| 12 | 
            +
                    to_copy = Dir["#{Sphonglepress::App::TEMPLATE_DIR}/#{options['template']}/middleman/*.haml"]
         | 
| 13 | 
            +
                    to_copy.each do |c|
         | 
| 14 | 
            +
                    `cp #{c} #{site}/source`
         | 
| 15 | 
            +
                    end
         | 
| 12 16 |  | 
| 13 17 | 
             
                  end
         | 
| 14 18 |  | 
| @@ -18,6 +22,13 @@ module Sphonglepress | |
| 18 22 | 
             
                    puts `mm-build`
         | 
| 19 23 | 
             
                    Dir.chdir cwd
         | 
| 20 24 | 
             
                  end
         | 
| 25 | 
            +
                  
         | 
| 26 | 
            +
                  def clean
         | 
| 27 | 
            +
                    cwd = Dir.pwd
         | 
| 28 | 
            +
                    Dir.chdir ::Sphonglepress::Config.config["middleman_dir"]
         | 
| 29 | 
            +
                    puts `rm -rf build`
         | 
| 30 | 
            +
                    Dir.chdir cwd
         | 
| 31 | 
            +
                  end
         | 
| 21 32 | 
             
                end
         | 
| 22 33 |  | 
| 23 34 | 
             
              end
         | 
| @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            require 'mime/types'
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module Sphonglepress::Models
         | 
| 2 4 | 
             
              class Attachment < BasePost
         | 
| 3 5 | 
             
                attr_accessor :file
         | 
| @@ -8,25 +10,36 @@ module Sphonglepress::Models | |
| 8 10 |  | 
| 9 11 | 
             
                private
         | 
| 10 12 |  | 
| 11 | 
            -
                  def  | 
| 12 | 
            -
                    return if !@file
         | 
| 13 | 
            -
                        self.post_type = "attachment"
         | 
| 14 | 
            -
                        now = DateTime.now
         | 
| 15 | 
            -
                        year = now.year
         | 
| 16 | 
            -
                        month = now.month
         | 
| 13 | 
            +
                  def randomize_filename(file)
         | 
| 17 14 | 
             
                        random = rand(36**8).to_s(36)
         | 
| 18 | 
            -
                        ext = File.extname( | 
| 19 | 
            -
                         | 
| 20 | 
            -
                         | 
| 21 | 
            -
             | 
| 15 | 
            +
                        ext = File.extname(file)
         | 
| 16 | 
            +
                        basename = File.basename(file, ext)
         | 
| 17 | 
            +
                        bare_file_name = "#{basename}-#{random}#{ext}"
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def do_stuff
         | 
| 21 | 
            +
                    return unless @file
         | 
| 22 | 
            +
                    
         | 
| 23 | 
            +
                    self.post_type = "attachment"
         | 
| 24 | 
            +
                    now = DateTime.now
         | 
| 25 | 
            +
                    year = now.year
         | 
| 26 | 
            +
                    month = now.month
         | 
| 27 | 
            +
                    monthed_dir = now.strftime("%Y/%m")
         | 
| 28 | 
            +
                    upload_dir = ::Sphonglepress::WP_UPLOAD_DIR.join(monthed_dir)
         | 
| 29 | 
            +
                    bare_file_name = File.basename(@file)
         | 
| 30 | 
            +
                    file_name = upload_dir.join(bare_file_name)
         | 
| 31 | 
            +
                    
         | 
| 32 | 
            +
                    file_name = upload_dir.join(bare_filename = randomize_filename(@file)) if File.exist? file_name
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                    FileUtils.mkdir_p upload_dir unless Dir.exist? upload_dir
         | 
| 35 | 
            +
                    FileUtils.cp(@file, file_name)
         | 
| 36 | 
            +
                    ext = File.extname(file)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    self.post_title = self.post_name = bare_file_name
         | 
| 39 | 
            +
                    self.post_status = "inherit"
         | 
| 40 | 
            +
                    self.guid = url = "/wp-content/uploads/#{monthed_dir}/#{bare_file_name}"
         | 
| 41 | 
            +
                    self.post_mime_type = ::MIME::Types.type_for(bare_file_name).first.to_s
         | 
| 22 42 |  | 
| 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 43 | 
             
                  end
         | 
| 44 | 
            +
              end
         | 
| 32 45 | 
             
            end
         | 
| @@ -12,6 +12,16 @@ module Sphonglepress::Models | |
| 12 12 |  | 
| 13 13 | 
             
                after_initialize :set_dates
         | 
| 14 14 |  | 
| 15 | 
            +
                def url
         | 
| 16 | 
            +
                  current = self
         | 
| 17 | 
            +
                  urls = []
         | 
| 18 | 
            +
                  while (current)
         | 
| 19 | 
            +
                    urls << current.post_title.gsub(/[^ a-zA-Z-]/, "").gsub(" ", "-").downcase
         | 
| 20 | 
            +
                    current = current.parent
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                  urls.reverse.join("/")
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
                
         | 
| 15 25 | 
             
                private
         | 
| 16 26 | 
             
                def set_dates
         | 
| 17 27 | 
             
                  self.post_date = DateTime.now
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            #This visitor checks for a directory in static/attachments with the same location as the relative url for the page, and attaches any files it finds
         | 
| 2 | 
            +
            module Sphonglepress::Visitors
         | 
| 3 | 
            +
              class AttachmentVisitor < Visitor
         | 
| 4 | 
            +
                def visit(page)
         | 
| 5 | 
            +
                  attachments_dir = ::Sphonglepress::STATIC_DIR.join("attachments", page.url)
         | 
| 6 | 
            +
                  Dir["#{attachments_dir}/*"].each do |file|
         | 
| 7 | 
            +
                    attachment = Sphonglepress::Models::Attachment.new
         | 
| 8 | 
            +
                    attachment.file = file
         | 
| 9 | 
            +
                    attachment.post_parent = page.id
         | 
| 10 | 
            +
                    attachment.save
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                #run this once per import
         | 
| 15 | 
            +
                def once
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| @@ -0,0 +1,103 @@ | |
| 1 | 
            +
            require 'nokogiri'
         | 
| 2 | 
            +
            require 'haml/html'
         | 
| 3 | 
            +
            require 'fileutils'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            #This visitor checks for a site.odt & the config file ("import_from_site_document")
         | 
| 6 | 
            +
            # and attempts to import thi into the site, based on position of h1s
         | 
| 7 | 
            +
            module Sphonglepress::Visitors
         | 
| 8 | 
            +
              class DocumentImporter #< Visitor
         | 
| 9 | 
            +
                include Singleton
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                #override this to visit each page
         | 
| 12 | 
            +
                def visit(page)
         | 
| 13 | 
            +
                  debugger
         | 
| 14 | 
            +
                  found = @segments[page.post_title]
         | 
| 15 | 
            +
                  return unless found
         | 
| 16 | 
            +
                  #page.post_content = found
         | 
| 17 | 
            +
                  file = ::Sphonglepress::STATIC_DIR.join("from_document", full_path_for_page(page) << ".html.haml")
         | 
| 18 | 
            +
                  FileUtils.mkdir_p(file.dirname) unless Dir.exist? file.dirname
         | 
| 19 | 
            +
                  File.open(file, 'w') do |f|
         | 
| 20 | 
            +
                    f.write Haml::HTML.new(found, :xhtml => true).render
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                  
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
                
         | 
| 25 | 
            +
                #run this once per import
         | 
| 26 | 
            +
                def once
         | 
| 27 | 
            +
                  convert
         | 
| 28 | 
            +
                  source_doc = Sphonglepress::STATIC_DIR.join("document", "site.html")
         | 
| 29 | 
            +
                  cleaned = clean(source_doc)
         | 
| 30 | 
            +
                  @segments = segment cleaned
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
                
         | 
| 33 | 
            +
                def clean(doc)
         | 
| 34 | 
            +
                  
         | 
| 35 | 
            +
                  require ::Sphonglepress::App::APP_DIR.join("vendor", "html_cleaner")
         | 
| 36 | 
            +
                  opts = {
         | 
| 37 | 
            +
                    :remove_attrs => %w(style width height cellpadding cellspacing valign halign),
         | 
| 38 | 
            +
                    :remove_tags => %w(font style meta b),
         | 
| 39 | 
            +
                    :remove_nested_empty_tags => [%w(p br)]
         | 
| 40 | 
            +
                  }
         | 
| 41 | 
            +
                  
         | 
| 42 | 
            +
                  cleaner = HTMLCleaner.new(IO.read(doc), opts)
         | 
| 43 | 
            +
                  File.open(Sphonglepress::STATIC_DIR.join("document", "site.cleaned.html"), 'w') do |f|
         | 
| 44 | 
            +
                    f.write(cleaner.render)
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
                  cleaner.render
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
                
         | 
| 49 | 
            +
                def segment(doc)
         | 
| 50 | 
            +
                  segments = {}
         | 
| 51 | 
            +
                  doc = Nokogiri::HTML(doc)
         | 
| 52 | 
            +
                  headers = doc.css('h1')
         | 
| 53 | 
            +
                  headers.each_with_index do |h, index|
         | 
| 54 | 
            +
                    heading = clean_header(h)
         | 
| 55 | 
            +
                    content = content_until(h, headers[index+1])
         | 
| 56 | 
            +
                    segments[heading] = content.chomp.chomp("\n")
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
                  segments
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
                
         | 
| 61 | 
            +
                def content_until(from, to)
         | 
| 62 | 
            +
                  siblings = [from.next_sibling]
         | 
| 63 | 
            +
                  while((siblings.last.next_sibling != to) rescue false)
         | 
| 64 | 
            +
                    siblings << siblings.last.next_sibling
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                  siblings.inject("") {|m, s| m << s.to_s}
         | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
                
         | 
| 69 | 
            +
                def clean_header(tag)
         | 
| 70 | 
            +
                  tag.inner_html.chomp.gsub("\n", " ").gsub(/ +/, " ").chomp(":").gsub(/^[0-9]*\./, "").strip rescue ""
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
                
         | 
| 73 | 
            +
                def convert
         | 
| 74 | 
            +
                  source_dir = Sphonglepress::STATIC_DIR.join("document")
         | 
| 75 | 
            +
                  source_doc = source_dir.join("site.odt")
         | 
| 76 | 
            +
                  puts "SOURCE DOC: #{source_doc}" if File.exist? source_doc
         | 
| 77 | 
            +
                  cmd = "libreoffice  -headless -convert-to html -outdir #{source_dir} #{source_doc}"
         | 
| 78 | 
            +
                  `#{cmd}`
         | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
                
         | 
| 81 | 
            +
                # http://stackoverflow.com/questions/1939333/how-to-make-a-ruby-string-safe-for-a-filesystem
         | 
| 82 | 
            +
                def sanitize_filename(filename)
         | 
| 83 | 
            +
                  filename.strip.gsub(/^.*(\\|\/)/, '').gsub(/[^0-9A-Za-z.\-]/, '-')
         | 
| 84 | 
            +
                end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                def full_path_for_page(page)
         | 
| 87 | 
            +
                  return "" unless page
         | 
| 88 | 
            +
                  path = full_path_for_page(page.parent)
         | 
| 89 | 
            +
                  join = path.length > 0 ? "_" : ""
         | 
| 90 | 
            +
                  return "#{path << join}" << "#{sanitize_filename(page.post_title)}"
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                def filenames_for_page(page)
         | 
| 94 | 
            +
                  filenames = []
         | 
| 95 | 
            +
                  
         | 
| 96 | 
            +
                  filenames << full_path_for_page(page)
         | 
| 97 | 
            +
                  page.posts.each do |child|
         | 
| 98 | 
            +
                    filenames.concat filenames_for_page(child)
         | 
| 99 | 
            +
                  end
         | 
| 100 | 
            +
                  filenames
         | 
| 101 | 
            +
                end
         | 
| 102 | 
            +
              end
         | 
| 103 | 
            +
            end
         | 
| @@ -0,0 +1,61 @@ | |
| 1 | 
            +
            require 'fssm'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Sphonglepress
         | 
| 4 | 
            +
              class Watcher
         | 
| 5 | 
            +
                def initialize(app)
         | 
| 6 | 
            +
                  @app = app
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
                  
         | 
| 9 | 
            +
                def watch
         | 
| 10 | 
            +
                  myself = self
         | 
| 11 | 
            +
                  while true do
         | 
| 12 | 
            +
                    begin
         | 
| 13 | 
            +
                      FSSM.monitor do
         | 
| 14 | 
            +
                        path ::Sphonglepress::STATIC_DIR do
         | 
| 15 | 
            +
                          
         | 
| 16 | 
            +
                          update {|base, relative| myself.static }
         | 
| 17 | 
            +
                          delete {|base, relative| myself.static }
         | 
| 18 | 
            +
                          create {|base, relative| mysqlf.static }
         | 
| 19 | 
            +
                        end
         | 
| 20 | 
            +
                        
         | 
| 21 | 
            +
                        path ::Sphonglepress::LAYOUT_DIR.join("source") do
         | 
| 22 | 
            +
                          update {|base, relative| myself.middleman }
         | 
| 23 | 
            +
                          delete {|base, relative| myself.middleman }
         | 
| 24 | 
            +
                          create {|base, relative| myself.middleman }
         | 
| 25 | 
            +
                        end
         | 
| 26 | 
            +
                        
         | 
| 27 | 
            +
                        path ::Sphonglepress::CONFIG_DIR do
         | 
| 28 | 
            +
                          update {|base, relative| myself.config_sitemap }
         | 
| 29 | 
            +
                          delete {|base, relative| myself.config_sitemap }
         | 
| 30 | 
            +
                          create {|base, relative| myself.config_sitemap }
         | 
| 31 | 
            +
                        end
         | 
| 32 | 
            +
                        
         | 
| 33 | 
            +
                      end
         | 
| 34 | 
            +
                      
         | 
| 35 | 
            +
                    rescue Exception => e
         | 
| 36 | 
            +
                      
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
                
         | 
| 41 | 
            +
                def static
         | 
| 42 | 
            +
                    puts "Static dir changed, reloading site content"
         | 
| 43 | 
            +
                    @app.load_db
         | 
| 44 | 
            +
                    @app.import_site
         | 
| 45 | 
            +
                    puts "DONE"
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
                
         | 
| 49 | 
            +
                def middleman
         | 
| 50 | 
            +
                    puts "Middleman directory changed, reloading static assets"
         | 
| 51 | 
            +
                    @app.export
         | 
| 52 | 
            +
                    puts "DONE"
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
                
         | 
| 55 | 
            +
                def config_sitemap
         | 
| 56 | 
            +
                    puts "Config dir changed, Creating any static files not created"
         | 
| 57 | 
            +
                    @app.create_static_files
         | 
| 58 | 
            +
                    puts "DONE"       
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
            end
         | 
    
        data/sphonglepress.gemspec
    CHANGED
    
    | @@ -27,5 +27,11 @@ Gem::Specification.new do |s| | |
| 27 27 | 
             
              s.add_dependency('activerecord')
         | 
| 28 28 | 
             
              s.add_dependency('tilt')
         | 
| 29 29 | 
             
              s.add_dependency('haml')
         | 
| 30 | 
            +
              s.add_dependency('mysql')
         | 
| 31 | 
            +
              s.add_dependency('fssm')
         | 
| 32 | 
            +
              #FIXME: move html-cleaner into gem & remove this
         | 
| 33 | 
            +
              s.add_dependency('hpricot')
         | 
| 34 | 
            +
              s.add_dependency('mime-types')
         | 
| 35 | 
            +
             | 
| 30 36 |  | 
| 31 37 | 
             
            end
         | 
| @@ -1,7 +1,8 @@ | |
| 1 1 | 
             
            --- 
         | 
| 2 | 
            -
            wp_git_tag: v3.1 | 
| 2 | 
            +
            wp_git_tag: v3.2.1
         | 
| 3 3 | 
             
            wp_clone_dir: wordpress
         | 
| 4 | 
            -
            wp_git_url: https://github.com/ | 
| 5 | 
            -
            wp_theme_dir:  | 
| 4 | 
            +
            wp_git_url: https://github.com/nhemsley/wordpress
         | 
| 5 | 
            +
            wp_theme_dir: default
         | 
| 6 6 | 
             
            middleman_dir: middleman
         | 
| 7 7 | 
             
            static_dir: static
         | 
| 8 | 
            +
            template: splash
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0_HOME: 0
         | 
| 
            File without changes
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            require 'hpricot'
         | 
| 2 | 
            +
            require 'ruby-debug'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class HTMLCleaner
         | 
| 5 | 
            +
              def initialize(html, options = nil)
         | 
| 6 | 
            +
                @html = html
         | 
| 7 | 
            +
                @doc = Hpricot(@html)
         | 
| 8 | 
            +
                @options = options
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def remove_attr(attr)
         | 
| 12 | 
            +
                @doc.search("[@#{attr}]").each do |e|
         | 
| 13 | 
            +
                  e.remove_attribute(attr)
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def remove_tag(tag)
         | 
| 18 | 
            +
                els = @doc.search(tag)
         | 
| 19 | 
            +
                els.collect!{|node| node if node.children == nil}.compact.remove
         | 
| 20 | 
            +
                
         | 
| 21 | 
            +
                @doc.search(tag).each do |e|
         | 
| 22 | 
            +
                  inner = e.children
         | 
| 23 | 
            +
                  parent = e.parent
         | 
| 24 | 
            +
                  if inner
         | 
| 25 | 
            +
                    parent.replace_child(e, inner)
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
              
         | 
| 30 | 
            +
              def remove_nested_empty_tags(first, second)
         | 
| 31 | 
            +
                els = @doc.search(first)
         | 
| 32 | 
            +
                remove = els.select do |el|
         | 
| 33 | 
            +
                  ret = true
         | 
| 34 | 
            +
                  ret = false unless el.children.detect {|ch| ch.name == second && ch.inner_html.chomp == ""}
         | 
| 35 | 
            +
                  ret
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
                remove.each {|r| r.parent.children.delete(r) }
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              def render
         | 
| 41 | 
            +
                @options[:remove_attrs].each { |a| remove_attr a } if @options[:remove_attrs]
         | 
| 42 | 
            +
                @options[:remove_tags].each { |a| remove_tag a } if @options[:remove_tags]
         | 
| 43 | 
            +
                @options[:remove_nested_empty_tags].each { |a| remove_nested_empty_tags(a[0], a[1]) } if @options[:remove_nested_empty_tags]
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                @doc.to_s
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: sphonglepress
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.3
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2011- | 
| 12 | 
            +
            date: 2011-10-19 00:00:00.000000000Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: thor
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &16288120 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *16288120
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: middleman
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &16287700 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ! '>='
         | 
| @@ -32,10 +32,10 @@ dependencies: | |
| 32 32 | 
             
                    version: '0'
         | 
| 33 33 | 
             
              type: :runtime
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *16287700
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: activerecord
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &16287280 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ! '>='
         | 
| @@ -43,10 +43,10 @@ dependencies: | |
| 43 43 | 
             
                    version: '0'
         | 
| 44 44 | 
             
              type: :runtime
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *16287280
         | 
| 47 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 48 | 
             
              name: tilt
         | 
| 49 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &16286860 !ruby/object:Gem::Requirement
         | 
| 50 50 | 
             
                none: false
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - ! '>='
         | 
| @@ -54,10 +54,10 @@ dependencies: | |
| 54 54 | 
             
                    version: '0'
         | 
| 55 55 | 
             
              type: :runtime
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *16286860
         | 
| 58 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 59 59 | 
             
              name: haml
         | 
| 60 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &16286440 !ruby/object:Gem::Requirement
         | 
| 61 61 | 
             
                none: false
         | 
| 62 62 | 
             
                requirements:
         | 
| 63 63 | 
             
                - - ! '>='
         | 
| @@ -65,7 +65,51 @@ dependencies: | |
| 65 65 | 
             
                    version: '0'
         | 
| 66 66 | 
             
              type: :runtime
         | 
| 67 67 | 
             
              prerelease: false
         | 
| 68 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *16286440
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: mysql
         | 
| 71 | 
            +
              requirement: &16286020 !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                none: false
         | 
| 73 | 
            +
                requirements:
         | 
| 74 | 
            +
                - - ! '>='
         | 
| 75 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 76 | 
            +
                    version: '0'
         | 
| 77 | 
            +
              type: :runtime
         | 
| 78 | 
            +
              prerelease: false
         | 
| 79 | 
            +
              version_requirements: *16286020
         | 
| 80 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 81 | 
            +
              name: fssm
         | 
| 82 | 
            +
              requirement: &16285600 !ruby/object:Gem::Requirement
         | 
| 83 | 
            +
                none: false
         | 
| 84 | 
            +
                requirements:
         | 
| 85 | 
            +
                - - ! '>='
         | 
| 86 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 87 | 
            +
                    version: '0'
         | 
| 88 | 
            +
              type: :runtime
         | 
| 89 | 
            +
              prerelease: false
         | 
| 90 | 
            +
              version_requirements: *16285600
         | 
| 91 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 92 | 
            +
              name: hpricot
         | 
| 93 | 
            +
              requirement: &16285180 !ruby/object:Gem::Requirement
         | 
| 94 | 
            +
                none: false
         | 
| 95 | 
            +
                requirements:
         | 
| 96 | 
            +
                - - ! '>='
         | 
| 97 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 98 | 
            +
                    version: '0'
         | 
| 99 | 
            +
              type: :runtime
         | 
| 100 | 
            +
              prerelease: false
         | 
| 101 | 
            +
              version_requirements: *16285180
         | 
| 102 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 103 | 
            +
              name: mime-types
         | 
| 104 | 
            +
              requirement: &16284760 !ruby/object:Gem::Requirement
         | 
| 105 | 
            +
                none: false
         | 
| 106 | 
            +
                requirements:
         | 
| 107 | 
            +
                - - ! '>='
         | 
| 108 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 109 | 
            +
                    version: '0'
         | 
| 110 | 
            +
              type: :runtime
         | 
| 111 | 
            +
              prerelease: false
         | 
| 112 | 
            +
              version_requirements: *16284760
         | 
| 69 113 | 
             
            description: Sphonglepress is a command line utility for interacting with & making
         | 
| 70 114 | 
             
              the task of importing content into a wordpress site
         | 
| 71 115 | 
             
            email:
         | 
| @@ -98,7 +142,10 @@ files: | |
| 98 142 | 
             
            - lib/sphonglepress/models/page.rb
         | 
| 99 143 | 
             
            - lib/sphonglepress/models/post.rb
         | 
| 100 144 | 
             
            - lib/sphonglepress/version.rb
         | 
| 101 | 
            -
            - lib/sphonglepress/ | 
| 145 | 
            +
            - lib/sphonglepress/visitors/attachment_visitor.rb
         | 
| 146 | 
            +
            - lib/sphonglepress/visitors/document_importer.rb
         | 
| 147 | 
            +
            - lib/sphonglepress/visitors/visitor.rb
         | 
| 148 | 
            +
            - lib/sphonglepress/watcher.rb
         | 
| 102 149 | 
             
            - script/console
         | 
| 103 150 | 
             
            - script/destroy
         | 
| 104 151 | 
             
            - script/generate
         | 
| @@ -106,10 +153,13 @@ files: | |
| 106 153 | 
             
            - templates/config/database.yml
         | 
| 107 154 | 
             
            - templates/config/settings.yml
         | 
| 108 155 | 
             
            - templates/config/sitemap.yml
         | 
| 109 | 
            -
            - templates/middleman/ | 
| 110 | 
            -
            - templates/middleman/ | 
| 156 | 
            +
            - templates/splash/middleman/home.html.haml
         | 
| 157 | 
            +
            - templates/splash/middleman/index.html.haml
         | 
| 158 | 
            +
            - templates/splash/middleman/layout.haml
         | 
| 159 | 
            +
            - templates/splash/visitors/splash.rb
         | 
| 111 160 | 
             
            - test/test_helper.rb
         | 
| 112 161 | 
             
            - test/test_sphonglepress.rb
         | 
| 162 | 
            +
            - vendor/html_cleaner.rb
         | 
| 113 163 | 
             
            homepage: ''
         | 
| 114 164 | 
             
            licenses: []
         | 
| 115 165 | 
             
            post_install_message: 
         | 
| @@ -130,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 130 180 | 
             
                  version: '0'
         | 
| 131 181 | 
             
            requirements: []
         | 
| 132 182 | 
             
            rubyforge_project: sphonglepress
         | 
| 133 | 
            -
            rubygems_version: 1.8. | 
| 183 | 
            +
            rubygems_version: 1.8.10
         | 
| 134 184 | 
             
            signing_key: 
         | 
| 135 185 | 
             
            specification_version: 3
         | 
| 136 186 | 
             
            summary: Gem for populating wordpress
         | 
| 
            File without changes
         |