crontabwrap 0.3.0
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/.document +5 -0
- data/.gitignore +21 -0
- data/README.rdoc +21 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/bin/crontabwrap +17 -0
- data/lib/crontabwrap.rb +92 -0
- data/test/helper.rb +9 -0
- data/test/test_crontabwrap.rb +28 -0
- metadata +71 -0
    
        data/.document
    ADDED
    
    
    
        data/.gitignore
    ADDED
    
    
    
        data/README.rdoc
    ADDED
    
    | @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            = crontabwrap
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            crontab command wrapper for crearing backup for each user
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            == Note on Patches/Pull Requests
         | 
| 6 | 
            +
             
         | 
| 7 | 
            +
            * Fork the project.
         | 
| 8 | 
            +
            * Make your feature addition or bug fix.
         | 
| 9 | 
            +
            * Add tests for it. This is important so I don't break it in a
         | 
| 10 | 
            +
              future version unintentionally.
         | 
| 11 | 
            +
            * Commit, do not mess with rakefile, version, or history.
         | 
| 12 | 
            +
              (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
         | 
| 13 | 
            +
            * Send me a pull request.
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            == Copyright
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Copyright (c) 2010 wtnabe
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            == License
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            Two-claused BSD
         | 
    
        data/Rakefile
    ADDED
    
    | @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            # -*- mode: ruby -*-
         | 
| 2 | 
            +
            require 'rubygems'
         | 
| 3 | 
            +
            require 'rake'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            begin
         | 
| 6 | 
            +
              require 'jeweler'
         | 
| 7 | 
            +
              Jeweler::Tasks.new do |gem|
         | 
| 8 | 
            +
                gem.name = "crontabwrap"
         | 
| 9 | 
            +
                gem.summary = %Q{crontab command wrapper}
         | 
| 10 | 
            +
                gem.description = %Q{crontab command wrapper for creating backup for each user}
         | 
| 11 | 
            +
                gem.email = "wtnabe@gmail.com"
         | 
| 12 | 
            +
                gem.homepage = "http://github.com/wtnabe/crontabwrap"
         | 
| 13 | 
            +
                gem.authors = ["wtnabe"]
         | 
| 14 | 
            +
                gem.executables = %w( crontabwrap )
         | 
| 15 | 
            +
                # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              Jeweler::GemcutterTasks.new
         | 
| 18 | 
            +
            rescue LoadError
         | 
| 19 | 
            +
              puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            require 'rake/testtask'
         | 
| 23 | 
            +
            Rake::TestTask.new(:test) do |test|
         | 
| 24 | 
            +
              test.libs << 'lib' << 'test'
         | 
| 25 | 
            +
              test.pattern = 'test/**/test_*.rb'
         | 
| 26 | 
            +
              test.verbose = true
         | 
| 27 | 
            +
            end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            begin
         | 
| 30 | 
            +
              require 'rcov/rcovtask'
         | 
| 31 | 
            +
              Rcov::RcovTask.new do |test|
         | 
| 32 | 
            +
                test.libs << 'test'
         | 
| 33 | 
            +
                test.pattern = 'test/**/test_*.rb'
         | 
| 34 | 
            +
                test.verbose = true
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            rescue LoadError
         | 
| 37 | 
            +
              task :rcov do
         | 
| 38 | 
            +
                abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
            end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            task :test => :check_dependencies
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            task :default => :test
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            require 'rake/rdoctask'
         | 
| 47 | 
            +
            Rake::RDocTask.new do |rdoc|
         | 
| 48 | 
            +
              version = File.exist?('VERSION') ? File.read('VERSION') : ""
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              rdoc.rdoc_dir = 'rdoc'
         | 
| 51 | 
            +
              rdoc.title = "crontabwrap #{version}"
         | 
| 52 | 
            +
              rdoc.rdoc_files.include('README*')
         | 
| 53 | 
            +
              rdoc.rdoc_files.include('lib/**/*.rb')
         | 
| 54 | 
            +
            end
         | 
    
        data/VERSION
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            0.3.0
         | 
    
        data/bin/crontabwrap
    ADDED
    
    | @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            #! /usr/bin/env ruby
         | 
| 2 | 
            +
            # -*- mode: ruby; coding: utf-8 -*-
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            # A wrapper for crontab command.
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # All options pass through to crontab command.
         | 
| 7 | 
            +
            # If '-e' option given, do `crontab -l > STORE_FILE`
         | 
| 8 | 
            +
            #
         | 
| 9 | 
            +
            # @since  2007-01-18
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            unless ( ENV['PATH'].split( File::PATH_SEPARATOR ).include?( File.dirname( __FILE__ ) ) )
         | 
| 12 | 
            +
              $LOAD_PATH << File.expand_path( "../lib", File.dirname( __FILE__ ) )
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            require 'crontabwrap'
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            CrontabWrap.new.run
         | 
    
        data/lib/crontabwrap.rb
    ADDED
    
    | @@ -0,0 +1,92 @@ | |
| 1 | 
            +
            # -*- coding: utf-8 -*-
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'optparse'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # Crontab wrapper class
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            class CrontabWrap
         | 
| 9 | 
            +
              BACKUP_FILE = '.crontab'
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              #
         | 
| 12 | 
            +
              # construct object
         | 
| 13 | 
            +
              #
         | 
| 14 | 
            +
              # default BACKUP_FILE is ~/.crontab
         | 
| 15 | 
            +
              #
         | 
| 16 | 
            +
              def initialize( param = {} )
         | 
| 17 | 
            +
                @opt = {
         | 
| 18 | 
            +
                  :debug => false,
         | 
| 19 | 
            +
                  :argv  => ARGV
         | 
| 20 | 
            +
                }.merge( param )
         | 
| 21 | 
            +
                @user = ENV['USER']
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                parse_args( @opt[:argv] )
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
              attr_reader :user
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              #
         | 
| 28 | 
            +
              # take all options to crontab
         | 
| 29 | 
            +
              #
         | 
| 30 | 
            +
              # do backup if '-e' option given
         | 
| 31 | 
            +
              #
         | 
| 32 | 
            +
              def run
         | 
| 33 | 
            +
                argv = @opt[:argv]
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                if ( exec( argv ) )
         | 
| 36 | 
            +
                  if ( argv.include?( '-e' ) )
         | 
| 37 | 
            +
                    backup( argv )
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              #
         | 
| 43 | 
            +
              # parse command line args
         | 
| 44 | 
            +
              #
         | 
| 45 | 
            +
              def parse_args( argv )
         | 
| 46 | 
            +
                opt = OptionParser.new()
         | 
| 47 | 
            +
                opt.on( '-u USER' ) { |user|
         | 
| 48 | 
            +
                  @user = user
         | 
| 49 | 
            +
                }
         | 
| 50 | 
            +
                begin
         | 
| 51 | 
            +
                  opt.parse( argv )
         | 
| 52 | 
            +
                rescue
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              def echo( argv, opt = '' )
         | 
| 57 | 
            +
                STDERR.puts 'crontab ' + argv.join( " " ) + opt
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
              def exec( argv, opt = '' )
         | 
| 61 | 
            +
                echo( argv, " > #{backup_file( @user )}" ) if ( @opt[:debug] )
         | 
| 62 | 
            +
                system( 'crontab ' + argv.join( " " ) + opt )
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              #
         | 
| 66 | 
            +
              # backup crontab content for each user
         | 
| 67 | 
            +
              #
         | 
| 68 | 
            +
              def backup( argv )
         | 
| 69 | 
            +
                argv = replace_switch_to_display( argv )
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                exec( argv, " > #{backup_file( @user )}" )
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              #
         | 
| 75 | 
            +
              # replace '-e' option to '-l'
         | 
| 76 | 
            +
              #
         | 
| 77 | 
            +
              # [Param] Array opts
         | 
| 78 | 
            +
              # [Return] Array
         | 
| 79 | 
            +
              #
         | 
| 80 | 
            +
              def replace_switch_to_display( opts )
         | 
| 81 | 
            +
                opts.map { |opt|
         | 
| 82 | 
            +
                  ( opt == '-e' ) ? '-l' : opt
         | 
| 83 | 
            +
                }
         | 
| 84 | 
            +
              end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
              #
         | 
| 87 | 
            +
              # backup file name for crontab content
         | 
| 88 | 
            +
              #
         | 
| 89 | 
            +
              def backup_file( user )
         | 
| 90 | 
            +
                return "~#{user}/#{BACKUP_FILE}"
         | 
| 91 | 
            +
              end
         | 
| 92 | 
            +
            end
         | 
    
        data/test/helper.rb
    ADDED
    
    
| @@ -0,0 +1,28 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class TestCrontabwrap < Test::Unit::TestCase
         | 
| 4 | 
            +
              def setup
         | 
| 5 | 
            +
                @obj = ::CrontabWrap.new
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def test_parse_args
         | 
| 9 | 
            +
                @obj.parse_args( %w( -a -b -c ) )
         | 
| 10 | 
            +
                assert_equal( ENV['USER'], @obj.user )
         | 
| 11 | 
            +
                @obj.parse_args( %w( -u foo ) )
         | 
| 12 | 
            +
                assert_equal( 'foo', @obj.user )
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              def test_replace_switch_to_display
         | 
| 16 | 
            +
                assert_equal( %w( -l ),
         | 
| 17 | 
            +
                              @obj.replace_switch_to_display( %w( -l ) ) )
         | 
| 18 | 
            +
                assert_equal( %w( -u foo -l ),
         | 
| 19 | 
            +
                              @obj.replace_switch_to_display( %w( -u foo -e ) ) )
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def test_backup_file
         | 
| 23 | 
            +
                assert_equal( "~foo/#{::CrontabWrap::BACKUP_FILE}",
         | 
| 24 | 
            +
                              @obj.backup_file( 'foo' ) )
         | 
| 25 | 
            +
                assert_equal( "~root/#{::CrontabWrap::BACKUP_FILE}",
         | 
| 26 | 
            +
                              @obj.backup_file( 'root' ) )
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,71 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            name: crontabwrap
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              prerelease: false
         | 
| 5 | 
            +
              segments: 
         | 
| 6 | 
            +
              - 0
         | 
| 7 | 
            +
              - 3
         | 
| 8 | 
            +
              - 0
         | 
| 9 | 
            +
              version: 0.3.0
         | 
| 10 | 
            +
            platform: ruby
         | 
| 11 | 
            +
            authors: 
         | 
| 12 | 
            +
            - wtnabe
         | 
| 13 | 
            +
            autorequire: 
         | 
| 14 | 
            +
            bindir: bin
         | 
| 15 | 
            +
            cert_chain: []
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            date: 2010-10-09 00:00:00 +09:00
         | 
| 18 | 
            +
            default_executable: crontabwrap
         | 
| 19 | 
            +
            dependencies: []
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            description: crontab command wrapper for creating backup for each user
         | 
| 22 | 
            +
            email: wtnabe@gmail.com
         | 
| 23 | 
            +
            executables: 
         | 
| 24 | 
            +
            - crontabwrap
         | 
| 25 | 
            +
            extensions: []
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            extra_rdoc_files: 
         | 
| 28 | 
            +
            - README.rdoc
         | 
| 29 | 
            +
            files: 
         | 
| 30 | 
            +
            - .document
         | 
| 31 | 
            +
            - .gitignore
         | 
| 32 | 
            +
            - README.rdoc
         | 
| 33 | 
            +
            - Rakefile
         | 
| 34 | 
            +
            - VERSION
         | 
| 35 | 
            +
            - bin/crontabwrap
         | 
| 36 | 
            +
            - lib/crontabwrap.rb
         | 
| 37 | 
            +
            - test/helper.rb
         | 
| 38 | 
            +
            - test/test_crontabwrap.rb
         | 
| 39 | 
            +
            has_rdoc: true
         | 
| 40 | 
            +
            homepage: http://github.com/wtnabe/crontabwrap
         | 
| 41 | 
            +
            licenses: []
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            post_install_message: 
         | 
| 44 | 
            +
            rdoc_options: 
         | 
| 45 | 
            +
            - --charset=UTF-8
         | 
| 46 | 
            +
            require_paths: 
         | 
| 47 | 
            +
            - lib
         | 
| 48 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 49 | 
            +
              requirements: 
         | 
| 50 | 
            +
              - - ">="
         | 
| 51 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 52 | 
            +
                  segments: 
         | 
| 53 | 
            +
                  - 0
         | 
| 54 | 
            +
                  version: "0"
         | 
| 55 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 56 | 
            +
              requirements: 
         | 
| 57 | 
            +
              - - ">="
         | 
| 58 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 59 | 
            +
                  segments: 
         | 
| 60 | 
            +
                  - 0
         | 
| 61 | 
            +
                  version: "0"
         | 
| 62 | 
            +
            requirements: []
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            rubyforge_project: 
         | 
| 65 | 
            +
            rubygems_version: 1.3.6
         | 
| 66 | 
            +
            signing_key: 
         | 
| 67 | 
            +
            specification_version: 3
         | 
| 68 | 
            +
            summary: crontab command wrapper
         | 
| 69 | 
            +
            test_files: 
         | 
| 70 | 
            +
            - test/helper.rb
         | 
| 71 | 
            +
            - test/test_crontabwrap.rb
         |