ruby_jisho 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 35ddea43216caf20e4ed6fbb03ec4c0b960cd0ce
4
+ data.tar.gz: 904c8952ed59616abc041bef93dee1cff5813efa
5
+ SHA512:
6
+ metadata.gz: cbdc70492e084a2ba1f9a147979560167d173bf3b85c12ed7c1ce0e2118ed26e16abeef331fe82ed026a0d8a26f018483e10d4212461b5033b00744e1b964573
7
+ data.tar.gz: 33f100e86b302bb058fee30634db22b33c254e0e32dd2495d41003ad1e330a51a1d7977ec878f8e762f0e032260ed7a79845259c2697285aae70166578b6ffbc
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
data/.hound.yml ADDED
@@ -0,0 +1,3 @@
1
+ ruby:
2
+ config_file: .rubocop.yml
3
+ fail_on_violations: true
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.rubocop.yml ADDED
@@ -0,0 +1,3 @@
1
+ Metrics/BlockLength:
2
+ ExcludedMethods:
3
+ describe
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.3
5
+ before_install: gem install bundler -v 1.14.3
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # RubyJisho
2
+
3
+ A Ruby wrapper for the [Jisho](https://jisho.org) API.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'ruby_jisho'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install ruby_jisho
20
+
21
+ ## Usage
22
+
23
+ To search Jisho, use the `.search` method:
24
+
25
+ ```ruby
26
+ RubyJisho.search("リス")
27
+ ```
28
+
29
+ Responses will be in the form of a `RubyJisho::Results` object.
30
+
31
+ ## Development
32
+
33
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
34
+
35
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
36
+
37
+ ## Contributing
38
+
39
+ Bug reports and pull requests are welcome on GitHub at https://github.com/dysnomian/ruby_jisho.
40
+
41
+ ## Thanks
42
+
43
+ My sincerest thanks to the Jisho team for building such a beautiful and thoughtful tool.
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
data/bin/console ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'ruby_jisho'
5
+
6
+ require 'pry'
7
+ Pry.start
data/bin/setup ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
@@ -0,0 +1,41 @@
1
+ module RubyJisho
2
+ # A single result from the API response
3
+ class Result
4
+ attr_reader :response
5
+
6
+ def initialize(response)
7
+ @response = response
8
+ end
9
+
10
+ def keys
11
+ response.keys
12
+ end
13
+
14
+ def senses
15
+ response.fetch(:senses)
16
+ .map { |s| Sense.new(s) }
17
+ end
18
+
19
+ def to_h
20
+ keys.each_with_object({}) do |k, hash|
21
+ hash[k] = begin
22
+ send(k)
23
+ rescue NoMethodError
24
+ response.fetch(k, nil)
25
+ end
26
+ end
27
+ end
28
+
29
+ def method_missing(sym, *args, &block)
30
+ if keys.include?(sym)
31
+ response.fetch(sym)
32
+ else
33
+ super
34
+ end
35
+ end
36
+
37
+ def respond_to_missing?(method_name, include_private = false)
38
+ keys.include?(method_name) || super
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,45 @@
1
+ require 'json'
2
+
3
+ module RubyJisho
4
+ # Enumberable to store metadata and wrap Result objects cleanly
5
+ class Results
6
+ include Enumerable
7
+
8
+ attr_reader :payload
9
+
10
+ def initialize(payload)
11
+ @payload = JSON.parse(payload, symbolize_names: true)
12
+ end
13
+
14
+ def meta
15
+ payload.fetch(:meta, {})
16
+ end
17
+
18
+ def keys
19
+ payload.keys
20
+ end
21
+
22
+ def each
23
+ data.each { |r| yield r }
24
+ end
25
+
26
+ def method_missing(sym, *args, &block)
27
+ if keys.include?(sym)
28
+ payload.fetch(sym)
29
+ else
30
+ super
31
+ end
32
+ end
33
+
34
+ def respond_to_missing?(method_name, include_private = false)
35
+ keys.include?(method_name) || super
36
+ end
37
+
38
+ private
39
+
40
+ def data
41
+ payload.fetch(:data, [{}])
42
+ .map { |r| Result.new(r) }
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,26 @@
1
+ require 'faraday'
2
+
3
+ module RubyJisho
4
+ # Queries the Jisho API and returns a Results object
5
+ class Search
6
+ attr_reader :query
7
+
8
+ def initialize(query)
9
+ @query = query
10
+ end
11
+
12
+ def results
13
+ @results ||= Results.new(json_response)
14
+ end
15
+
16
+ private
17
+
18
+ def json_response
19
+ @json_response ||= Faraday.get(endpoint + query).body
20
+ end
21
+
22
+ def endpoint
23
+ 'http://jisho.org/api/v1/search/words?keyword='
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyJisho
4
+ # Wrapper for sense hashes from the Jisho API
5
+ class Sense
6
+ attr_reader :response
7
+
8
+ def initialize(response_hash)
9
+ @response = response_hash
10
+ end
11
+
12
+ def parts_of_speech
13
+ response.fetch(:parts_of_speech, [''])
14
+ .map { |p| p.downcase.to_sym }
15
+ end
16
+
17
+ def to_h
18
+ response
19
+ end
20
+
21
+ def keys
22
+ response.keys
23
+ end
24
+
25
+ def method_missing(sym, *args, &block)
26
+ if keys.include?(sym)
27
+ response.fetch(sym)
28
+ else
29
+ super
30
+ end
31
+ end
32
+
33
+ def respond_to_missing?(method_name, include_private = false)
34
+ keys.include?(method_name) || super
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,3 @@
1
+ module RubyJisho
2
+ VERSION = '0.1.0'.freeze
3
+ end
data/lib/ruby_jisho.rb ADDED
@@ -0,0 +1,15 @@
1
+ require 'ruby_jisho/version'
2
+ require 'ruby_jisho/search'
3
+ require 'ruby_jisho/result'
4
+ require 'ruby_jisho/sense'
5
+ require 'ruby_jisho/results'
6
+ require 'json'
7
+
8
+ # Gem namespace module plus convenience methods
9
+ module RubyJisho
10
+ module_function
11
+
12
+ def search(query)
13
+ Search.new(query).results
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ lib = File.expand_path('../lib', __FILE__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require 'ruby_jisho/version'
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = 'ruby_jisho'
10
+ spec.version = RubyJisho::VERSION
11
+ spec.authors = ['Liss McCabe']
12
+ spec.email = ['liss@eristiccode.com']
13
+
14
+ spec.summary = 'Gem adapter for the Jisho search API'
15
+ spec.homepage = 'https://github.com/dysnomian/ruby_jisho'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_development_dependency 'bundler', '~> 1.14'
24
+ spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'rspec', '~> 3.0'
26
+ spec.add_development_dependency 'rubocop', '~> 0.42'
27
+ spec.add_development_dependency 'pry', '~> 0.10'
28
+ spec.add_dependency 'faraday', '~> 0.9'
29
+ end
metadata ADDED
@@ -0,0 +1,144 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_jisho
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Liss McCabe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-02-20 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.14'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.14'
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.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.42'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.42'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: faraday
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.9'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.9'
97
+ description:
98
+ email:
99
+ - liss@eristiccode.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - ".hound.yml"
106
+ - ".rspec"
107
+ - ".rubocop.yml"
108
+ - ".travis.yml"
109
+ - Gemfile
110
+ - README.md
111
+ - Rakefile
112
+ - bin/console
113
+ - bin/setup
114
+ - lib/ruby_jisho.rb
115
+ - lib/ruby_jisho/result.rb
116
+ - lib/ruby_jisho/results.rb
117
+ - lib/ruby_jisho/search.rb
118
+ - lib/ruby_jisho/sense.rb
119
+ - lib/ruby_jisho/version.rb
120
+ - ruby_jisho.gemspec
121
+ homepage: https://github.com/dysnomian/ruby_jisho
122
+ licenses: []
123
+ metadata: {}
124
+ post_install_message:
125
+ rdoc_options: []
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ requirements: []
139
+ rubyforge_project:
140
+ rubygems_version: 2.5.2
141
+ signing_key:
142
+ specification_version: 4
143
+ summary: Gem adapter for the Jisho search API
144
+ test_files: []