mirador 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZGFjNTRlZWI2MjFkYjI0YTk2MWFjYjNlMTM5ZmMzMmMxM2RmMjJmMg==
4
+ MjUwNGI0MWY1NGIxYzZlYmVjNzQyZGFhN2E0ZmQ4NTQxOGQyZmZlNw==
5
5
  data.tar.gz: !binary |-
6
- NmM2YTU2ZTM1ZmZkNTc4OThlNTM1MzU1OGQzOWI1OGE2MzZhMThhZg==
6
+ ZDkyNmUyMmM4MDUxOWZjYTJmMjhkMWVlMGY5Yjk1NWNhNDc3MjBmOQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OTM5OTE3YjdhMjc2ZGIyY2YxNzVkOGRjODA1Mzc0Y2M0OGEzYzNjZWRlNGUw
10
- NzkxMWZhMjk0MzQ0ZWU0NGE5NmQxZGZkMWQ1NTE5NDZjMjY2ZGU3NjY2NTZm
11
- YzA4ZDk5OWIzODU1Mzk4OTQ5ODYwMTUwOGNkMGEyOTQxYzRkMGE=
9
+ Yzg1OThhODBlN2VlODQyNDY0NDczNDUxYWEwNDJmMjA5YzdhZDllOTZiNjYx
10
+ MTNiMTAyNWRhYjkwZTAzYzA3NzZlYTYwNGRjMmYyZTE5ZGI5ODUyNmZjMTNh
11
+ Mjg1NzU2Yzk1MWUxNWY5YTkyZTk2MWU1YWI5YmJiYTQxOTllZmY=
12
12
  data.tar.gz: !binary |-
13
- YmNkZDU1YzkyNzQwOWQwZjNlNTQzMTQ5MzhhMjdjZDE0YjI5OGQxMmZiNzRk
14
- NjhhYTAzOWRkYzQ4ZjVjYTQzYTUxM2YwODE0ZDI3ODZlM2JjYzYwYmI5MzNk
15
- ZmI4Y2Y0N2IwZGY3ZmNlN2Y1MGU5ZDIzMTI3ZjQzNTc5ZjRkYTg=
13
+ ZGIwNWU1NTA1YTUxMTAxOWJiYWU1NjY4NzM5NjU4M2Q5ZGY4YjZjM2EyNWNk
14
+ YzRiNDdjYjI5YTRhNzFkMjlhY2I4YjUwZjkyMGU0NjVkYjI4NmEzMjRmMWZl
15
+ ZTEwYTZjN2IyMDAzMTE1Y2FkZDI4MDI5Mzg4ZjY5NWMyMGUwY2U=
data/Rakefile CHANGED
@@ -1 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ end
7
+
8
+ desc "Run tests"
9
+ task :default => :test
data/lib/mirador.rb CHANGED
@@ -37,6 +37,9 @@ module Mirador
37
37
  class Client
38
38
  include HTTParty
39
39
  base_uri 'api.mirador.im'
40
+ default_timeout 10
41
+
42
+ MAX_LEN = 8
40
43
 
41
44
  def initialize(api_key)
42
45
  @options = { api_key: api_key }
@@ -44,10 +47,20 @@ module Mirador
44
47
 
45
48
  def classify_urls urls
46
49
 
47
- res = self.class.get(
50
+ if urls.length > MAX_LEN
51
+ out = []
52
+ urls.each_slice(MAX_LEN) do |s|
53
+ out << self.classify_urls(s)
54
+ end
55
+
56
+ return out.flatten
57
+ end
58
+
59
+ res = self.class.post(
48
60
  "/v1/classify",
49
61
  {
50
- query: @options.merge({url: urls})
62
+ body: @options.merge({url: urls}),
63
+ headers: {"User-Agent" => "Mirador Client v1.0/Ruby"}
51
64
  }
52
65
  )
53
66
 
@@ -61,24 +74,51 @@ module Mirador
61
74
  end
62
75
 
63
76
  def classify_files files
77
+ if files.length > MAX_LEN
78
+ out = []
79
+ files.each_slice(MAX_LEN) do |s|
80
+ out << self.classify_files(s)
81
+ end
82
+
83
+ return out.flatten
84
+ end
85
+
64
86
  processed = files.map do |f| self.process_file(f) end
65
- return self.classify_encoded processed
87
+ return self.classify_encoded files, processed
66
88
  end
67
89
 
68
90
 
69
91
  def classify_raw_images imgs
70
- processed = imgs.map { |i| Base64.encode(i).gsub("\n", '') }
71
- return self.classify_encoded processed
92
+
93
+ if imgs.length > MAX_LEN
94
+ out = []
95
+ imgs.each_slice(MAX_LEN) do |s|
96
+ out << self.classify_raw_images(Hash[s])
97
+ end
98
+
99
+ return out.flatten
100
+ end
101
+
102
+ # expects a hash
103
+ # id => image
104
+ images, names = [], []
105
+ imgs.each_pair do |k, v|
106
+ images << v
107
+ names << k
108
+ end
109
+
110
+ processed = images.map { |i| Base64.encode64(i).gsub("\n", '') }
111
+ return self.classify_encoded names, processed
72
112
  end
73
113
 
74
- private
114
+ protected
75
115
 
76
116
  def process_file file
77
117
  data = File.read(file)
78
118
  Base64.encode64(data).gsub("\n", '')
79
119
  end
80
120
 
81
- def classify_encoded encoded
121
+ def classify_encoded files, encoded
82
122
  res = self.class.post(
83
123
  "/v1/classify",
84
124
  {
@@ -1,3 +1,3 @@
1
1
  module Mirador
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/mirador.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.email = ["nick@mirador.im"]
11
11
  gem.description = %q{Interface to the Mirador Image Moderation API}
12
12
  gem.summary = %q{Simple interface to mirador API }
13
- gem.homepage = "http://github.com/mirador-cv/mirador-rb"
13
+ gem.homepage = "http://mirador-cv.github.io/mirador-rb"
14
14
  gem.license = "MIT"
15
15
 
16
16
  gem.files = `git ls-files`.split($/)
Binary file
Binary file
@@ -0,0 +1,118 @@
1
+ require 'test/unit'
2
+ require 'mirador'
3
+
4
+ class MiradorTest < Test::Unit::TestCase
5
+
6
+ dirname = File.dirname(__FILE__)
7
+
8
+ NSFW_IM = File.join(dirname, 'images/nsfw.jpg')
9
+ SFW_IM = File.join(dirname, 'images/sfw.jpg')
10
+
11
+ SFW_URL = "http://demo.mirador.im/test/sfw.jpg"
12
+ NSFW_URL = "http://demo.mirador.im/test/nsfw.jpg"
13
+
14
+ MM = Mirador::Client.new('')
15
+
16
+ def test_classify_files
17
+
18
+ res = MM.classify_files([NSFW_IM, SFW_IM])
19
+
20
+ assert_equal res.length, 2
21
+
22
+ nsfw, sfw = res
23
+
24
+ assert_operator nsfw.value, :>=, 0.50
25
+ assert_operator sfw.value, :<, 0.50
26
+
27
+ assert nsfw.name.eql?(NSFW_IM), "nsfw name does not match"
28
+ assert sfw.name.eql?(SFW_IM), "sfw name does not match"
29
+
30
+ assert sfw.safe
31
+ assert (not nsfw.safe)
32
+
33
+ end
34
+
35
+ def test_chunked_files
36
+ nsfw_files = [NSFW_IM]*10
37
+ sfw_files = [SFW_IM]*10
38
+
39
+ nres = MM.classify_files(nsfw_files)
40
+ assert_equal nres.length, 10
41
+
42
+ nres.each do |r|
43
+ assert_operator r.value, :>=, 0.50
44
+ assert r.name.eql?(NSFW_IM)
45
+ assert (not r.safe)
46
+ end
47
+
48
+ sres = MM.classify_files(sfw_files)
49
+ assert_equal sres.length, 10
50
+
51
+ sres.each do |r|
52
+ assert_operator r.value, :<, 0.50
53
+ assert r.name.eql?(SFW_IM)
54
+ assert r.safe
55
+ end
56
+ end
57
+
58
+ def test_chunked_urls
59
+ nsfw_urls = [NSFW_URL]*10
60
+ sfw_urls = [SFW_URL]*10
61
+
62
+ nres = MM.classify_urls(nsfw_urls)
63
+ assert_equal nres.length, 10
64
+
65
+ nres.each do |r|
66
+ assert_not_nil r
67
+ assert_operator r.value, :>=, 0.50
68
+ assert r.name.eql?(NSFW_URL)
69
+ assert (not r.safe)
70
+ end
71
+
72
+ sres = MM.classify_urls(sfw_urls)
73
+ assert_equal sres.length, 10
74
+
75
+ sres.each do |r|
76
+ assert_not_nil r
77
+ assert_not_nil r.value
78
+ assert_operator r.value, :<, 0.50
79
+ assert r.name.eql?(SFW_URL)
80
+ assert r.safe
81
+ end
82
+
83
+ end
84
+
85
+ def test_classify_urls
86
+ res = MM.classify_urls([NSFW_URL, SFW_URL])
87
+
88
+ assert_equal res.length, 2
89
+ nsfw, sfw = res
90
+
91
+ assert nsfw.name.eql?(NSFW_URL)
92
+ assert sfw.name.eql?(SFW_URL)
93
+
94
+ assert_operator nsfw.value, :>=, 0.50
95
+ assert_operator sfw.value, :<, 0.50
96
+
97
+ assert sfw.safe
98
+ assert (not nsfw.safe)
99
+ end
100
+
101
+ def test_classify_raw
102
+ nsfw_d, sfw_d = [NSFW_IM, SFW_IM].map { |f| File.read(f) }
103
+ res = MM.classify_raw_images({ "nsfw" => nsfw_d, "sfw" => sfw_d })
104
+
105
+ assert_equal res.length, 2
106
+ nsfw, sfw = res
107
+
108
+ assert nsfw.name.eql?('nsfw'), "invalid name: #{ nsfw.name }"
109
+ assert sfw.name.eql?('sfw')
110
+
111
+ assert_operator nsfw.value, :>=, 0.50
112
+ assert_operator sfw.value, :<, 0.50
113
+
114
+ assert sfw.safe
115
+ assert (not nsfw.safe)
116
+ end
117
+
118
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mirador
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-08 00:00:00.000000000 Z
11
+ date: 2014-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -47,7 +47,10 @@ files:
47
47
  - lib/mirador.rb
48
48
  - lib/mirador/version.rb
49
49
  - mirador.gemspec
50
- homepage: http://github.com/mirador-cv/mirador-rb
50
+ - test/images/nsfw.jpg
51
+ - test/images/sfw.jpg
52
+ - test/test_mirador.rb
53
+ homepage: http://mirador-cv.github.io/mirador-rb
51
54
  licenses:
52
55
  - MIT
53
56
  metadata: {}
@@ -71,5 +74,8 @@ rubygems_version: 2.3.0
71
74
  signing_key:
72
75
  specification_version: 4
73
76
  summary: Simple interface to mirador API
74
- test_files: []
77
+ test_files:
78
+ - test/images/nsfw.jpg
79
+ - test/images/sfw.jpg
80
+ - test/test_mirador.rb
75
81
  has_rdoc: