imagga 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +28 -1
  3. data/imagga.gemspec +1 -0
  4. data/lib/imagga.rb +8 -3
  5. data/lib/imagga/client.rb +12 -34
  6. data/lib/imagga/commands.rb +42 -0
  7. data/lib/imagga/core_client.rb +25 -0
  8. data/lib/imagga/exceptions.rb +3 -0
  9. data/lib/imagga/image.rb +59 -2
  10. data/lib/imagga/image_or_url_parametizer.rb +21 -0
  11. data/lib/imagga/options.rb +74 -0
  12. data/lib/imagga/parametizer.rb +18 -0
  13. data/lib/imagga/rank_color_parametizer.rb +17 -0
  14. data/lib/imagga/resolution_parametizer.rb +17 -0
  15. data/lib/imagga/result_builder.rb +27 -0
  16. data/lib/imagga/version.rb +1 -1
  17. data/spec/fixtures/crop_response.txt +62 -0
  18. data/spec/fixtures/extract_response.txt +253 -0
  19. data/spec/fixtures/rank_response.txt +12 -0
  20. data/spec/integration/crop_spec.rb +60 -0
  21. data/spec/integration/extract_spec.rb +51 -0
  22. data/spec/integration/rank_spec.rb +103 -0
  23. data/spec/lib/commands_spec.rb +70 -0
  24. data/spec/lib/core_client_spec.rb +43 -0
  25. data/spec/lib/crop_info_spec.rb +15 -0
  26. data/spec/lib/crop_options_spec.rb +24 -0
  27. data/spec/lib/crop_result_builder_spec.rb +4 -0
  28. data/spec/lib/extraction_options_spec.rb +16 -51
  29. data/spec/lib/image_crop_spec.rb +34 -0
  30. data/spec/lib/image_or_url_parametizer_spec.rb +65 -0
  31. data/spec/lib/parametizer_spec.rb +42 -0
  32. data/spec/lib/rank_color_parametizer_spec.rb +27 -0
  33. data/spec/lib/rank_color_spec.rb +51 -0
  34. data/spec/lib/rank_options_spec.rb +28 -0
  35. data/spec/lib/rank_result_builder_spec.rb +1 -12
  36. data/spec/lib/resolution_parametizer_spec.rb +60 -0
  37. metadata +63 -28
  38. data/lib/imagga/extract_options.rb +0 -74
  39. data/lib/imagga/extract_result_builder.rb +0 -11
  40. data/lib/imagga/rank_result_builder.rb +0 -9
  41. data/spec/lib/client_spec.rb +0 -352
@@ -1,11 +0,0 @@
1
- require "json"
2
-
3
- module Imagga
4
-
5
- class ExtractResultBuilder
6
- def build_from(result)
7
- result['colors'].map { |image_node| ImageInfo.new(image_node) }
8
- end
9
- end
10
-
11
- end
@@ -1,9 +0,0 @@
1
- module Imagga
2
-
3
- class RankResultBuilder
4
- def build_from(result)
5
- result['rank_similarity'].map { |rank| RankSimilarity.new(rank) }
6
- end
7
- end
8
-
9
- end
@@ -1,352 +0,0 @@
1
- require 'spec_helper'
2
- require 'fake_web'
3
-
4
- describe Imagga::Client do
5
-
6
- subject { described_class.new(api_key: '1', api_secret: '2', base_uri: 'http://example.com') }
7
- let(:extract_response) {'{
8
- "colors":[
9
- {
10
- "url":"http:\/\/www.stockpodium.com\/stock-photo-8244245\/smiling-presenting-2-apples-image.jpg",
11
- "info":{
12
- "image_colors":[
13
- {
14
- "percent":"38.90",
15
- "r":"247",
16
- "g":"245",
17
- "b":"243",
18
- "html_code":"#f7f5f3",
19
- "closest_palette_color":"white",
20
- "closest_palette_color_parent":"white",
21
- "closest_palette_distance":1.8304102578
22
- },
23
- {
24
- "percent":"35.16",
25
- "r":"206",
26
- "g":"167",
27
- "b":"146",
28
- "html_code":"#cea792",
29
- "closest_palette_color":"fresco",
30
- "closest_palette_color_parent":"beige",
31
- "closest_palette_distance":4.93287465177
32
- },
33
- {
34
- "percent":"10.41",
35
- "r":"150",
36
- "g":"60",
37
- "b":"45",
38
- "html_code":"#963c2d",
39
- "closest_palette_color":"ribbon red",
40
- "closest_palette_color_parent":"red",
41
- "closest_palette_distance":5.6423821179
42
- },
43
- {
44
- "percent":"8.38",
45
- "r":"55",
46
- "g":"37",
47
- "b":"31",
48
- "html_code":"#37251f",
49
- "closest_palette_color":"espresso",
50
- "closest_palette_color_parent":"brown",
51
- "closest_palette_distance":5.91329502182
52
- },
53
- {
54
- "percent":"7.15",
55
- "r":"168",
56
- "g":"181",
57
- "b":"45",
58
- "html_code":"#a8b52d",
59
- "closest_palette_color":"mint",
60
- "closest_palette_color_parent":"olive green",
61
- "closest_palette_distance":10.7126507469
62
- }
63
- ],
64
- "foreground_colors":[
65
- {
66
- "percent":"45.92",
67
- "r":"200",
68
- "g":"180",
69
- "b":"112",
70
- "html_code":"#c8b470",
71
- "closest_palette_color":"medium olive",
72
- "closest_palette_color_parent":"skin",
73
- "closest_palette_distance":7.22056402093
74
- },
75
- {
76
- "percent":"34.21",
77
- "r":"162",
78
- "g":"79",
79
- "b":"61",
80
- "html_code":"#a24f3d",
81
- "closest_palette_color":"fiesta",
82
- "closest_palette_color_parent":"red",
83
- "closest_palette_distance":6.29194294147
84
- },
85
- {
86
- "percent":"19.86",
87
- "r":"52",
88
- "g":"35",
89
- "b":"31",
90
- "html_code":"#34231f",
91
- "closest_palette_color":"espresso",
92
- "closest_palette_color_parent":"brown",
93
- "closest_palette_distance":6.49089812519
94
- }
95
- ],
96
- "background_colors":[
97
- {
98
- "percent":"58.05",
99
- "r":"249",
100
- "g":"248",
101
- "b":"247",
102
- "html_code":"#f9f8f7",
103
- "closest_palette_color":"white",
104
- "closest_palette_color_parent":"white",
105
- "closest_palette_distance":2.48109615666
106
- },
107
- {
108
- "percent":"36.41",
109
- "r":"206",
110
- "g":"177",
111
- "b":"161",
112
- "html_code":"#ceb1a1",
113
- "closest_palette_color":"pearl pink",
114
- "closest_palette_color_parent":"light pink",
115
- "closest_palette_distance":4.11506425614
116
- },
117
- {
118
- "percent":"5.55",
119
- "r":"150",
120
- "g":"100",
121
- "b":"77",
122
- "html_code":"#96644d",
123
- "closest_palette_color":"light bronze",
124
- "closest_palette_color_parent":"skin",
125
- "closest_palette_distance":6.37479340147
126
- }
127
- ],
128
- "object_percentage":38.4,
129
- "color_variance":"33"
130
- }
131
- },
132
- {
133
- "url":"http:\/\/www.stockpodium.com\/stock-photo-9289532\/car-dirving-very-fast-under-image.jpg",
134
- "info":{
135
- "image_colors":[
136
- {
137
- "percent":"38.53",
138
- "r":"103",
139
- "g":"98",
140
- "b":"98",
141
- "html_code":"#676262",
142
- "closest_palette_color":"blue steel",
143
- "closest_palette_color_parent":"grey",
144
- "closest_palette_distance":10.486937593
145
- },
146
- {
147
- "percent":"26.31",
148
- "r":"42",
149
- "g":"37",
150
- "b":"33",
151
- "html_code":"#2a2521",
152
- "closest_palette_color":"espresso",
153
- "closest_palette_color_parent":"brown",
154
- "closest_palette_distance":8.14492880108
155
- },
156
- {
157
- "percent":"16.19",
158
- "r":"178",
159
- "g":"182",
160
- "b":"190",
161
- "html_code":"#b2b6be",
162
- "closest_palette_color":"frost",
163
- "closest_palette_color_parent":"light grey",
164
- "closest_palette_distance":2.82095071372
165
- },
166
- {
167
- "percent":"12.06",
168
- "r":"197",
169
- "g":"51",
170
- "b":"45",
171
- "html_code":"#c5332d",
172
- "closest_palette_color":"fiesta",
173
- "closest_palette_color_parent":"red",
174
- "closest_palette_distance":5.41278686601
175
- },
176
- {
177
- "percent":"6.91",
178
- "r":"86",
179
- "g":"97",
180
- "b":"28",
181
- "html_code":"#56611c",
182
- "closest_palette_color":"moss",
183
- "closest_palette_color_parent":"olive green",
184
- "closest_palette_distance":9.97695248255
185
- }
186
- ],
187
- "foreground_colors":[
188
- {
189
- "percent":"62.98",
190
- "r":"199",
191
- "g":"50",
192
- "b":"43",
193
- "html_code":"#c7322b",
194
- "closest_palette_color":"fiesta",
195
- "closest_palette_color_parent":"red",
196
- "closest_palette_distance":5.44027296941
197
- },
198
- {
199
- "percent":"22.01",
200
- "r":"140",
201
- "g":"132",
202
- "b":"144",
203
- "html_code":"#8c8490",
204
- "closest_palette_color":"shadow",
205
- "closest_palette_color_parent":"light grey",
206
- "closest_palette_distance":3.40761167276
207
- },
208
- {
209
- "percent":"15.01",
210
- "r":"61",
211
- "g":"38",
212
- "b":"43",
213
- "html_code":"#3d262b",
214
- "closest_palette_color":"espresso",
215
- "closest_palette_color_parent":"brown",
216
- "closest_palette_distance":5.85441000013
217
- }
218
- ],
219
- "background_colors":[
220
- {
221
- "percent":"41.07",
222
- "r":"103",
223
- "g":"97",
224
- "b":"97",
225
- "html_code":"#676161",
226
- "closest_palette_color":"blue steel",
227
- "closest_palette_color_parent":"grey",
228
- "closest_palette_distance":10.6345471176
229
- },
230
- {
231
- "percent":"39.63",
232
- "r":"53",
233
- "g":"51",
234
- "b":"34",
235
- "html_code":"#353322",
236
- "closest_palette_color":"graphite",
237
- "closest_palette_color_parent":"black",
238
- "closest_palette_distance":9.18317865786
239
- },
240
- {
241
- "percent":"19.29",
242
- "r":"174",
243
- "g":"180",
244
- "b":"187",
245
- "html_code":"#aeb4bb",
246
- "closest_palette_color":"frost",
247
- "closest_palette_color_parent":"light grey",
248
- "closest_palette_distance":2.03931376316
249
- }
250
- ],
251
- "object_percentage":17.99,
252
- "color_variance":"37",
253
- "image_packed":null,
254
- "foreground_packed":null,
255
- "background_packed":null
256
- }
257
- }
258
- ]
259
- }'}
260
-
261
- let(:rank_response) { '{
262
- "rank_similarity":[
263
- {
264
- "id":8774077,
265
- "dist":2597.38299
266
- },
267
- {
268
- "id":9085916,
269
- "dist":2681.33259
270
- }
271
- ]
272
- }'}
273
-
274
- let(:failed_signature_response) { '{"error_code":3,"error_message":"Invalid signature"}' }
275
-
276
- it "has api_key" do
277
- subject.api_key.should == '1'
278
- end
279
-
280
- it "has api_secret" do
281
- subject.api_secret.should == '2'
282
- end
283
-
284
- it "has base_uri" do
285
- subject.base_uri.should == 'http://example.com'
286
- end
287
-
288
- it "knows service path" do
289
- subject.service_path.should == '/colorsearchserver.php'
290
- end
291
-
292
- describe "#extract" do
293
- it "extracts image info" do
294
- FakeWeb.register_uri(:post, 'http://example.com/colorsearchserver.php', body: extract_response)
295
- subject.extract('http://image').size.should == 2
296
- end
297
-
298
- context "with failing request" do
299
- before :each do
300
- FakeWeb.register_uri(:post, 'http://example.com/colorsearchserver.php', body: failed_signature_response)
301
- subject.should_receive(:extract_options).with('http://image', {})
302
- end
303
-
304
- it "raises exception" do
305
- expect { subject.extract('http://image') }.to raise_error(Imagga::ClientException)
306
- end
307
-
308
- it "populates exception object with details" do
309
- begin
310
- subject.extract('http://image')
311
- rescue Imagga::ClientException => e
312
- e.message.should == 'Invalid signature'
313
- e.error_code.should == 3
314
- end
315
- end
316
- end
317
- end
318
-
319
- describe "#rank" do
320
- let(:rank_arguments) { {
321
- color_vector: [{percent: 60, r: 255, g: 0, b: 0}],
322
- type: 'overall',
323
- dist: 3000,
324
- count: 200
325
- } }
326
-
327
- it "does a rank search" do
328
- FakeWeb.register_uri(:post, 'http://example.com/colorsearchserver.php', body: rank_response)
329
- subject.rank(rank_arguments).size.should == 2
330
- end
331
-
332
- context "with failing request" do
333
- before :each do
334
- FakeWeb.register_uri(:post, 'http://example.com/colorsearchserver.php', body: failed_signature_response)
335
- subject.should_receive(:rank_options)
336
- end
337
-
338
- it "raises exception" do
339
- expect { subject.rank(rank_arguments) }.to raise_error(Imagga::ClientException)
340
- end
341
-
342
- it "populates exception object with details" do
343
- begin
344
- subject.rank(rank_arguments)
345
- rescue Imagga::ClientException => e
346
- e.message.should == 'Invalid signature'
347
- e.error_code.should == 3
348
- end
349
- end
350
- end
351
- end
352
- end