line-bot-api 1.10.0 → 1.11.0
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/README.md +2 -1
- data/lib/line/bot/api/errors.rb +0 -1
- data/lib/line/bot/api/version.rb +1 -1
- data/lib/line/bot/client.rb +64 -13
- data/lib/line/bot/request.rb +26 -13
- metadata +3 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 191b846d917a61448e7e38976390aeb56846229ccdc2a69c404d0ca04a3bcb89
         | 
| 4 | 
            +
              data.tar.gz: 595b93123023a3c9060190969657ca06d2bc7472281bcfe43ee1ef7b4c95324a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: '094bbf24cc58e2b444a410b02052d15bcd545ad77e62a4cf8765d5a6d8e5e4011ff735196bffd3d95d2ab77e6cdb70a17240dfe524f71380d2633b5efea5455b'
         | 
| 7 | 
            +
              data.tar.gz: f54a7e01bd1b28f28eac6e299e739a8d59d390056acac28fb7d5a957f56e2f28fa71a26a3e07a7bed212c605af735486e2213465aa417025e18aafe6d95c05d7
         | 
    
        data/README.md
    CHANGED
    
    | @@ -23,7 +23,7 @@ gem 'line-bot-api' | |
| 23 23 |  | 
| 24 24 | 
             
            And then execute:
         | 
| 25 25 |  | 
| 26 | 
            -
            ``` | 
| 26 | 
            +
            ```sh
         | 
| 27 27 | 
             
            bundle
         | 
| 28 28 | 
             
            ```
         | 
| 29 29 |  | 
| @@ -44,6 +44,7 @@ require 'line/bot' | |
| 44 44 |  | 
| 45 45 | 
             
            def client
         | 
| 46 46 | 
             
              @client ||= Line::Bot::Client.new { |config|
         | 
| 47 | 
            +
                config.channel_id = ENV["LINE_CHANNEL_ID"]
         | 
| 47 48 | 
             
                config.channel_secret = ENV["LINE_CHANNEL_SECRET"]
         | 
| 48 49 | 
             
                config.channel_token = ENV["LINE_CHANNEL_TOKEN"]
         | 
| 49 50 | 
             
              }
         | 
    
        data/lib/line/bot/api/errors.rb
    CHANGED
    
    
    
        data/lib/line/bot/api/version.rb
    CHANGED
    
    
    
        data/lib/line/bot/client.rb
    CHANGED
    
    | @@ -13,16 +13,16 @@ | |
| 13 13 | 
             
            # under the License.
         | 
| 14 14 |  | 
| 15 15 | 
             
            require 'line/bot/request'
         | 
| 16 | 
            -
            require 'line/bot/api/errors'
         | 
| 17 16 | 
             
            require 'base64'
         | 
| 18 17 | 
             
            require 'net/http'
         | 
| 19 18 | 
             
            require 'openssl'
         | 
| 19 | 
            +
            require 'uri'
         | 
| 20 20 |  | 
| 21 21 | 
             
            module Line
         | 
| 22 22 | 
             
              module Bot
         | 
| 23 23 | 
             
                class Client
         | 
| 24 24 | 
             
                  #  @return [String]
         | 
| 25 | 
            -
                  attr_accessor :channel_token, :channel_secret, :endpoint
         | 
| 25 | 
            +
                  attr_accessor :channel_token, :channel_id, :channel_secret, :endpoint
         | 
| 26 26 |  | 
| 27 27 | 
             
                  # @return [Object]
         | 
| 28 28 | 
             
                  attr_accessor :httpclient
         | 
| @@ -57,8 +57,47 @@ module Line | |
| 57 57 | 
             
                    }
         | 
| 58 58 | 
             
                  end
         | 
| 59 59 |  | 
| 60 | 
            -
                   | 
| 61 | 
            -
             | 
| 60 | 
            +
                  # Issue channel access token
         | 
| 61 | 
            +
                  #
         | 
| 62 | 
            +
                  # @param grant_type [String] Grant type
         | 
| 63 | 
            +
                  #
         | 
| 64 | 
            +
                  # @return [Net::HTTPResponse]
         | 
| 65 | 
            +
                  def issue_channel_token(grant_type = 'client_credentials')
         | 
| 66 | 
            +
                    channel_id_required
         | 
| 67 | 
            +
                    channel_secret_required
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    payload = URI.encode_www_form(
         | 
| 70 | 
            +
                      grant_type:    grant_type,
         | 
| 71 | 
            +
                      client_id:     channel_id,
         | 
| 72 | 
            +
                      client_secret: channel_secret
         | 
| 73 | 
            +
                    )
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                    request = Request.new do |config|
         | 
| 76 | 
            +
                      config.httpclient    = httpclient
         | 
| 77 | 
            +
                      config.endpoint      = endpoint
         | 
| 78 | 
            +
                      config.endpoint_path = '/oauth/accessToken'
         | 
| 79 | 
            +
                      config.content_type  = 'application/x-www-form-urlencoded'
         | 
| 80 | 
            +
                      config.payload       = payload
         | 
| 81 | 
            +
                    end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                    request.post
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  # Revoke channel access token
         | 
| 87 | 
            +
                  #
         | 
| 88 | 
            +
                  # @return [Net::HTTPResponse]
         | 
| 89 | 
            +
                  def revoke_channel_token(access_token)
         | 
| 90 | 
            +
                    payload = URI.encode_www_form(access_token: access_token)
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                    request = Request.new do |config|
         | 
| 93 | 
            +
                      config.httpclient    = httpclient
         | 
| 94 | 
            +
                      config.endpoint      = endpoint
         | 
| 95 | 
            +
                      config.endpoint_path = '/oauth/revoke'
         | 
| 96 | 
            +
                      config.content_type  = 'application/x-www-form-urlencoded'
         | 
| 97 | 
            +
                      config.payload       = payload
         | 
| 98 | 
            +
                    end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                    request.post
         | 
| 62 101 | 
             
                  end
         | 
| 63 102 |  | 
| 64 103 | 
             
                  # Push messages to line server and to user.
         | 
| @@ -68,7 +107,7 @@ module Line | |
| 68 107 | 
             
                  #
         | 
| 69 108 | 
             
                  # @return [Net::HTTPResponse]
         | 
| 70 109 | 
             
                  def push_message(user_id, messages)
         | 
| 71 | 
            -
                     | 
| 110 | 
            +
                    channel_token_required
         | 
| 72 111 |  | 
| 73 112 | 
             
                    messages = [messages] if messages.is_a?(Hash)
         | 
| 74 113 |  | 
| @@ -91,7 +130,7 @@ module Line | |
| 91 130 | 
             
                  #
         | 
| 92 131 | 
             
                  # @return [Net::HTTPResponse]
         | 
| 93 132 | 
             
                  def reply_message(token, messages)
         | 
| 94 | 
            -
                     | 
| 133 | 
            +
                    channel_token_required
         | 
| 95 134 |  | 
| 96 135 | 
             
                    messages = [messages] if messages.is_a?(Hash)
         | 
| 97 136 |  | 
| @@ -114,7 +153,7 @@ module Line | |
| 114 153 | 
             
                  #
         | 
| 115 154 | 
             
                  # @return [Net::HTTPResponse]
         | 
| 116 155 | 
             
                  def multicast(to, messages)
         | 
| 117 | 
            -
                     | 
| 156 | 
            +
                    channel_token_required
         | 
| 118 157 |  | 
| 119 158 | 
             
                    to = [to] if to.is_a?(String)
         | 
| 120 159 | 
             
                    messages = [messages] if messages.is_a?(Hash)
         | 
| @@ -137,7 +176,7 @@ module Line | |
| 137 176 | 
             
                  #
         | 
| 138 177 | 
             
                  # @return [Net::HTTPResponse]
         | 
| 139 178 | 
             
                  def broadcast(messages)
         | 
| 140 | 
            -
                     | 
| 179 | 
            +
                    channel_token_required
         | 
| 141 180 |  | 
| 142 181 | 
             
                    messages = [messages] if messages.is_a?(Hash)
         | 
| 143 182 |  | 
| @@ -153,7 +192,7 @@ module Line | |
| 153 192 | 
             
                  end
         | 
| 154 193 |  | 
| 155 194 | 
             
                  def leave_group(group_id)
         | 
| 156 | 
            -
                     | 
| 195 | 
            +
                    channel_token_required
         | 
| 157 196 |  | 
| 158 197 | 
             
                    request = Request.new do |config|
         | 
| 159 198 | 
             
                      config.httpclient     = httpclient
         | 
| @@ -166,7 +205,7 @@ module Line | |
| 166 205 | 
             
                  end
         | 
| 167 206 |  | 
| 168 207 | 
             
                  def leave_room(room_id)
         | 
| 169 | 
            -
                     | 
| 208 | 
            +
                    channel_token_required
         | 
| 170 209 |  | 
| 171 210 | 
             
                    request = Request.new do |config|
         | 
| 172 211 | 
             
                      config.httpclient     = httpclient
         | 
| @@ -473,7 +512,7 @@ module Line | |
| 473 512 | 
             
                  #
         | 
| 474 513 | 
             
                  # @return [Net::HTTPResponse]
         | 
| 475 514 | 
             
                  def get(endpoint_path)
         | 
| 476 | 
            -
                     | 
| 515 | 
            +
                    channel_token_required
         | 
| 477 516 |  | 
| 478 517 | 
             
                    request = Request.new do |config|
         | 
| 479 518 | 
             
                      config.httpclient     = httpclient
         | 
| @@ -491,7 +530,7 @@ module Line | |
| 491 530 | 
             
                  #
         | 
| 492 531 | 
             
                  # @return [Net::HTTPResponse]
         | 
| 493 532 | 
             
                  def post(endpoint_path, payload = nil)
         | 
| 494 | 
            -
                     | 
| 533 | 
            +
                    channel_token_required
         | 
| 495 534 |  | 
| 496 535 | 
             
                    request = Request.new do |config|
         | 
| 497 536 | 
             
                      config.httpclient     = httpclient
         | 
| @@ -510,7 +549,7 @@ module Line | |
| 510 549 | 
             
                  #
         | 
| 511 550 | 
             
                  # @return [Net::HTTPResponse]
         | 
| 512 551 | 
             
                  def delete(endpoint_path)
         | 
| 513 | 
            -
                     | 
| 552 | 
            +
                    channel_token_required
         | 
| 514 553 |  | 
| 515 554 | 
             
                    request = Request.new do |config|
         | 
| 516 555 | 
             
                      config.httpclient     = httpclient
         | 
| @@ -576,6 +615,18 @@ module Line | |
| 576 615 | 
             
                    b.each_byte { |byte| res |= byte ^ l.shift }
         | 
| 577 616 | 
             
                    res == 0
         | 
| 578 617 | 
             
                  end
         | 
| 618 | 
            +
             | 
| 619 | 
            +
                  def channel_token_required
         | 
| 620 | 
            +
                    raise ArgumentError, '`channel_token` is not configured' unless channel_token
         | 
| 621 | 
            +
                  end
         | 
| 622 | 
            +
             | 
| 623 | 
            +
                  def channel_id_required
         | 
| 624 | 
            +
                    raise ArgumentError, '`channel_id` is not configured' unless channel_id
         | 
| 625 | 
            +
                  end
         | 
| 626 | 
            +
             | 
| 627 | 
            +
                  def channel_secret_required
         | 
| 628 | 
            +
                    raise ArgumentError, '`channel_secret` is not configured' unless channel_secret
         | 
| 629 | 
            +
                  end
         | 
| 579 630 | 
             
                end
         | 
| 580 631 | 
             
              end
         | 
| 581 632 | 
             
            end
         | 
    
        data/lib/line/bot/request.rb
    CHANGED
    
    | @@ -22,6 +22,8 @@ module Line | |
| 22 22 | 
             
                class Request
         | 
| 23 23 | 
             
                  attr_accessor :endpoint, :endpoint_path, :credentials, :to, :reply_token, :messages, :httpclient, :payload, :file
         | 
| 24 24 |  | 
| 25 | 
            +
                  attr_writer :content_type
         | 
| 26 | 
            +
             | 
| 25 27 | 
             
                  # Initializes a new Request
         | 
| 26 28 | 
             
                  #
         | 
| 27 29 | 
             
                  # @return [Line::Bot::Request]
         | 
| @@ -44,27 +46,22 @@ module Line | |
| 44 46 |  | 
| 45 47 | 
             
                  # @return [Hash]
         | 
| 46 48 | 
             
                  def header
         | 
| 47 | 
            -
                    content_type =
         | 
| 48 | 
            -
                      if file.is_a? File
         | 
| 49 | 
            -
                        case file.path
         | 
| 50 | 
            -
                        when /\.png\z/i then 'image/png'
         | 
| 51 | 
            -
                        when /\.jpe?g\z/i then 'image/jpeg'
         | 
| 52 | 
            -
                        else
         | 
| 53 | 
            -
                          raise ArgumentError.new("invalid file extension: #{file.path}")
         | 
| 54 | 
            -
                        end
         | 
| 55 | 
            -
                      else
         | 
| 56 | 
            -
                        'application/json; charset=UTF-8'
         | 
| 57 | 
            -
                      end
         | 
| 58 | 
            -
             | 
| 59 49 | 
             
                    header = {
         | 
| 60 50 | 
             
                      'Content-Type' => content_type,
         | 
| 61 51 | 
             
                      'User-Agent' => "LINE-BotSDK-Ruby/#{Line::Bot::API::VERSION}",
         | 
| 62 52 | 
             
                    }
         | 
| 63 | 
            -
                    hash = credentials.inject({}) { |h, (k, v)| h[k] = v.to_s; h }
         | 
| 53 | 
            +
                    hash = (credentials || {}).inject({}) { |h, (k, v)| h[k] = v.to_s; h }
         | 
| 64 54 |  | 
| 65 55 | 
             
                    header.merge(hash)
         | 
| 66 56 | 
             
                  end
         | 
| 67 57 |  | 
| 58 | 
            +
                  # @return [String]
         | 
| 59 | 
            +
                  def content_type
         | 
| 60 | 
            +
                    return @content_type if @content_type
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    guess_content_type
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 68 65 | 
             
                  # Get content of specified URL.
         | 
| 69 66 | 
             
                  #
         | 
| 70 67 | 
             
                  # @return [Net::HTTPResponse]
         | 
| @@ -99,6 +96,22 @@ module Line | |
| 99 96 | 
             
                  def assert_for_deleting_message
         | 
| 100 97 | 
             
                    raise ArgumentError, 'Wrong argument type `endpoint_path`' unless endpoint_path.is_a?(String)
         | 
| 101 98 | 
             
                  end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  private
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  # @return [String]
         | 
| 103 | 
            +
                  def guess_content_type
         | 
| 104 | 
            +
                    if file.is_a? File
         | 
| 105 | 
            +
                      case file.path
         | 
| 106 | 
            +
                      when /\.png\z/i then 'image/png'
         | 
| 107 | 
            +
                      when /\.jpe?g\z/i then 'image/jpeg'
         | 
| 108 | 
            +
                      else
         | 
| 109 | 
            +
                        raise ArgumentError.new("invalid file extension: #{file.path}")
         | 
| 110 | 
            +
                      end
         | 
| 111 | 
            +
                    else
         | 
| 112 | 
            +
                      'application/json; charset=UTF-8'
         | 
| 113 | 
            +
                    end
         | 
| 114 | 
            +
                  end
         | 
| 102 115 | 
             
                end
         | 
| 103 116 | 
             
              end
         | 
| 104 117 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: line-bot-api
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.11.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - LINE Corporation
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019- | 
| 11 | 
            +
            date: 2019-06-04 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: addressable
         | 
| @@ -120,8 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 120 120 | 
             
                - !ruby/object:Gem::Version
         | 
| 121 121 | 
             
                  version: '0'
         | 
| 122 122 | 
             
            requirements: []
         | 
| 123 | 
            -
             | 
| 124 | 
            -
            rubygems_version: 2.7.6
         | 
| 123 | 
            +
            rubygems_version: 3.0.3
         | 
| 125 124 | 
             
            signing_key: 
         | 
| 126 125 | 
             
            specification_version: 4
         | 
| 127 126 | 
             
            summary: SDK of the LINE Messaging API
         |