gingerice 1.1.0 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dde01477e6f0cfef54d8495b7593f5abb5b56e57
4
- data.tar.gz: 5777944483946d2208c517e0c213adad14981f32
3
+ metadata.gz: 6087ed695413b5137a1bbb35d6c1c83a0bad3f3e
4
+ data.tar.gz: 41acc2f5e49bc2552b7836abd17effdf5629d647
5
5
  SHA512:
6
- metadata.gz: 6e636c071cddbbdf6b1022aeb1262d7bea389af150f0d182b4639d3ad400b404100a657cffc78aa87d11e7b8ef2f09dc4069264316cd40ca35ff58695bb97218
7
- data.tar.gz: 9e8c3053ca3cab867e50a763d3ab09422dd122a1a88a2101da2f16e254cc79839189c6ed87d4918e3b2f01bbbc4175803c5b1b9b16f1b57a089f67fbd388f357
6
+ metadata.gz: a5a6e945f6fe1150fe33ea6cff165975c199f198e9560918472f7b5c68a3527b72617f372403266ba79dace2115c5c1e18802e656f494029d52efb58610f8583
7
+ data.tar.gz: 3e16022c40bd5ccdbe91913e1ac3b8f5e95de6883f2868c46ec4da4d3026ce5c89081d0b4aa9204d43a9cd344da14524c7918ea4a04b9a132304142bbff8f141
data/README.markdown CHANGED
@@ -6,79 +6,98 @@ Ruby wrapper of Ginger Proofreader which corrects spelling and grammar mistakes
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'gingerice'
9
+ ```ruby
10
+ gem 'gingerice'
11
+ ```
10
12
 
11
13
  And then execute:
12
14
 
13
- $ bundle
15
+ ```bash
16
+ $ bundle
17
+ ```
14
18
 
15
19
  Or install it yourself as:
16
20
 
17
- $ gem install gingerice
21
+ ```bash
22
+ $ gem install gingerice
23
+ ```
18
24
 
19
25
  ## Usage
20
26
 
21
- require 'gingerice'
22
-
23
- text = 'The smelt of fliwers bring back memories.'
24
-
25
- parser = Gingerice::Parser.new
26
- parser.parse text
27
-
28
- # output:
29
- #
30
- # => {
31
- # "text" => "The smelt of fliwers bring back memories.",
32
- # "result" => "The smell of flowers brings back memories.",
33
- # "corrections" => [
34
- # [0] {
35
- # "text" => "smelt",
36
- # "correct" => "smell",
37
- # "definition" => nil
38
- # },
39
- # [1] {
40
- # "text" => "fliwers",
41
- # "correct" => "flowers",
42
- # "definition" => "a plant cultivated for its blooms or blossoms"
43
- # },
44
- # [2] {
45
- # "text" => "bring",
46
- # "correct" => "brings",
47
- # "definition" => nil
48
- # }
49
- # ]
50
- # }
27
+ ```ruby
28
+ require 'gingerice'
29
+
30
+ text = 'The smelt of fliwers bring back memories.'
31
+
32
+ parser = Gingerice::Parser.new
33
+ parser.parse text
34
+
35
+ ```
36
+
37
+ ```
38
+ # output:
39
+
40
+ {
41
+ "text" => "The smelt of fliwers bring back memories.",
42
+ "result" => "The smell of flowers brings back memories.",
43
+ "corrections" => [
44
+ [0] {
45
+ "text" => "smelt",
46
+ "correct" => "smell",
47
+ "definition" => nil
48
+ },
49
+ [1] {
50
+ "text" => "fliwers",
51
+ "correct" => "flowers",
52
+ "definition" => "a plant cultivated for its blooms or blossoms"
53
+ },
54
+ [2] {
55
+ "text" => "bring",
56
+ "correct" => "brings",
57
+ "definition" => nil
58
+ }
59
+ ]
60
+ }
61
+ ```
51
62
 
52
63
  This gem also provides executable which can be executed:
53
64
 
54
- % gingerice "Edwards will be sck yesterday"
65
+ ```bash
66
+ $ gingerice "Edwards will be sck yesterday"
67
+ ```
55
68
 
56
- # output :
57
- #
58
- # Edwards was sick yesterday
69
+ ```
70
+ # output:
71
+
72
+ Edwards was sick yesterday
73
+ ```
59
74
 
60
75
  Or if you want verbose output you can add `--verbose` or `-v` argument:
61
76
 
62
- % gingerice --verbose "Edwards will be sck yesterday"
63
-
64
- # output:
65
- #
66
- # {
67
- # "text" => "Edwards will be sck yesterday",
68
- # "result" => "Edwards was sick yesterday",
69
- # "corrections" => [
70
- # [0] {
71
- # "text" => "will be",
72
- # "correct" => "was",
73
- # "definition" => nil
74
- # },
75
- # [1] {
76
- # "text" => "sck",
77
- # "correct" => "sick",
78
- # "definition" => "affected by an impairment of normal physical or mental function"
79
- # }
80
- # ]
81
- # }
77
+ ```bash
78
+ $ gingerice --verbose "Edwards will be sck yesterday"
79
+ ```
80
+
81
+ ```
82
+ # output:
83
+
84
+ {
85
+ "text" => "Edwards will be sck yesterday",
86
+ "result" => "Edwards was sick yesterday",
87
+ "corrections" => [
88
+ [0] {
89
+ "text" => "will be",
90
+ "correct" => "was",
91
+ "definition" => nil
92
+ },
93
+ [1] {
94
+ "text" => "sck",
95
+ "correct" => "sick",
96
+ "definition" => "affected by an impairment of normal physical or mental function"
97
+ }
98
+ ]
99
+ }
100
+ ```
82
101
 
83
102
  ## Contributing
84
103
 
@@ -88,6 +107,10 @@ Or if you want verbose output you can add `--verbose` or `-v` argument:
88
107
  4. Push to the branch (`git push origin my-new-feature`)
89
108
  5. Create new Pull Request
90
109
 
110
+ ## Ports
111
+
112
+ - Python library by @Azd325: https://github.com/Azd325/gingerit
113
+
91
114
  ## Thanks
92
115
 
93
116
  Thank you for [Ginger Proofreader](http://www.gingersoftware.com/) for such awesome service. Hope they will keep it free :)
data/gingerice.gemspec CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "simplecov"
23
24
  spec.add_development_dependency "coveralls"
24
25
 
25
26
  spec.add_dependency "addressable"
data/lib/gingerice.rb CHANGED
@@ -1,3 +1,2 @@
1
1
  require 'gingerice/version'
2
2
  require 'gingerice/parser'
3
- require 'gingerice/command'
@@ -6,21 +6,18 @@ require 'gingerice/version'
6
6
  module Gingerice
7
7
  class Command
8
8
 
9
- attr_reader :args, :oparser
9
+ attr_reader :args, :args_parser, :options
10
10
 
11
11
  def initialize(args)
12
12
  @args = args
13
- end
13
+ @args << '-h' if @args.empty?
14
14
 
15
- def processor
16
- options = {}
17
- options[:api_endpoint] = Gingerice::Parser::GINGER_ENDPOINT
18
- options[:api_version] = Gingerice::Parser::GINGER_VERSION
19
- options[:api_key] = Gingerice::Parser::GINGER_API_KEY
20
- options[:lang] = Gingerice::Parser::DEFAULT_LANG
21
- options[:verbose] = false
15
+ @options = Gingerice::Parser.default_options.merge({ :verbose => false })
16
+ @args_parser = args_parser
17
+ end
22
18
 
23
- @oparser = OptionParser.new do |opt|
19
+ def args_parser
20
+ OptionParser.new do |opt|
24
21
  opt.banner = 'Usage: gingerice [options] "some texts"'
25
22
 
26
23
  opt.on("--api-endpoint API_ENDPOINT", "Set API endpoint") do |endpoint|
@@ -28,7 +25,7 @@ module Gingerice
28
25
  end
29
26
 
30
27
  opt.on("--api-version API_VERSION", "Set API version") do |version|
31
- options[:api_endpoint] = version
28
+ options[:api_version] = version
32
29
  end
33
30
 
34
31
  opt.on("--api-key API_KEY", "Set API key") do |api_key|
@@ -44,30 +41,31 @@ module Gingerice
44
41
  end
45
42
 
46
43
  opt.on("--version", "Show version") do
47
- puts Gingerice::VERSION
48
- exit
44
+ options[:show] = :version
49
45
  end
50
46
 
51
47
  opt.on_tail("-h", "--help", "Show this message") do
52
- puts opt
53
- exit
48
+ options[:show] = :help
54
49
  end
55
- end
56
50
 
57
- @oparser.parse!(args)
58
- options
51
+ opt.parse!(args)
52
+ end
59
53
  end
60
54
 
61
55
  def execute
62
- options = processor
56
+ if options.has_key?(:show)
63
57
 
64
- if args.empty?
65
- puts oparser
66
- else
67
- parser_options = options.reject { |key, value| key == :verbose }
58
+ case options[:show]
59
+ when :help
60
+ puts args_parser
61
+ when :version
62
+ puts "Gingerice: #{Gingerice::VERSION}"
63
+ end
68
64
 
69
- parser = Parser.new(parser_options)
70
- response = parser.parse(args.last)
65
+ else
66
+ parser_opts = options.select { |k, _| Parser.default_options.keys.include?(k) }
67
+ parser = Parser.new(parser_opts)
68
+ response = parser.parse(args.last)
71
69
 
72
70
  if options[:verbose]
73
71
  ap response
@@ -4,18 +4,17 @@ require 'json'
4
4
 
5
5
  module Gingerice
6
6
  class Parser
7
- GINGER_ENDPOINT = 'http://services.gingersoftware.com/Ginger/correct/json/GingerTheText'
8
- GINGER_VERSION = '2.0'
9
- GINGER_API_KEY = '6ae0c3a0-afdc-4532-a810-82ded0054236'
10
- DEFAULT_LANG = 'US'
7
+ GINGER_API_ENDPOINT = 'http://services.gingersoftware.com/Ginger/correct/json/GingerTheText'
8
+ GINGER_API_VERSION = '2.0'
9
+ GINGER_API_KEY = '6ae0c3a0-afdc-4532-a810-82ded0054236'
10
+ DEFAULT_LANG = 'US'
11
11
 
12
- attr_reader :lang, :api_key, :api_version, :api_endpoint
12
+ attr_accessor :lang, :api_key, :api_version, :api_endpoint
13
13
 
14
14
  def initialize(options = {})
15
- @lang = options.fetch(:lang, DEFAULT_LANG)
16
- @api_key = options.fetch(:api_key, GINGER_API_KEY)
17
- @api_version = options.fetch(:api_version, GINGER_VERSION)
18
- @api_endpoint = options.fetch(:api_endpoint, GINGER_ENDPOINT)
15
+ merge_options(options).each do |key, value|
16
+ send("#{key}=", value)
17
+ end
19
18
  end
20
19
 
21
20
  def parse(text)
@@ -31,7 +30,24 @@ module Gingerice
31
30
  end
32
31
  end
33
32
 
33
+ def self.default_options
34
+ {
35
+ :api_endpoint => Gingerice::Parser::GINGER_API_ENDPOINT,
36
+ :api_version => Gingerice::Parser::GINGER_API_VERSION,
37
+ :api_key => Gingerice::Parser::GINGER_API_KEY,
38
+ :lang => Gingerice::Parser::DEFAULT_LANG
39
+ }
40
+ end
41
+
34
42
  protected
43
+ def merge_options(options)
44
+ options.select! do |key, _|
45
+ Parser.default_options.include?(key)
46
+ end
47
+
48
+ Parser.default_options.merge(options)
49
+ end
50
+
35
51
  def response_processor(text, content)
36
52
  data = JSON.parse(content)
37
53
  i = 0
@@ -49,7 +65,9 @@ module Gingerice
49
65
  corrections << {
50
66
  'text' => text[from..to],
51
67
  'correct' => r['Suggestions'][0]['Text'],
52
- 'definition' => r['Suggestions'][0]['Definition']
68
+ 'definition' => r['Suggestions'][0]['Definition'],
69
+ 'start' => from,
70
+ 'length' => to.to_i - from.to_i + 1
53
71
  }
54
72
  end
55
73
 
@@ -65,8 +83,8 @@ module Gingerice
65
83
 
66
84
  def request_params
67
85
  {
68
- 'lang' => lang,
69
- 'apiKey' => api_key,
86
+ 'lang' => lang,
87
+ 'apiKey' => api_key,
70
88
  'clientVersion' => api_version
71
89
  }
72
90
  end
@@ -1,3 +1,3 @@
1
1
  module Gingerice
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -1,5 +1,12 @@
1
+ require 'simplecov'
1
2
  require 'coveralls'
2
- Coveralls.wear!
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+
9
+ SimpleCov.start
3
10
 
4
11
  require 'stringio'
5
12
  module Kernel
@@ -14,7 +21,6 @@ module Kernel
14
21
  end
15
22
 
16
23
  require 'test/unit'
17
- require 'gingerice/parser'
18
24
  require 'gingerice/command'
19
25
 
20
26
  class TestGingerice < Test::Unit::TestCase
@@ -30,8 +36,8 @@ class TestGingerice < Test::Unit::TestCase
30
36
  end
31
37
 
32
38
  def test_default_settings
33
- assert_equal Gingerice::Parser::GINGER_ENDPOINT, @parser.api_endpoint
34
- assert_equal Gingerice::Parser::GINGER_VERSION, @parser.api_version
39
+ assert_equal Gingerice::Parser::GINGER_API_ENDPOINT, @parser.api_endpoint
40
+ assert_equal Gingerice::Parser::GINGER_API_VERSION, @parser.api_version
35
41
  assert_equal Gingerice::Parser::GINGER_API_KEY, @parser.api_key
36
42
  assert_equal Gingerice::Parser::DEFAULT_LANG, @parser.lang
37
43
  end
@@ -50,6 +56,8 @@ class TestGingerice < Test::Unit::TestCase
50
56
  assert_equal text, result['text']
51
57
  assert_equal 'The smell of flowers brings back memories.', result['result']
52
58
  assert_equal 3, result['corrections'].count
59
+ assert_equal 4, result['corrections'].first['start']
60
+ assert_equal 5, result['corrections'].first['length']
53
61
  end
54
62
 
55
63
  def test_exceptions
@@ -57,7 +65,7 @@ class TestGingerice < Test::Unit::TestCase
57
65
  assert_equal 'getaddrinfo: Name or service not known', exception.message
58
66
  end
59
67
 
60
- def test_command_usage
68
+ def test_command_simple_output
61
69
  output = capture_stdout do
62
70
  command = Gingerice::Command.new(["Edwards will be sck yesterday"])
63
71
  command.execute
@@ -65,12 +73,56 @@ class TestGingerice < Test::Unit::TestCase
65
73
  assert_equal "Edwards was sick yesterday\n", output.string
66
74
  end
67
75
 
68
- def test_command_help
76
+ def test_command_verbose_output
77
+ output = capture_stdout do
78
+ command = Gingerice::Command.new(["-v", "He flyed to Jakarta"])
79
+ command.execute
80
+ end
81
+ assert_match 'corrections', output.string
82
+ end
83
+
84
+ def test_command_help_usage
69
85
  output = capture_stdout do
70
86
  command = Gingerice::Command.new([])
71
87
  command.execute
72
88
  end
73
89
  assert_match "Usage:", output.string
74
90
  end
91
+
92
+ def test_command_show_version
93
+ output = capture_stdout do
94
+ command = Gingerice::Command.new(['--version'])
95
+ command.execute
96
+ end
97
+ assert_equal "Gingerice: #{Gingerice::VERSION}\n", output.string
98
+ end
99
+
100
+ def test_command_arg_api_endpoint
101
+ command = Gingerice::Command.new(['--api-endpoint', 'http://example.id/'])
102
+ options = command.options
103
+
104
+ assert_equal "http://example.id/", options[:api_endpoint]
105
+ end
106
+
107
+ def test_command_arg_api_version
108
+ command = Gingerice::Command.new(['--api-version', '1.0'])
109
+ options = command.options
110
+
111
+ assert_equal "1.0", options[:api_version]
112
+ end
113
+
114
+ def test_command_arg_api_key
115
+ command = Gingerice::Command.new(['--api-key', '123456'])
116
+ options = command.options
117
+
118
+ assert_equal "123456", options[:api_key]
119
+ end
120
+
121
+ def test_command_arg_lang
122
+ command = Gingerice::Command.new(['--lang', 'ID'])
123
+ options = command.options
124
+
125
+ assert_equal "ID", options[:lang]
126
+ end
75
127
  end
76
128
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gingerice
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alif Rachmawadi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-28 00:00:00.000000000 Z
11
+ date: 2013-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: coveralls
43
57
  requirement: !ruby/object:Gem::Requirement