mirador 0.1.0 → 0.1.1

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
- MGZmMTU1ODJkZDdiZjM3MmQ1NzA1MjJkNjkxMjUxMzM1MmMyOTQ1Yg==
4
+ ZWEzZDk2NDYzYTdmMWVlZDVkMjQwNDliMDhkNDVjMjk1NzQ5ODAwZA==
5
5
  data.tar.gz: !binary |-
6
- OWYyNjc4N2EzMWU1Mjc4YWUxMWJmOGU4NjNhMmFkZjRiZWUzYWYwMA==
6
+ ZjJhZjAzNWVjYWM5ODE0NWZiNDk3OTc4ZmZjMjA2MzFlNzdhMWIxNw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Mjk2MWU1MDM2ZmNiZDUyYTMwMTRlNzIyMTMyZWY5ZDg5ZDdmNGZhM2FhNDlk
10
- MDk5MmQ4Nzg3MTI1MjE2ODM1MDY4MjU5YzEzNjAyZmRhYTEwYThmMjI2MTVj
11
- Mjk1N2IxMGIyNzdhMmQxY2IyN2U3ZGQxZGQxOGRlZmI2ZDAyNDU=
9
+ OTk3ZmI2YjliNDU0NzJjNGU5M2JjMjQ3NTRhMzdlMTY3MDg4ODQ5NWQxMmJl
10
+ MzI0NGQ3NGNjNzgzZGI3NmJiNjY4MzUyYTM2NTVjYWIyZWRjZDJhMTg2YmVh
11
+ MTViNzhmNWViNzg1NWQ0NTkwMzJkNWUzYTAwMDZmYzMxMTBlOTE=
12
12
  data.tar.gz: !binary |-
13
- Yzg0NDBiNTgwODg2MjRlMGVmZTUzNzQ1ZDQ1NTE0ZDhlZTE5MzYxMjhjNTQ0
14
- MDVkNzFhZGIwNjU5NGQyMmY1MTBhN2RiZmM1MjU0MTJkYTYwNTNmY2EyZjE0
15
- MmZkNGJmMmY0YzhkZTkwZjgzMjY4ZmFmNjdlNzYzMjdmNDBiNmU=
13
+ YTQ5OGViY2VjMTk4NWM5MDEwMjVkZGMzN2Y5MDBhNzkwNmYzNWEwZmY4YTVh
14
+ MjdlYTQxZmEzMzVjZTU3OWNjMDdlOTMyYzQ0ZDc4N2YxODhiMmQ5MDJlMTFk
15
+ OWEyNzZhZjljZTJjMWQ5NDE3MTNmOTUzMDQ0ZGE2ODAzYmJhNjI=
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Mirador
1
+ # Mirador [![Build Status](https://drone.io/github.com/mirador-cv/mirador-rb/status.png)](https://drone.io/github.com/mirador-cv/mirador-rb/latest)
2
2
 
3
3
  A simple Ruby client for the [mirador](http://mirador.im) Image moderation API.
4
4
 
data/bin/mirador-client CHANGED
@@ -33,14 +33,14 @@ end
33
33
 
34
34
  # mirador client
35
35
  client = Mirador::Client.new(api_key)
36
+ out = Mirador::ResultList.new
36
37
 
37
- out = []
38
38
  if urls and urls.length > 0
39
- out += client.classify_urls(urls)
39
+ out.update(client.classify_urls(urls).to_h)
40
40
  end
41
41
 
42
42
  if files and files.length > 0
43
- out += client.classify_files(files)
43
+ out.update(client.classify_files(files).to_h)
44
44
  end
45
45
 
46
46
 
@@ -0,0 +1,67 @@
1
+ require 'sinatra'
2
+ require 'mirador'
3
+
4
+ mirador_client = Mirador::Client.new ENV['MIRADOR_API_KEY']
5
+
6
+ post '/proxy/mirador/url' do
7
+ content_type :json
8
+
9
+ mirador_client.classify_url(request['url']).to_json
10
+ end
11
+
12
+ post '/proxy/mirador/datauri' do
13
+ content_type :json
14
+
15
+ mirador_client.classify_data_uri(request['id'] => request['data']).to_json
16
+ end
17
+
18
+ get '/' do
19
+
20
+ <<-eot
21
+ <!doctype html>
22
+ <style> #display.safe { border: 5px solid #0e0; } #display.unsafe { border: 5px solid #e00; }</style>
23
+ <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
24
+
25
+ <input type='url' id='url'/>
26
+ <input type='file' id='file'/>
27
+ <img src='' width=400 id='display'/>
28
+ <span id='res-safe'></span>
29
+
30
+ <script>
31
+ var $doc = $(document),
32
+ $display = $('#display'),
33
+ $safe = $('#res-safe');
34
+
35
+ function onresult(res) {
36
+ var safetxt = res.safe ? 'safe' : 'unsafe';
37
+ $safe.text(safetxt + ': ' + res.value.toString().substr(0, 4));
38
+ $display.attr('class', safetxt);
39
+ }
40
+
41
+ $doc.on('change', '#url', function (e) {
42
+ $.post('/proxy/mirador/url', { url: this.value }).done(onresult);
43
+ $display.attr('src', this.value);
44
+ });
45
+
46
+ $doc.on('change', '#file', function (e) {
47
+ var file = this.files[0];
48
+ if (!file) return;
49
+
50
+ var reader = new FileReader();
51
+ reader.onload = function (e) {
52
+ $display.attr('src', e.target.result);
53
+
54
+ $.post(
55
+ '/proxy/mirador/datauri',
56
+ { id: file.name, data: e.target.result }
57
+ ).done(onresult);
58
+
59
+ };
60
+
61
+
62
+ reader.readAsDataURL(file);
63
+ });
64
+ </script>
65
+ eot
66
+
67
+ end
@@ -1,3 +1,3 @@
1
1
  module Mirador
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/mirador.rb CHANGED
@@ -126,28 +126,66 @@ module Mirador
126
126
  include HTTParty
127
127
  base_uri 'api.mirador.im'
128
128
 
129
- default_timeout 10
129
+ default_timeout 20
130
130
 
131
- MAX_LEN = 5
131
+ MAX_LEN = 4
132
132
  MAX_ID_LEN = 256
133
133
  DATA_URI_PRE = ';base64,'
134
134
  DATA_URI_PRELEN = 8
135
135
 
136
136
  def initialize(api_key)
137
137
  @options = { api_key: api_key }
138
+
139
+ if block_given?
140
+ @parser = Proc.new
141
+ else
142
+ @parser = nil
143
+ end
144
+
138
145
  end
139
146
 
140
147
  # metaprogramming extreme
141
148
  [:url, :file, :buffer, :encoded_string, :data_uri].each do |datatype|
142
- define_method("classify_#{datatype.to_s}s") do |args, params={}|
143
- flexible_request args, params do |item|
149
+ define_method("classify_#{datatype.to_s}s") do |args, params={}, &block|
150
+
151
+ if block != nil
152
+ old_parser = @parser
153
+ @parser = block
154
+ end
155
+
156
+
157
+ res = flexible_request args, params do |item|
144
158
  fmt_items(datatype, item)
145
159
  end
160
+
161
+ if block != nil
162
+ @parser = old_parser
163
+ end
164
+
165
+
166
+ res
146
167
  end
147
168
 
148
- define_method("classify_#{datatype.to_s}") do |args, params={}|
169
+ define_method("classify_#{datatype.to_s}") do |args, params={}, &block|
170
+
171
+ if block != nil
172
+ old_parser = @parser
173
+ @parser = block
174
+ end
175
+
149
176
  res = self.send("classify_#{datatype.to_s}s", args, params)
150
- res[0]
177
+
178
+ if @parser
179
+ out = if res != nil then res.values()[0] else nil end
180
+ else
181
+ out = if res != nil then res[0] else nil end
182
+ end
183
+
184
+ if block != nil
185
+ @parser = old_parser
186
+ end
187
+
188
+ out
151
189
  end
152
190
 
153
191
  end
@@ -238,7 +276,13 @@ module Mirador
238
276
  # call the block X number of times
239
277
  # where X is request.length / MAX_LEN
240
278
  def chunked_request req, &mthd
241
- output = ResultList.new
279
+
280
+ if @parser != nil
281
+ output = {}
282
+ else
283
+ output = ResultList.new
284
+ end
285
+
242
286
  req.each_slice(MAX_LEN).each do |slice|
243
287
  output.update(mthd.call(slice))
244
288
  end
@@ -339,7 +383,12 @@ module Mirador
339
383
  raise ApiError, "no response: #{ res.code }"
340
384
  end
341
385
 
342
- return ResultList.parse_results res[k]
386
+ if @parser != nil
387
+ return @parser.call(res[k])
388
+ else
389
+
390
+ return ResultList.parse_results res[k]
391
+ end
343
392
  end
344
393
 
345
394
  end
data/test/test_mirador.rb CHANGED
@@ -159,6 +159,41 @@ class MiradorTest < Test::Unit::TestCase
159
159
 
160
160
  end
161
161
 
162
+ def test_switch_parser
163
+
164
+ res = MM.classify_url 'http://static.mirador.im/test/nsfw.jpg' do |results|
165
+
166
+ r = Hash[results.map do |x|
167
+ [x['id'], x['result']]
168
+ end]
169
+
170
+ r
171
+ end
172
+
173
+ assert res.is_a?(Hash)
174
+
175
+ res_norm = MM.classify_url 'http://static.mirador.im/test/sfw.jpg'
176
+
177
+ assert (not res_norm.is_a?(Hash))
178
+
179
+ end
180
+
181
+ def test_multiple_custom_parse
182
+
183
+ res = MM.classify_urls('http://static.mirador.im/test/nsfw.jpg', 'http://static.mirador.im/test/sfw.jpg') do |results|
184
+
185
+ r = Hash[results.map do |x|
186
+ [x['id'], x['result']]
187
+ end]
188
+
189
+ r
190
+ end
191
+
192
+ assert res.is_a?(Hash)
193
+ assert res.has_key?('http://static.mirador.im/test/nsfw.jpg')
194
+
195
+ end
196
+
162
197
  def test_item_error
163
198
 
164
199
  res = MM.classify_urls([{ id: :nsfw, data: 'invalid-url'}, { id: :sfw, data: SFW_URL }])
@@ -170,4 +205,33 @@ class MiradorTest < Test::Unit::TestCase
170
205
 
171
206
  end
172
207
 
208
+ def test_custom_parser
209
+
210
+ mc = Mirador::Client.new ENV['MIRADOR_API_KEY'] do |results|
211
+
212
+ res = Hash[results.map do |x|
213
+ r = x['result']
214
+
215
+ [x['id'], {
216
+ id: x['id'],
217
+ breast: r['breast4'],
218
+ penis: r['penis4'],
219
+ vagina: r['vagina4'],
220
+ butt: r['butt4'],
221
+ }]
222
+
223
+ end]
224
+
225
+ res
226
+ end
227
+
228
+ res = mc.classify_url 'http://static.mirador.im/test/nsfw.jpg'
229
+
230
+ assert res.is_a?(Hash)
231
+
232
+ assert res[:breast]
233
+ assert res[:penis]
234
+
235
+ end
236
+
173
237
  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.1.0
4
+ version: 0.1.1
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-08-05 00:00:00.000000000 Z
11
+ date: 2014-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -44,6 +44,7 @@ files:
44
44
  - README.md
45
45
  - Rakefile
46
46
  - bin/mirador-client
47
+ - examples/sinatra-example.rb
47
48
  - lib/mirador.rb
48
49
  - lib/mirador/version.rb
49
50
  - mirador.gemspec