genderize-io 0.1.0 → 1.0.0

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: 6be289a2888af4bf3942e5cd4a876343c45c0f8d23f9a9291e9d510cbcb24a8e
4
- data.tar.gz: 64d7cc82232bfdcc6508f01f7810b0bd343e8cf3a88b4ce7f6b54d414ad081cd
3
+ metadata.gz: ebc6e06738af6ebd88bea0db2a23de063cf8105bf7496bb438853bf643cdbba4
4
+ data.tar.gz: 9bd34f44ae411ac7c66c6d9f5b8b7844697cda77409d064cf334effd76210568
5
5
  SHA512:
6
- metadata.gz: c2ae2db8659c0c856d235cf80a11f34defed927dfcf0a0aeea941244bc3125ed75033427aac005d66ba622245027d760fd64a358f8cdef38c77210a663e9c32a
7
- data.tar.gz: 0b77aaa2ed9df12fb37efbefa30eacf12ba7a1264ae16789a4cda9cb08ae80ee66be726bff8e7b9c9b5b2c6328a887894b48e0c09e27b0d0337823e115f5e307
6
+ metadata.gz: 4fb103eaa24e8e7d1e9ebacc4b91aa02ab09c4c68a8a23a43e49a2d3b6c69fcc6250765feb7292f89cc43c47446f58fe218292854539a9ae7d80abbb7d685be2
7
+ data.tar.gz: e912b7613bde5cdbb9055345cf989b60462f86329f8b4ed608194276569c6276ee7c81e2416737bedbb560060f5aa9826ac37dbc0feb420db04e250770c4744c
data/.reek CHANGED
@@ -3,6 +3,8 @@ BooleanParameter:
3
3
  enabled: false
4
4
  DuplicateMethodCall:
5
5
  enabled: false
6
+ FeatureEnvy:
7
+ enabled: false
6
8
  InstanceVariableAssumption:
7
9
  enabled: false
8
10
  IrresponsibleModule:
@@ -11,6 +13,8 @@ LongParameterList:
11
13
  enabled: false
12
14
  NilCheck:
13
15
  enabled: false
16
+ RepeatedConditional:
17
+ enabled: false
14
18
  TooManyInstanceVariables:
15
19
  enabled: false
16
20
  TooManyStatements:
data/README.md CHANGED
@@ -3,7 +3,8 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/genderize-io.svg)](http://badge.fury.io/rb/genderize-io)
4
4
  [![Build Status](https://travis-ci.org/drexed/genderize-io.svg?branch=master)](https://travis-ci.org/drexed/genderize-io)
5
5
 
6
- API wrapper for the free [Genderize.io](https://genderize.io) gender determination system.
6
+ API wrapper for the [Genderize.io](https://genderize.io) first name gender determination system.
7
+ *Be aware that the free API has a limit of 1000 determinations per day.*
7
8
 
8
9
  ## Installation
9
10
 
@@ -22,22 +23,27 @@ Or install it yourself as:
22
23
  $ gem install genderize-io
23
24
 
24
25
  ## Usage
26
+
27
+ ### Lookup Determination
28
+
25
29
  ```ruby
26
30
  # Basic Lookup
27
- lookup = Genderize::Io::Lookup.new('kim').verify
28
- lookup = Genderize::Io::Lookup.verify('kim')
31
+ lookup = Genderize::Io::Lookup.new('kim').determine
32
+ lookup = Genderize::Io::Lookup.determine('kim')
29
33
 
30
- # Custom Host
31
- lookup = Genderize::Io::Lookup.new('kim', host: 'https://api.genderize.io?api_key=xxx').verify
32
- lookup = Genderize::Io::Lookup.verify('kim', host: 'https://api.genderize.io?api_key=xxx')
34
+ # Custom Options
35
+ lookup = Genderize::Io::Lookup.determine('kim', host: 'https://api.genderize.io?api_key=xxx',
36
+ country_id: 'dk',
37
+ language_id: 'en')
38
+ ```
33
39
 
34
- # Custom IDs
35
- lookup = Genderize::Io::Lookup.new('kim', country_id: 'dk').verify
36
- lookup = Genderize::Io::Lookup.verify('kim', language_id: 'en')
40
+ ### Lookup Methods
37
41
 
38
- # Public Methods
42
+ ```ruby
39
43
  lookup.url => 'https://api.genderize.io?name=kim'
40
- lookup.to_h => { 'name' => 'kim', 'gender' => 'female', ... }
44
+ lookup.data => { 'name' => 'kim', 'gender' => 'female', ... }
45
+
46
+ # Data Methods
41
47
  lookup.name => 'kim'
42
48
  lookup.gender => 'female'
43
49
  lookup.probability => 0.94
@@ -50,6 +56,32 @@ lookup.x_rate_reset => 13829
50
56
  lookup.error => 'sorry, my bad!'
51
57
  ```
52
58
 
59
+ ### Batch Lookup Determination
60
+
61
+ ```ruby
62
+ # Basic Lookup
63
+ lookup = Genderize::Io::Batch::Lookup.new(['kim', 'jim']).determine
64
+ lookup = Genderize::Io::Batch::Lookup.determine(['kim', 'jim'])
65
+
66
+ # Custom Options
67
+ lookup = Genderize::Io::Batch::Lookup.determine(['kim', 'jim'], host: 'https://api.genderize.io?api_key=xxx',
68
+ country_id: 'dk',
69
+ language_id: 'en')
70
+ ```
71
+
72
+ ### Batch Lookup Methods
73
+
74
+ ```ruby
75
+ lookup.url => 'https://api.genderize.io?name[0]=kim&name[1]=jim'
76
+ lookup.data => {
77
+ 'rate_limits' => { 'x_rate_limit_limit' => 1069, ... },
78
+ 'responses' => [
79
+ { 'name' => 'kim', 'gender' => 'female', ... },
80
+ { 'name' => 'jim', 'gender' => 'male', ... }
81
+ ]
82
+ }
83
+ ```
84
+
53
85
  ## Contributing
54
86
 
55
87
  Your contribution is welcome.
@@ -4,6 +4,7 @@
4
4
  require "genderize/io/parser/#{file_name}"
5
5
  end
6
6
 
7
- %w[version lookup].each do |file_name|
7
+ %w[version base lookup].each do |file_name|
8
8
  require "genderize/io/#{file_name}"
9
+ require "genderize/io/batch/#{file_name}" if file_name == 'lookup'
9
10
  end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'typhoeus'
4
+ require 'user_agent_db'
5
+
6
+ module Genderize
7
+ module Io
8
+ class Base
9
+
10
+ DEFAULT_HOST ||= 'https://api.genderize.io'
11
+ HEADER_KEYS ||= %w[x_rate_limit_limit x_rate_limit_remaining x_rate_reset].freeze
12
+
13
+ attr_reader :country_id, :data, :host, :language_id, :name, :request
14
+
15
+ def initialize(name, host: DEFAULT_HOST, country_id: nil, language_id: nil)
16
+ @name = name
17
+ @host = host
18
+ @country_id = country_id
19
+ @language_id = language_id
20
+ @request = nil
21
+ end
22
+
23
+ def self.determine(name, host: DEFAULT_HOST, country_id: nil, language_id: nil)
24
+ klass = new(name, host: host, country_id: country_id, language_id: language_id)
25
+ klass.determine
26
+ klass
27
+ end
28
+
29
+ def url
30
+ connector = @host.include?('?') ? '&' : '?'
31
+ "#{@host}#{connector}#{param_name}#{param_country_id}#{param_language_id}"
32
+ end
33
+
34
+ private
35
+
36
+ def generate_data
37
+ return if @request.nil?
38
+ Genderize::Io::Parser::Json.parse(@request.response_body)
39
+ end
40
+
41
+ def generate_headers
42
+ return if @request.nil?
43
+ Genderize::Io::Parser::Header.parse(@request.response_headers)
44
+ end
45
+
46
+ def generate_rate_limits
47
+ headers = generate_headers
48
+ return if headers.nil?
49
+ HEADER_KEYS.each_with_object({}) { |key, hash| hash[key] = headers.send(key).to_i }
50
+ end
51
+
52
+ def generate_request
53
+ return @request unless @request.nil?
54
+ Typhoeus::Config.user_agent = UserAgentDB.random
55
+ Typhoeus.get(url, accept_encoding: 'gzip,deflate')
56
+ end
57
+
58
+ def param_country_id
59
+ "&country_id=#{@country_id}" unless @country_id.nil?
60
+ end
61
+
62
+ def param_language_id
63
+ "&language_id=#{@language_id}" unless @language_id.nil?
64
+ end
65
+
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Genderize
4
+ module Io
5
+ module Batch
6
+ class Lookup < Genderize::Io::Base
7
+
8
+ def initialize(name, host: DEFAULT_HOST, country_id: nil, language_id: nil)
9
+ super(name, host: host, country_id: country_id, language_id: language_id)
10
+ @data = {
11
+ 'rate_limits' => {},
12
+ 'responses' => []
13
+ }
14
+ end
15
+
16
+ def determine
17
+ return @data unless @request.nil?
18
+
19
+ @request = generate_request
20
+ @data['responses'] = generate_data
21
+ @data['rate_limits'] = generate_rate_limits
22
+ end
23
+
24
+ private
25
+
26
+ def param_name
27
+ @name.map.with_index { |name, i| "name[#{i}]=#{name}" }.join('&')
28
+ end
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,82 +1,35 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'typhoeus'
4
- require 'user_agent_db'
5
-
6
3
  module Genderize
7
4
  module Io
8
- class Lookup
9
-
10
- DEFAULT_HOST ||= 'https://api.genderize.io'
11
- RESPONSE_KEYS ||= %w[
12
- count country_id error language_id gender probability x_rate_limit_limit
13
- x_rate_limit_remaining x_rate_reset
14
- ].freeze
5
+ class Lookup < Genderize::Io::Base
15
6
 
16
- attr_reader :country_id, :hash, :host, :language_id, :name, :response
7
+ RESPONSE_KEYS ||= %w[count country_id error language_id gender probability].freeze
17
8
 
18
9
  def initialize(name, host: DEFAULT_HOST, country_id: nil, language_id: nil)
19
- @name = name
20
- @host = host
21
- @country_id = country_id
22
- @language_id = language_id
23
- @response = nil
24
- @hash = {}
25
- end
26
-
27
- def self.verify(name, host: DEFAULT_HOST, country_id: nil, language_id: nil)
28
- klass = new(name, host: host, country_id: country_id, language_id: language_id)
29
- klass.verify
30
- klass
10
+ super(name, host: host, country_id: country_id, language_id: language_id)
11
+ @data = {}
31
12
  end
32
13
 
33
- def verify
34
- return @hash unless @response.nil?
14
+ def determine
15
+ return @data unless @request.nil?
35
16
 
36
- Typhoeus::Config.user_agent = UserAgentDB.random
37
- @response = Typhoeus.get(url, accept_encoding: 'gzip,deflate')
38
-
39
- generate_hash
40
- generate_rate_limits
41
- end
42
-
43
- def url
44
- connector = @host.include?('?') ? '&' : '?'
45
- "#{@host}#{connector}#{param_name}#{param_country_id}#{param_language_id}"
17
+ @request = generate_request
18
+ @data = generate_data.merge(generate_rate_limits)
46
19
  end
47
20
 
48
- def to_h
49
- @hash
21
+ HEADER_KEYS.each do |key|
22
+ define_method(key) { @data[key] }
50
23
  end
51
24
 
52
25
  RESPONSE_KEYS.each do |key|
53
- define_method(key) { @hash[key] }
26
+ define_method(key) { @data[key] }
54
27
  end
55
28
 
56
29
  private
57
30
 
58
- def generate_hash
59
- return if @response.response_body.nil?
60
- @hash = Genderize::Io::Parser::Json.parse(@response.response_body)
61
- end
62
-
63
- def generate_rate_limits
64
- return if @response.response_headers.nil?
65
- headers = Genderize::Io::Parser::Header.parse(@response.response_headers)
66
- RESPONSE_KEYS.last(3).each { |key| @hash[key] = headers.send(key).to_i }
67
- end
68
-
69
31
  def param_name
70
- return "name=#{@name}" unless @name.is_a?(Array)
71
- @name.map.with_index { |name, i| "name[#{i}]=#{name}" }.join('&')
72
- end
73
-
74
- def param_country_id
75
- "&country_id=#{@country_id}" unless @country_id.nil?
76
- end
77
-
78
- def param_language_id
79
- "&language_id=#{@language_id}" unless @language_id.nil?
32
+ "name=#{@name}"
80
33
  end
81
34
 
82
35
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Genderize
4
4
  module Io
5
- VERSION ||= '0.1.0'
5
+ VERSION ||= '1.0.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genderize-io
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Gomez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-28 00:00:00.000000000 Z
11
+ date: 2017-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -145,6 +145,8 @@ files:
145
145
  - bin/setup
146
146
  - genderize-io.gemspec
147
147
  - lib/genderize/io.rb
148
+ - lib/genderize/io/base.rb
149
+ - lib/genderize/io/batch/lookup.rb
148
150
  - lib/genderize/io/lookup.rb
149
151
  - lib/genderize/io/parser/header.rb
150
152
  - lib/genderize/io/parser/json.rb