cocoapods-vipers 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/lib/cocoapods-vipers/command/vipers.rb +45 -0
- data/lib/cocoapods-vipers/command.rb +1 -0
- data/lib/cocoapods-vipers/gem_version.rb +3 -0
- data/lib/cocoapods-vipers/template/Vipers+Extension.swift +44 -0
- data/lib/cocoapods-vipers/vipers-sync.rb +182 -0
- data/lib/cocoapods-vipers.rb +1 -0
- data/lib/cocoapods_plugin.rb +34 -0
- metadata +78 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: e62efc7b04bbda415047eb96be9ce771674cb7d377cc8461680533f4a5d661b9
         | 
| 4 | 
            +
              data.tar.gz: a3a602c6509127e2be989c6c3a4e755d5802622f2379160d8502b3ea8b0fe3f3
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 82eefc076f1b37d8828ae1d1e5e3e0c4f584ede0fcd0814dc10d8e70a02a335ca97ed4673989cfbe57fef2ee7550708101d4ceb337d6fd7d72820e09ae18182a
         | 
| 7 | 
            +
              data.tar.gz: 5adf1cf269783de67fcea45d5202d0f2df405e5dcc8c5d8f705b471f4d55bb871d5a3eb332e6f411402d6fbb0e42d0afdd14f4c3f795334d65392c5d4a0d31c8
         | 
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            require 'cocoapods-vipers/vipers-sync'
         | 
| 2 | 
            +
            require 'cocoapods'
         | 
| 3 | 
            +
            include CocoapodsVipers
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Pod
         | 
| 6 | 
            +
              class Command
         | 
| 7 | 
            +
                # This is an example of a cocoapods plugin adding a top-level subcommand
         | 
| 8 | 
            +
                # to the 'pod' command.
         | 
| 9 | 
            +
                #
         | 
| 10 | 
            +
                # You can also create subcommands of existing or new commands. Say you
         | 
| 11 | 
            +
                # wanted to add a subcommand to `list` to show newly deprecated pods,
         | 
| 12 | 
            +
                # (e.g. `pod list deprecated`), there are a few things that would need
         | 
| 13 | 
            +
                # to change.
         | 
| 14 | 
            +
                #
         | 
| 15 | 
            +
                # - move this file to `lib/pod/command/list/deprecated.rb` and update
         | 
| 16 | 
            +
                #   the class to exist in the the Pod::Command::List namespace
         | 
| 17 | 
            +
                # - change this class to extend from `List` instead of `Command`. This
         | 
| 18 | 
            +
                #   tells the plugin system that it is a subcommand of `list`.
         | 
| 19 | 
            +
                # - edit `lib/cocoapods_plugins.rb` to require this file
         | 
| 20 | 
            +
                #
         | 
| 21 | 
            +
                # @todo Create a PR to add your plugin to CocoaPods/cocoapods.org
         | 
| 22 | 
            +
                #       in the `plugins.json` file, once your plugin is released.
         | 
| 23 | 
            +
                #
         | 
| 24 | 
            +
                class Vipers < Command
         | 
| 25 | 
            +
                  self.summary = 'Short description of cocoapods-vipers.'
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  self.description = <<-DESC
         | 
| 28 | 
            +
                    Longer description of cocoapods-vipers.
         | 
| 29 | 
            +
                  DESC
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  def initialize(argv)
         | 
| 32 | 
            +
                    super
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  def validate!
         | 
| 36 | 
            +
                    super
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  def run
         | 
| 40 | 
            +
                    Pod::UI.puts "Use 'pod install' or 'pod update' to do vipers generate"
         | 
| 41 | 
            +
                    # CocoapodsVipers::Vipers.new.sync()
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            require 'cocoapods-vipers/command/vipers'
         | 
| @@ -0,0 +1,44 @@ | |
| 1 | 
            +
            import Curry
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            //脚本里的模板
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            extension VIPERBinderHelper {
         | 
| 6 | 
            +
                static func initAllBinder() {
         | 
| 7 | 
            +
            /** Injection VIPERBinderHelper autoCreateBinder **/
         | 
| 8 | 
            +
                }
         | 
| 9 | 
            +
            }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
             | 
| 12 | 
            +
            extension VIPERParams {
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            /** Injection VIPERParams class **/
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            extension VIPERs {
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            /** Injection VIPERs extension **/
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                /// 第三方账号绑定 1
         | 
| 23 | 
            +
                // func thirdPartyBind() -> Self {
         | 
| 24 | 
            +
                //     return .thirdPartyBind
         | 
| 25 | 
            +
                // }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                /// 第三方账号绑定参数 参数列表 2
         | 
| 28 | 
            +
                /// - Parameters:
         | 
| 29 | 
            +
                ///   - id: 页面id
         | 
| 30 | 
            +
                ///   - path: 路径
         | 
| 31 | 
            +
                /// - Returns: 参数返回值
         | 
| 32 | 
            +
                // func thirdPartyBindParams(id: Int, path: String) -> VIPERParams.thirdPartyBind {
         | 
| 33 | 
            +
                //     return VIPERParams.thirdPartyBind(id: id, path: path)
         | 
| 34 | 
            +
                // }
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                // /// 第三方账号绑定参数 柯里化 3
         | 
| 37 | 
            +
                // var thirdPartyBindCurry: (Int) -> (String) -> VIPERParams.thirdPartyBind {
         | 
| 38 | 
            +
                //     return curry(thirdPartyBindParams)
         | 
| 39 | 
            +
                // }
         | 
| 40 | 
            +
            }
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            // Useage:
         | 
| 43 | 
            +
            //VIPERs.function.thirdPartyBindParams(id: 1, path: "2")
         | 
| 44 | 
            +
            //VIPERs.function.thirdPartyBindCurry(1)("2")
         | 
| @@ -0,0 +1,182 @@ | |
| 1 | 
            +
            require 'cocoapods'
         | 
| 2 | 
            +
            require 'fileutils'
         | 
| 3 | 
            +
            require 'yaml'
         | 
| 4 | 
            +
            require 'json'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            def handleClsAndMethod(viper, vipers_params_class, vipers_ext_func)  
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              if !viper["params"] || viper["params"].empty?
         | 
| 9 | 
            +
                return
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              var_lines = []
         | 
| 13 | 
            +
              assign_lines = []
         | 
| 14 | 
            +
              init_params = [] #id: Int, path: String = "/", ids: Array<Int>
         | 
| 15 | 
            +
              return_types = []
         | 
| 16 | 
            +
              parmas_desc = []
         | 
| 17 | 
            +
              return_args = []
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              viper["params"].each do |key, value|
         | 
| 20 | 
            +
                defaultValue = ''
         | 
| 21 | 
            +
                ketType = value["type"]
         | 
| 22 | 
            +
                if value["default"] != nil
         | 
| 23 | 
            +
                  if ketType == 'String' || ketType == 'NSString'
         | 
| 24 | 
            +
                    defaultValue = " = \"#{value["default"]}\""
         | 
| 25 | 
            +
                  else
         | 
| 26 | 
            +
                    defaultValue = " = #{value["default"]}"
         | 
| 27 | 
            +
                  end        
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
                return_types.push("(#{ketType})")
         | 
| 30 | 
            +
                parmas_desc.push("    ///   - #{key}: #{value["description"]}")
         | 
| 31 | 
            +
                init_params.push("#{key}: #{ketType}#{defaultValue}")
         | 
| 32 | 
            +
                var_lines.push("    public var #{key}: #{ketType}#{defaultValue}")
         | 
| 33 | 
            +
                assign_lines.push("      self.#{key} = #{key}")
         | 
| 34 | 
            +
                return_args.push("#{key}: #{key}")
         | 
| 35 | 
            +
              end 
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              var_lines_text = var_lines.join("\n")
         | 
| 38 | 
            +
              assign_lines_text = assign_lines.join("\n")
         | 
| 39 | 
            +
              init_params_text = init_params.join(", ")
         | 
| 40 | 
            +
              init_params_text_line = "    public required init(#{init_params_text}) {"
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              class_text = <<-RUBY
         | 
| 43 | 
            +
              // MARK: - VIPERParams.#{viper["viper"]}
         | 
| 44 | 
            +
              public class #{viper["viper"]}: Base {
         | 
| 45 | 
            +
            #{var_lines_text}
         | 
| 46 | 
            +
            #{init_params_text_line}
         | 
| 47 | 
            +
            #{assign_lines_text}
         | 
| 48 | 
            +
                }
         | 
| 49 | 
            +
                required public init() {
         | 
| 50 | 
            +
                    fatalError("init() has not been implemented")
         | 
| 51 | 
            +
                }
         | 
| 52 | 
            +
              }
         | 
| 53 | 
            +
            RUBY
         | 
| 54 | 
            +
              init_params_text_method = "    public func #{viper["viper"]}Params(#{init_params_text}) -> VIPERParams.#{viper["viper"]} {"
         | 
| 55 | 
            +
              curry_return = "      return curry(#{viper["viper"]}Params)"
         | 
| 56 | 
            +
              curry_return_type = ": #{return_types.join(' -> ')} -> VIPERParams.#{viper["viper"]} {"
         | 
| 57 | 
            +
              method_text = <<-RUBY
         | 
| 58 | 
            +
                // MARK: - Methods of #{viper["viper"]}
         | 
| 59 | 
            +
                /// #{viper["description"]}
         | 
| 60 | 
            +
                public func #{viper["viper"]}() -> Self {
         | 
| 61 | 
            +
                    return .#{viper["viper"]}
         | 
| 62 | 
            +
                }
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                /// #{viper["description"]}页面参数列表
         | 
| 65 | 
            +
                /// - Parameters:
         | 
| 66 | 
            +
            #{parmas_desc.join("\n")}
         | 
| 67 | 
            +
                /// - Returns: 页面参数对象
         | 
| 68 | 
            +
            #{init_params_text_method}
         | 
| 69 | 
            +
                  return VIPERParams.#{viper["viper"]}(#{return_args.join(", ")})
         | 
| 70 | 
            +
                }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                /// #{viper["description"]}页面参数 柯里化
         | 
| 73 | 
            +
                public var #{viper["viper"]}Curry#{curry_return_type}
         | 
| 74 | 
            +
            #{curry_return}
         | 
| 75 | 
            +
                }
         | 
| 76 | 
            +
            RUBY
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              vipers_params_class.push(class_text) 
         | 
| 79 | 
            +
              vipers_ext_func.push(method_text)
         | 
| 80 | 
            +
            end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            module CocoapodsVipers
         | 
| 83 | 
            +
                class Vipers
         | 
| 84 | 
            +
                    def sync(paths)
         | 
| 85 | 
            +
                      Pod::UI.puts "Synchronizing Vipers yml"
         | 
| 86 | 
            +
                      
         | 
| 87 | 
            +
                      if !File.exists?("vipers_config.yml")
         | 
| 88 | 
            +
                        Pod::UI.puts "vipers_config.yml not found"
         | 
| 89 | 
            +
                        return
         | 
| 90 | 
            +
                      end
         | 
| 91 | 
            +
                      
         | 
| 92 | 
            +
                      json = YAML.load(File.open("vipers_config.yml"))
         | 
| 93 | 
            +
                      ext_path = json['hycan_service_injects_extension_path']
         | 
| 94 | 
            +
                      vipers_json_path = json['podspec_project_vipers_json_path']
         | 
| 95 | 
            +
                      main_project_vipers_json_path = json['main_project_vipers_json_path']
         | 
| 96 | 
            +
                      extension_template_path = json['extension_template_path']
         | 
| 97 | 
            +
                      # Pod::UI.puts "json: #{json}"
         | 
| 98 | 
            +
                      # Pod::UI.puts "ext_path: #{ext_path}"
         | 
| 99 | 
            +
                      # Pod::UI.puts "pod_paths: #{paths}"
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                      # vipers_case = []
         | 
| 102 | 
            +
                      vipers_create_binder = []
         | 
| 103 | 
            +
                      vipers_params_class = []
         | 
| 104 | 
            +
                      vipers_ext_func = []
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                      if !paths
         | 
| 107 | 
            +
                        Pod::UI.puts "没有找到对应的业务组件,以Hycan开头的"
         | 
| 108 | 
            +
                        return
         | 
| 109 | 
            +
                      end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                      paths.insert(0, { 'spec_path' => '', 'spec_name' => main_project_vipers_json_path})
         | 
| 112 | 
            +
                      
         | 
| 113 | 
            +
                      paths.each do |spec|
         | 
| 114 | 
            +
                        # puts "spec: #{spec}"
         | 
| 115 | 
            +
                        spec_path = spec['spec_path']
         | 
| 116 | 
            +
                        json_path = ''
         | 
| 117 | 
            +
                        spec_json_path = ''
         | 
| 118 | 
            +
                    
         | 
| 119 | 
            +
                        if spec['spec_name'] == main_project_vipers_json_path
         | 
| 120 | 
            +
                          json_path = spec['spec_name']
         | 
| 121 | 
            +
                        else
         | 
| 122 | 
            +
                          spec_json_path = "#{vipers_json_path}"
         | 
| 123 | 
            +
                          spec_json_path.gsub!("SPECNAME", spec['spec_name'])
         | 
| 124 | 
            +
                          json_path = spec_path + "/" + spec_json_path
         | 
| 125 | 
            +
                        end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                        if !File.exists?(json_path)
         | 
| 128 | 
            +
                          Pod::UI.puts "没有找到对应#{json_path}下的路由json"
         | 
| 129 | 
            +
                        else
         | 
| 130 | 
            +
                                  
         | 
| 131 | 
            +
                          file = File.read(json_path)
         | 
| 132 | 
            +
                          data_hash = JSON.parse(file)
         | 
| 133 | 
            +
                          vipers = data_hash["vipers"]
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                          # vipers_case.push("// MARK: - #{data_hash["moduleName"]} #{data_hash["description"]}")
         | 
| 136 | 
            +
                          vipers_create_binder.push("    // MARK: - #{data_hash["moduleName"]} Create Binder")
         | 
| 137 | 
            +
                          vipers_params_class.push("  // MARK: - #{data_hash["moduleName"]} Params Class\n")
         | 
| 138 | 
            +
                          vipers_ext_func.push("  // MARK: - #{data_hash["moduleName"]} Extension Func\n")
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                          vipers.each do |viper|
         | 
| 141 | 
            +
                            # vipers_case.push("    case #{viper["viper"]}")
         | 
| 142 | 
            +
                            handleClsAndMethod(viper, vipers_params_class, vipers_ext_func)
         | 
| 143 | 
            +
                            if spec['spec_name'] == main_project_vipers_json_path
         | 
| 144 | 
            +
                              vipers_create_binder.push("      //#{viper["description"]}\n      VIPERBinder.addUnity(className: \"#{viper["class"]}\", identifier: VIPERs.#{viper["viper"]}.identifier)")
         | 
| 145 | 
            +
                            else
         | 
| 146 | 
            +
                              vipers_create_binder.push("      //#{viper["description"]}\n      VIPERBinder.addUnity(projectClassName: \"#{data_hash["moduleName"]}.#{viper["class"]}\", identifier: VIPERs.#{viper["viper"]}.identifier)")
         | 
| 147 | 
            +
                            end 
         | 
| 148 | 
            +
                          end
         | 
| 149 | 
            +
                          vipers_create_binder.push("\n")
         | 
| 150 | 
            +
                        end
         | 
| 151 | 
            +
                      end
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                      # injection_vipers_case = vipers_case.join("\n")
         | 
| 154 | 
            +
                      injection_vipers_params_class = vipers_params_class.join("\n")
         | 
| 155 | 
            +
                      injection_vipers_ext_func = vipers_ext_func.join("\n")
         | 
| 156 | 
            +
                      injection_vipers_create_binder = vipers_create_binder.join("\n")
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                      template_file = ''
         | 
| 159 | 
            +
                      
         | 
| 160 | 
            +
                      if extension_template_path
         | 
| 161 | 
            +
                        template_file = extension_template_path
         | 
| 162 | 
            +
                      else
         | 
| 163 | 
            +
                        template_file = File.dirname(__FILE__) + '/template/Vipers+Extension.swift' # 脚本所在目录 寻找模板文件
         | 
| 164 | 
            +
                      end
         | 
| 165 | 
            +
                      
         | 
| 166 | 
            +
                      template = File.read(template_file)
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                      # 替换 /** Injection VIPERS case **/ (暂不执行)
         | 
| 169 | 
            +
                      template.gsub!("/** Injection VIPERBinderHelper autoCreateBinder **/", injection_vipers_create_binder)
         | 
| 170 | 
            +
                      template.gsub!("/** Injection VIPERs extension **/", injection_vipers_ext_func)
         | 
| 171 | 
            +
                      template.gsub!("/** Injection VIPERParams class **/", injection_vipers_params_class)              
         | 
| 172 | 
            +
             | 
| 173 | 
            +
                      File.open(ext_path, "w") { |file| file.puts template }
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                      # 1 校验没有重复的 枚举值 enum
         | 
| 176 | 
            +
                      # 2 读取模板的swift文件
         | 
| 177 | 
            +
                      # 3 遍历读取模块里的json ps: 主工程 + 业务工程
         | 
| 178 | 
            +
                      # 4 主工程的目标文件(HycanService下的) 注入各个模块绑定语句以及参数方法
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                    end
         | 
| 181 | 
            +
                end
         | 
| 182 | 
            +
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            require 'cocoapods-vipers/gem_version'
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            require 'cocoapods-vipers/vipers-sync'
         | 
| 2 | 
            +
            require 'cocoapods'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module CocoapodsVipers
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              Pod::HooksManager.register('cocoapods-vipers', :pre_install) do |_context, _|
         | 
| 7 | 
            +
                paths = []
         | 
| 8 | 
            +
                puts 'vipers hook pre_install'
         | 
| 9 | 
            +
                dependencies = _context.podfile.dependencies
         | 
| 10 | 
            +
                  dependencies.each do |d|
         | 
| 11 | 
            +
                    # puts d
         | 
| 12 | 
            +
                    ins_vars = d.instance_variables.map{|v|v.to_s[1..-1]}
         | 
| 13 | 
            +
                    methods = d.methods.map &:to_s
         | 
| 14 | 
            +
                    attribute = ins_vars & methods #attribute
         | 
| 15 | 
            +
                    # puts attribute
         | 
| 16 | 
            +
                    if d.name.match(/^Hycan/) && d.external_source
         | 
| 17 | 
            +
                      # puts d.external_source[:path]
         | 
| 18 | 
            +
                      paths.push({ 'spec_path' => d.external_source[:path], 'spec_name' => d.name })
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
                  CocoapodsVipers::Vipers.new.sync(paths)
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              Pod::HooksManager.register('cocoapods-vipers', :post_install) do |context|
         | 
| 25 | 
            +
                # CocoapodsVipers::Vipers.new.sync()
         | 
| 26 | 
            +
                puts 'vipers hook post_install'
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              Pod::HooksManager.register('cocoapods-vipers', :post_update) do |context|
         | 
| 30 | 
            +
                puts 'vipers hook post_update'
         | 
| 31 | 
            +
                # CocoapodsVipers::Vipers.new.sync()
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
              
         | 
| 34 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: cocoapods-vipers
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.1
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - fengjx
         | 
| 8 | 
            +
            autorequire:
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2021-10-27 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: bundler
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - "~>"
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '1.3'
         | 
| 20 | 
            +
              type: :development
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - "~>"
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '1.3'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: rake
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - ">="
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '0'
         | 
| 41 | 
            +
            description: tool to generate VIPER enum and medthod for Router
         | 
| 42 | 
            +
            email:
         | 
| 43 | 
            +
            - 1026366384@qq.com
         | 
| 44 | 
            +
            executables: []
         | 
| 45 | 
            +
            extensions: []
         | 
| 46 | 
            +
            extra_rdoc_files: []
         | 
| 47 | 
            +
            files:
         | 
| 48 | 
            +
            - lib/cocoapods-vipers.rb
         | 
| 49 | 
            +
            - lib/cocoapods-vipers/command.rb
         | 
| 50 | 
            +
            - lib/cocoapods-vipers/command/vipers.rb
         | 
| 51 | 
            +
            - lib/cocoapods-vipers/gem_version.rb
         | 
| 52 | 
            +
            - lib/cocoapods-vipers/template/Vipers+Extension.swift
         | 
| 53 | 
            +
            - lib/cocoapods-vipers/vipers-sync.rb
         | 
| 54 | 
            +
            - lib/cocoapods_plugin.rb
         | 
| 55 | 
            +
            homepage: https://github.com/EXAMPLE/cocoapods-vipers
         | 
| 56 | 
            +
            licenses:
         | 
| 57 | 
            +
            - MIT
         | 
| 58 | 
            +
            metadata: {}
         | 
| 59 | 
            +
            post_install_message:
         | 
| 60 | 
            +
            rdoc_options: []
         | 
| 61 | 
            +
            require_paths:
         | 
| 62 | 
            +
            - lib
         | 
| 63 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 64 | 
            +
              requirements:
         | 
| 65 | 
            +
              - - ">="
         | 
| 66 | 
            +
                - !ruby/object:Gem::Version
         | 
| 67 | 
            +
                  version: '0'
         | 
| 68 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 69 | 
            +
              requirements:
         | 
| 70 | 
            +
              - - ">="
         | 
| 71 | 
            +
                - !ruby/object:Gem::Version
         | 
| 72 | 
            +
                  version: '0'
         | 
| 73 | 
            +
            requirements: []
         | 
| 74 | 
            +
            rubygems_version: 3.1.4
         | 
| 75 | 
            +
            signing_key:
         | 
| 76 | 
            +
            specification_version: 4
         | 
| 77 | 
            +
            summary: cocoapods-vipers generate VIPER enum and medthod for Router which is in HycanServices
         | 
| 78 | 
            +
            test_files: []
         |