ojad 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8fa7d567d42d9d46478d7f5e9d856e7e5e3d63ca6e878db5d293f58685fd5566
4
- data.tar.gz: f290455bcbe4dda309a6279d8525d944f05c2c62c50ec9ac31b3e24126beaab0
3
+ metadata.gz: a9bd49fd888f3b51311edb1024c3ac1214157467236ebf97bfb693a886622216
4
+ data.tar.gz: a3c0c676cb31c63e606023258d3b6b31a494195d2ed5d6379aa61b9b1aadf9ce
5
5
  SHA512:
6
- metadata.gz: c579826378abcf8cbb6902f38b7cbde94318ee45d0f1add8be53a58573c6db6b2d47d8445960623046dd44513d128a21431bfe0e185d0ea349188cc942f694a2
7
- data.tar.gz: 51bcfd76b9698f8a545f33be4cd053d2f4bc1e7d627464471a5a31fda445503e282831d3c1d834ef2d24ab1e4f9ac2df0271b29bb5b51381f6ad3d935567ddf1
6
+ metadata.gz: 7f6cff41db7d42e6d3d48925a279763e578eff4526b0838a0e1255cd4b93d4bf2938e1254cb4637199267495a61dc5c1c0c6c26a8ea20780b88abe244fa1bd21
7
+ data.tar.gz: f517b184df1cf232c049e8d288794f8e1416c3bb32afffc4a0e523de7cb5c236be2c7027ba0955ef94cf8b28bb9f19100029edb5499d279bca480e08b334577e
data/CHANGELOG.md CHANGED
@@ -1 +1,12 @@
1
1
  # CHANGELOG
2
+
3
+ ## 0.0.1
4
+
5
+ First release.
6
+
7
+ ```
8
+ ojad くる
9
+ ojad する
10
+ ojad 死ぬ
11
+ ojad 食べる
12
+ ```
data/Gemfile.lock CHANGED
@@ -2,16 +2,35 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  ojad (0.0.0)
5
+ http
6
+ nokogiri
5
7
 
6
8
  GEM
7
9
  remote: https://rubygems.org/
8
10
  specs:
11
+ addressable (2.6.0)
12
+ public_suffix (>= 2.0.2, < 4.0)
9
13
  coderay (1.1.2)
10
14
  diff-lcs (1.3)
15
+ domain_name (0.5.20180417)
16
+ unf (>= 0.0.5, < 1.0.0)
17
+ http (4.0.5)
18
+ addressable (~> 2.3)
19
+ http-cookie (~> 1.0)
20
+ http-form_data (~> 2.0)
21
+ http_parser.rb (~> 0.6.0)
22
+ http-cookie (1.0.3)
23
+ domain_name (~> 0.5)
24
+ http-form_data (2.1.1)
25
+ http_parser.rb (0.6.0)
11
26
  method_source (0.9.2)
27
+ mini_portile2 (2.4.0)
28
+ nokogiri (1.10.1)
29
+ mini_portile2 (~> 2.4.0)
12
30
  pry (0.12.2)
13
31
  coderay (~> 1.1.0)
14
32
  method_source (~> 0.9.0)
33
+ public_suffix (3.0.3)
15
34
  rake (10.5.0)
16
35
  rspec (3.8.0)
17
36
  rspec-core (~> 3.8.0)
@@ -26,6 +45,9 @@ GEM
26
45
  diff-lcs (>= 1.2.0, < 2.0)
27
46
  rspec-support (~> 3.8.0)
28
47
  rspec-support (3.8.0)
48
+ unf (0.1.4)
49
+ unf_ext
50
+ unf_ext (0.0.7.5)
29
51
 
30
52
  PLATFORMS
31
53
  ruby
@@ -38,4 +60,4 @@ DEPENDENCIES
38
60
  rspec
39
61
 
40
62
  BUNDLED WITH
41
- 1.17.1
63
+ 1.17.3
data/exe/ojad ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Exit cleanly from an early interrupt
4
+ Signal.trap("INT") { abort }
5
+
6
+ require_relative "../lib/ojad/cli"
7
+
8
+ OJAD::CLI.start(arguments: ARGV)
data/lib/ojad/cli.rb ADDED
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "client"
4
+ require_relative "result"
5
+
6
+ module OJAD
7
+ class CLI
8
+ def self.start(arguments:)
9
+ new(arguments).start
10
+ end
11
+
12
+ def initialize(arguments)
13
+ @arguments = arguments
14
+ end
15
+
16
+ def start
17
+ Result.new(response).to_human
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :arguments
23
+
24
+ def response
25
+ Client.call(arguments.first)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "http"
4
+
5
+ require_relative "response"
6
+
7
+ module OJAD
8
+ class Client
9
+ def self.call(word)
10
+ new(word).call
11
+ end
12
+
13
+ def initialize(word)
14
+ @word = word
15
+ end
16
+
17
+ def call
18
+ Response.new(raw_response)
19
+ end
20
+
21
+ private
22
+
23
+ ENDPOINT = "ojad/search/index"
24
+ HOST = "http://www.gavo.t.u-tokyo.ac.jp"
25
+ private_constant :ENDPOINT, :HOST
26
+
27
+ attr_reader :word
28
+
29
+ def raw_response
30
+ HTTP.get(search_url)
31
+ end
32
+
33
+ def search_url
34
+ File.join(HOST, ENDPOINT, params)
35
+ end
36
+
37
+ def params
38
+ File.join(
39
+ "sortprefix:accent",
40
+ "narabi1:kata_asc",
41
+ "narabi2:accent_asc",
42
+ "narabi3:mola_asc",
43
+ "yure:visible",
44
+ "curve:invisible",
45
+ "details:invisible",
46
+ "limit:20",
47
+ "word:#{word}",
48
+ )
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OJAD
4
+ class Response
5
+ def initialize(http_response)
6
+ @http_response = http_response
7
+ end
8
+
9
+ def body
10
+ @body ||= http_response.body
11
+ end
12
+
13
+ def success?
14
+ http_response.status.success?
15
+ end
16
+
17
+ def error?
18
+ http_response.status.server_error?
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :http_response
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "verbs"
4
+
5
+ module OJAD
6
+ class Result
7
+ def initialize(response)
8
+ @response = response
9
+ end
10
+
11
+ def to_human
12
+ if response.success?
13
+ verbs.each do |verb|
14
+ verb.to_human
15
+ puts "-"*80
16
+ end
17
+ else
18
+ error_message
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ attr_reader :response
25
+
26
+ def html
27
+ @_response_string ||= response.body.to_s
28
+ end
29
+
30
+ def verbs
31
+ Verbs.new(html).to_a
32
+ end
33
+
34
+ def error_message
35
+ "An error occurred. Please try again later.\n\n" \
36
+ "Response body:\n\n#{response.body.to_s}" \
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "nokogiri"
4
+
5
+ module OJAD
6
+ class VerbPresenter
7
+ def initialize(document)
8
+ @document = document
9
+ end
10
+
11
+ def to_human
12
+ puts "Group: #{group}"
13
+ puts "Dictionary: #{dictionary}"
14
+ puts "Polite: #{polite}"
15
+ puts "Te: #{te}"
16
+ puts "Ta: #{ta}"
17
+ puts "Negative: #{negative}"
18
+ puts "Past negative: #{past_negative}"
19
+ puts "Ba: #{ba}"
20
+ puts "Causative: #{causative}"
21
+ puts "Passive: #{passive}"
22
+ puts "Imperative: #{imperative}"
23
+ puts "Potential: #{potential}"
24
+ puts "Volitional: #{volitional}"
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :document
30
+
31
+ def find_css(lookup)
32
+ document.css(lookup)
33
+ end
34
+
35
+ def group
36
+ find_css("td.midashi").text.strip
37
+ end
38
+
39
+ def dictionary
40
+ find_css("td.katsuyo_jisho_js p").text.strip
41
+ end
42
+
43
+ def polite
44
+ find_css("td.katsuyo_masu_js p").text.strip
45
+ end
46
+
47
+ def te
48
+ find_css("td.katsuyo_te_js p").text.strip
49
+ end
50
+
51
+ def ta
52
+ find_css("td.katsuyo_ta_js p").text.strip
53
+ end
54
+
55
+ def negative
56
+ find_css("td.katsuyo_nai_js p").text.strip
57
+ end
58
+
59
+ def past_negative
60
+ find_css("td.katsuyo_nakatta_js p").text.strip
61
+ end
62
+
63
+ def ba
64
+ find_css("td.katsuyo_ba_js p").text.strip
65
+ end
66
+
67
+ def causative
68
+ find_css("td.katsuyo_shieki_js p").text.strip
69
+ end
70
+
71
+ def passive
72
+ find_css("td.katsuyo_ukemi_js p").text.strip
73
+ end
74
+
75
+ def imperative
76
+ find_css("td.katsuyo_meirei_js p").text.strip.split(/\r\n/).map(&:strip).reject(&:empty?).join(", ")
77
+ end
78
+
79
+ def potential
80
+ find_css("td.katsuyo_kano_js p").text.strip
81
+ end
82
+
83
+ def volitional
84
+ find_css("td.katsuyo_ishi_js p").text.strip
85
+ end
86
+ end
87
+ end
data/lib/ojad/verbs.rb ADDED
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "verb_presenter"
4
+
5
+ module OJAD
6
+ class Verbs
7
+ def initialize(html)
8
+ @html = html
9
+ end
10
+
11
+ def to_a
12
+ verbs.map do |verb_document|
13
+ VerbPresenter.new(verb_document)
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :html
20
+
21
+ def document
22
+ @_document ||= Nokogiri.parse(html)
23
+ end
24
+
25
+ def verbs
26
+ document.css('tr[id^="word_"]')
27
+ end
28
+ end
29
+ end
data/lib/ojad/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module OJAD
2
- VERSION = "0.0.0"
4
+ VERSION = "0.0.1"
3
5
  end
data/ojad.gemspec CHANGED
@@ -30,6 +30,9 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
+ spec.add_dependency "http"
34
+ spec.add_dependency "nokogiri"
35
+
33
36
  spec.add_development_dependency "bundler"
34
37
  spec.add_development_dependency "rake"
35
38
  spec.add_development_dependency "rspec"
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ojad
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juanito Fatas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-01 00:00:00.000000000 Z
11
+ date: 2019-02-18 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: http
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: bundler
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -69,7 +97,8 @@ dependencies:
69
97
  description: 'OJAD: http://www.gavo.t.u-tokyo.ac.jp/ojad'
70
98
  email:
71
99
  - me@juanitofatas.com
72
- executables: []
100
+ executables:
101
+ - ojad
73
102
  extensions: []
74
103
  extra_rdoc_files: []
75
104
  files:
@@ -84,7 +113,14 @@ files:
84
113
  - Rakefile
85
114
  - bin/hack
86
115
  - bin/setup
116
+ - exe/ojad
87
117
  - lib/ojad.rb
118
+ - lib/ojad/cli.rb
119
+ - lib/ojad/client.rb
120
+ - lib/ojad/response.rb
121
+ - lib/ojad/result.rb
122
+ - lib/ojad/verb_presenter.rb
123
+ - lib/ojad/verbs.rb
88
124
  - lib/ojad/version.rb
89
125
  - ojad.gemspec
90
126
  homepage: https://github.com/juanitofatas/ojad
@@ -109,8 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
145
  - !ruby/object:Gem::Version
110
146
  version: '0'
111
147
  requirements: []
112
- rubyforge_project:
113
- rubygems_version: 2.7.6
148
+ rubygems_version: 3.0.2
114
149
  signing_key:
115
150
  specification_version: 4
116
151
  summary: Ruby API Client for OJAD