smallcage 0.0.8
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/History.txt +15 -0
- data/License.txt +20 -0
- data/Manifest.txt +70 -0
- data/README.txt +1 -0
- data/Rakefile +4 -0
- data/bin/smc +136 -0
- data/config/hoe.rb +70 -0
- data/config/requirements.rb +17 -0
- data/lib/smallcage/commands/Manifest.erb +19 -0
- data/lib/smallcage/commands/auto.rb +52 -0
- data/lib/smallcage/commands/clean.rb +24 -0
- data/lib/smallcage/commands/import.rb +212 -0
- data/lib/smallcage/commands/manifest.rb +39 -0
- data/lib/smallcage/commands/server.rb +24 -0
- data/lib/smallcage/commands/update.rb +40 -0
- data/lib/smallcage/erb_base.rb +16 -0
- data/lib/smallcage/loader.rb +239 -0
- data/lib/smallcage/misc.rb +13 -0
- data/lib/smallcage/renderer.rb +19 -0
- data/lib/smallcage/runner.rb +36 -0
- data/lib/smallcage/version.rb +9 -0
- data/lib/smallcage.rb +22 -0
- data/log/debug.log +0 -0
- data/project/default/_smc/helpers/base_helper.rb +34 -0
- data/project/default/_smc/helpers/site_helper.rb +5 -0
- data/project/default/_smc/templates/default.rhtml +5 -0
- data/project/default/_smc/templates/footer.rhtml +0 -0
- data/project/default/_smc/templates/header.rhtml +0 -0
- data/project/nkf/_smc/filters/filters.yml +3 -0
- data/project/nkf/_smc/filters/nkf_filter.rb +15 -0
- data/project/relpath/_smc/filters/filters.yml +2 -0
- data/project/relpath/_smc/filters/relpath_filter.rb +13 -0
- data/project/standard/_dir.smc +2 -0
- data/project/standard/_smc/helpers/menu_helper.rb +23 -0
- data/project/standard/_smc/templates/footer.rhtml +12 -0
- data/project/standard/_smc/templates/header.rhtml +35 -0
- data/project/standard/_smc/templates/redirect.rhtml +13 -0
- data/project/standard/_smc/templates/sidebar.rhtml +9 -0
- data/project/standard/_smc/templates/topic_path.rhtml +6 -0
- data/project/standard/about/_dir.smc +1 -0
- data/project/standard/about/index.html.smc +3 -0
- data/project/standard/common/css/default.css +97 -0
- data/project/standard/common/css/print.css +0 -0
- data/project/standard/index.html.smc +3 -0
- data/project/standard/sample1/_dir.smc +1 -0
- data/project/standard/sample1/index.html.smc +7 -0
- data/project/standard/sample1/index2.html.smc +5 -0
- data/project/standard/sample1/redirect.html.smc +2 -0
- data/project/standard/sample2/_dir.smc +1 -0
- data/project/standard/sample2/index.html.smc +3 -0
- data/script/destroy +14 -0
- data/script/destroy.cmd +1 -0
- data/script/generate +14 -0
- data/script/generate.cmd +1 -0
- data/setup.rb +1585 -0
- data/spec/data/htdocs1/_dir.smc +0 -0
- data/spec/data/htdocs1/a/b/c/index.html.smc +1 -0
- data/spec/import_spec.rb +20 -0
- data/spec/loader_spec.rb +41 -0
- data/spec/manifest_spec.rb +32 -0
- data/spec/misc_spec.rb +25 -0
- data/spec/smallcage_spec.rb +34 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +9 -0
- data/tasks/deployment.rake +27 -0
- data/tasks/environment.rake +7 -0
- data/tasks/rspec.rake +21 -0
- data/tasks/website.rake +9 -0
- data/test/test_helper.rb +2 -0
- data/test/test_smallcage.rb +11 -0
- metadata +132 -0
    
        data/History.txt
    ADDED
    
    | @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            == 0.0.6 2007-11-04
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * smcオブジェクトのpathがStringだったのをPathnameを保持するように修正。ファイルアクセスで使う値なのでPathnameの方が良いと判断しました。
         | 
| 4 | 
            +
            * updateで拡張子smcを省略するとエラーになる問題を修正。
         | 
| 5 | 
            +
            * ドキュメントルートが見つからない場合にループしてしまう問題を修正。
         | 
| 6 | 
            +
            * ドキュメントルート以下に移動してupdateするとエラーになる問題を修正。
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            == 0.0.5 2007-11-01
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            * smcファイル内でerbを使うためにRendererにメソッドを追加。
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            == 0.0.1 2007-08-22
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            * 1 major enhancement:
         | 
| 15 | 
            +
              * Initial release
         | 
    
        data/License.txt
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            Copyright (c) 2007 FIXME full name
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 4 | 
            +
            a copy of this software and associated documentation files (the
         | 
| 5 | 
            +
            "Software"), to deal in the Software without restriction, including
         | 
| 6 | 
            +
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 7 | 
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 8 | 
            +
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 9 | 
            +
            the following conditions:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            The above copyright notice and this permission notice shall be
         | 
| 12 | 
            +
            included in all copies or substantial portions of the Software.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 15 | 
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 16 | 
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 17 | 
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 18 | 
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 19 | 
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 20 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/Manifest.txt
    ADDED
    
    | @@ -0,0 +1,70 @@ | |
| 1 | 
            +
            History.txt
         | 
| 2 | 
            +
            License.txt
         | 
| 3 | 
            +
            Manifest.txt
         | 
| 4 | 
            +
            README.txt
         | 
| 5 | 
            +
            Rakefile
         | 
| 6 | 
            +
            bin/smc
         | 
| 7 | 
            +
            config/hoe.rb
         | 
| 8 | 
            +
            config/requirements.rb
         | 
| 9 | 
            +
            lib/smallcage.rb
         | 
| 10 | 
            +
            lib/smallcage/commands/Manifest.erb
         | 
| 11 | 
            +
            lib/smallcage/commands/auto.rb
         | 
| 12 | 
            +
            lib/smallcage/commands/clean.rb
         | 
| 13 | 
            +
            lib/smallcage/commands/import.rb
         | 
| 14 | 
            +
            lib/smallcage/commands/manifest.rb
         | 
| 15 | 
            +
            lib/smallcage/commands/server.rb
         | 
| 16 | 
            +
            lib/smallcage/commands/update.rb
         | 
| 17 | 
            +
            lib/smallcage/erb_base.rb
         | 
| 18 | 
            +
            lib/smallcage/loader.rb
         | 
| 19 | 
            +
            lib/smallcage/misc.rb
         | 
| 20 | 
            +
            lib/smallcage/renderer.rb
         | 
| 21 | 
            +
            lib/smallcage/runner.rb
         | 
| 22 | 
            +
            lib/smallcage/version.rb
         | 
| 23 | 
            +
            log/debug.log
         | 
| 24 | 
            +
            project/default/_smc/helpers/base_helper.rb
         | 
| 25 | 
            +
            project/default/_smc/helpers/site_helper.rb
         | 
| 26 | 
            +
            project/default/_smc/templates/default.rhtml
         | 
| 27 | 
            +
            project/default/_smc/templates/footer.rhtml
         | 
| 28 | 
            +
            project/default/_smc/templates/header.rhtml
         | 
| 29 | 
            +
            project/nkf/_smc/filters/filters.yml
         | 
| 30 | 
            +
            project/nkf/_smc/filters/nkf_filter.rb
         | 
| 31 | 
            +
            project/relpath/_smc/filters/filters.yml
         | 
| 32 | 
            +
            project/relpath/_smc/filters/relpath_filter.rb
         | 
| 33 | 
            +
            project/standard/_dir.smc
         | 
| 34 | 
            +
            project/standard/_smc/helpers/menu_helper.rb
         | 
| 35 | 
            +
            project/standard/_smc/templates/footer.rhtml
         | 
| 36 | 
            +
            project/standard/_smc/templates/header.rhtml
         | 
| 37 | 
            +
            project/standard/_smc/templates/redirect.rhtml
         | 
| 38 | 
            +
            project/standard/_smc/templates/sidebar.rhtml
         | 
| 39 | 
            +
            project/standard/_smc/templates/topic_path.rhtml
         | 
| 40 | 
            +
            project/standard/about/_dir.smc
         | 
| 41 | 
            +
            project/standard/about/index.html.smc
         | 
| 42 | 
            +
            project/standard/common/css/default.css
         | 
| 43 | 
            +
            project/standard/common/css/print.css
         | 
| 44 | 
            +
            project/standard/index.html.smc
         | 
| 45 | 
            +
            project/standard/sample1/_dir.smc
         | 
| 46 | 
            +
            project/standard/sample1/index.html.smc
         | 
| 47 | 
            +
            project/standard/sample1/index2.html.smc
         | 
| 48 | 
            +
            project/standard/sample1/redirect.html.smc
         | 
| 49 | 
            +
            project/standard/sample2/_dir.smc
         | 
| 50 | 
            +
            project/standard/sample2/index.html.smc
         | 
| 51 | 
            +
            script/destroy
         | 
| 52 | 
            +
            script/destroy.cmd
         | 
| 53 | 
            +
            script/generate
         | 
| 54 | 
            +
            script/generate.cmd
         | 
| 55 | 
            +
            setup.rb
         | 
| 56 | 
            +
            spec/data/htdocs1/_dir.smc
         | 
| 57 | 
            +
            spec/data/htdocs1/a/b/c/index.html.smc
         | 
| 58 | 
            +
            spec/import_spec.rb
         | 
| 59 | 
            +
            spec/loader_spec.rb
         | 
| 60 | 
            +
            spec/manifest_spec.rb
         | 
| 61 | 
            +
            spec/misc_spec.rb
         | 
| 62 | 
            +
            spec/smallcage_spec.rb
         | 
| 63 | 
            +
            spec/spec.opts
         | 
| 64 | 
            +
            spec/spec_helper.rb
         | 
| 65 | 
            +
            tasks/deployment.rake
         | 
| 66 | 
            +
            tasks/environment.rake
         | 
| 67 | 
            +
            tasks/rspec.rake
         | 
| 68 | 
            +
            tasks/website.rake
         | 
| 69 | 
            +
            test/test_helper.rb
         | 
| 70 | 
            +
            test/test_smallcage.rb
         | 
    
        data/README.txt
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            README
         | 
    
        data/Rakefile
    ADDED
    
    
    
        data/bin/smc
    ADDED
    
    | @@ -0,0 +1,136 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            #  Created on 2007-8-22.
         | 
| 4 | 
            +
            #  Copyright (c) 2007. All rights reserved.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            begin
         | 
| 7 | 
            +
              require 'rubygems'
         | 
| 8 | 
            +
            rescue LoadError
         | 
| 9 | 
            +
              # no rubygems to load, so we fail silently
         | 
| 10 | 
            +
            end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            require 'smallcage'
         | 
| 13 | 
            +
            require 'optparse'
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            STDOUT.sync = true
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            VERSION_NOTE = "SmallCage #{SmallCage::VERSION::STRING} - Lightweight CMS Package."
         | 
| 18 | 
            +
            OPTIONS = {}
         | 
| 19 | 
            +
            OPTIONS[:original_argv] = ARGV.clone
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            OptionParser.new do |opts|
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              opts.banner =<<BANNER
         | 
| 24 | 
            +
            Usage: #{File.basename($0)} <subcommand> [options]
         | 
| 25 | 
            +
            #{VERSION_NOTE}
         | 
| 26 | 
            +
            Subcommands are:
         | 
| 27 | 
            +
                update [path]                    Build smc contents.
         | 
| 28 | 
            +
                clean  [path]                    Remove files generated from *.smc source.
         | 
| 29 | 
            +
                server [path] [port]             Start HTTP server.
         | 
| 30 | 
            +
                auto   [path]                    Start auto update daemon.
         | 
| 31 | 
            +
                import [name|uri]                Import project.
         | 
| 32 | 
            +
                manifest [path]                  Generate Manifest.html file.
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            Options are:
         | 
| 35 | 
            +
            BANNER
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              opts.separator ""
         | 
| 38 | 
            +
              opts.on("-h", "--help", "Show this help message.") do
         | 
| 39 | 
            +
                puts opts
         | 
| 40 | 
            +
                exit
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
              opts.on("-v", "--version", "Show version info.") do
         | 
| 43 | 
            +
                puts VERSION_NOTE
         | 
| 44 | 
            +
                exit
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              subparsers = Hash.new do |h,k|
         | 
| 48 | 
            +
                $stderr.puts "no such subcommand: #{k}"
         | 
| 49 | 
            +
                exit 1
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
              
         | 
| 52 | 
            +
              subparsers[:update] = OptionParser.new do |subp|
         | 
| 53 | 
            +
                subp.banner =<<EOT
         | 
| 54 | 
            +
            Usage: update [PATH]
         | 
| 55 | 
            +
            EOT
         | 
| 56 | 
            +
              end
         | 
| 57 | 
            +
              
         | 
| 58 | 
            +
              subparsers[:server] = OptionParser.new do |subp|
         | 
| 59 | 
            +
                subp.banner =<<EOT
         | 
| 60 | 
            +
            Usage: server [PATH] [PORT]
         | 
| 61 | 
            +
            EOT
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              subparsers[:auto] = OptionParser.new do |subp|
         | 
| 65 | 
            +
                subp.banner =<<EOT
         | 
| 66 | 
            +
            Usage: auto [PATH]
         | 
| 67 | 
            +
            EOT
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              subparsers[:generate] = OptionParser.new do |subp|
         | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
              subparsers[:release] = OptionParser.new do |subp|
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
              subparsers[:help] = OptionParser.new do |subp|
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
              subparsers[:import] = OptionParser.new do |subp|
         | 
| 77 | 
            +
              end
         | 
| 78 | 
            +
              subparsers[:manifest] = OptionParser.new do |subp|
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
              subparsers[:clean] = OptionParser.new do |subp|
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
              commands = Hash.new {|h,k| k}
         | 
| 84 | 
            +
              commands.merge!({
         | 
| 85 | 
            +
              	:up => :update,
         | 
| 86 | 
            +
              	:sv => :server,
         | 
| 87 | 
            +
              	:au => :auto,
         | 
| 88 | 
            +
              	:gen => :generate,
         | 
| 89 | 
            +
              	:rel => :release,
         | 
| 90 | 
            +
              	:st => :status,
         | 
| 91 | 
            +
              })
         | 
| 92 | 
            +
             | 
| 93 | 
            +
              opts.order!(ARGV)
         | 
| 94 | 
            +
              unless ARGV.empty?
         | 
| 95 | 
            +
                OPTIONS[:command] = commands[ARGV.shift.to_sym]
         | 
| 96 | 
            +
                subparsers[OPTIONS[:command]].parse!(ARGV)
         | 
| 97 | 
            +
              end
         | 
| 98 | 
            +
              
         | 
| 99 | 
            +
              if OPTIONS[:command].nil?
         | 
| 100 | 
            +
                puts opts
         | 
| 101 | 
            +
                exit
         | 
| 102 | 
            +
              elsif OPTIONS[:command] == :help
         | 
| 103 | 
            +
                subcmd = ARGV.shift
         | 
| 104 | 
            +
                if subcmd.nil?
         | 
| 105 | 
            +
                  puts opts
         | 
| 106 | 
            +
                else
         | 
| 107 | 
            +
                  puts subparsers[subcmd.to_sym]
         | 
| 108 | 
            +
                end
         | 
| 109 | 
            +
                exit
         | 
| 110 | 
            +
              elsif OPTIONS[:command] == :update
         | 
| 111 | 
            +
                OPTIONS[:path] = ARGV.shift
         | 
| 112 | 
            +
                OPTIONS[:path] ||= "."
         | 
| 113 | 
            +
              elsif OPTIONS[:command] == :server
         | 
| 114 | 
            +
                OPTIONS[:path] = ARGV.shift
         | 
| 115 | 
            +
                OPTIONS[:port] = ARGV.shift
         | 
| 116 | 
            +
                OPTIONS[:path] ||= "."
         | 
| 117 | 
            +
                OPTIONS[:port] ||= 80
         | 
| 118 | 
            +
              elsif OPTIONS[:command] == :auto
         | 
| 119 | 
            +
                OPTIONS[:path] = ARGV.shift
         | 
| 120 | 
            +
                OPTIONS[:path] ||= "."
         | 
| 121 | 
            +
              elsif OPTIONS[:command] == :import
         | 
| 122 | 
            +
              	OPTIONS[:from] = ARGV.shift
         | 
| 123 | 
            +
              	OPTIONS[:from] ||= "default"
         | 
| 124 | 
            +
              	
         | 
| 125 | 
            +
              	OPTIONS[:to] = ARGV.shift
         | 
| 126 | 
            +
              	OPTIONS[:to] ||= "."
         | 
| 127 | 
            +
              elsif OPTIONS[:command] == :manifest
         | 
| 128 | 
            +
                OPTIONS[:path] = ARGV.shift
         | 
| 129 | 
            +
                OPTIONS[:path] ||= "."
         | 
| 130 | 
            +
              elsif OPTIONS[:command] == :clean
         | 
| 131 | 
            +
                OPTIONS[:path] = ARGV.shift
         | 
| 132 | 
            +
                OPTIONS[:path] ||= "."
         | 
| 133 | 
            +
              end
         | 
| 134 | 
            +
            end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
            SmallCage::Runner.run(OPTIONS)
         | 
    
        data/config/hoe.rb
    ADDED
    
    | @@ -0,0 +1,70 @@ | |
| 1 | 
            +
            require 'smallcage/version'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            AUTHOR = ['SAITO Toshihiro', 'KOSEKI Kengo', 'SATO Akihiko']  # can also be an array of Authors
         | 
| 4 | 
            +
            EMAIL = ["saito@bluemark.jp", "koseki@bluemark.jp", "gom@bluemark.jp"]
         | 
| 5 | 
            +
            DESCRIPTION = "Lightweigt CMS Package."
         | 
| 6 | 
            +
            GEM_NAME = 'smallcage' # what ppl will type to install your gem
         | 
| 7 | 
            +
            RUBYFORGE_PROJECT = 'smallcage' # The unix name for your project
         | 
| 8 | 
            +
            HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
         | 
| 9 | 
            +
            DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            @config_file = "~/.rubyforge/user-config.yml"
         | 
| 12 | 
            +
            @config = nil
         | 
| 13 | 
            +
            RUBYFORGE_USERNAME = "unknown"
         | 
| 14 | 
            +
            def rubyforge_username
         | 
| 15 | 
            +
              unless @config
         | 
| 16 | 
            +
                begin
         | 
| 17 | 
            +
                  @config = YAML.load(File.read(File.expand_path(@config_file)))
         | 
| 18 | 
            +
                rescue
         | 
| 19 | 
            +
                  puts <<-EOS
         | 
| 20 | 
            +
            ERROR: No rubyforge config file found: #{@config_file}"
         | 
| 21 | 
            +
            Run 'rubyforge setup' to prepare your env for access to Rubyforge
         | 
| 22 | 
            +
             - See http://newgem.rubyforge.org/rubyforge.html for more details
         | 
| 23 | 
            +
                  EOS
         | 
| 24 | 
            +
                  exit
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
              RUBYFORGE_USERNAME.replace @config["username"]
         | 
| 28 | 
            +
            end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
             | 
| 31 | 
            +
            REV = nil 
         | 
| 32 | 
            +
            # UNCOMMENT IF REQUIRED: 
         | 
| 33 | 
            +
            # REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
         | 
| 34 | 
            +
            VERS = SmallCage::VERSION::STRING + (REV ? ".#{REV}" : "")
         | 
| 35 | 
            +
            RDOC_OPTS = ['--quiet', '--title', 'smallcage documentation',
         | 
| 36 | 
            +
                "--opname", "index.html",
         | 
| 37 | 
            +
                "--line-numbers", 
         | 
| 38 | 
            +
                "--main", "README",
         | 
| 39 | 
            +
                "--inline-source"]
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            class Hoe
         | 
| 42 | 
            +
              def extra_deps 
         | 
| 43 | 
            +
                @extra_deps.reject! { |x| Array(x).first == 'hoe' } 
         | 
| 44 | 
            +
                @extra_deps
         | 
| 45 | 
            +
              end 
         | 
| 46 | 
            +
            end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            # Generate all the Rake tasks
         | 
| 49 | 
            +
            # Run 'rake -T' to see list of generated tasks (from gem root directory)
         | 
| 50 | 
            +
            hoe = Hoe.new(GEM_NAME, VERS) do |p|
         | 
| 51 | 
            +
              p.author = AUTHOR 
         | 
| 52 | 
            +
              p.description = DESCRIPTION
         | 
| 53 | 
            +
              p.email = EMAIL
         | 
| 54 | 
            +
              p.summary = DESCRIPTION
         | 
| 55 | 
            +
              p.url = HOMEPATH
         | 
| 56 | 
            +
              p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
         | 
| 57 | 
            +
              p.test_globs = ["test/**/test_*.rb"]
         | 
| 58 | 
            +
              p.clean_globs |= ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']  #An array of file patterns to delete on clean.
         | 
| 59 | 
            +
              
         | 
| 60 | 
            +
              # == Optional
         | 
| 61 | 
            +
              p.changes = p.paragraphs_of("History.txt", 0..1).join("\\n\\n")
         | 
| 62 | 
            +
              #p.extra_deps = []     # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
         | 
| 63 | 
            +
              
         | 
| 64 | 
            +
              #p.spec_extras = {}    # A hash of extra values to set in the gemspec.
         | 
| 65 | 
            +
              
         | 
| 66 | 
            +
            end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\\n\\n")
         | 
| 69 | 
            +
            PATH    = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
         | 
| 70 | 
            +
            hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            require 'fileutils'
         | 
| 2 | 
            +
            include FileUtils
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'rubygems'
         | 
| 5 | 
            +
            %w[rake hoe newgem rubigen].each do |req_gem|
         | 
| 6 | 
            +
              begin
         | 
| 7 | 
            +
                require req_gem
         | 
| 8 | 
            +
              rescue LoadError
         | 
| 9 | 
            +
                puts "This Rakefile requires the '#{req_gem}' RubyGem."
         | 
| 10 | 
            +
                puts "Installation: gem install #{req_gem} -y"
         | 
| 11 | 
            +
                exit
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            $:.unshift(File.join(File.dirname(__FILE__), %w[.. lib]))
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            require 'smallcage'
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            <?xml version="1.0" encoding="UTF-8"?>
         | 
| 2 | 
            +
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
         | 
| 3 | 
            +
            <html xmlns="http://www.w3.org/1999/xhtml">
         | 
| 4 | 
            +
            <head>
         | 
| 5 | 
            +
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
         | 
| 6 | 
            +
            <title>SmallCage Project Files</title>
         | 
| 7 | 
            +
            </head>
         | 
| 8 | 
            +
            <body>
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            <h1>SmallCage Project Files</h1>
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            <ul class="files">
         | 
| 13 | 
            +
            <%- entries.each do |e| -%>
         | 
| 14 | 
            +
            <li><a href="<%= e %>"><%= e %></a></li>
         | 
| 15 | 
            +
            <%- end -%>
         | 
| 16 | 
            +
            </ul>
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            </body>
         | 
| 19 | 
            +
            </html>
         | 
| @@ -0,0 +1,52 @@ | |
| 1 | 
            +
            module SmallCage::Commands
         | 
| 2 | 
            +
              class Auto
         | 
| 3 | 
            +
                def self.execute(opts)
         | 
| 4 | 
            +
                  self.new(opts).execute
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
                
         | 
| 7 | 
            +
                def initialize(opts)
         | 
| 8 | 
            +
                  @opts = opts
         | 
| 9 | 
            +
                  @target = Pathname.new(opts[:path])
         | 
| 10 | 
            +
                  @sleep = 1
         | 
| 11 | 
            +
                  @mtimes = {}
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                def execute
         | 
| 15 | 
            +
                  puts "SmallCage Auto Update"
         | 
| 16 | 
            +
                  puts "-" * 60
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  ['INT', 'TERM'].each do |signal|
         | 
| 19 | 
            +
                    Signal.trap(signal) do
         | 
| 20 | 
            +
                      puts
         | 
| 21 | 
            +
                      puts "exit."
         | 
| 22 | 
            +
                      exit
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                
         | 
| 26 | 
            +
                  loop do
         | 
| 27 | 
            +
                    sleep @sleep
         | 
| 28 | 
            +
                            
         | 
| 29 | 
            +
                    loader = SmallCage::Loader.new(@target)
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    do_update = false
         | 
| 32 | 
            +
                    loader.each_smc_file do |f|
         | 
| 33 | 
            +
                      mtime = File.stat(f).mtime
         | 
| 34 | 
            +
                      if @mtimes[f] != mtime
         | 
| 35 | 
            +
                        @mtimes[f] = mtime
         | 
| 36 | 
            +
                        do_update = true
         | 
| 37 | 
            +
                      end
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
                    
         | 
| 40 | 
            +
                    if do_update
         | 
| 41 | 
            +
                      runner = SmallCage::Runner.new({ :path => @target })
         | 
| 42 | 
            +
                      runner.update
         | 
| 43 | 
            +
                      print "\a"
         | 
| 44 | 
            +
                      puts "-" * 60
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
                
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
            end
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            module SmallCage::Commands
         | 
| 2 | 
            +
              class Clean
         | 
| 3 | 
            +
                def self.execute(opts)
         | 
| 4 | 
            +
                  self.new(opts).execute
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
                
         | 
| 7 | 
            +
                def initialize(opts)
         | 
| 8 | 
            +
                  @opts = opts
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
                
         | 
| 11 | 
            +
                def execute
         | 
| 12 | 
            +
                  target = Pathname.new(@opts[:path])
         | 
| 13 | 
            +
                  unless target.exist?
         | 
| 14 | 
            +
                    raise "target directory or file does not exist.: " + target.to_s
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                  
         | 
| 17 | 
            +
                  loader = SmallCage::Loader.new(target)
         | 
| 18 | 
            +
                  loader.each_smc_obj do |obj|
         | 
| 19 | 
            +
                    obj["path"].delete
         | 
| 20 | 
            +
                    puts "remove: " + obj["uri"]
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,212 @@ | |
| 1 | 
            +
            module SmallCage::Commands
         | 
| 2 | 
            +
              class Import
         | 
| 3 | 
            +
                def self.execute(opts)
         | 
| 4 | 
            +
                  self.new(opts).execute
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
                
         | 
| 7 | 
            +
                def initialize(opts)
         | 
| 8 | 
            +
                  @opts = opts
         | 
| 9 | 
            +
                  @project_dir = Pathname.new(__FILE__) + "../../../../project"
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
                
         | 
| 12 | 
            +
                def qp(str = "")
         | 
| 13 | 
            +
                  print str unless @opts[:quiet]
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
                
         | 
| 16 | 
            +
                def qps(str = "")
         | 
| 17 | 
            +
                  puts str unless @opts[:quiet]
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
                
         | 
| 20 | 
            +
                def execute
         | 
| 21 | 
            +
                  @dest = Pathname.new(@opts[:to])
         | 
| 22 | 
            +
                  
         | 
| 23 | 
            +
                  Dir.mkdir(@dest) unless @dest.exist?
         | 
| 24 | 
            +
                  return unless @dest.directory?
         | 
| 25 | 
            +
                  
         | 
| 26 | 
            +
                  from = @opts[:from].split(/,/)
         | 
| 27 | 
            +
                  from.each do |f|
         | 
| 28 | 
            +
                    qps
         | 
| 29 | 
            +
                    qps "Import: #{f}"
         | 
| 30 | 
            +
                    if f =~ %r{^https?://}
         | 
| 31 | 
            +
                      import_external(f)
         | 
| 32 | 
            +
                    elsif f =~ %r{^\w+$}
         | 
| 33 | 
            +
                      import(f)
         | 
| 34 | 
            +
                    else
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
                
         | 
| 39 | 
            +
                def import(from)
         | 
| 40 | 
            +
                  d = @project_dir + from
         | 
| 41 | 
            +
                  return unless d.directory?
         | 
| 42 | 
            +
                  @entries = local_entries(d)
         | 
| 43 | 
            +
                  unless @opts[:quiet]
         | 
| 44 | 
            +
                    return unless confirm_entries
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
                  import_entries
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
                
         | 
| 49 | 
            +
                def import_external
         | 
| 50 | 
            +
                  @entries = external_entries
         | 
| 51 | 
            +
                  unless @opts[:quiet]
         | 
| 52 | 
            +
                    return unless confirm_entries
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
                  import_entries
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                def import_entries
         | 
| 58 | 
            +
                  failed = []
         | 
| 59 | 
            +
                  @entries.each do |e|
         | 
| 60 | 
            +
                    if e.overwrite?
         | 
| 61 | 
            +
                      qp "*"
         | 
| 62 | 
            +
                    elsif ! e.exist?
         | 
| 63 | 
            +
                      qp "+"
         | 
| 64 | 
            +
                    else
         | 
| 65 | 
            +
                      qp " "
         | 
| 66 | 
            +
                    end
         | 
| 67 | 
            +
                    qps " " + e.path
         | 
| 68 | 
            +
                    begin
         | 
| 69 | 
            +
                      e.import
         | 
| 70 | 
            +
                    rescue
         | 
| 71 | 
            +
                      failed << e
         | 
| 72 | 
            +
                      qps "F " + e.path
         | 
| 73 | 
            +
                    end
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
                  
         | 
| 76 | 
            +
                  unless failed.empty?
         | 
| 77 | 
            +
                    qps "FAILED:"
         | 
| 78 | 
            +
                    failed.each do |e|
         | 
| 79 | 
            +
                      qps "  " + e.path
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
                end
         | 
| 83 | 
            +
                private :import_entries
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                def local_entries(d)
         | 
| 86 | 
            +
                  result = []
         | 
| 87 | 
            +
                  Dir.chdir(d) do
         | 
| 88 | 
            +
                    Dir.glob("**/*") do |f|
         | 
| 89 | 
            +
                      e = ImportEntry.new
         | 
| 90 | 
            +
                      e.path = f
         | 
| 91 | 
            +
                      e.from = d + f
         | 
| 92 | 
            +
                      e.to = @dest + f
         | 
| 93 | 
            +
                      result << e
         | 
| 94 | 
            +
                    end
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
                  return result
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
                private :local_entries
         | 
| 99 | 
            +
                
         | 
| 100 | 
            +
                def external_entries(uri)
         | 
| 101 | 
            +
                  if uri !~ %r{/$}
         | 
| 102 | 
            +
                    uri += "/"
         | 
| 103 | 
            +
                  end
         | 
| 104 | 
            +
                  mfuri = uri + "Manifest.html"
         | 
| 105 | 
            +
                  
         | 
| 106 | 
            +
                  source = open(mfuri) {|io| io.read }
         | 
| 107 | 
            +
                  result = []
         | 
| 108 | 
            +
                  
         | 
| 109 | 
            +
                  files = source.scan(%r{<li><a href="(./[^"]+)">(./[^<]+)</a></li>})
         | 
| 110 | 
            +
                  files.each do |f|
         | 
| 111 | 
            +
                    raise "illegal path:#{f[0]},#{f[1]}" if f[0] != f[1]
         | 
| 112 | 
            +
                    raise "illegal path:#{f[0]}" if f[0] =~ %r{/\.\.}
         | 
| 113 | 
            +
                    path = f[0]
         | 
| 114 | 
            +
                    e = ImportEntry.new
         | 
| 115 | 
            +
                    e.path = path
         | 
| 116 | 
            +
                    e.from = uri + path
         | 
| 117 | 
            +
                    e.to = @dest + path
         | 
| 118 | 
            +
                    result << e
         | 
| 119 | 
            +
                  end
         | 
| 120 | 
            +
                  
         | 
| 121 | 
            +
                  return result
         | 
| 122 | 
            +
                end
         | 
| 123 | 
            +
                private :external_entries
         | 
| 124 | 
            +
                
         | 
| 125 | 
            +
                def confirm_entries
         | 
| 126 | 
            +
                  overwrite = []
         | 
| 127 | 
            +
                  
         | 
| 128 | 
            +
                  qps "Create:"
         | 
| 129 | 
            +
                  @entries.each do |e|
         | 
| 130 | 
            +
                    if e.overwrite?
         | 
| 131 | 
            +
                      overwrite << e
         | 
| 132 | 
            +
                    elsif ! e.exist?
         | 
| 133 | 
            +
                      qps "  " + e.path
         | 
| 134 | 
            +
                    end
         | 
| 135 | 
            +
                  end
         | 
| 136 | 
            +
                  qps
         | 
| 137 | 
            +
                  
         | 
| 138 | 
            +
                  unless overwrite.empty?
         | 
| 139 | 
            +
                    qps "Overwrite:"
         | 
| 140 | 
            +
                    overwrite.each do |e|
         | 
| 141 | 
            +
                      qps "  " + e.path
         | 
| 142 | 
            +
                    end
         | 
| 143 | 
            +
                    qps
         | 
| 144 | 
            +
                  end
         | 
| 145 | 
            +
                  
         | 
| 146 | 
            +
                  return y_or_n("Import these files?[yN]: ", false)
         | 
| 147 | 
            +
                end
         | 
| 148 | 
            +
                private :confirm_entries
         | 
| 149 | 
            +
                
         | 
| 150 | 
            +
                def y_or_n(prompt, default)
         | 
| 151 | 
            +
                  loop do
         | 
| 152 | 
            +
                    print prompt
         | 
| 153 | 
            +
                    yn = STDIN.gets.strip
         | 
| 154 | 
            +
                    if yn =~ /^(y|yes)$/i
         | 
| 155 | 
            +
                      return true
         | 
| 156 | 
            +
                    elsif yn =~ /^(n|no)$/i
         | 
| 157 | 
            +
                      return false
         | 
| 158 | 
            +
                    elsif yn == ""
         | 
| 159 | 
            +
                      return default
         | 
| 160 | 
            +
                    end
         | 
| 161 | 
            +
                  end
         | 
| 162 | 
            +
                end
         | 
| 163 | 
            +
                private :y_or_n
         | 
| 164 | 
            +
                
         | 
| 165 | 
            +
                
         | 
| 166 | 
            +
                class ImportEntry
         | 
| 167 | 
            +
                  attr_accessor :path, :from, :to
         | 
| 168 | 
            +
             | 
| 169 | 
            +
                  def import
         | 
| 170 | 
            +
                    if external?
         | 
| 171 | 
            +
                      copy_external
         | 
| 172 | 
            +
                    else
         | 
| 173 | 
            +
                      copy_local
         | 
| 174 | 
            +
                    end
         | 
| 175 | 
            +
                  end
         | 
| 176 | 
            +
                  
         | 
| 177 | 
            +
                  def external?
         | 
| 178 | 
            +
                    from =~ %r{^https?://}
         | 
| 179 | 
            +
                  end
         | 
| 180 | 
            +
                  
         | 
| 181 | 
            +
                  def exist?
         | 
| 182 | 
            +
                    to.exist?
         | 
| 183 | 
            +
                  end
         | 
| 184 | 
            +
                  
         | 
| 185 | 
            +
                  def overwrite?
         | 
| 186 | 
            +
                    to.file?
         | 
| 187 | 
            +
                  end
         | 
| 188 | 
            +
                  
         | 
| 189 | 
            +
                  def copy_local
         | 
| 190 | 
            +
                    if from.directory?
         | 
| 191 | 
            +
                      FileUtils.makedirs(to)
         | 
| 192 | 
            +
                    else
         | 
| 193 | 
            +
                      FileUtils.makedirs(to.parent)
         | 
| 194 | 
            +
                      FileUtils.copy(from, to)
         | 
| 195 | 
            +
                    end
         | 
| 196 | 
            +
                  end
         | 
| 197 | 
            +
                  private :copy_local
         | 
| 198 | 
            +
                  
         | 
| 199 | 
            +
                  def copy_external
         | 
| 200 | 
            +
                    if from =~ %r{/$}
         | 
| 201 | 
            +
                      FileUtils.makedirs(to)
         | 
| 202 | 
            +
                    else
         | 
| 203 | 
            +
                      FileUtils.makedirs(to.parent)
         | 
| 204 | 
            +
                      s = open(from) {|io| io.read }
         | 
| 205 | 
            +
                      open(to, "w") {|io| io << s }
         | 
| 206 | 
            +
                    end
         | 
| 207 | 
            +
                  end
         | 
| 208 | 
            +
                  private :copy_external
         | 
| 209 | 
            +
                  
         | 
| 210 | 
            +
                end
         | 
| 211 | 
            +
              end
         | 
| 212 | 
            +
            end
         | 
| @@ -0,0 +1,39 @@ | |
| 1 | 
            +
            module SmallCage::Commands
         | 
| 2 | 
            +
              class Manifest
         | 
| 3 | 
            +
                def self.execute(opts)
         | 
| 4 | 
            +
                  self.new(opts).execute
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
                
         | 
| 7 | 
            +
                def initialize(opts)
         | 
| 8 | 
            +
                  @opts = opts
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
                
         | 
| 11 | 
            +
                def execute
         | 
| 12 | 
            +
                  entries = []
         | 
| 13 | 
            +
                  root = Pathname.new(@opts[:path])
         | 
| 14 | 
            +
                  Dir.chdir(root) do
         | 
| 15 | 
            +
                    Dir.glob("**/*") do |f|
         | 
| 16 | 
            +
                      entries << f
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
                  
         | 
| 20 | 
            +
                  tmp = []
         | 
| 21 | 
            +
                  entries.each do |f|
         | 
| 22 | 
            +
                    path = root + f
         | 
| 23 | 
            +
                    f = "./" + f
         | 
| 24 | 
            +
                    if path.directory?
         | 
| 25 | 
            +
                      f = f + "/"
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                    next if path.basename.to_s == "Manifest.html"
         | 
| 28 | 
            +
                    tmp << f
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                  entries = tmp
         | 
| 31 | 
            +
                  
         | 
| 32 | 
            +
                  template = File.dirname(__FILE__) + "/Manifest.erb"
         | 
| 33 | 
            +
                  source = ERB.new(File.read(template), nil, "-").result(binding)
         | 
| 34 | 
            +
                  open(root + "Manifest.html", "w") do |io|
         | 
| 35 | 
            +
                    io << source
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
            end
         |