sana 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/.gitignore +10 -0
- data/.rspec +3 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/README.md +103 -0
- data/Rakefile +9 -0
- data/lib/sana.rb +134 -0
- data/sana.gemspec +24 -0
- metadata +150 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a0ccc534b79810c894577efd34a818fb4444d184
|
4
|
+
data.tar.gz: c7509bff9e570c8f42d41a2bb0b8844f130f4246
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5bdbf47991be27e28dde56f72a0f7c3531e9c01c1b75df09f6ceb113844178fa9c1a21a4e86b8853d50d0715058b5c668ee9096272c654970fa785476d126895
|
7
|
+
data.tar.gz: 20a8cbd00fe4f0688cb6bffd5918fe392af224c79eb24d51c41cdd90e75884166dea39e2334f8ac355b00120d39d84d7789da9b4602fca3a37aee80da29e057a
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
# [Sana](https://github.com/Narazaka/sana)
|
2
|
+
|
3
|
+
[](https://rubygems.org/gems/sana)
|
4
|
+
[](https://rubygems.org/gems/sana)
|
5
|
+
[](https://gemnasium.com/Narazaka/sana)
|
6
|
+
[](http://inch-ci.org/github/Narazaka/sana)
|
7
|
+
[](https://travis-ci.org/Narazaka/sana)
|
8
|
+
[](https://codecov.io/github/Narazaka/sana?branch=master)
|
9
|
+
[](https://codeclimate.com/github/Narazaka/sana)
|
10
|
+
|
11
|
+
Ukagaka SHIORI subsystem 'Sana'
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem 'sana'
|
19
|
+
```
|
20
|
+
|
21
|
+
And then execute:
|
22
|
+
|
23
|
+
$ bundle
|
24
|
+
|
25
|
+
Or install it yourself as:
|
26
|
+
|
27
|
+
$ gem install sana
|
28
|
+
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
Example of basic SHIORI subsystem with SHIOLINK.DLL protocol.
|
32
|
+
|
33
|
+
make main.rb like below...
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
require 'sana'
|
37
|
+
require 'shiolink'
|
38
|
+
require 'json'
|
39
|
+
|
40
|
+
def _load(dirpath)
|
41
|
+
if File.exist?("save.json")
|
42
|
+
$save = JSON.parse(File.read("save.json"))
|
43
|
+
else
|
44
|
+
$save = {}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def _unload
|
49
|
+
File.write("save.json", JSON.dump($save))
|
50
|
+
exit
|
51
|
+
end
|
52
|
+
|
53
|
+
def version r; '0.0.1'; end
|
54
|
+
def name r; 'Sana'; end
|
55
|
+
def craftman r; 'Narazaka'; end
|
56
|
+
def craftmanw r; '奈良阪'; end
|
57
|
+
|
58
|
+
def OnBoot r
|
59
|
+
unless $save['boot_count']
|
60
|
+
$save['boot_count'] = 1
|
61
|
+
else
|
62
|
+
$save['boot_count'] += 1
|
63
|
+
end
|
64
|
+
'\h\s[0]おはよう。\w9\u\s[10]こんばんは。\e'
|
65
|
+
end
|
66
|
+
|
67
|
+
def OnClose r
|
68
|
+
if r.Reference0 == 'user'
|
69
|
+
'\h\s[0]またね。\w9\-'
|
70
|
+
else
|
71
|
+
'\h\s[0]おわー!?\w9\-'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
include Sana::ResponseHelper
|
76
|
+
|
77
|
+
sana = Sana.new
|
78
|
+
shiolink = Shiolink.new(sana.method(:load), sana.method(:unload), sana.method(:request))
|
79
|
+
shiolink.start
|
80
|
+
```
|
81
|
+
|
82
|
+
then...
|
83
|
+
|
84
|
+
```
|
85
|
+
ruby main.rb
|
86
|
+
```
|
87
|
+
|
88
|
+
or make SHIOLINK.INI and run with any basewares...
|
89
|
+
|
90
|
+
```
|
91
|
+
[SHIOLINK]
|
92
|
+
commandline = ruby ./main.rb
|
93
|
+
|
94
|
+
charmode = UTF-8
|
95
|
+
```
|
96
|
+
|
97
|
+
## API
|
98
|
+
|
99
|
+
[API Document](http://www.rubydoc.info/github/Narazaka/sana)
|
100
|
+
|
101
|
+
## License
|
102
|
+
|
103
|
+
This is released under [MIT License](http://narazaka.net/license/MIT?2016).
|
data/Rakefile
ADDED
data/lib/sana.rb
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
require 'shioruby'
|
2
|
+
|
3
|
+
# Ukagaka SHIORI submodule 'Sana'
|
4
|
+
class Sana
|
5
|
+
# the ghost/master path
|
6
|
+
attr_reader :dirpath
|
7
|
+
# events object
|
8
|
+
attr_reader :events
|
9
|
+
# default Charset header value
|
10
|
+
attr_accessor :charset
|
11
|
+
# default Sender header value
|
12
|
+
attr_accessor :sender
|
13
|
+
|
14
|
+
# initialize Sana
|
15
|
+
# @param [Object] events event definitions
|
16
|
+
def initialize(events = Kernel)
|
17
|
+
@events = events
|
18
|
+
@charset = 'UTF-8'
|
19
|
+
@sender = 'Sana'
|
20
|
+
end
|
21
|
+
|
22
|
+
# SHIORI load()
|
23
|
+
# @param [String] dirpath the ghost/master directory path
|
24
|
+
def load(dirpath)
|
25
|
+
@dirpath = dirpath
|
26
|
+
begin
|
27
|
+
events.send(:_load, dirpath)
|
28
|
+
rescue NoMethodError
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# SHIORI unload()
|
33
|
+
def unload
|
34
|
+
begin
|
35
|
+
events.send(:_unload)
|
36
|
+
rescue NoMethodError
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# SHIORI request()
|
41
|
+
# @param [String] request_str SHIORI Request
|
42
|
+
# @return [String] SHIORI Response
|
43
|
+
def request(request_str)
|
44
|
+
request = Shioruby.parse_request(request_str)
|
45
|
+
if request.version[0] == '2'
|
46
|
+
return build_response Sana::ResponseHelper.bad_request
|
47
|
+
end
|
48
|
+
begin
|
49
|
+
response = events.send(request.ID, request)
|
50
|
+
rescue NoMethodError
|
51
|
+
end
|
52
|
+
case response
|
53
|
+
when OpenStruct
|
54
|
+
build_response response
|
55
|
+
else
|
56
|
+
build_response Sana::ResponseHelper.ok response
|
57
|
+
end
|
58
|
+
rescue => error
|
59
|
+
case error
|
60
|
+
when Shioruby::ParseError
|
61
|
+
build_response Sana::ResponseHelper.bad_request
|
62
|
+
else
|
63
|
+
build_response Sana::ResponseHelper.internal_server_error
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
def build_response(response)
|
69
|
+
response.version ||= '3.0'
|
70
|
+
response.Charset = response.Charset || charset
|
71
|
+
response.Sender = response.Sender || sender
|
72
|
+
Shioruby.build_response(response)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class Sana
|
77
|
+
# SHIORI Response struct build helper
|
78
|
+
module ResponseHelper
|
79
|
+
# empty response struct
|
80
|
+
# @return [OpenStruct] empty SHIORI Response struct
|
81
|
+
def response
|
82
|
+
OpenStruct.new
|
83
|
+
end
|
84
|
+
|
85
|
+
# normal response (200 OK or 204 No Content)
|
86
|
+
# @param [String] value Value header content
|
87
|
+
# @param [String] to Reference0 header content (for communication)
|
88
|
+
# @return [OpenStruct] SHIORI Response struct
|
89
|
+
def ok(value = nil, to = nil)
|
90
|
+
if value.to_s.size != 0
|
91
|
+
response = OpenStruct.new({
|
92
|
+
code: 200,
|
93
|
+
Value: value.to_s,
|
94
|
+
})
|
95
|
+
if to
|
96
|
+
response.Reference0 = to.to_s
|
97
|
+
end
|
98
|
+
response
|
99
|
+
else
|
100
|
+
no_content
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# 204 No Content
|
105
|
+
# @return [OpenStruct] SHIORI Response struct
|
106
|
+
def no_content
|
107
|
+
OpenStruct.new({
|
108
|
+
code: 204,
|
109
|
+
})
|
110
|
+
end
|
111
|
+
|
112
|
+
# 400 Bad Request
|
113
|
+
# @return [OpenStruct] SHIORI Response struct
|
114
|
+
def bad_request
|
115
|
+
OpenStruct.new({
|
116
|
+
code: 400,
|
117
|
+
})
|
118
|
+
end
|
119
|
+
|
120
|
+
# 500 Internal Server Error
|
121
|
+
# @return [OpenStruct] SHIORI Response struct
|
122
|
+
def internal_server_error
|
123
|
+
OpenStruct.new({
|
124
|
+
code: 500,
|
125
|
+
})
|
126
|
+
end
|
127
|
+
|
128
|
+
module_function :response
|
129
|
+
module_function :ok
|
130
|
+
module_function :no_content
|
131
|
+
module_function :bad_request
|
132
|
+
module_function :internal_server_error
|
133
|
+
end
|
134
|
+
end
|
data/sana.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = "sana"
|
6
|
+
spec.version = "0.0.1"
|
7
|
+
spec.authors = ["Narazaka"]
|
8
|
+
spec.email = ["info@narazaka.net"]
|
9
|
+
|
10
|
+
spec.summary = %q{Ukagaka SHIORI subsystem 'Sana'}
|
11
|
+
spec.description = %q{Ukagaka SHIORI subsystem 'Sana'}
|
12
|
+
spec.homepage = "https://github.com/Narazaka/sana"
|
13
|
+
|
14
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_development_dependency "bundler", ">= 1.7.9"
|
18
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
19
|
+
spec.add_development_dependency "rspec", "~> 3.4"
|
20
|
+
spec.add_development_dependency "yard", "~> 0.8.7"
|
21
|
+
spec.add_development_dependency "simplecov", "~> 0.11"
|
22
|
+
spec.add_development_dependency "codecov", "~> 0.1"
|
23
|
+
spec.add_dependency "shioruby", ">= 0.0.1"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sana
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Narazaka
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-24 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.7.9
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.7.9
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.4'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.8.7
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.7
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.11'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.11'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: codecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: shioruby
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.0.1
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.0.1
|
111
|
+
description: Ukagaka SHIORI subsystem 'Sana'
|
112
|
+
email:
|
113
|
+
- info@narazaka.net
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rspec"
|
120
|
+
- ".travis.yml"
|
121
|
+
- Gemfile
|
122
|
+
- README.md
|
123
|
+
- Rakefile
|
124
|
+
- lib/sana.rb
|
125
|
+
- sana.gemspec
|
126
|
+
homepage: https://github.com/Narazaka/sana
|
127
|
+
licenses: []
|
128
|
+
metadata: {}
|
129
|
+
post_install_message:
|
130
|
+
rdoc_options: []
|
131
|
+
require_paths:
|
132
|
+
- lib
|
133
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
requirements: []
|
144
|
+
rubyforge_project:
|
145
|
+
rubygems_version: 2.4.5.1
|
146
|
+
signing_key:
|
147
|
+
specification_version: 4
|
148
|
+
summary: Ukagaka SHIORI subsystem 'Sana'
|
149
|
+
test_files: []
|
150
|
+
has_rdoc:
|