genderize_io_rb 0.0.4 → 0.0.5

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.
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ source "http://rubygems.org"
6
6
  gem "http2"
7
7
  gem "json"
8
8
  gem "string-cases"
9
+ gem "baza", "0.0.12"
9
10
 
10
11
  # Add dependencies to develop your gem here.
11
12
  # Include everything needed to run rake, tests, features, etc.
@@ -14,4 +15,5 @@ group :development do
14
15
  gem "rdoc", "~> 3.12"
15
16
  gem "bundler", ">= 1.0.0"
16
17
  gem "jeweler", :git => "https://github.com/technicalpickles/jeweler.git"
18
+ gem "sqlite3"
17
19
  end
data/Gemfile.lock CHANGED
@@ -16,7 +16,15 @@ GEM
16
16
  remote: http://rubygems.org/
17
17
  specs:
18
18
  addressable (2.3.5)
19
+ array_enumerator (0.0.3)
20
+ baza (0.0.12)
21
+ array_enumerator
22
+ datet
23
+ knjrbfw
24
+ string-cases
25
+ wref
19
26
  builder (3.2.2)
27
+ datet (0.0.25)
20
28
  diff-lcs (1.1.3)
21
29
  faraday (0.8.8)
22
30
  multipart-post (~> 1.2.0)
@@ -35,6 +43,13 @@ GEM
35
43
  json (1.8.0)
36
44
  jwt (0.1.8)
37
45
  multi_json (>= 1.5)
46
+ knjrbfw (0.0.107)
47
+ datet
48
+ http2
49
+ php4r
50
+ ruby_process
51
+ tsafe
52
+ wref
38
53
  multi_json (1.7.9)
39
54
  multi_xml (0.5.5)
40
55
  multipart-post (1.2.0)
@@ -46,6 +61,10 @@ GEM
46
61
  multi_json (~> 1.0)
47
62
  multi_xml (~> 0.5)
48
63
  rack (~> 1.2)
64
+ php4r (0.0.4)
65
+ datet
66
+ http2
67
+ string-strtr
49
68
  rack (1.5.2)
50
69
  rake (10.1.0)
51
70
  rdoc (3.12.2)
@@ -58,16 +77,25 @@ GEM
58
77
  rspec-expectations (2.8.0)
59
78
  diff-lcs (~> 1.1.2)
60
79
  rspec-mocks (2.8.0)
80
+ ruby_process (0.0.8)
81
+ tsafe
82
+ wref
83
+ sqlite3 (1.3.8)
61
84
  string-cases (0.0.0)
85
+ string-strtr (0.0.3)
86
+ tsafe (0.0.11)
87
+ wref (0.0.6)
62
88
 
63
89
  PLATFORMS
64
90
  ruby
65
91
 
66
92
  DEPENDENCIES
93
+ baza (= 0.0.12)
67
94
  bundler (>= 1.0.0)
68
95
  http2
69
96
  jeweler!
70
97
  json
71
98
  rdoc (~> 3.12)
72
99
  rspec (~> 2.8.0)
100
+ sqlite3
73
101
  string-cases
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
@@ -0,0 +1,77 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "genderize_io_rb"
8
+ s.version = "0.0.5"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Kasper Johansen"]
12
+ s.date = "2013-09-06"
13
+ s.description = "A small Gem that makes it possible to determine gender from a name via the Genderize.io service."
14
+ s.email = "kaspernj@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "genderize_io_rb.gemspec",
29
+ "include/database_schema.rb",
30
+ "include/result.rb",
31
+ "lib/genderize_io_rb.rb",
32
+ "spec/genderize_io_rb_spec.rb",
33
+ "spec/spec_helper.rb"
34
+ ]
35
+ s.homepage = "http://github.com/kaspernj/genderize_io_rb"
36
+ s.licenses = ["MIT"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = "1.8.23"
39
+ s.summary = "A small Gem that makes it possible to determine gender from a name via the Genderize.io service."
40
+
41
+ if s.respond_to? :specification_version then
42
+ s.specification_version = 3
43
+
44
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
+ s.add_runtime_dependency(%q<http2>, [">= 0"])
46
+ s.add_runtime_dependency(%q<json>, [">= 0"])
47
+ s.add_runtime_dependency(%q<string-cases>, [">= 0"])
48
+ s.add_runtime_dependency(%q<baza>, ["= 0.0.12"])
49
+ s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
50
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
51
+ s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
52
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
53
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
54
+ else
55
+ s.add_dependency(%q<http2>, [">= 0"])
56
+ s.add_dependency(%q<json>, [">= 0"])
57
+ s.add_dependency(%q<string-cases>, [">= 0"])
58
+ s.add_dependency(%q<baza>, ["= 0.0.12"])
59
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
60
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
61
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
62
+ s.add_dependency(%q<jeweler>, [">= 0"])
63
+ s.add_dependency(%q<sqlite3>, [">= 0"])
64
+ end
65
+ else
66
+ s.add_dependency(%q<http2>, [">= 0"])
67
+ s.add_dependency(%q<json>, [">= 0"])
68
+ s.add_dependency(%q<string-cases>, [">= 0"])
69
+ s.add_dependency(%q<baza>, ["= 0.0.12"])
70
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
71
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
72
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
73
+ s.add_dependency(%q<jeweler>, [">= 0"])
74
+ s.add_dependency(%q<sqlite3>, [">= 0"])
75
+ end
76
+ end
77
+
@@ -0,0 +1,17 @@
1
+ class GenderizeIoRb::DatabaseSchema
2
+ SCHEMA = {
3
+ :tables => {
4
+ :genderize_io_rb_cache => {
5
+ :columns => [
6
+ {:name => :id, :type => :int, :autoincr => true, :primarykey => true},
7
+ {:name => :name, :type => :varchar},
8
+ {:name => :result, :type => :text},
9
+ {:name => :created_at, :type => :datetime}
10
+ ],
11
+ :indexes => [
12
+ {:name => :name, :columns => [:name], :unique => true}
13
+ ]
14
+ }
15
+ }
16
+ }
17
+ end
@@ -4,6 +4,8 @@ require "json" unless ::Kernel.const_defined?(:JSON)
4
4
  require "string-cases" unless ::Kernel.const_defined?(:StringCases)
5
5
 
6
6
  class GenderizeIoRb
7
+ attr_reader :cache_db
8
+
7
9
  def self.const_missing(name)
8
10
  require_relative "../include/#{::StringCases.camel_to_snake(name)}"
9
11
  raise LoadError, "Still not defined: '#{name}'." unless ::GenderizeIoRb.const_defined?(name)
@@ -12,19 +14,47 @@ class GenderizeIoRb
12
14
 
13
15
  def initialize(args = {})
14
16
  @args = args
17
+ @http = Http2.new(:host => "api.genderize.io")
15
18
 
16
- @http = Http2.new(
17
- :host => "api.genderize.io"
18
- )
19
+ # Make sure the database-version is up-to-date.
20
+ @cache_db = args[:cache_db]
21
+ if @cache_db
22
+ Baza::Revision.new.init_db(:db => @cache_db, :schema => GenderizeIoRb::DatabaseSchema::SCHEMA)
23
+ end
19
24
  end
20
25
 
21
26
  def info_for_name(name)
22
- res = @http.get("?name=#{CGI.escape(name)}")
27
+ name = name.to_s.strip
28
+ name_lc = name.downcase
29
+
30
+ # If a database-cache is enabled, try to look result up there first.
31
+ if @cache_db
32
+ res = @cache_db.single(:genderize_io_rb_cache, {:name => name_lc})
33
+ if res
34
+ return ::GenderizeIoRb::Result.new(
35
+ :data => JSON.parse(res[:result]),
36
+ :genderize_io_rb => self
37
+ )
38
+ end
39
+ end
23
40
 
24
- return ::GenderizeIoRb::Result.new(
25
- :data => JSON.parse(res.body),
41
+ http_res = @http.get("?name=#{CGI.escape(name)}")
42
+
43
+ res = ::GenderizeIoRb::Result.new(
44
+ :data => JSON.parse(http_res.body),
26
45
  :genderize_io_rb => self
27
46
  )
47
+
48
+ # Save result to the database cache.
49
+ if @cache_db
50
+ @cache_db.insert(:genderize_io_rb_cache, {
51
+ :name => name_lc,
52
+ :result => http_res.body,
53
+ :created_at => Time.now
54
+ }) unless @cache_db.single(:genderize_io_rb_cache, {:name => name_lc})
55
+ end
56
+
57
+ return res
28
58
  end
29
59
 
30
60
  def destroy
@@ -14,4 +14,35 @@ describe "GenderizeIoRb" do
14
14
 
15
15
  gir.destroy
16
16
  end
17
+
18
+ it "can use a db cache" do
19
+ require "baza"
20
+ require "tmpdir"
21
+ require "sqlite3"
22
+
23
+ db = Baza::Db.new(
24
+ :type => "sqlite3",
25
+ :path => "#{Dir.tmpdir}/genderize_io_rb_spec_#{Time.now.to_f.to_s}.sqlite3",
26
+ :debug => false
27
+ )
28
+
29
+ gir = GenderizeIoRb.new(:cache_db => db)
30
+
31
+ res = gir.info_for_name("kasper")
32
+ res.name.should eql("kasper")
33
+
34
+ res = gir.cache_db.select(:genderize_io_rb_cache, {"name" => "kasper"})
35
+
36
+ count = 0
37
+ res.each do |data|
38
+ data[:name].should eql("kasper")
39
+ count += 1
40
+ end
41
+
42
+ count.should > 0
43
+
44
+ expect {
45
+ gir.cache_db.insert(:genderize_io_rb_cache, :name => "kasper")
46
+ }.to raise_error
47
+ end
17
48
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: genderize_io_rb
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.4
5
+ version: 0.0.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.12
69
+ name: baza
70
+ type: :runtime
71
+ prerelease: false
72
+ requirement: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 0.0.12
62
78
  - !ruby/object:Gem::Dependency
63
79
  version_requirements: !ruby/object:Gem::Requirement
64
80
  none: false
@@ -123,6 +139,22 @@ dependencies:
123
139
  - - ! '>='
124
140
  - !ruby/object:Gem::Version
125
141
  version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ version_requirements: !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ! '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ name: sqlite3
150
+ type: :development
151
+ prerelease: false
152
+ requirement: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
126
158
  description: A small Gem that makes it possible to determine gender from a name via
127
159
  the Genderize.io service.
128
160
  email: kaspernj@gmail.com
@@ -140,6 +172,8 @@ files:
140
172
  - README.rdoc
141
173
  - Rakefile
142
174
  - VERSION
175
+ - genderize_io_rb.gemspec
176
+ - include/database_schema.rb
143
177
  - include/result.rb
144
178
  - lib/genderize_io_rb.rb
145
179
  - spec/genderize_io_rb_spec.rb
@@ -158,7 +192,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
158
192
  - !ruby/object:Gem::Version
159
193
  segments:
160
194
  - 0
161
- hash: 296559983704932826
195
+ hash: 2060623465687608994
162
196
  version: '0'
163
197
  required_rubygems_version: !ruby/object:Gem::Requirement
164
198
  none: false