xi_wechat_corp 1.2.2 → 1.2.4
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 +4 -4
- data/bin/xi_wechat_corp_send_text +10 -0
- data/lib/xi_wechat_corp/api/cli.rb +60 -31
- data/lib/xi_wechat_corp/version.rb +1 -1
- metadata +3 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: beaff6e4d5ef6eaa878a785b55d4fb0741f85bb5
         | 
| 4 | 
            +
              data.tar.gz: 635c19daf807474e610d21e0cb4209636ff0e47c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 502dc58825e9407ad5a6adfeefefd3a052ac8fd9bad969ed966f22b7289e1a348f0ffba990cf5660f0c235c92d5dc5284cc43b5d60a8110660471c06f0f9dbdb
         | 
| 7 | 
            +
              data.tar.gz: d2eeb6f2e12b3b1ea658dfc58de0245b7297674fc0c817c4333cd7f491b4ea76e3ea448ca315e90ed4feb6bb8e33130d3737e1eebdcad6a1e75697b5a784b720
         | 
| @@ -3,6 +3,7 @@ require 'optparse' | |
| 3 3 | 
             
            require 'xi_wechat_corp/version'
         | 
| 4 4 | 
             
            require 'xi_wechat_corp/api/connection'
         | 
| 5 5 | 
             
            require 'rack/utils'
         | 
| 6 | 
            +
            require 'multi_json'
         | 
| 6 7 |  | 
| 7 8 | 
             
            module XiWechatCorp
         | 
| 8 9 | 
             
              module API
         | 
| @@ -29,14 +30,10 @@ module XiWechatCorp | |
| 29 30 | 
             
                  def run(args)
         | 
| 30 31 | 
             
                    options = verify(parse(args))
         | 
| 31 32 | 
             
                    conn = establish_connection(options)
         | 
| 32 | 
            -
                     | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
                      puts conn.post(options[:path], options[:input].read).body
         | 
| 37 | 
            -
                    else
         | 
| 38 | 
            -
                      puts conn.get(options[:path], options[:params]).body
         | 
| 39 | 
            -
                    end
         | 
| 33 | 
            +
                    puts MultiJson.load(conn.send(options[:method], options[:path], options[:params]).body).inspect
         | 
| 34 | 
            +
                  rescue MultiJson::ParseError => e
         | 
| 35 | 
            +
                    $stderr.puts 'BAD JSON: ' + e.message
         | 
| 36 | 
            +
                    exit 1
         | 
| 40 37 | 
             
                  rescue SystemCallError => e
         | 
| 41 38 | 
             
                    $stderr.puts 'ERROR: ' + e.message
         | 
| 42 39 | 
             
                    exit e.errno
         | 
| @@ -73,17 +70,18 @@ using `--access-token'. | |
| 73 70 | 
             
                    options = {
         | 
| 74 71 | 
             
                      corp_id: ENV['XI_WECHAT_CORP_ID'],
         | 
| 75 72 | 
             
                      secret: ENV['XI_WECHAT_CORP_SECRET'],
         | 
| 76 | 
            -
                      input: $stdin,
         | 
| 77 73 | 
             
                      path: nil,
         | 
| 78 74 | 
             
                      method: 'post',
         | 
| 79 | 
            -
                       | 
| 80 | 
            -
             | 
| 75 | 
            +
                      json: [],
         | 
| 76 | 
            +
                      query: []
         | 
| 77 | 
            +
                    } 
         | 
| 81 78 |  | 
| 82 79 | 
             
                    opt_parser = OptionParser.new do |opts|
         | 
| 83 80 | 
             
                      opts.banner = <<-BANNER
         | 
| 84 81 | 
             
            Usage: xi_wechat_corp_api [options]
         | 
| 85 82 |  | 
| 86 83 | 
             
             POST: xi_wechat_corp_api [options] PATH FILE
         | 
| 84 | 
            +
                   xi_wechat_corp_api [options] PATH KEY=VALUE ['NEST[KEY]'=VALUE]...
         | 
| 87 85 | 
             
                   xi_wechat_corp_api [options] PATH JSON
         | 
| 88 86 | 
             
              GET: xi_wechat_corp_api [options] --get PATH KEY=VALUE [KEY=VALUE]...
         | 
| 89 87 | 
             
                      BANNER
         | 
| @@ -115,21 +113,25 @@ Usage: xi_wechat_corp_api [options] | |
| 115 113 | 
             
                        options[:path] = path if path
         | 
| 116 114 | 
             
                      end
         | 
| 117 115 |  | 
| 118 | 
            -
                      opts.on('-g', '--get PATH', 'Send GET request') do |path|
         | 
| 116 | 
            +
                      opts.on('-g', '--get [PATH]', 'Send GET request') do |path|
         | 
| 119 117 | 
             
                        options[:method] = 'get'
         | 
| 120 | 
            -
                        options[:path] = path
         | 
| 118 | 
            +
                        options[:path] = path if path
         | 
| 121 119 | 
             
                      end
         | 
| 122 120 |  | 
| 123 121 | 
             
                      opts.on('-j', '--json JSON', 'JSON body for POST request') do |json|
         | 
| 124 | 
            -
                        options[: | 
| 122 | 
            +
                        options[:json] << StringIO.new(json)
         | 
| 125 123 | 
             
                      end
         | 
| 126 124 |  | 
| 127 | 
            -
                      opts.on('-q', '--query QUERY', 'QUERY string for  | 
| 128 | 
            -
                        options[: | 
| 125 | 
            +
                      opts.on('-q', '--query QUERY', 'QUERY string such as a=10&b[nested]=10, it will be converted to JSON for POST') do |query|
         | 
| 126 | 
            +
                        options[:query] << query.strip if query && query.strip.size > 0
         | 
| 129 127 | 
             
                      end
         | 
| 130 128 |  | 
| 131 129 | 
             
                      opts.on('-f', '--file FILE', 'FILE contains the JSON to be send via POST') do |f|
         | 
| 132 | 
            -
                        options[: | 
| 130 | 
            +
                        options[:json] << (f != '-' ? File.open(f) : $stdin)
         | 
| 131 | 
            +
                      end
         | 
| 132 | 
            +
             | 
| 133 | 
            +
                      opts.on('-t', '--text CONTENT', 'Set text[content] for text message') do |content|
         | 
| 134 | 
            +
                        options[:query] << "text[content]=#{content.gsub('%', '%25').gsub('&', '%26')}"
         | 
| 133 135 | 
             
                      end
         | 
| 134 136 |  | 
| 135 137 | 
             
                      opts.separator ''
         | 
| @@ -150,24 +152,51 @@ Usage: xi_wechat_corp_api [options] | |
| 150 152 | 
             
                    opt_parser.parse!(args)
         | 
| 151 153 | 
             
                    return options if args.empty?
         | 
| 152 154 |  | 
| 153 | 
            -
                     | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
                       | 
| 159 | 
            -
                      options[:path] = args.first if args.size == 2
         | 
| 160 | 
            -
                      arg = args.last.strip
         | 
| 155 | 
            +
                    if options[:path].nil?
         | 
| 156 | 
            +
                      options[:path] = args.shift
         | 
| 157 | 
            +
                    end
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                    args.each do |arg|
         | 
| 160 | 
            +
                      arg = arg.strip
         | 
| 161 161 | 
             
                      if arg[0] == '{'
         | 
| 162 | 
            -
                        options[: | 
| 163 | 
            -
                      elsif arg  | 
| 164 | 
            -
                        options[: | 
| 162 | 
            +
                        options[:json] << StringIO.new(arg)
         | 
| 163 | 
            +
                      elsif arg == '-'
         | 
| 164 | 
            +
                        options[:json] << $stdin
         | 
| 165 | 
            +
                      elsif !File.exists?(arg) && arg.include?('=')
         | 
| 166 | 
            +
                        options[:query] << arg
         | 
| 167 | 
            +
                      else
         | 
| 168 | 
            +
                        options[:json] << File.open(arg)
         | 
| 165 169 | 
             
                      end
         | 
| 166 | 
            -
                    when 'get'
         | 
| 167 | 
            -
                      options[:params].merge! Rack::Utils.parse_nested_query(args.join('&'))
         | 
| 168 170 | 
             
                    end
         | 
| 169 171 |  | 
| 170 | 
            -
                    options
         | 
| 172 | 
            +
                    if options[:query].empty?
         | 
| 173 | 
            +
                      params = {}
         | 
| 174 | 
            +
                    else
         | 
| 175 | 
            +
                      params = Rack::Utils.parse_nested_query(options[:query].join('&'))
         | 
| 176 | 
            +
                    end
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                    options[:json].each do |input|
         | 
| 179 | 
            +
                      params = deep_merge(params, read_json(input))
         | 
| 180 | 
            +
                    end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                    options.merge(params: params)
         | 
| 183 | 
            +
                  end
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                  def read_json(input)
         | 
| 186 | 
            +
                    if input.tty?
         | 
| 187 | 
            +
                      puts 'Input JSON Body Below (Ctrl+D to send request):'
         | 
| 188 | 
            +
                    end
         | 
| 189 | 
            +
                    MultiJson.load(input.read)
         | 
| 190 | 
            +
                  end
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                  def deep_merge(a, b)
         | 
| 193 | 
            +
                    a.merge(b) do |key, oldval, newval|
         | 
| 194 | 
            +
                      if oldval.is_a?(Hash) && newval.is_a?(Hash)
         | 
| 195 | 
            +
                        deep_merge(oldval, newval)
         | 
| 196 | 
            +
                      else
         | 
| 197 | 
            +
                        newval
         | 
| 198 | 
            +
                      end
         | 
| 199 | 
            +
                    end
         | 
| 171 200 | 
             
                  end
         | 
| 172 201 | 
             
                end
         | 
| 173 202 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: xi_wechat_corp
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.2. | 
| 4 | 
            +
              version: 1.2.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ian Yang
         | 
| @@ -169,6 +169,7 @@ email: | |
| 169 169 | 
             
            - ian@3pjgames.com
         | 
| 170 170 | 
             
            executables:
         | 
| 171 171 | 
             
            - xi_wechat_corp_api
         | 
| 172 | 
            +
            - xi_wechat_corp_send_text
         | 
| 172 173 | 
             
            extensions: []
         | 
| 173 174 | 
             
            extra_rdoc_files: []
         | 
| 174 175 | 
             
            files:
         | 
| @@ -178,6 +179,7 @@ files: | |
| 178 179 | 
             
            - README.md
         | 
| 179 180 | 
             
            - Rakefile
         | 
| 180 181 | 
             
            - bin/xi_wechat_corp_api
         | 
| 182 | 
            +
            - bin/xi_wechat_corp_send_text
         | 
| 181 183 | 
             
            - lib/xi_wechat_corp.rb
         | 
| 182 184 | 
             
            - lib/xi_wechat_corp/aes_crypt.rb
         | 
| 183 185 | 
             
            - lib/xi_wechat_corp/api.rb
         |