mnky 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/mnky +3 -0
- data/bin/monkey +3 -0
- data/lib/helpers/computer.rb +62 -0
- data/lib/helpers/file_paths.rb +18 -0
- data/lib/helpers/init.rb +2 -0
- data/lib/monkey.rb +144 -0
- data/lib/monkey/clock.rb +32 -0
- data/lib/monkey/config.rb +40 -0
- data/lib/monkey/service.rb +16 -0
- data/lib/monkey/task.rb +35 -0
- data/lib/monkey/triggers.rb +41 -0
- metadata +115 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 2dc248b9fa03c3713992dbcd3e8ed6a159d80715
         | 
| 4 | 
            +
              data.tar.gz: ad5219227fb825d06e71a45a4f0b0e9c1e7faf84
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 1100f26fafcaba1eedaa1e5473bdcb8353ca4aeb038aaa9d6c6d34e974e1ccc43c662552a5c104f52f31861c9fd705d2493923c2da1fa27311538e996aa9ed9c
         | 
| 7 | 
            +
              data.tar.gz: 96113594de413f3767ea0989c5d363b6ababd4b902bd49a993075cd0919a9b4704f0851e109e80720a9d1a000ed7671733599f61862c07df083b3e613bf68520
         | 
    
        data/bin/mnky
    ADDED
    
    
    
        data/bin/monkey
    ADDED
    
    
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            require 'socket'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Monkey
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              class Computer
         | 
| 6 | 
            +
                def self.os
         | 
| 7 | 
            +
                  return :windows if /cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM
         | 
| 8 | 
            +
                  return :osx if /darwin/ =~ RUBY_PLATFORM
         | 
| 9 | 
            +
                  return nil
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def self.windows?
         | 
| 13 | 
            +
                  os == :windows
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def self.osx?
         | 
| 17 | 
            +
                  os == :osx
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                self.singleton_class.send(:alias_method, :mac?, :osx?)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def self.os_version_number
         | 
| 23 | 
            +
                  if windows?
         | 
| 24 | 
            +
                    win_ver = `ver`
         | 
| 25 | 
            +
                    return win_ver.scan(/[\d.]+/).first
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                  return `sw_vers -productVersion` if mac?
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def self.os_major_version
         | 
| 31 | 
            +
                  ver = os_version_number
         | 
| 32 | 
            +
                  return :windows8 if (ver.include? '6.3') || (ver.include? '6.2')
         | 
| 33 | 
            +
                  return :windows7 if ver.include? '6.1'
         | 
| 34 | 
            +
                  return :windowsvista if ver.include? '6.0'
         | 
| 35 | 
            +
                  return :windowsxp if (ver.include? '5.2') || (ver.include? '5.1')
         | 
| 36 | 
            +
                  return :windows2000 if ver.include? '5.00'
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  return :osxmavericks if ver.include? '10.9'
         | 
| 39 | 
            +
                  return :osxmountainlion if ver.include? '10.8'
         | 
| 40 | 
            +
                  return :osxlion if ver.include? '10.7'
         | 
| 41 | 
            +
                  return :osxsnowleopard if ver.include? '10.6'
         | 
| 42 | 
            +
                  return :osxleopard if ver.include? '10.5'
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                def self.name
         | 
| 46 | 
            +
                  Socket.gethostname
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                # From http://coderrr.wordpress.com/2008/05/28/get-your-local-ip-address/
         | 
| 50 | 
            +
                def self.ip
         | 
| 51 | 
            +
                  orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true  # turn off reverse DNS resolution temporarily
         | 
| 52 | 
            +
                 
         | 
| 53 | 
            +
                  UDPSocket.open do |s|
         | 
| 54 | 
            +
                    s.connect '64.233.187.99', 1
         | 
| 55 | 
            +
                    s.addr.last
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                ensure
         | 
| 58 | 
            +
                  Socket.do_not_reverse_lookup = orig
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
              
         | 
| 62 | 
            +
            end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            module Monkey
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              class FilePaths
         | 
| 4 | 
            +
                def self.root
         | 
| 5 | 
            +
                  if Computer.windows?
         | 
| 6 | 
            +
                    Dir.pwd.scan(/\w:\//).first
         | 
| 7 | 
            +
                  else
         | 
| 8 | 
            +
                    '/'
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def self.hosts_file
         | 
| 13 | 
            +
                  return File.join(root, 'windows/system32/drivers/etc/hosts') if Computer.windows?
         | 
| 14 | 
            +
                  return '/private/etc/hosts' if Computer.mac?
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
            end
         | 
    
        data/lib/helpers/init.rb
    ADDED
    
    
    
        data/lib/monkey.rb
    ADDED
    
    | @@ -0,0 +1,144 @@ | |
| 1 | 
            +
            require 'thor'
         | 
| 2 | 
            +
            require 'active_support/core_ext/string/inflections'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require_relative 'monkey/config.rb'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Monkey
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              # def self.init_win_service
         | 
| 9 | 
            +
              #   require 'win32/service'
         | 
| 10 | 
            +
              #   include Win32
         | 
| 11 | 
            +
              # end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              # def self.init_win_task_scheduler
         | 
| 14 | 
            +
              #   require 'win32/taskscheduler'
         | 
| 15 | 
            +
              #   include Win32
         | 
| 16 | 
            +
              # end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              class CLI < Thor
         | 
| 19 | 
            +
                include Thor::Actions
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                def self.exit_on_failure?; true; end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                desc 'see [DIRECTORY]', 'Register DIRECTORY as a task suite'
         | 
| 24 | 
            +
                def see(dir='')
         | 
| 25 | 
            +
                  full_dir = File.expand_path(dir)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  config = Config.new
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  if config.empty?
         | 
| 30 | 
            +
                    config['task_suites'] = [ full_dir ]
         | 
| 31 | 
            +
                  else
         | 
| 32 | 
            +
                    task_suites = config['task_suites']
         | 
| 33 | 
            +
                    exit if task_suites.include? full_dir
         | 
| 34 | 
            +
                    task_suites << full_dir
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  config.save!
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                desc 'unsee [DIRECTORY]', 'Deregister DIRECTORY as a task suite'
         | 
| 41 | 
            +
                def unsee(dir='')
         | 
| 42 | 
            +
                  full_dir = File.expand_path(dir)
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  config = Config.new
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  unless config.empty?
         | 
| 47 | 
            +
                    task_suites = config['task_suites']
         | 
| 48 | 
            +
                    task_suites.delete full_dir
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  config.save!
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                desc 'do [TASKS]', 'Run TASKS in sequence'
         | 
| 55 | 
            +
                def do(*tasks)
         | 
| 56 | 
            +
                  require_relative 'monkey/clock.rb'
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  tasks = Task.tasks if tasks.empty?
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  tasks.each do |task|
         | 
| 61 | 
            +
                    Monkey.const_get(task.to_s.camelize).new
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                desc 'start', 'Start Monkey process, running tasks when triggered'
         | 
| 66 | 
            +
                def start
         | 
| 67 | 
            +
                  current_dir = File.expand_path(File.dirname(__FILE__))
         | 
| 68 | 
            +
                  Dir.chdir current_dir
         | 
| 69 | 
            +
                  exec("clockwork monkey/clock.rb")
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                # desc 'startup', 'Setup Monkey to run at startup.'
         | 
| 73 | 
            +
                # def startup
         | 
| 74 | 
            +
                #   require_relative 'helpers/computer.rb'
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                #   abort 'This is only supported on Windows for now.' unless Computer.windows?
         | 
| 77 | 
            +
                #   Monkey.init_win_task_scheduler
         | 
| 78 | 
            +
                #   current_dir = File.expand_path(File.dirname(__FILE__))
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                #   #username = ask('What user account would you like to use to run Monkey?')
         | 
| 81 | 
            +
                #   #domain = ask('What domain is the user account in?')
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                #   ts = Monkey::TaskScheduler.new
         | 
| 84 | 
            +
                #   now = Time.now
         | 
| 85 | 
            +
                #   trigger = {
         | 
| 86 | 
            +
                #     start_year:   now.year,
         | 
| 87 | 
            +
                #     start_month:  now.month,
         | 
| 88 | 
            +
                #     start_day:    now.day,
         | 
| 89 | 
            +
                #     start_hour:   now.hour,
         | 
| 90 | 
            +
                #     start_minute: now.min,
         | 
| 91 | 
            +
                #     trigger_type: Monkey::TaskScheduler::TASK_EVENT_TRIGGER_AT_SYSTEMSTART
         | 
| 92 | 
            +
                #   }
         | 
| 93 | 
            +
                #   ts.new_work_item('Monkey', trigger)
         | 
| 94 | 
            +
                #   ts.application_name = "#{`where ruby`.chomp}"
         | 
| 95 | 
            +
                #   ts.parameters = "-C #{current_dir} monkey.rb start"
         | 
| 96 | 
            +
                #   #ts.set_machine(Socket.gethostname, username, domain)
         | 
| 97 | 
            +
                #   p ts.set_account_information('Moo', 'test')
         | 
| 98 | 
            +
                #   ts.activate('Monkey')
         | 
| 99 | 
            +
                # end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                # desc 'bg', 'Run Monkey as a daemon or Windows service, configured to run automatically at start up'
         | 
| 102 | 
            +
                # def bg
         | 
| 103 | 
            +
                #   require_relative 'helpers/computer.rb'
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                #   abort 'This is only supported on Windows for now.' unless Computer.windows?
         | 
| 106 | 
            +
                #   Monkey.init_win_service
         | 
| 107 | 
            +
                #   current_dir = File.expand_path(File.dirname(__FILE__))
         | 
| 108 | 
            +
                #   monkey_dir = File.join(current_dir, 'monkey')
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                #   Monkey::Service.create({
         | 
| 111 | 
            +
                #     service_name: 'Monkey',
         | 
| 112 | 
            +
                #     host: nil,
         | 
| 113 | 
            +
                #     service_type: Monkey::Service::WIN32_OWN_PROCESS,
         | 
| 114 | 
            +
                #     description: 'Monkey is an IT automation and scripting framework for Ruby.',
         | 
| 115 | 
            +
                #     start_type: Monkey::Service::AUTO_START,
         | 
| 116 | 
            +
                #     error_control: Monkey::Service::ERROR_NORMAL,
         | 
| 117 | 
            +
                #     binary_path_name: "#{`where ruby`.chomp} -C #{monkey_dir} service.rb",
         | 
| 118 | 
            +
                #     load_order_group: 'Network',
         | 
| 119 | 
            +
                #     dependencies: nil,
         | 
| 120 | 
            +
                #     display_name: 'Monkey'
         | 
| 121 | 
            +
                #   })
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                #   Monkey::Service.start 'Monkey'
         | 
| 124 | 
            +
                # end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                # desc 'bgpause', 'Stop the Monkey daemon until it is started again'
         | 
| 127 | 
            +
                # def bgpause
         | 
| 128 | 
            +
                  
         | 
| 129 | 
            +
                # end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                # desc 'bgstop', 'Deregister the daemon or Windows service'
         | 
| 132 | 
            +
                # def bgstop
         | 
| 133 | 
            +
                #   require_relative 'helpers/computer.rb'
         | 
| 134 | 
            +
                #   abort 'This is only supported on Windows for now.' unless Computer.windows?
         | 
| 135 | 
            +
                #   Monkey.init_win_service
         | 
| 136 | 
            +
                #   `sc stop testservice`
         | 
| 137 | 
            +
                #   Monkey::Service.delete 'Monkey'
         | 
| 138 | 
            +
                # end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
              end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
            end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
            Monkey::CLI.start(ARGV)
         | 
    
        data/lib/monkey/clock.rb
    ADDED
    
    | @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            require 'clockwork'
         | 
| 2 | 
            +
            require 'active_support/core_ext/string/inflections'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require_relative 'config.rb'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Clockwork
         | 
| 7 | 
            +
              handler do |task_name|
         | 
| 8 | 
            +
                Kernel.const_get(task_name.camelize).new
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
            end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            module Monkey
         | 
| 13 | 
            +
              def self.init_task_suite
         | 
| 14 | 
            +
                dirs = [ Dir.pwd ]
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                config = Config.new
         | 
| 17 | 
            +
                dirs.concat(config['task_suites']) unless config['task_suites'].nil?
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                dirs.each do |dir|
         | 
| 20 | 
            +
                  helpers_path = File.join(dir, 'helpers/**/*.rb')
         | 
| 21 | 
            +
                  tasks_path = File.join(dir, 'tasks/**/*.rb')
         | 
| 22 | 
            +
                  files = Dir[helpers_path] + Dir[tasks_path]
         | 
| 23 | 
            +
                  files.each {|file| require_relative file }
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            require_relative 'task.rb'
         | 
| 29 | 
            +
            require_relative 'triggers.rb'
         | 
| 30 | 
            +
            require_relative '../helpers/init.rb'
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            Monkey.init_task_suite
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            require 'yaml'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Monkey
         | 
| 4 | 
            +
              class Config
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                current_dir = File.dirname(__FILE__)
         | 
| 7 | 
            +
                CONFIG_PATH = File.join(current_dir, '../../config.yml')
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def initialize
         | 
| 10 | 
            +
                  FileUtils.touch(CONFIG_PATH)
         | 
| 11 | 
            +
                  config_file = File.open(CONFIG_PATH, "rt")
         | 
| 12 | 
            +
                  hash = YAML.load(config_file)
         | 
| 13 | 
            +
                  if hash
         | 
| 14 | 
            +
                    @hash = hash
         | 
| 15 | 
            +
                  else
         | 
| 16 | 
            +
                    @hash = {}
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                  config_file.close
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                attr_reader :hash
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def empty?
         | 
| 24 | 
            +
                  @hash.empty?
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def [](option)
         | 
| 28 | 
            +
                  @hash[option]
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def []=(option, val)
         | 
| 32 | 
            +
                  @hash[option] = val
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def save!
         | 
| 36 | 
            +
                  File.open(CONFIG_PATH, "w") {|f| f.write(@hash.to_yaml) }
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
            end
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            # require 'win32/daemon'
         | 
| 2 | 
            +
            # include Win32
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            # class MonkeyService < Daemon
         | 
| 5 | 
            +
            #   def service_main
         | 
| 6 | 
            +
            #     current_dir = File.dirname(__FILE__)
         | 
| 7 | 
            +
            #     clock_path = File.join(current_dir, 'monkey/clock.rb')
         | 
| 8 | 
            +
            #     exec("clockwork #{clock_path}")
         | 
| 9 | 
            +
            #   end
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
            #   def service_stop
         | 
| 12 | 
            +
            #     exit!
         | 
| 13 | 
            +
            #   end
         | 
| 14 | 
            +
            # end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            # MonkeyService.mainloop
         | 
    
        data/lib/monkey/task.rb
    ADDED
    
    | @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            require 'active_support/core_ext/string/inflections'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Monkey
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              module Task
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                @@tasks = []
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def self.included(base)
         | 
| 10 | 
            +
                  base.extend ClassMethods
         | 
| 11 | 
            +
                  @@tasks.push base.name.underscore
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def self.tasks
         | 
| 15 | 
            +
                  @@tasks
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                # CLASS METHODS
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                module ClassMethods
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def trigger(name, *options)
         | 
| 23 | 
            +
                    trigger_class_name = name.to_s.camelize + 'Trigger'
         | 
| 24 | 
            +
                    @trigger = Monkey.const_get(trigger_class_name).new(self, *options)
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def task_name
         | 
| 28 | 
            +
                    self.name.underscore
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
              
         | 
| 35 | 
            +
            end
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            module Monkey
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              class Trigger
         | 
| 4 | 
            +
                def initialize(task_class)
         | 
| 5 | 
            +
                  @task = task_class
         | 
| 6 | 
            +
                end
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              class EveryTrigger < Trigger
         | 
| 10 | 
            +
                def initialize(task_class, interval, time=nil)
         | 
| 11 | 
            +
                  @interval = interval
         | 
| 12 | 
            +
                  @time = time
         | 
| 13 | 
            +
                  super(task_class)
         | 
| 14 | 
            +
                  start
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def start
         | 
| 18 | 
            +
                  interval = @interval
         | 
| 19 | 
            +
                  time = @time
         | 
| 20 | 
            +
                  task_name = @task.task_name
         | 
| 21 | 
            +
                  if time
         | 
| 22 | 
            +
                    Clockwork.class_eval { every(interval, task_name, time) }
         | 
| 23 | 
            +
                  else
         | 
| 24 | 
            +
                    Clockwork.class_eval { every(interval, task_name) }
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              class StartUpTrigger < Trigger
         | 
| 30 | 
            +
                def initialize(task_class)
         | 
| 31 | 
            +
                  super(task_class)
         | 
| 32 | 
            +
                  start
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def start
         | 
| 36 | 
            +
                  task_name = @task.task_name
         | 
| 37 | 
            +
                  Clockwork.class_eval { every(24.months, task_name) }
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
              
         | 
| 41 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,115 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: mnky
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.1
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Jean Snyman
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2014-05-21 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: thor
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ~>
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: 0.19.1
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ~>
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: 0.19.1
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: activesupport
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ~>
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: 4.1.0
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - ~>
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: 4.1.0
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: clockwork
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ~>
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: 0.7.5
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ~>
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: 0.7.5
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: win32-service
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ~>
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: 0.8.4
         | 
| 62 | 
            +
              type: :runtime
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ~>
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: 0.8.4
         | 
| 69 | 
            +
            description: Monkey is a super simple framework for automating workstation configuration
         | 
| 70 | 
            +
              and deployment. Tasks are written in Ruby with a cross-platform API for fetching
         | 
| 71 | 
            +
              data and making changes to the system. These can be set to run on a schedule or
         | 
| 72 | 
            +
              based on other triggers.
         | 
| 73 | 
            +
            email: me@jsnyman.com
         | 
| 74 | 
            +
            executables:
         | 
| 75 | 
            +
            - monkey
         | 
| 76 | 
            +
            - mnky
         | 
| 77 | 
            +
            extensions: []
         | 
| 78 | 
            +
            extra_rdoc_files: []
         | 
| 79 | 
            +
            files:
         | 
| 80 | 
            +
            - bin/mnky
         | 
| 81 | 
            +
            - bin/monkey
         | 
| 82 | 
            +
            - lib/helpers/computer.rb
         | 
| 83 | 
            +
            - lib/helpers/file_paths.rb
         | 
| 84 | 
            +
            - lib/helpers/init.rb
         | 
| 85 | 
            +
            - lib/monkey/clock.rb
         | 
| 86 | 
            +
            - lib/monkey/config.rb
         | 
| 87 | 
            +
            - lib/monkey/service.rb
         | 
| 88 | 
            +
            - lib/monkey/task.rb
         | 
| 89 | 
            +
            - lib/monkey/triggers.rb
         | 
| 90 | 
            +
            - lib/monkey.rb
         | 
| 91 | 
            +
            homepage: http://monkeyrb.com
         | 
| 92 | 
            +
            licenses:
         | 
| 93 | 
            +
            - MIT
         | 
| 94 | 
            +
            metadata: {}
         | 
| 95 | 
            +
            post_install_message: 
         | 
| 96 | 
            +
            rdoc_options: []
         | 
| 97 | 
            +
            require_paths:
         | 
| 98 | 
            +
            - lib
         | 
| 99 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 100 | 
            +
              requirements:
         | 
| 101 | 
            +
              - - '>='
         | 
| 102 | 
            +
                - !ruby/object:Gem::Version
         | 
| 103 | 
            +
                  version: '0'
         | 
| 104 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 105 | 
            +
              requirements:
         | 
| 106 | 
            +
              - - '>='
         | 
| 107 | 
            +
                - !ruby/object:Gem::Version
         | 
| 108 | 
            +
                  version: '0'
         | 
| 109 | 
            +
            requirements: []
         | 
| 110 | 
            +
            rubyforge_project: 
         | 
| 111 | 
            +
            rubygems_version: 2.1.5
         | 
| 112 | 
            +
            signing_key: 
         | 
| 113 | 
            +
            specification_version: 4
         | 
| 114 | 
            +
            summary: IT automation and scripting framework.
         | 
| 115 | 
            +
            test_files: []
         |