line-bot-lite 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7174d064420f5b23cb0a8e8f30fdf57921673e21
4
- data.tar.gz: cb742ec63c7c334d3c6e055e4628f55806c22564
3
+ metadata.gz: 05573f2631ba35fde97b47a5ca9c15060a9b8559
4
+ data.tar.gz: e72f0fc487509829246bcbb68ff18c9c089ecdeb
5
5
  SHA512:
6
- metadata.gz: a7a5d419e34dfb393fd7d545a239a573a004493b6ef458512cbd54f65276a512ea2a7bf2d61a4f1725a68f54f3144cb303962bd3bd71140f49b7f92259e2a25d
7
- data.tar.gz: 75719aa08765008be01572cf42154a726f9709ea47ea13e963dfdc387c55954249f86f316301b4525303cbdc70fc210e090e57ee9cf15ed7ccaaee38df391dfa
6
+ metadata.gz: 37f2058edb8705b2a510ca621448b9ac5f15aaed172760769fac604ae121120ce829694249307d38e89424e89483bf60ef1763d80ba045849ff15ccf60cb400b
7
+ data.tar.gz: 0e9becc3174b06ff0fbed98f05948c1ee2360fe0b2b448368419c27c70fa8e76af051487b24b4dce3ee6f2fc972eda533cb4d3f49cb048e8e157ff9ba8f02de2
data/README.md CHANGED
@@ -1,18 +1,18 @@
1
1
  # Line Bot Lite
2
2
 
3
+ [![Rubygems](https://img.shields.io/gem/v/line-bot-lite.svg)](https://rubygems.org/gems/line-bot-lite)
3
4
  [![Build Status](https://travis-ci.org/elct9620/line-bot.svg?branch=master)](https://travis-ci.org/elct9620/line-bot)
4
5
  [![Coverage Status](https://coveralls.io/repos/github/elct9620/line-bot/badge.svg?branch=master)](https://coveralls.io/github/elct9620/line-bot?branch=master)
6
+ [![Code Climate](https://codeclimate.com/github/elct9620/line-bot/badges/gpa.svg)](https://codeclimate.com/github/elct9620/line-bot)
5
7
 
6
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/line/bot`. To experiment with that code, run `bin/console` for an interactive prompt.
7
-
8
- TODO: Delete this and the text above, and describe your gem
8
+ Yet another line bot SDK implement. This version use all ruby builtin library and without dependencies problem like `rack` version is lock down to `>= 0`
9
9
 
10
10
  ## Installation
11
11
 
12
12
  Add this line to your application's Gemfile:
13
13
 
14
14
  ```ruby
15
- gem 'line-bot'
15
+ gem 'line-bot-lite'
16
16
  ```
17
17
 
18
18
  And then execute:
@@ -21,11 +21,46 @@ And then execute:
21
21
 
22
22
  Or install it yourself as:
23
23
 
24
- $ gem install line-bot
24
+ $ gem install line-bot-lite
25
25
 
26
26
  ## Usage
27
27
 
28
- TODO: Write usage instructions here
28
+ Current only implemented `send_text` method, and still need refactor to support all types message.
29
+
30
+ ```ruby
31
+ require 'line/bot'
32
+ require 'json'
33
+
34
+ def client
35
+ @client ||= Line::Bot::Client.new(
36
+ channel_id: ENV['LINE_CHANNEL_ID'],
37
+ channel_secret: ENV['LINE_CHANNEL_SECRET'],
38
+ channel_mid: ENV['LINE_CHANNEL_MID']
39
+ )
40
+ end
41
+
42
+ post '/callback' do
43
+ signature = request.env['HTTP_X_LINE_CHANNELSIGNATURE']
44
+ unless client.certentials.validate_signature?(request.body.read, signature)
45
+ error 400 do 'Bad Request' end
46
+ end
47
+
48
+ request.body.rewind
49
+ json = JSON.parse(request.body.read)
50
+ result = json['result']
51
+
52
+ result.each do |message|
53
+ case message['eventType']
54
+ when Line::Bot::Receive::EventType::MESSAGE.to_s
55
+ client.send_text(message['content']['from'], message['content']['text'])
56
+ end
57
+ end
58
+
59
+ "OK"
60
+ end
61
+ ```
62
+
63
+ WARNING: The API will changed until it stable, and next release will provide response parser helper.
29
64
 
30
65
  ## Development
31
66
 
@@ -35,5 +70,5 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
35
70
 
36
71
  ## Contributing
37
72
 
38
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/line-bot. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
73
+ Bug reports and pull requests are welcome on GitHub at https://github.com/elct9620/line-bot. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
39
74
 
@@ -4,5 +4,8 @@ require 'line/bot/client'
4
4
  require 'line/bot/certentials'
5
5
  require 'line/bot/http'
6
6
  require 'line/bot/request'
7
- require 'line/bot/api'
7
+ require 'line/bot/response'
8
8
  require 'line/bot/event_type'
9
+ require 'line/bot/event'
10
+ require 'line/bot/message'
11
+ require 'line/bot/api'
@@ -26,7 +26,7 @@ module Line
26
26
  payload.values.all?
27
27
  end
28
28
 
29
- def validate_signature?(body = "", channel_signature)
29
+ def validate_signature(body = "", channel_signature)
30
30
  return false unless !channel_signature.nil? && valid?
31
31
 
32
32
  hash = OpenSSL::HMAC::digest(OpenSSL::Digest::SHA256.new, channel_secret, body)
@@ -10,6 +10,10 @@ module Line
10
10
  end
11
11
 
12
12
  def send_text(to_mid, message)
13
+ send_message(to_mid, Message::Text.new(text: message))
14
+ end
15
+
16
+ def send_message(to_mid, message)
13
17
  request = Request.new do |config|
14
18
  config.to_mid = to_mid
15
19
  config.certentials = @certentials
@@ -0,0 +1,46 @@
1
+ module Line
2
+ module Bot
3
+ class Event
4
+
5
+ attr_reader :event_type, :content
6
+
7
+ def initialize(options = {})
8
+ options.each do |key, value|
9
+ instance_variable_set("@#{key}", value)
10
+ end
11
+
12
+ @content = parse_content
13
+ end
14
+
15
+ def valid?
16
+ !@event_type.nil? && !@content.nil?
17
+ end
18
+
19
+ private
20
+
21
+ def parse_content
22
+ case @event_type
23
+ when Receive::EventType::MESSAGE
24
+ return parse_message_data
25
+ when Receive::EventType::OPERATION
26
+ return parse_operation_data
27
+ end
28
+ end
29
+
30
+ def parse_message_data
31
+ return if @data.nil?
32
+ case @data['contentType']
33
+ when Message::ContentType::TEXT
34
+ return Message::Text.new(text: @data['text'])
35
+ # TODO: Implement other type message type
36
+ end
37
+ end
38
+
39
+ def parse_operation_data
40
+ # TODO: Implement operation content
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+
@@ -0,0 +1,6 @@
1
+
2
+ require 'line/bot/message/content_type'
3
+ require 'line/bot/message/recipient_type'
4
+
5
+ require 'line/bot/message/base'
6
+ require 'line/bot/message/text'
@@ -0,0 +1,29 @@
1
+ module Line
2
+ module Bot
3
+ module Message
4
+ class Base < Hash
5
+ attr_reader :recipient_type
6
+
7
+ def initialize(attrs = {})
8
+ self.merge!(attrs)
9
+ end
10
+
11
+ def recipient_type
12
+ self[:recipient_type] ||= RecipientType::USER
13
+ end
14
+
15
+ def event_type
16
+ Line::Bot::EventType::MESSAGE
17
+ end
18
+
19
+ def content
20
+ raise NotImplementedError, "Should implement this method in child class"
21
+ end
22
+
23
+ def valid?
24
+ raise NotImplementedError, "Should implement this method in child class"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,16 @@
1
+ module Line
2
+ module Bot
3
+ module Message
4
+ module ContentType
5
+ TEXT = 1
6
+ IMAGE = 2
7
+ VIDEO = 3
8
+ AUDIO = 4
9
+ LOCATION = 7
10
+ STICKER = 8
11
+ CONTACT = 10
12
+ RICH_MESSAGE = 12
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ module Line
2
+ module Bot
3
+ module Message
4
+ module RecipientType
5
+ USER = 1
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ module Line
2
+ module Bot
3
+ module Message
4
+ class Text < Base
5
+ def content
6
+ {
7
+ contentType: ContentType::TEXT,
8
+ toType: recipient_type,
9
+ text: self[:text]
10
+ }
11
+ end
12
+
13
+ def valid?
14
+ !self[:text].nil?
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -17,11 +17,7 @@ module Line
17
17
  to: to,
18
18
  toChannel: API::MESSAGE_CHANNEL_ID, # Fixed value
19
19
  eventType: event_type.to_s,
20
- content: {
21
- contentType: 1,
22
- toType: 1,
23
- text: message
24
- }
20
+ content: message.content
25
21
 
26
22
  }.to_json
27
23
  end
@@ -0,0 +1,35 @@
1
+ require 'json'
2
+
3
+ module Line
4
+ module Bot
5
+ class Response < Array
6
+ def initialize(data = "")
7
+ json = JSON.parse(data)
8
+ self.concat(json['result'])
9
+ parse_event
10
+ end
11
+
12
+ private
13
+
14
+ def parse_event
15
+ self.map! do |event|
16
+ create_event(event)
17
+ end
18
+ end
19
+
20
+ def create_event(event_data)
21
+ case event_data['eventType'].to_i
22
+ when Receive::EventType::MESSAGE
23
+ type = Receive::EventType::MESSAGE
24
+ when Receive::EventType::OPERATION
25
+ type = Receive::EventType::OPERATION
26
+ end
27
+
28
+ Event.new(
29
+ event_type: type,
30
+ data: event_data['content']
31
+ )
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,5 +1,5 @@
1
1
  module Line
2
2
  module Bot
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rspec", "~> 3.0"
24
24
  spec.add_development_dependency "fuubar", "~> 2.0"
25
25
  spec.add_development_dependency "coveralls", "~> 0.8"
26
+ spec.add_development_dependency "simplecov", "~> 0.11"
27
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 0.5"
26
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: line-bot-lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - 蒼時弦也
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-24 00:00:00.000000000 Z
11
+ date: 2016-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.8'
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.11'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.11'
97
+ - !ruby/object:Gem::Dependency
98
+ name: codeclimate-test-reporter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.5'
83
111
  description: " Line Bot API usuall depend on rack but it cause newer rack cannot working
84
112
  correctly, so I create yet another library for it. "
85
113
  email:
@@ -101,9 +129,16 @@ files:
101
129
  - lib/line/bot/api.rb
102
130
  - lib/line/bot/certentials.rb
103
131
  - lib/line/bot/client.rb
132
+ - lib/line/bot/event.rb
104
133
  - lib/line/bot/event_type.rb
105
134
  - lib/line/bot/http.rb
135
+ - lib/line/bot/message.rb
136
+ - lib/line/bot/message/base.rb
137
+ - lib/line/bot/message/content_type.rb
138
+ - lib/line/bot/message/recipient_type.rb
139
+ - lib/line/bot/message/text.rb
106
140
  - lib/line/bot/request.rb
141
+ - lib/line/bot/response.rb
107
142
  - lib/line/bot/version.rb
108
143
  - line-bot.gemspec
109
144
  homepage: https://github.com/elct9620/line-bot