tamashii 0.3.6 → 0.4.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/.travis.yml +6 -0
- data/README.md +86 -14
- data/lib/tamashii/server.rb +6 -1
- data/lib/tamashii/server/config.rb +4 -4
- data/lib/tamashii/version.rb +1 -1
- data/tamashii.gemspec +9 -8
- metadata +46 -33
- data/lib/tamashii/configurable.rb +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ed79e176bb8b330675dcc17af8432771df1701b
|
4
|
+
data.tar.gz: 111bcf61a0685a6dba7c31146bf0ceb6a5582d6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54c52fe0e4afaea67fc83c1cf6a9105457f6126f3a3ceaeabf730d1e50fb4a91a399afbeb8969658e994a067239bdc562b4539bdb4e7a7b43c45c1c8cc2cb9f9
|
7
|
+
data.tar.gz: 0b76ec9201d43b852afeca20faf1ae02651f774d2c481de52849cc95118c8d311e4a5908a9433ccb36005684886148832b8513c078b6c12851e96a4b87d0912f
|
data/.travis.yml
CHANGED
@@ -3,3 +3,9 @@ cache: bundler
|
|
3
3
|
language: ruby
|
4
4
|
rvm:
|
5
5
|
- 2.4.1
|
6
|
+
before_script:
|
7
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
8
|
+
- chmod +x ./cc-test-reporter
|
9
|
+
- ./cc-test-reporter before-build
|
10
|
+
after_script:
|
11
|
+
- if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT; fi
|
data/README.md
CHANGED
@@ -1,38 +1,110 @@
|
|
1
|
-
Tamashii [](https://badge.fury.io/rb/tamashii) [](https://badge.fury.io/rb/tamashii) [](https://travis-ci.org/tamashii-io/tamashii) [](https://codeclimate.com/github/tamashii-io/tamashii/coverage) [](https://codeclimate.com/github/tamashii-io/tamashii)
|
2
2
|
===
|
3
3
|
|
4
|
+
Tamashii is a package designed for IoT. You can write the WebSocket server and client easily by using this gem.
|
4
5
|
|
5
|
-
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/tamashii`. To experiment with that code, run `bin/console` for an interactive prompt.
|
6
|
-
|
7
|
-
TODO: Delete this and the text above, and describe your gem
|
8
6
|
|
9
7
|
## Installation
|
10
8
|
|
11
|
-
Add
|
9
|
+
Add the following code to your `Gemfile`
|
12
10
|
|
13
11
|
```ruby
|
14
12
|
gem 'tamashii'
|
15
13
|
```
|
16
14
|
|
17
15
|
And then execute:
|
16
|
+
```ruby
|
17
|
+
$ bundle install
|
18
|
+
```
|
19
|
+
|
20
|
+
Or install it yourself with:
|
21
|
+
```ruby
|
22
|
+
$ gem install tamashii
|
23
|
+
```
|
18
24
|
|
19
|
-
|
25
|
+
## Usage
|
20
26
|
|
21
|
-
|
27
|
+
There are two section in Tamashii, Server and Client, is responsible for the WebSocket server and client, respectively.
|
22
28
|
|
23
|
-
|
29
|
+
### Server
|
24
30
|
|
25
|
-
|
31
|
+
Server section is a server designed based on Rack, it can not only be easily compatible with the web server, such as Puma, Passenger, but also be used as a module in the Rails and other projects.
|
32
|
+
|
33
|
+
To start the server, generate `config.ru` and add the following code to it.
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
require 'tamashii/server'
|
37
|
+
|
38
|
+
run Tamashii::Server::Base.new
|
39
|
+
```
|
40
|
+
|
41
|
+
Then, you can start the server with:
|
42
|
+
|
43
|
+
$ rackup
|
44
|
+
If you want to start the server with other web server, such as Puma:
|
45
|
+
|
46
|
+
$ puma
|
47
|
+
|
48
|
+
> You can refer to the project in [tamashii-manager](https://github.com/5xRuby/tamashii-manager) in the IoT server application.
|
49
|
+
|
50
|
+
#### Connection
|
51
|
+
|
52
|
+
In Tamashii, we only need to focus on how to connect with WebSocket users to exchange information, on the process of multi-process web server problems have been resolved in Tamashii.
|
53
|
+
|
54
|
+
We can create a `Client` object to handle the behavior of each user.
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
Tamashii::Server.config do |config|
|
58
|
+
config.connection_class = Client
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
In `Client` , there are four events that need to be handled.
|
63
|
+
|
64
|
+
* `on_open` : when the user is connected to the server
|
65
|
+
* `on_message` : when the server receives the message from user
|
66
|
+
* `on_error` : when the server gets an error
|
67
|
+
* `on_close` : when the connection is shut down
|
68
|
+
|
69
|
+
In most cases, we only need to deal with parts of `on_message` , the other events can be handled as needed.
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
class Client
|
73
|
+
def on_message(data)
|
74
|
+
# Processing for the received Data (Binary)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
```
|
78
|
+
|
79
|
+
By default Tamashii will broadcast the received message to other clients automatically.
|
80
|
+
|
81
|
+
|
82
|
+
### Client
|
83
|
+
|
84
|
+
The client is in another repository: [tamashii-client](https://github.com/tamashii-io/tamashii-client)
|
26
85
|
|
27
|
-
TODO: Write usage instructions here
|
28
86
|
|
29
87
|
## Development
|
30
88
|
|
31
|
-
|
89
|
+
To get the source code
|
90
|
+
|
91
|
+
$ git clone git@github.com:tamashii-io/tamashii.git
|
92
|
+
|
93
|
+
Initialize the development environment
|
94
|
+
|
95
|
+
$ ./bin/setup
|
96
|
+
|
97
|
+
Run the spec
|
98
|
+
|
99
|
+
$ rspec
|
100
|
+
|
101
|
+
Installation the version of development on localhost
|
102
|
+
|
103
|
+
$ bundle exec rake install
|
32
104
|
|
33
|
-
|
105
|
+
## Contribution
|
34
106
|
|
35
|
-
|
107
|
+
Please report to us on [GitHub](https://github.com/tamashii-io/tamashii) if there is any bug or suggested modified.
|
36
108
|
|
37
|
-
|
109
|
+
The project was developed by [5xruby Inc.](https://5xruby.tw/)
|
38
110
|
|
data/lib/tamashii/server.rb
CHANGED
@@ -6,10 +6,11 @@ require 'logger/colors'
|
|
6
6
|
require 'websocket/driver'
|
7
7
|
require 'rack'
|
8
8
|
require 'nio'
|
9
|
-
require 'thread'
|
10
9
|
require 'concurrent'
|
11
10
|
require 'redis'
|
12
11
|
|
12
|
+
require 'tamashii/hookable'
|
13
|
+
|
13
14
|
module Tamashii
|
14
15
|
# :nodoc:
|
15
16
|
module Server
|
@@ -33,3 +34,7 @@ module Tamashii
|
|
33
34
|
end
|
34
35
|
end
|
35
36
|
end
|
37
|
+
|
38
|
+
Tamashii::Hook.after(:config) do |config|
|
39
|
+
config.register(:server, Tamashii::Server.config)
|
40
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'tamashii/
|
3
|
+
require 'tamashii/config'
|
4
4
|
|
5
5
|
module Tamashii
|
6
6
|
module Server
|
@@ -8,9 +8,9 @@ module Tamashii
|
|
8
8
|
class Config
|
9
9
|
include Tamashii::Configurable
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
config :connection_class, default: Connection::Base
|
12
|
+
config :pubsub_class, default: Subscription::Redis
|
13
|
+
config :log_path, default: STDOUT
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
data/lib/tamashii/version.rb
CHANGED
data/tamashii.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
lib = File.expand_path('../lib', __FILE__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
@@ -31,19 +31,20 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.require_paths = ['lib']
|
32
32
|
|
33
33
|
spec.add_runtime_dependency "concurrent-ruby"
|
34
|
+
spec.add_runtime_dependency "logger-colors"
|
35
|
+
spec.add_runtime_dependency "nio4r"
|
34
36
|
spec.add_runtime_dependency "rack"
|
37
|
+
spec.add_runtime_dependency "redis"
|
35
38
|
spec.add_runtime_dependency "tamashii-common"
|
39
|
+
spec.add_runtime_dependency "tamashii-config"
|
40
|
+
spec.add_runtime_dependency "tamashii-hookable"
|
36
41
|
spec.add_runtime_dependency "websocket-driver"
|
37
|
-
spec.add_runtime_dependency "nio4r"
|
38
|
-
spec.add_runtime_dependency "redis"
|
39
|
-
spec.add_runtime_dependency "logger-colors"
|
40
42
|
|
41
43
|
spec.add_development_dependency 'bundler', '~> 1.14'
|
44
|
+
spec.add_development_dependency "codeclimate-test-reporter"
|
45
|
+
spec.add_development_dependency "guard-rspec"
|
46
|
+
spec.add_development_dependency "rack-test"
|
42
47
|
spec.add_development_dependency 'rake', '~> 10.0'
|
43
48
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
44
|
-
spec.add_development_dependency "rack-test"
|
45
49
|
spec.add_development_dependency "simplecov"
|
46
|
-
spec.add_development_dependency "guard"
|
47
|
-
spec.add_development_dependency "guard-rspec"
|
48
|
-
spec.add_development_dependency "codeclimate-test-reporter"
|
49
50
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tamashii
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 蒼時弦也
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-11-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: concurrent-ruby
|
@@ -27,7 +27,7 @@ dependencies:
|
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: '0'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
|
-
name:
|
30
|
+
name: logger-colors
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - ">="
|
@@ -41,7 +41,7 @@ dependencies:
|
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '0'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
44
|
+
name: nio4r
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - ">="
|
@@ -55,7 +55,7 @@ dependencies:
|
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
57
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
58
|
+
name: rack
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - ">="
|
@@ -69,7 +69,7 @@ dependencies:
|
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: redis
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - ">="
|
@@ -83,7 +83,7 @@ dependencies:
|
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
86
|
+
name: tamashii-common
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
89
|
- - ">="
|
@@ -97,7 +97,7 @@ dependencies:
|
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
100
|
+
name: tamashii-config
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
102
102
|
requirements:
|
103
103
|
- - ">="
|
@@ -111,49 +111,49 @@ dependencies:
|
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
|
-
name:
|
114
|
+
name: tamashii-hookable
|
115
115
|
requirement: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- - "
|
117
|
+
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
|
-
version: '
|
120
|
-
type: :
|
119
|
+
version: '0'
|
120
|
+
type: :runtime
|
121
121
|
prerelease: false
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
|
-
- - "
|
124
|
+
- - ">="
|
125
125
|
- !ruby/object:Gem::Version
|
126
|
-
version: '
|
126
|
+
version: '0'
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
128
|
+
name: websocket-driver
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
|
-
- - "
|
131
|
+
- - ">="
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version: '
|
134
|
-
type: :
|
133
|
+
version: '0'
|
134
|
+
type: :runtime
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
|
-
- - "
|
138
|
+
- - ">="
|
139
139
|
- !ruby/object:Gem::Version
|
140
|
-
version: '
|
140
|
+
version: '0'
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
|
-
name:
|
142
|
+
name: bundler
|
143
143
|
requirement: !ruby/object:Gem::Requirement
|
144
144
|
requirements:
|
145
145
|
- - "~>"
|
146
146
|
- !ruby/object:Gem::Version
|
147
|
-
version: '
|
147
|
+
version: '1.14'
|
148
148
|
type: :development
|
149
149
|
prerelease: false
|
150
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
151
|
requirements:
|
152
152
|
- - "~>"
|
153
153
|
- !ruby/object:Gem::Version
|
154
|
-
version: '
|
154
|
+
version: '1.14'
|
155
155
|
- !ruby/object:Gem::Dependency
|
156
|
-
name:
|
156
|
+
name: codeclimate-test-reporter
|
157
157
|
requirement: !ruby/object:Gem::Requirement
|
158
158
|
requirements:
|
159
159
|
- - ">="
|
@@ -167,7 +167,7 @@ dependencies:
|
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: '0'
|
169
169
|
- !ruby/object:Gem::Dependency
|
170
|
-
name:
|
170
|
+
name: guard-rspec
|
171
171
|
requirement: !ruby/object:Gem::Requirement
|
172
172
|
requirements:
|
173
173
|
- - ">="
|
@@ -181,7 +181,7 @@ dependencies:
|
|
181
181
|
- !ruby/object:Gem::Version
|
182
182
|
version: '0'
|
183
183
|
- !ruby/object:Gem::Dependency
|
184
|
-
name:
|
184
|
+
name: rack-test
|
185
185
|
requirement: !ruby/object:Gem::Requirement
|
186
186
|
requirements:
|
187
187
|
- - ">="
|
@@ -195,21 +195,35 @@ dependencies:
|
|
195
195
|
- !ruby/object:Gem::Version
|
196
196
|
version: '0'
|
197
197
|
- !ruby/object:Gem::Dependency
|
198
|
-
name:
|
198
|
+
name: rake
|
199
199
|
requirement: !ruby/object:Gem::Requirement
|
200
200
|
requirements:
|
201
|
-
- - "
|
201
|
+
- - "~>"
|
202
202
|
- !ruby/object:Gem::Version
|
203
|
-
version: '0'
|
203
|
+
version: '10.0'
|
204
204
|
type: :development
|
205
205
|
prerelease: false
|
206
206
|
version_requirements: !ruby/object:Gem::Requirement
|
207
207
|
requirements:
|
208
|
-
- - "
|
208
|
+
- - "~>"
|
209
209
|
- !ruby/object:Gem::Version
|
210
|
-
version: '0'
|
210
|
+
version: '10.0'
|
211
211
|
- !ruby/object:Gem::Dependency
|
212
|
-
name:
|
212
|
+
name: rspec
|
213
|
+
requirement: !ruby/object:Gem::Requirement
|
214
|
+
requirements:
|
215
|
+
- - "~>"
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '3.0'
|
218
|
+
type: :development
|
219
|
+
prerelease: false
|
220
|
+
version_requirements: !ruby/object:Gem::Requirement
|
221
|
+
requirements:
|
222
|
+
- - "~>"
|
223
|
+
- !ruby/object:Gem::Version
|
224
|
+
version: '3.0'
|
225
|
+
- !ruby/object:Gem::Dependency
|
226
|
+
name: simplecov
|
213
227
|
requirement: !ruby/object:Gem::Requirement
|
214
228
|
requirements:
|
215
229
|
- - ">="
|
@@ -244,7 +258,6 @@ files:
|
|
244
258
|
- bin/console
|
245
259
|
- bin/setup
|
246
260
|
- lib/tamashii.rb
|
247
|
-
- lib/tamashii/configurable.rb
|
248
261
|
- lib/tamashii/server.rb
|
249
262
|
- lib/tamashii/server/base.rb
|
250
263
|
- lib/tamashii/server/client.rb
|
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Tamashii
|
4
|
-
# :nodoc:
|
5
|
-
module Configurable
|
6
|
-
# :nodoc:
|
7
|
-
module ClassMethods
|
8
|
-
def register(key, default, &_block)
|
9
|
-
@defaults ||= {}
|
10
|
-
return @defaults[key.to_sym] = yield if block_given?
|
11
|
-
@defaults[key.to_sym] = default
|
12
|
-
end
|
13
|
-
|
14
|
-
def exist?(key)
|
15
|
-
@defaults.key?(key.to_sym) || @defaults.key?(key.to_s[0..-2].to_sym)
|
16
|
-
end
|
17
|
-
|
18
|
-
def default_value(key)
|
19
|
-
@defaults[key.to_sym]
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.included(klass)
|
24
|
-
klass.extend ClassMethods
|
25
|
-
end
|
26
|
-
|
27
|
-
def config(key, value = nil, &_block)
|
28
|
-
@configs ||= {}
|
29
|
-
return unless self.class.exist?(key)
|
30
|
-
return @configs[key.to_sym] || self.class.default_value(key) if value.nil?
|
31
|
-
return @configs[key.to_sym] = yield if block_given?
|
32
|
-
@configs[key.to_sym] = value
|
33
|
-
end
|
34
|
-
|
35
|
-
def respond_to_missing?(name, _all = false)
|
36
|
-
self.class.exist?(name)
|
37
|
-
end
|
38
|
-
|
39
|
-
def method_missing(name, *args, &block)
|
40
|
-
return super unless self.class.exist?(name)
|
41
|
-
return config(name.to_sym, nil, &block) unless name.to_s.end_with?('=')
|
42
|
-
config(name.to_s[0..-2].to_sym, args.first)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|