zoukankan      html  css  js  c++  java
  • ImLazy(ruby)

    ImLazy是个人使用的小程序,抽时间在公司写了个ruby版本,未完成

    equals_verb

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require "SDK/verb"
    require "Addins/lexer_condition"
    
    module ImLazy
      class EqualsVerb < Verb
        def initialize
          self.name = "Equals"
        end
    
        def match?(left, right)
          return left.eql?(right)
        end
      end
    
      LexerCondition.register_lexer(EqualsVerb.new)
    end

    extension_subject

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require "SDK/subject"
    require "Addins/lexer_condition"
    
    module ImLazy
      class ExtensionSubject < Subject
        def initialize
          self.name = "Extension"
        end
    
        def property (path)
          return File.extname(path)
        end
      end
    
      LexerCondition.register_lexer(ExtensionSubject.new)
    end

    lexer_condition

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require "SDK/common"
    require "Runtime/cache_map"
    
    module ImLazy
      class LexerCondition < Condition
        
        @@lexers = CacheMap.new
    
        #     LexerCondition.register_lexer(lexer) => nil
        #
        #
        # === Parameters
        # * +lexer+ a subject or verb
        #
        # This method will register a lexer
        #
        def self.register_lexer lexer
          key = lexer.class.name
          logd "lexer [#{key}] is registed"
          @@lexers[key] = lexer
        end
    
        def initialize
          self.name = "LexerCondition"
        end
    
        def match? (path, config)
          subject_addin_name = config["subject"]
          verb_addin_name = config["verb"]
          object_value = config["object"]
          return false unless(check_param(subject_addin_name, verb_addin_name))
    
          subject = @@lexers[subject_addin_name]
          verb = @@lexers[verb_addin_name]
          return false unless(check_param(subject, verb))
    
          property = subject.property(path)
    
          result = verb.match?(property, object_value)
    
          logd "matched : #{property} #{verb.name} #{object_value}" if result
          return result
        end
    
        def check_param(*params)
          params.each do |param|
            if(param == nil || param == "")
              loge "[#{param}] is empty!"
              return false
            end
          end
        end
      end
    
      # register this condition addin
      Executor.register_condition LexerCondition.new
    end

    move_action

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require "SDK/common"
    require "SDK/action"
    
    module ImLazy
      class MoveAction < Action
        def initialize
          
        end
    
        def perform(path, config)
          destination = config["TargetValue"]
          File.move(path, destination, true)
        end
      end
    
      # register this condition addin
      Executor.register_action MoveAction.new
    end

    addin_info

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    module ImLazy
      class AddinInfo
        attr_accessor :addin_name
        attr_accessor :config
        def initialize
    
        end
      end
    end

    folder

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    
    module ImLazy
      class Folder
        attr_accessor :path, :rule_ids
        
        def initialize _path
          self.path = _path
          self.rule_ids = []
        end
      end
    end

    rule

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require 'securerandom'
    
    module ImLazy
      class Rule
        attr_accessor :condition, :action , :guid, :name
        def initialize
          self.guid = SecureRandom.hex(13)
        end
      end
    end

    cache_map

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    
    module ImLazy
      class CacheMap < Hash
        def initialize
          
        end
      end
    end

    data_storage

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    
    require "Data/rule"
    require "Data/addin_info"
    
    module ImLazy
      class DataStorage
        attr_accessor :rules, :conditions, :actions, :folders
    
        def initialize
          self.rules = []
          self.conditions = []
          self.actions = []
          self.folders = []
        end
    
        def load_test_data
          rule = Rule.new;
          rule.name = "rule 1"
          addin = AddinInfo.new
          addin.addin_name = "ImLazy::LexerCondition";
          addin.config = {
            "subject"=>"ImLazy::ExtensionSubject",
            "verb"=>"ImLazy::EqualsVerb",
            "object"=>".bat"
          }
          rule.condition = addin;
          self.rules.push(rule)
    
          folder = Folder.new("C:/")
          folder.rule_ids.push rule.guid
          self.folders.push(folder)
        end
    
        def self.json_create(o)
          new(*o['data'])
        end
    
        def to_json(*a)
          { 'json_class' => self.class.name, 'data' => [rules] }.to_json(*a)
        end
      end
    end

    executor

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require "Runtime/cache_map"
    require "Data/folder"
    require "SDK/common"
    require "thread"
    module ImLazy
      class Executor
        @@conditions = CacheMap.new
        @@actions = CacheMap.new
        @@rules = CacheMap.new
        
        def initialize
          load_addins
        end
    
        def self.register_rule rule
          key = rule.guid
          logd("rule [#{rule.name}] is registed")
          @@rules[key] = rule
        end
    
        def self.register_condition addin
          key = addin.class.name
          logd("condition addin [#{key}] is registed")
          @@conditions[key] = addin
        end
    
        def self.register_action addin
          key = addin.class.name
          logd("action addin [#{key}] is registed")
          @@actions[key] = addin
        end
    
        def load_addins
          Dir.foreach("Addins") do | path |
            require("Addins/" + path) if File.extname(path) == ".rb"
          end
        end
    
        def execute (folders)
          logd "executing..."
          folders.each do |folder|
            logd "enumerating folder #{folder.path}"
            Dir.foreach(folder.path) do | path |
              Thread.new do
                folder.rule_ids.each do | rule_id |
                  rule = @@rules[rule_id]
                  key = rule.condition.addin_name
                  config = rule.condition.config
                  if @@conditions.has_key?(key)
                    if @@conditions[key].match?(path, config)
                      logd "mock action has been performed."
                    end
                  else
                    loge "condition witk key [#{key}] not found!"
                  end
                end
              end
            end
          end
          logd "done executing."
        end
      end
    end

    action

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    
    module ImLazy
      class Action
        attr_accessor :name
        
        def initialize
          
        end
    
        def perform(path, config)
    
        end
      end
    end

    common

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    
    require "Runtime/executor"
    require "SDK/condition"
    require "Utils/log"

    condition

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    
    module ImLazy
      class Condition
        attr_accessor :name
    
        def initialize
          
        end
    
        def match? (path, config)
          return false
        end
      end
    end

    lexer_term

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    
    module ImLazy
      class LexerTerm
        attr_accessor :name
        def initialize
          
        end
      end
    end

    subject

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require "SDK/lexer_term"
    module ImLazy
      class Subject < LexerTerm
        def initialize
          
        end
    
        def property (path)
          
        end
      end
    end

    verb

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require "SDK/lexer_term"
    module ImLazy
      class Verb < LexerTerm
        def initialize
    
        end
    
        def match?(left, right)
          return false
        end
      end
    end

    log

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require "logger"
    class Object
      @@logger = Logger.new(STDOUT)
      def logd msg
        @@logger.debug(self.class.name) { msg  }
      end
    
      def loge msg
        @@logger.error(self.class.name) { msg  }
      end
    end

    main

    # To change this template, choose Tools | Templates
    # and open the template in the editor.
    require "Runtime/executor"
    require "Runtime/data_storage"
    
    module ImLazy
      ds = DataStorage.new
      ds.load_test_data
      
      ds.rules.each do |rule|
        Executor.register_rule(rule)
      end
    
      exe = Executor.new
      exe.execute ds.folders
    end
  • 相关阅读:
    VSCode远程编写Shell并实时调试配置过程
    eclispe 无法启动调试 cannot connect to VM
    工作流之设置表访问权限
    利用工作流返回达到无限次重复办理业务的过程
    eworkflow工作流系统在iis中发布
    ie8用ajax访问不能每次都刷新的问题
    视频演示(动态指定执行人+指定申请人的上级)
    视频演示eworkflow集成定制aspx页面的过程
    利用开发框架中的标签库集成报表工具
    流程设计器之标签工具
  • 原文地址:https://www.cnblogs.com/ornithopter/p/3748222.html
Copyright © 2011-2022 走看看