docomoru 0.0.3 → 0.1.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/CHANGELOG.md +3 -0
- data/README.md +30 -2
- data/bin/docomoru +7 -0
- data/docomoru.gemspec +3 -0
- data/images/cli.png +0 -0
- data/lib/docomoru/arguments.rb +131 -0
- data/lib/docomoru/command_builder.rb +25 -0
- data/lib/docomoru/commands/base.rb +13 -0
- data/lib/docomoru/commands/error.rb +11 -0
- data/lib/docomoru/commands/request.rb +29 -0
- data/lib/docomoru/response.rb +5 -0
- data/lib/docomoru/response_renderer.rb +54 -0
- data/lib/docomoru/version.rb +1 -1
- data/lib/docomoru.rb +1 -0
- metadata +53 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d04d819418e0183a2bde1d8d85ee096a91f6c1d6
|
4
|
+
data.tar.gz: f49da17d964b80a229105e960ed4e319729648c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8ec6d380bbd1cebe49f39366f4ff3035dda5ab3ae1ba0211e4e0258b02e24e57da31dee75aa2be7e80b6b4d1fb0d0546ee8f5d3dcec5eadb2d3c7de2bf6ee0c
|
7
|
+
data.tar.gz: 270de75d628caa1f2f35006c3da903b21370e6917e21b41eb51ad8d4ef9f9b28732ce41dd7201b9248fcbe33d8b08a39a9889371398bec6de77fe32e33bf111d
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,16 @@
|
|
1
1
|
# Docomoru
|
2
2
|
Client library for DoCoMo API written in Ruby.
|
3
3
|
|
4
|
-
##
|
5
|
-
|
4
|
+
## Install
|
5
|
+
Note: requires Ruby 2.0.0 or higher.
|
6
|
+
|
7
|
+
```sh
|
8
|
+
gem install docomoru
|
9
|
+
```
|
10
|
+
|
11
|
+
## Library
|
12
|
+
Currenty docomoru is supporting [Dialogue API](https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_docs_id=3)
|
13
|
+
(You need DoCoMo API Key).
|
6
14
|
|
7
15
|
```rb
|
8
16
|
client = Docomoru::Client.new(api_key: ENV["DOCOMO_API_KEY"])
|
@@ -23,3 +31,23 @@ response.body #=> {
|
|
23
31
|
"context" => "dXIgT9u1_XKfO1QbaVkAGQ"
|
24
32
|
}
|
25
33
|
```
|
34
|
+
|
35
|
+
## CLI
|
36
|
+
`docomoru` executable is bundled to call use Docomoru from CLI.
|
37
|
+
|
38
|
+
```
|
39
|
+
$ docomoru <method> <arguments> [options]
|
40
|
+
| | |
|
41
|
+
| | `-- -a, --api-key (or use DOCOMO_API_KEY env)
|
42
|
+
| | -h, --help
|
43
|
+
| | --header
|
44
|
+
| | --no-body
|
45
|
+
| |
|
46
|
+
| `------------------------------ required arguments for the method
|
47
|
+
|
|
48
|
+
`----------------------------------------- method name
|
49
|
+
|
50
|
+
$ docomoru create_dialogue Gemになってみた感想はどうですか
|
51
|
+
```
|
52
|
+
|
53
|
+

|
data/bin/docomoru
ADDED
data/docomoru.gemspec
CHANGED
@@ -19,6 +19,9 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.add_dependency "activesupport"
|
20
20
|
spec.add_dependency "faraday"
|
21
21
|
spec.add_dependency "faraday_middleware"
|
22
|
+
spec.add_dependency "json"
|
23
|
+
spec.add_dependency "rack"
|
24
|
+
spec.add_dependency "slop"
|
22
25
|
spec.add_development_dependency "bundler", "~> 1.7"
|
23
26
|
spec.add_development_dependency "pry"
|
24
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
data/images/cli.png
ADDED
Binary file
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require "json"
|
2
|
+
require "slop"
|
3
|
+
|
4
|
+
module Docomoru
|
5
|
+
class Arguments
|
6
|
+
def initialize(argv)
|
7
|
+
@argv = argv
|
8
|
+
end
|
9
|
+
|
10
|
+
def api_key
|
11
|
+
slop_options["api-key"] || ENV["DOCOMO_API_KEY"]
|
12
|
+
end
|
13
|
+
|
14
|
+
def arguments
|
15
|
+
parsed_argv_data[:arguments]
|
16
|
+
end
|
17
|
+
|
18
|
+
def error_message
|
19
|
+
slop_options.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
def headers
|
23
|
+
parsed_argv_data[:headers]
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_name
|
27
|
+
ARGV[0]
|
28
|
+
end
|
29
|
+
|
30
|
+
def params
|
31
|
+
params_from_stdin.merge(parsed_argv_data[:params])
|
32
|
+
end
|
33
|
+
|
34
|
+
def show_body
|
35
|
+
!slop_options["no-body"]
|
36
|
+
end
|
37
|
+
|
38
|
+
def show_header
|
39
|
+
slop_options["header"]
|
40
|
+
end
|
41
|
+
|
42
|
+
def valid?
|
43
|
+
has_valid_slop_options? && has_valid_method_name? && has_valid_arguments? &&
|
44
|
+
!has_invalid_json_input? && has_api_key?
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def has_api_key?
|
50
|
+
!!api_key
|
51
|
+
end
|
52
|
+
|
53
|
+
def has_input_from_stdin?
|
54
|
+
has_pipe_input? || has_redirect_input?
|
55
|
+
end
|
56
|
+
|
57
|
+
def has_invalid_json_input?
|
58
|
+
params_from_stdin
|
59
|
+
false
|
60
|
+
rescue JSON::ParserError
|
61
|
+
true
|
62
|
+
end
|
63
|
+
|
64
|
+
def has_pipe_input?
|
65
|
+
File.pipe?(STDIN)
|
66
|
+
end
|
67
|
+
|
68
|
+
def has_redirect_input?
|
69
|
+
File.select([STDIN], [], [], 0) != nil
|
70
|
+
end
|
71
|
+
|
72
|
+
def has_valid_arguments?
|
73
|
+
-(Client.instance_method(method_name).arity) - 1 == arguments.length
|
74
|
+
end
|
75
|
+
|
76
|
+
def has_valid_method_name?
|
77
|
+
!method_name.nil? && Client.instance_methods.include?(method_name.to_sym)
|
78
|
+
end
|
79
|
+
|
80
|
+
def has_valid_slop_options?
|
81
|
+
!slop_options["help"]
|
82
|
+
rescue
|
83
|
+
false
|
84
|
+
end
|
85
|
+
|
86
|
+
def params_from_stdin
|
87
|
+
@params_from_stdin ||= begin
|
88
|
+
if has_input_from_stdin?
|
89
|
+
JSON.parse(STDIN.read)
|
90
|
+
else
|
91
|
+
{}
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def parsed_argv_data
|
97
|
+
@parsed_argv_data ||= begin
|
98
|
+
params = {}
|
99
|
+
headers = {}
|
100
|
+
arguments = []
|
101
|
+
ARGV[1..-1].each do |section|
|
102
|
+
case
|
103
|
+
when /(?<key>.+):(?<value>[^=]+)/ =~ section
|
104
|
+
headers[key] = value
|
105
|
+
when /(?<key>.+):=(?<value>.+)/ =~ section
|
106
|
+
params[key] = JSON.parse(%<{"key":#{value}}>)["key"]
|
107
|
+
when /(?<key>.+)=(?<value>.+)/ =~ section
|
108
|
+
params[key] = value
|
109
|
+
else
|
110
|
+
arguments << section
|
111
|
+
end
|
112
|
+
end
|
113
|
+
{
|
114
|
+
arguments: arguments,
|
115
|
+
headers: headers,
|
116
|
+
params: params,
|
117
|
+
}
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def slop_options
|
122
|
+
@slop_options ||= Slop.parse!(@argv) do
|
123
|
+
banner "Usage: docomoru <method> [arguments] [headers|params] [options]"
|
124
|
+
on "a", "api-key=", "Pass API Key or use DOCOMO_API_KEY instead"
|
125
|
+
on "h", "help", "Display help message"
|
126
|
+
on "header", "Show response header"
|
127
|
+
on "no-body", "Hide response body"
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "docomoru/arguments"
|
2
|
+
require "docomoru/commands/error"
|
3
|
+
require "docomoru/commands/request"
|
4
|
+
|
5
|
+
module Docomoru
|
6
|
+
class CommandBuilder
|
7
|
+
def initialize(argv)
|
8
|
+
@argv = argv
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
if arguments.valid?
|
13
|
+
Commands::Request.new(arguments)
|
14
|
+
else
|
15
|
+
Commands::Error.new(arguments)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def arguments
|
22
|
+
@arguments ||= Arguments.new(@argv)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "docomoru/client"
|
2
|
+
require "docomoru/commands/base"
|
3
|
+
require "docomoru/response_renderer"
|
4
|
+
|
5
|
+
module Docomoru
|
6
|
+
module Commands
|
7
|
+
class Request < Base
|
8
|
+
def call
|
9
|
+
response = client.send(
|
10
|
+
@arguments.method_name,
|
11
|
+
*@arguments.arguments,
|
12
|
+
@arguments.params,
|
13
|
+
@arguments.headers,
|
14
|
+
)
|
15
|
+
print ResponseRenderer.new(
|
16
|
+
response,
|
17
|
+
show_body: @arguments.show_body,
|
18
|
+
show_header: @arguments.show_header,
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def client
|
25
|
+
Client.new(api_key: @arguments.api_key)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/docomoru/response.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "active_support/core_ext/string/inflections"
|
2
|
+
require "rack/utils"
|
2
3
|
|
3
4
|
module Docomoru
|
4
5
|
class Response
|
@@ -21,5 +22,9 @@ module Docomoru
|
|
21
22
|
def status
|
22
23
|
@raw_status
|
23
24
|
end
|
25
|
+
|
26
|
+
def status_message
|
27
|
+
Rack::Utils::HTTP_STATUS_CODES[status]
|
28
|
+
end
|
24
29
|
end
|
25
30
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "active_support/core_ext/string/strip"
|
2
|
+
require "json"
|
3
|
+
|
4
|
+
module Docomoru
|
5
|
+
class ResponseRenderer
|
6
|
+
def initialize(response, show_header: nil, show_body: nil)
|
7
|
+
@response = response
|
8
|
+
@show_body = show_body
|
9
|
+
@show_header = show_header
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
template % {
|
14
|
+
status: status,
|
15
|
+
headers: headers,
|
16
|
+
body: body,
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def body
|
23
|
+
JSON.pretty_generate(@response.body) + "\n"
|
24
|
+
end
|
25
|
+
|
26
|
+
def headers
|
27
|
+
@response.headers.sort_by do |key, value|
|
28
|
+
key
|
29
|
+
end.map do |key, value|
|
30
|
+
"%{key}: %{value}" % {
|
31
|
+
key: key.split("-").map(&:camelize).join("-"),
|
32
|
+
value: value,
|
33
|
+
}
|
34
|
+
end.join("\n")
|
35
|
+
end
|
36
|
+
|
37
|
+
def status
|
38
|
+
"#{@response.status} #{@response.status_message}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def template
|
42
|
+
str = ""
|
43
|
+
str << <<-EOS.strip_heredoc if @show_header
|
44
|
+
HTTP/1.1 %{status}
|
45
|
+
%{headers}
|
46
|
+
EOS
|
47
|
+
if @show_body
|
48
|
+
str << "\n" if @show_header
|
49
|
+
str << "%{body}"
|
50
|
+
end
|
51
|
+
str
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/docomoru/version.rb
CHANGED
data/lib/docomoru.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docomoru
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Nakamura
|
@@ -52,6 +52,48 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rack
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: slop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
98
|
name: bundler
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,7 +139,8 @@ dependencies:
|
|
97
139
|
description:
|
98
140
|
email:
|
99
141
|
- r7kamura@gmail.com
|
100
|
-
executables:
|
142
|
+
executables:
|
143
|
+
- docomoru
|
101
144
|
extensions: []
|
102
145
|
extra_rdoc_files: []
|
103
146
|
files:
|
@@ -107,11 +150,19 @@ files:
|
|
107
150
|
- LICENSE.txt
|
108
151
|
- README.md
|
109
152
|
- Rakefile
|
153
|
+
- bin/docomoru
|
110
154
|
- docomoru.gemspec
|
155
|
+
- images/cli.png
|
111
156
|
- lib/docomoru.rb
|
157
|
+
- lib/docomoru/arguments.rb
|
112
158
|
- lib/docomoru/client.rb
|
159
|
+
- lib/docomoru/command_builder.rb
|
160
|
+
- lib/docomoru/commands/base.rb
|
161
|
+
- lib/docomoru/commands/error.rb
|
162
|
+
- lib/docomoru/commands/request.rb
|
113
163
|
- lib/docomoru/dialogue_methods.rb
|
114
164
|
- lib/docomoru/response.rb
|
165
|
+
- lib/docomoru/response_renderer.rb
|
115
166
|
- lib/docomoru/version.rb
|
116
167
|
homepage: https://github.com/r7kamura/docomoru
|
117
168
|
licenses:
|