friendly_format 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +11 -0
 - data/LICENSE +201 -0
 - data/NOTICE +10 -0
 - data/README +45 -0
 - data/Rakefile +58 -0
 - data/TODO +6 -0
 - data/friendly_format.gemspec +42 -0
 - data/lib/friendly_format/set_common.rb +16 -0
 - data/lib/friendly_format/set_strict.rb +12 -0
 - data/lib/friendly_format/version.rb +3 -0
 - data/lib/friendly_format.rb +171 -0
 - data/tasks/ann.rake +80 -0
 - data/tasks/bones.rake +20 -0
 - data/tasks/gem.rake +192 -0
 - data/tasks/git.rake +40 -0
 - data/tasks/manifest.rake +48 -0
 - data/tasks/notes.rake +27 -0
 - data/tasks/post_load.rake +39 -0
 - data/tasks/rdoc.rake +50 -0
 - data/tasks/rubyforge.rake +55 -0
 - data/tasks/setup.rb +279 -0
 - data/tasks/spec.rake +54 -0
 - data/tasks/svn.rake +47 -0
 - data/tasks/test.rake +40 -0
 - data/test/sample/complex_article.txt +111 -0
 - data/test/sample/complex_article_result.txt +108 -0
 - data/test/test_friendly_format.rb +168 -0
 - metadata +119 -0
 
    
        data/tasks/ann.rake
    ADDED
    
    | 
         @@ -0,0 +1,80 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            begin
         
     | 
| 
      
 3 
     | 
    
         
            +
              require 'bones/smtp_tls'
         
     | 
| 
      
 4 
     | 
    
         
            +
            rescue LoadError
         
     | 
| 
      
 5 
     | 
    
         
            +
              require 'net/smtp'
         
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'time'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            namespace :ann do
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              # A prerequisites task that all other tasks depend upon
         
     | 
| 
      
 12 
     | 
    
         
            +
              task :prereqs
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              file PROJ.ann.file do
         
     | 
| 
      
 15 
     | 
    
         
            +
                ann = PROJ.ann
         
     | 
| 
      
 16 
     | 
    
         
            +
                puts "Generating #{ann.file}"
         
     | 
| 
      
 17 
     | 
    
         
            +
                File.open(ann.file,'w') do |fd|
         
     | 
| 
      
 18 
     | 
    
         
            +
                  fd.puts("#{PROJ.name} version #{PROJ.version}")
         
     | 
| 
      
 19 
     | 
    
         
            +
                  fd.puts("    by #{Array(PROJ.authors).first}") if PROJ.authors
         
     | 
| 
      
 20 
     | 
    
         
            +
                  fd.puts("    #{PROJ.url}") if PROJ.url.valid?
         
     | 
| 
      
 21 
     | 
    
         
            +
                  fd.puts("    (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
         
     | 
| 
      
 22 
     | 
    
         
            +
                  fd.puts
         
     | 
| 
      
 23 
     | 
    
         
            +
                  fd.puts("== DESCRIPTION")
         
     | 
| 
      
 24 
     | 
    
         
            +
                  fd.puts
         
     | 
| 
      
 25 
     | 
    
         
            +
                  fd.puts(PROJ.description)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  fd.puts
         
     | 
| 
      
 27 
     | 
    
         
            +
                  fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
         
     | 
| 
      
 28 
     | 
    
         
            +
                  fd.puts
         
     | 
| 
      
 29 
     | 
    
         
            +
                  ann.paragraphs.each do |p|
         
     | 
| 
      
 30 
     | 
    
         
            +
                    fd.puts "== #{p.upcase}"
         
     | 
| 
      
 31 
     | 
    
         
            +
                    fd.puts
         
     | 
| 
      
 32 
     | 
    
         
            +
                    fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
         
     | 
| 
      
 33 
     | 
    
         
            +
                    fd.puts
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  fd.puts ann.text if ann.text
         
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              desc "Create an announcement file"
         
     | 
| 
      
 40 
     | 
    
         
            +
              task :announcement => ['ann:prereqs', PROJ.ann.file]
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              desc "Send an email announcement"
         
     | 
| 
      
 43 
     | 
    
         
            +
              task :email => ['ann:prereqs', PROJ.ann.file] do
         
     | 
| 
      
 44 
     | 
    
         
            +
                ann = PROJ.ann
         
     | 
| 
      
 45 
     | 
    
         
            +
                from = ann.email[:from] || PROJ.email
         
     | 
| 
      
 46 
     | 
    
         
            +
                to   = Array(ann.email[:to])
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                ### build a mail header for RFC 822
         
     | 
| 
      
 49 
     | 
    
         
            +
                rfc822msg =  "From: #{from}\n"
         
     | 
| 
      
 50 
     | 
    
         
            +
                rfc822msg << "To: #{to.join(',')}\n"
         
     | 
| 
      
 51 
     | 
    
         
            +
                rfc822msg << "Subject: [ANN] #{PROJ.name} #{PROJ.version}"
         
     | 
| 
      
 52 
     | 
    
         
            +
                rfc822msg << " (#{PROJ.release_name})" if PROJ.release_name
         
     | 
| 
      
 53 
     | 
    
         
            +
                rfc822msg << "\n"
         
     | 
| 
      
 54 
     | 
    
         
            +
                rfc822msg << "Date: #{Time.new.rfc822}\n"
         
     | 
| 
      
 55 
     | 
    
         
            +
                rfc822msg << "Message-Id: "
         
     | 
| 
      
 56 
     | 
    
         
            +
                rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
         
     | 
| 
      
 57 
     | 
    
         
            +
                rfc822msg << File.read(ann.file)
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
         
     | 
| 
      
 60 
     | 
    
         
            +
                  ann.email[key]
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                params[3] = PROJ.email if params[3].nil?
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                if params[4].nil?
         
     | 
| 
      
 66 
     | 
    
         
            +
                  STDOUT.write "Please enter your e-mail password (#{params[3]}): "
         
     | 
| 
      
 67 
     | 
    
         
            +
                  params[4] = STDIN.gets.chomp
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                ### send email
         
     | 
| 
      
 71 
     | 
    
         
            +
                Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
         
     | 
| 
      
 72 
     | 
    
         
            +
              end
         
     | 
| 
      
 73 
     | 
    
         
            +
            end  # namespace :ann
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            desc 'Alias to ann:announcement'
         
     | 
| 
      
 76 
     | 
    
         
            +
            task :ann => 'ann:announcement'
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            CLOBBER << PROJ.ann.file
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            # EOF
         
     | 
    
        data/tasks/bones.rake
    ADDED
    
    | 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            if HAVE_BONES
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            namespace :bones do
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              desc 'Show the PROJ open struct'
         
     | 
| 
      
 7 
     | 
    
         
            +
              task :debug do |t|
         
     | 
| 
      
 8 
     | 
    
         
            +
                atr = if t.application.top_level_tasks.length == 2
         
     | 
| 
      
 9 
     | 
    
         
            +
                  t.application.top_level_tasks.pop
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                if atr then Bones::Debug.show_attr(PROJ, atr)
         
     | 
| 
      
 13 
     | 
    
         
            +
                else Bones::Debug.show PROJ end
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            end  # namespace :bones
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            end  # HAVE_BONES
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            # EOF
         
     | 
    
        data/tasks/gem.rake
    ADDED
    
    | 
         @@ -0,0 +1,192 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            require 'find'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rake/packagetask'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'rubygems/user_interaction'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'rubygems/builder'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module Bones
         
     | 
| 
      
 8 
     | 
    
         
            +
            class GemPackageTask < Rake::PackageTask
         
     | 
| 
      
 9 
     | 
    
         
            +
              # Ruby GEM spec containing the metadata for this package.  The
         
     | 
| 
      
 10 
     | 
    
         
            +
              # name, version and package_files are automatically determined
         
     | 
| 
      
 11 
     | 
    
         
            +
              # from the GEM spec and don't need to be explicitly provided.
         
     | 
| 
      
 12 
     | 
    
         
            +
              #
         
     | 
| 
      
 13 
     | 
    
         
            +
              attr_accessor :gem_spec
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              # Tasks from the Bones gem directory
         
     | 
| 
      
 16 
     | 
    
         
            +
              attr_reader :bones_files
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              # Create a GEM Package task library.  Automatically define the gem
         
     | 
| 
      
 19 
     | 
    
         
            +
              # if a block is given.  If no block is supplied, then +define+
         
     | 
| 
      
 20 
     | 
    
         
            +
              # needs to be called to define the task.
         
     | 
| 
      
 21 
     | 
    
         
            +
              #
         
     | 
| 
      
 22 
     | 
    
         
            +
              def initialize(gem_spec)
         
     | 
| 
      
 23 
     | 
    
         
            +
                init(gem_spec)
         
     | 
| 
      
 24 
     | 
    
         
            +
                yield self if block_given?
         
     | 
| 
      
 25 
     | 
    
         
            +
                define if block_given?
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              # Initialization tasks without the "yield self" or define
         
     | 
| 
      
 29 
     | 
    
         
            +
              # operations.
         
     | 
| 
      
 30 
     | 
    
         
            +
              #
         
     | 
| 
      
 31 
     | 
    
         
            +
              def init(gem)
         
     | 
| 
      
 32 
     | 
    
         
            +
                super(gem.name, gem.version)
         
     | 
| 
      
 33 
     | 
    
         
            +
                @gem_spec = gem
         
     | 
| 
      
 34 
     | 
    
         
            +
                @package_files += gem_spec.files if gem_spec.files
         
     | 
| 
      
 35 
     | 
    
         
            +
                @bones_files = []
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                local_setup = File.join(Dir.pwd, %w[tasks setup.rb])
         
     | 
| 
      
 38 
     | 
    
         
            +
                if !test(?e, local_setup)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  Dir.glob(::Bones.path(%w[lib bones tasks *])).each {|fn| bones_files << fn}
         
     | 
| 
      
 40 
     | 
    
         
            +
                  gem_spec.files = (gem_spec.files +
         
     | 
| 
      
 41 
     | 
    
         
            +
                      bones_files.map {|fn| File.join('tasks', File.basename(fn))}).sort
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              # Create the Rake tasks and actions specified by this
         
     | 
| 
      
 46 
     | 
    
         
            +
              # GemPackageTask.  (+define+ is automatically called if a block is
         
     | 
| 
      
 47 
     | 
    
         
            +
              # given to +new+).
         
     | 
| 
      
 48 
     | 
    
         
            +
              #
         
     | 
| 
      
 49 
     | 
    
         
            +
              def define
         
     | 
| 
      
 50 
     | 
    
         
            +
                super
         
     | 
| 
      
 51 
     | 
    
         
            +
                task :prereqs
         
     | 
| 
      
 52 
     | 
    
         
            +
                task :package => ['gem:prereqs', "#{package_dir_path}/#{gem_file}"]
         
     | 
| 
      
 53 
     | 
    
         
            +
                file "#{package_dir_path}/#{gem_file}" => [package_dir_path] + package_files + bones_files do
         
     | 
| 
      
 54 
     | 
    
         
            +
                  when_writing("Creating GEM") {
         
     | 
| 
      
 55 
     | 
    
         
            +
                    chdir(package_dir_path) do
         
     | 
| 
      
 56 
     | 
    
         
            +
                      Gem::Builder.new(gem_spec).build
         
     | 
| 
      
 57 
     | 
    
         
            +
                      verbose(true) {
         
     | 
| 
      
 58 
     | 
    
         
            +
                        mv gem_file, "../#{gem_file}"
         
     | 
| 
      
 59 
     | 
    
         
            +
                      }
         
     | 
| 
      
 60 
     | 
    
         
            +
                    end
         
     | 
| 
      
 61 
     | 
    
         
            +
                  }
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                file package_dir_path => bones_files do
         
     | 
| 
      
 65 
     | 
    
         
            +
                  mkdir_p package_dir rescue nil
         
     | 
| 
      
 66 
     | 
    
         
            +
                  bones_files.each do |fn|
         
     | 
| 
      
 67 
     | 
    
         
            +
                    base_fn = File.join('tasks', File.basename(fn))
         
     | 
| 
      
 68 
     | 
    
         
            +
                    f = File.join(package_dir_path, base_fn)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    fdir = File.dirname(f)
         
     | 
| 
      
 70 
     | 
    
         
            +
                    mkdir_p(fdir) if !File.exist?(fdir)
         
     | 
| 
      
 71 
     | 
    
         
            +
                    if File.directory?(fn)
         
     | 
| 
      
 72 
     | 
    
         
            +
                      mkdir_p(f)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    else
         
     | 
| 
      
 74 
     | 
    
         
            +
                      raise "file name conflict for '#{base_fn}' (conflicts with '#{fn}')" if test(?e, f)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      safe_ln(fn, f)
         
     | 
| 
      
 76 
     | 
    
         
            +
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
              
         
     | 
| 
      
 81 
     | 
    
         
            +
              def gem_file
         
     | 
| 
      
 82 
     | 
    
         
            +
                if @gem_spec.platform == Gem::Platform::RUBY
         
     | 
| 
      
 83 
     | 
    
         
            +
                  "#{package_name}.gem"
         
     | 
| 
      
 84 
     | 
    
         
            +
                else
         
     | 
| 
      
 85 
     | 
    
         
            +
                  "#{package_name}-#{@gem_spec.platform}.gem"
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
              end
         
     | 
| 
      
 88 
     | 
    
         
            +
            end  # class GemPackageTask
         
     | 
| 
      
 89 
     | 
    
         
            +
            end  # module Bones
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            namespace :gem do
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
              PROJ.gem._spec = Gem::Specification.new do |s|
         
     | 
| 
      
 94 
     | 
    
         
            +
                s.name = PROJ.name
         
     | 
| 
      
 95 
     | 
    
         
            +
                s.version = PROJ.version
         
     | 
| 
      
 96 
     | 
    
         
            +
                s.summary = PROJ.summary
         
     | 
| 
      
 97 
     | 
    
         
            +
                s.authors = Array(PROJ.authors)
         
     | 
| 
      
 98 
     | 
    
         
            +
                s.email = PROJ.email
         
     | 
| 
      
 99 
     | 
    
         
            +
                s.homepage = Array(PROJ.url).first
         
     | 
| 
      
 100 
     | 
    
         
            +
                s.rubyforge_project = PROJ.rubyforge.name
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                s.description = PROJ.description
         
     | 
| 
      
 103 
     | 
    
         
            +
             
     | 
| 
      
 104 
     | 
    
         
            +
                PROJ.gem.dependencies.each do |dep|
         
     | 
| 
      
 105 
     | 
    
         
            +
                  s.add_dependency(*dep)
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                PROJ.gem.development_dependencies.each do |dep|
         
     | 
| 
      
 109 
     | 
    
         
            +
                  s.add_development_dependency(*dep)
         
     | 
| 
      
 110 
     | 
    
         
            +
                end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                s.files = PROJ.gem.files
         
     | 
| 
      
 113 
     | 
    
         
            +
                s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
         
     | 
| 
      
 114 
     | 
    
         
            +
                s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                s.bindir = 'bin'
         
     | 
| 
      
 117 
     | 
    
         
            +
                dirs = Dir["{#{PROJ.libs.join(',')}}"]
         
     | 
| 
      
 118 
     | 
    
         
            +
                s.require_paths = dirs unless dirs.empty?
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
                incl = Regexp.new(PROJ.rdoc.include.join('|'))
         
     | 
| 
      
 121 
     | 
    
         
            +
                excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
         
     | 
| 
      
 122 
     | 
    
         
            +
                excl = Regexp.new(excl.join('|'))
         
     | 
| 
      
 123 
     | 
    
         
            +
                rdoc_files = PROJ.gem.files.find_all do |fn|
         
     | 
| 
      
 124 
     | 
    
         
            +
                               case fn
         
     | 
| 
      
 125 
     | 
    
         
            +
                               when excl; false
         
     | 
| 
      
 126 
     | 
    
         
            +
                               when incl; true
         
     | 
| 
      
 127 
     | 
    
         
            +
                               else false end
         
     | 
| 
      
 128 
     | 
    
         
            +
                             end
         
     | 
| 
      
 129 
     | 
    
         
            +
                s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
         
     | 
| 
      
 130 
     | 
    
         
            +
                s.extra_rdoc_files = rdoc_files
         
     | 
| 
      
 131 
     | 
    
         
            +
                s.has_rdoc = true
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
                if test ?f, PROJ.test.file
         
     | 
| 
      
 134 
     | 
    
         
            +
                  s.test_file = PROJ.test.file
         
     | 
| 
      
 135 
     | 
    
         
            +
                else
         
     | 
| 
      
 136 
     | 
    
         
            +
                  s.test_files = PROJ.test.files.to_a
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
                # Do any extra stuff the user wants
         
     | 
| 
      
 140 
     | 
    
         
            +
                PROJ.gem.extras.each do |msg, val|
         
     | 
| 
      
 141 
     | 
    
         
            +
                  case val
         
     | 
| 
      
 142 
     | 
    
         
            +
                  when Proc
         
     | 
| 
      
 143 
     | 
    
         
            +
                    val.call(s.send(msg))
         
     | 
| 
      
 144 
     | 
    
         
            +
                  else
         
     | 
| 
      
 145 
     | 
    
         
            +
                    s.send "#{msg}=", val
         
     | 
| 
      
 146 
     | 
    
         
            +
                  end
         
     | 
| 
      
 147 
     | 
    
         
            +
                end
         
     | 
| 
      
 148 
     | 
    
         
            +
              end  # Gem::Specification.new
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
              Bones::GemPackageTask.new(PROJ.gem._spec) do |pkg|
         
     | 
| 
      
 151 
     | 
    
         
            +
                pkg.need_tar = PROJ.gem.need_tar
         
     | 
| 
      
 152 
     | 
    
         
            +
                pkg.need_zip = PROJ.gem.need_zip
         
     | 
| 
      
 153 
     | 
    
         
            +
              end
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
              desc 'Show information about the gem'
         
     | 
| 
      
 156 
     | 
    
         
            +
              task :debug => 'gem:prereqs' do
         
     | 
| 
      
 157 
     | 
    
         
            +
                puts PROJ.gem._spec.to_ruby
         
     | 
| 
      
 158 
     | 
    
         
            +
              end
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
              desc 'Install the gem'
         
     | 
| 
      
 161 
     | 
    
         
            +
              task :install => [:clobber, 'gem:package'] do
         
     | 
| 
      
 162 
     | 
    
         
            +
                sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
                # use this version of the command for rubygems > 1.0.0
         
     | 
| 
      
 165 
     | 
    
         
            +
                #sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{PROJ.gem._spec.full_name}"
         
     | 
| 
      
 166 
     | 
    
         
            +
              end
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
              desc 'Uninstall the gem'
         
     | 
| 
      
 169 
     | 
    
         
            +
              task :uninstall do
         
     | 
| 
      
 170 
     | 
    
         
            +
                installed_list = Gem.source_index.find_name(PROJ.name)
         
     | 
| 
      
 171 
     | 
    
         
            +
                if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
         
     | 
| 
      
 172 
     | 
    
         
            +
                  sh "#{SUDO} #{GEM} uninstall --version '#{PROJ.version}' --ignore-dependencies --executables #{PROJ.name}"
         
     | 
| 
      
 173 
     | 
    
         
            +
                end
         
     | 
| 
      
 174 
     | 
    
         
            +
              end
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
              desc 'Reinstall the gem'
         
     | 
| 
      
 177 
     | 
    
         
            +
              task :reinstall => [:uninstall, :install]
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
              desc 'Cleanup the gem'
         
     | 
| 
      
 180 
     | 
    
         
            +
              task :cleanup do
         
     | 
| 
      
 181 
     | 
    
         
            +
                sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
         
     | 
| 
      
 182 
     | 
    
         
            +
              end
         
     | 
| 
      
 183 
     | 
    
         
            +
            end  # namespace :gem
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
            desc 'Alias to gem:package'
         
     | 
| 
      
 187 
     | 
    
         
            +
            task :gem => 'gem:package'
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
            task :clobber => 'gem:clobber_package'
         
     | 
| 
      
 190 
     | 
    
         
            +
            remove_desc_for_task 'gem:clobber_package'
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
            # EOF
         
     | 
    
        data/tasks/git.rake
    ADDED
    
    | 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            if HAVE_GIT
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            namespace :git do
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              # A prerequisites task that all other tasks depend upon
         
     | 
| 
      
 7 
     | 
    
         
            +
              task :prereqs
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              desc 'Show tags from the Git repository'
         
     | 
| 
      
 10 
     | 
    
         
            +
              task :show_tags => 'git:prereqs' do |t|
         
     | 
| 
      
 11 
     | 
    
         
            +
                puts %x/git tag/
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              desc 'Create a new tag in the Git repository'
         
     | 
| 
      
 15 
     | 
    
         
            +
              task :create_tag => 'git:prereqs' do |t|
         
     | 
| 
      
 16 
     | 
    
         
            +
                v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
         
     | 
| 
      
 17 
     | 
    
         
            +
                abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                tag = "%s-%s" % [PROJ.name, PROJ.version]
         
     | 
| 
      
 20 
     | 
    
         
            +
                msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                puts "Creating Git tag '#{tag}'"
         
     | 
| 
      
 23 
     | 
    
         
            +
                unless system "git tag -a -m '#{msg}' #{tag}"
         
     | 
| 
      
 24 
     | 
    
         
            +
                  abort "Tag creation failed"
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                if %x/git remote/ =~ %r/^origin\s*$/
         
     | 
| 
      
 28 
     | 
    
         
            +
                  unless system "git push origin #{tag}"
         
     | 
| 
      
 29 
     | 
    
         
            +
                    abort "Could not push tag to remote Git repository"
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            end  # namespace :git
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            task 'gem:release' => 'git:create_tag'
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            end  # if HAVE_GIT
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            # EOF
         
     | 
    
        data/tasks/manifest.rake
    ADDED
    
    | 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            require 'find'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            namespace :manifest do
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              desc 'Verify the manifest'
         
     | 
| 
      
 7 
     | 
    
         
            +
              task :check do
         
     | 
| 
      
 8 
     | 
    
         
            +
                fn = PROJ.manifest_file + '.tmp'
         
     | 
| 
      
 9 
     | 
    
         
            +
                files = manifest_files
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                File.open(fn, 'w') {|fp| fp.puts files}
         
     | 
| 
      
 12 
     | 
    
         
            +
                lines = %x(#{DIFF} -du #{PROJ.manifest_file} #{fn}).split("\n")
         
     | 
| 
      
 13 
     | 
    
         
            +
                if HAVE_FACETS_ANSICODE and ENV.has_key?('TERM')
         
     | 
| 
      
 14 
     | 
    
         
            +
                  lines.map! do |line|
         
     | 
| 
      
 15 
     | 
    
         
            +
                    case line
         
     | 
| 
      
 16 
     | 
    
         
            +
                    when %r/^(-{3}|\+{3})/; nil
         
     | 
| 
      
 17 
     | 
    
         
            +
                    when %r/^@/; ANSICode.blue line
         
     | 
| 
      
 18 
     | 
    
         
            +
                    when %r/^\+/; ANSICode.green line
         
     | 
| 
      
 19 
     | 
    
         
            +
                    when %r/^\-/; ANSICode.red line
         
     | 
| 
      
 20 
     | 
    
         
            +
                    else line end
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
                puts lines.compact
         
     | 
| 
      
 24 
     | 
    
         
            +
                rm fn rescue nil
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              desc 'Create a new manifest'
         
     | 
| 
      
 28 
     | 
    
         
            +
              task :create do
         
     | 
| 
      
 29 
     | 
    
         
            +
                files = manifest_files
         
     | 
| 
      
 30 
     | 
    
         
            +
                unless test(?f, PROJ.manifest_file)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  files << PROJ.manifest_file
         
     | 
| 
      
 32 
     | 
    
         
            +
                  files.sort!
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
                File.open(PROJ.manifest_file, 'w') {|fp| fp.puts files}
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              task :assert do
         
     | 
| 
      
 38 
     | 
    
         
            +
                files = manifest_files
         
     | 
| 
      
 39 
     | 
    
         
            +
                manifest = File.read(PROJ.manifest_file).split($/)
         
     | 
| 
      
 40 
     | 
    
         
            +
                raise "ERROR: #{PROJ.manifest_file} is out of date" unless files == manifest
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            end  # namespace :manifest
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            desc 'Alias to manifest:check'
         
     | 
| 
      
 46 
     | 
    
         
            +
            task :manifest => 'manifest:check'
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            # EOF
         
     | 
    
        data/tasks/notes.rake
    ADDED
    
    | 
         @@ -0,0 +1,27 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            if HAVE_BONES
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            desc "Enumerate all annotations"
         
     | 
| 
      
 5 
     | 
    
         
            +
            task :notes do |t|
         
     | 
| 
      
 6 
     | 
    
         
            +
              id = if t.application.top_level_tasks.length > 1
         
     | 
| 
      
 7 
     | 
    
         
            +
                t.application.top_level_tasks.slice!(1..-1).join(' ')
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
              Bones::AnnotationExtractor.enumerate(
         
     | 
| 
      
 10 
     | 
    
         
            +
                  PROJ, PROJ.notes.tags.join('|'), id, :tag => true)
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            namespace :notes do
         
     | 
| 
      
 14 
     | 
    
         
            +
              PROJ.notes.tags.each do |tag|
         
     | 
| 
      
 15 
     | 
    
         
            +
                desc "Enumerate all #{tag} annotations"
         
     | 
| 
      
 16 
     | 
    
         
            +
                task tag.downcase.to_sym do |t|
         
     | 
| 
      
 17 
     | 
    
         
            +
                  id = if t.application.top_level_tasks.length > 1
         
     | 
| 
      
 18 
     | 
    
         
            +
                    t.application.top_level_tasks.slice!(1..-1).join(' ')
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                  Bones::AnnotationExtractor.enumerate(PROJ, tag, id)
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            end  # if HAVE_BONES
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            # EOF
         
     | 
| 
         @@ -0,0 +1,39 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            # This file does not define any rake tasks. It is used to load some project
         
     | 
| 
      
 3 
     | 
    
         
            +
            # settings if they are not defined by the user.
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            PROJ.rdoc.exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
         
     | 
| 
      
 6 
     | 
    
         
            +
            PROJ.exclude << ["^#{Regexp.escape(PROJ.ann.file)}$",
         
     | 
| 
      
 7 
     | 
    
         
            +
                             "^#{Regexp.escape(PROJ.rdoc.dir)}/",
         
     | 
| 
      
 8 
     | 
    
         
            +
                             "^#{Regexp.escape(PROJ.rcov.dir)}/"]
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            flatten_arrays = lambda do |this,os|
         
     | 
| 
      
 11 
     | 
    
         
            +
                os.instance_variable_get(:@table).each do |key,val|
         
     | 
| 
      
 12 
     | 
    
         
            +
                  next if key == :dependencies \
         
     | 
| 
      
 13 
     | 
    
         
            +
                       or key == :development_dependencies
         
     | 
| 
      
 14 
     | 
    
         
            +
                  case val
         
     | 
| 
      
 15 
     | 
    
         
            +
                  when Array; val.flatten!
         
     | 
| 
      
 16 
     | 
    
         
            +
                  when OpenStruct; this.call(this,val)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            flatten_arrays.call(flatten_arrays,PROJ)
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            PROJ.changes ||= paragraphs_of(PROJ.history_file, 0..1).join("\n\n")
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            PROJ.summary ||= PROJ.description.split('.').first
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            PROJ.gem.files ||=
         
     | 
| 
      
 29 
     | 
    
         
            +
              if test(?f, PROJ.manifest_file)
         
     | 
| 
      
 30 
     | 
    
         
            +
                files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
         
     | 
| 
      
 31 
     | 
    
         
            +
                files.delete ''
         
     | 
| 
      
 32 
     | 
    
         
            +
                files
         
     | 
| 
      
 33 
     | 
    
         
            +
              else [] end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            PROJ.gem.executables ||= PROJ.gem.files.find_all {|fn| fn =~ %r/^bin/}
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
            PROJ.rdoc.main ||= PROJ.readme_file
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            # EOF
         
     |