imagga 0.0.3 → 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.
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