lib/rocket_job/dirmon_entry.rb in rocketjob-0.9.1 vs lib/rocket_job/dirmon_entry.rb in rocketjob-1.0.0

- old
+ new

@@ -1,26 +1,30 @@ module RocketJob class DirmonEntry include MongoMapper::Document + # Name for this path entry used to identify this DirmonEntry + # in the user interface + key :name, String + # Wildcard path to search for files in # # Example: # input_files/process1/*.csv* # input_files/process2/**/* # # For details on valid path values, see: http://ruby-doc.org/core-2.2.2/Dir.html#method-c-glob # # Note # - If there are no '*' in the path then an exact filename match is expected - key :path, String + key :path, String # Job to start # # Example: # "ProcessItJob" - key :job, String + key :job_name, String # Any user supplied arguments for the method invocation # All keys must be UTF-8 strings. The values can be any valid BSON type: # Integer # Float @@ -33,17 +37,17 @@ # Symbol # nil # Regular Expression # # Note: Date is not supported, convert it to a UTC time - key :arguments, Array, default: [] + key :arguments, Array, default: [] # Any job properties to set # # Example, override the default job priority: # { priority: 45 } - key :properties, Hash, default: {} + key :properties, Hash, default: {} # Archive directory to move files to when processed to prevent processing the # file again. # # If supplied, the file will be moved to this directory before the job is started @@ -51,10 +55,43 @@ # be created in the archive directory, if the path being scanned for files # is a relative path. (I.e. Does not start with '/') . key :archive_directory, String # Allow a monitoring path to be temporarily disabled - key :enabled, Boolean, default: true + key :enabled, Boolean, default: true - validates_presence_of :path, :job + # Method to perform on the job, usually :perform + key :perform_method, Symbol, default: :perform + + # Returns the Job to be queued + def job_class + job_name.nil? ? nil : job_name.constantize + end + + validates_presence_of :path, :job_name + + validates_each :job_name do |record, attr, value| + exists = false + begin + exists = value.nil? ? false : value.constantize.ancestors.include?(RocketJob::Job) + rescue NameError => exc + end + record.errors.add(attr, 'job_name must be defined and must be derived from RocketJob::Job') unless exists + end + + validates_each :arguments do |record, attr, value| + if klass = record.job_class + count = klass.argument_count(record.perform_method) + record.errors.add(attr, "There must be #{count} argument(s)") if value.size != count + end + end + + validates_each :properties do |record, attr, value| + if record.job_name && (methods = record.job_class.instance_methods) + value.each_pair do |key, value| + record.errors.add(attr, "Unknown property: #{key.inspect} with value: #{value}") unless methods.include?("#{key}=".to_sym) + end + end + end + end end