mirador 0.0.2 → 0.0.3

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,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: