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
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ class DummyParametizer; include Imagga::Parametizer; end
4
+
5
+ describe Imagga::Parametizer do
6
+ subject { DummyParametizer.new }
7
+
8
+ describe "#build_comma_separated_string" do
9
+ it "builds list of object fields" do
10
+ object = stub(field: 'asdf')
11
+ subject.build_comma_separated_string([object]*2, :field).should == 'asdf,asdf'
12
+ end
13
+
14
+ it "defaults to default value, if field is not present" do
15
+ object = Object.new
16
+ object2 = stub(field: 'asdf')
17
+ subject.build_comma_separated_string([object, object2], :field, 'qwer').should == 'qwer,asdf'
18
+ end
19
+
20
+ it "produces no result if all items default to the default value" do
21
+ object = Object.new
22
+ subject.build_comma_separated_string([object]*3, :field, 'qwer').should == nil
23
+ end
24
+ end
25
+
26
+ describe "#build_boolean_options" do
27
+ it "produces hash with boolean values coded as 1 and 0" do
28
+ input = { foo: true, boo: false }
29
+ subject.build_boolean_options(input, [:foo, :boo]).should == { foo: 1, boo: 0 }
30
+ end
31
+
32
+ it "produces hash with initial boolean values '1' and '0' coded as 1 and 0" do
33
+ input = { foo: '1', boo: '0' }
34
+ subject.build_boolean_options(input, [:foo, :boo]).should == { foo: 1, boo: 0 }
35
+ end
36
+
37
+ it "produces hash with initial boolean values 1 and 0 coded as 1 and 0" do
38
+ input = { foo: 1, boo: 0 }
39
+ subject.build_boolean_options(input, [:foo, :boo]).should == { foo: 1, boo: 0 }
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Imagga::RankColorParametizer do
4
+ subject { described_class.new }
5
+
6
+ describe "#parametrize" do
7
+ it "generates string presentation of the rank color object" do
8
+ subject.parametrize(Imagga::RankColor.new(percent: 40, hex: '#123456')).should == { color_vector: '40,18,52,86' }
9
+ end
10
+
11
+ it "generates string presentation of many rank color objects" do
12
+ subject.parametrize([
13
+ Imagga::RankColor.new(percent: 40, hex: '#123456'),
14
+ Imagga::RankColor.new(percent: 10, hex: '#23421e'),
15
+ Imagga::RankColor.new(percent: 33, hex: '#09238f')
16
+ ]).should == { color_vector: '40,18,52,86,10,35,66,30,33,9,35,143' }
17
+ end
18
+
19
+ it "does not change the given color vector string" do
20
+ subject.parametrize([
21
+ Imagga::RankColor.new(percent: 40, hex: '#123456'),
22
+ '10,35,66,30',
23
+ Imagga::RankColor.new(percent: 33, hex: '#09238f')
24
+ ]).should == { color_vector: '40,18,52,86,10,35,66,30,33,9,35,143' }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+ describe Imagga::RankColor do
4
+ context "when initialized through rgb values" do
5
+ subject { described_class.new(percent: 40, r: 200, g: 100, b: 50) }
6
+
7
+ it "has percent" do
8
+ subject.percent.should == 40
9
+ end
10
+
11
+ it "has r value" do
12
+ subject.r.should == 200
13
+ end
14
+
15
+ it "has g value" do
16
+ subject.g.should == 100
17
+ end
18
+
19
+ it "has b value" do
20
+ subject.b.should == 50
21
+ end
22
+
23
+ it "has hex value" do
24
+ subject.hex.should == '#c86432'
25
+ end
26
+ end
27
+
28
+ context "when initialized through hex value" do
29
+ subject { described_class.new(percent: 40, hex: '#c86432') }
30
+
31
+ it "has percent" do
32
+ subject.percent.should == 40
33
+ end
34
+
35
+ it "has r value" do
36
+ subject.r.should == 200
37
+ end
38
+
39
+ it "has g value" do
40
+ subject.g.should == 100
41
+ end
42
+
43
+ it "has b value" do
44
+ subject.b.should == 50
45
+ end
46
+
47
+ it "has hex value" do
48
+ subject.hex.should == '#c86432'
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Imagga::RankOptions do
4
+ subject { described_class.new('apikey', 'secret') }
5
+
6
+ describe "#options" do
7
+
8
+ it "builds options" do
9
+ subject.options(
10
+ color_vector: '49,33,44,55,11,22,33,44',
11
+ urls: 'http://image',
12
+ type: :object,
13
+ dist: 3000,
14
+ count: 10
15
+ ).should == {
16
+ api_key: 'apikey',
17
+ color_vector: '49,33,44,55,11,22,33,44',
18
+ count: '10',
19
+ dist: '3000',
20
+ method: 'imagga.colorsearch.rank',
21
+ sig: '96185035e02a781a7b3455eb500eeec9',
22
+ type: 'object',
23
+ urls: 'http://image',
24
+ v: '1.0'
25
+ }
26
+ end
27
+ end
28
+ end
@@ -1,18 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Imagga::RankResultBuilder do
4
- let(:result) { {
5
- 'rank_similarity' => [
6
- {
7
- "id" => 8774077,
8
- "dist" => 2597.38299
9
- },
10
- {
11
- "id" => 9085916,
12
- "dist" => 2681.33259
13
- }
14
- ]
15
- } }
4
+ let(:result) { JSON.parse(IO.read('./spec/fixtures/rank_response.txt')) }
16
5
 
17
6
  subject { described_class.new }
18
7
 
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Imagga::ResolutionParametizer do
4
+ subject { described_class.new }
5
+
6
+ describe "#parametrize" do
7
+ it "creates a resolutions parameter for the service" do
8
+ subject.parametrize('123x342').should == { resolutions: '123,342' }
9
+ end
10
+ end
11
+
12
+ describe "#build_resolutions" do
13
+ it "produces empty string from nil input" do
14
+ subject.build_resolutions(nil).should == ''
15
+ end
16
+
17
+ it "produces empty string from empty string input" do
18
+ subject.build_resolutions('').should == ''
19
+ end
20
+
21
+ it "produces empty string from empty array" do
22
+ subject.build_resolutions([]).should == ''
23
+ end
24
+
25
+ it "produces comma separated string from single a x b resolution string" do
26
+ subject.build_resolutions('123x234').should == '123,234'
27
+ end
28
+
29
+ it "produces comma separated string from many a x b resolutions in one string" do
30
+ subject.build_resolutions('123x234,90x33,432x88').should == '123,234,90,33,432,88'
31
+ end
32
+
33
+ it "leaves comma seperated resolution as is" do
34
+ subject.build_resolutions('123,234').should == '123,234'
35
+ end
36
+
37
+ it "produces comma separated string from single element a x b resolution array" do
38
+ subject.build_resolutions(['123x234']).should == '123,234'
39
+ end
40
+
41
+ it "produces comma separated string from many a x b resolutions in one array" do
42
+ subject.build_resolutions(['123x234','90x33','432x88']).should == '123,234,90,33,432,88'
43
+ end
44
+
45
+ it "produces comma separated string from mixed format array" do
46
+ subject.build_resolutions(['123x234,90,33','432x88']).should == '123,234,90,33,432,88'
47
+ end
48
+ end
49
+
50
+ describe "#build_resolution_string" do
51
+ it "translates a x b resolution form to comma seperated string" do
52
+ subject.build_resolution_string('123x234').should == '123,234'
53
+ end
54
+
55
+ it "leaves comma seperated resolution as is" do
56
+ subject.build_resolution_string('123,234').should == '123,234'
57
+ end
58
+ end
59
+ end
60
+
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imagga
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.0.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Mart Karu
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-23 00:00:00.000000000 Z
11
+ date: 2013-04-06 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: httparty
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: json
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,15 +34,27 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
45
40
  version: '1.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: color
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.4.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.4.1
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: rspec
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
59
  - - ~>
52
60
  - !ruby/object:Gem::Version
@@ -54,7 +62,6 @@ dependencies:
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
66
  - - ~>
60
67
  - !ruby/object:Gem::Version
@@ -62,7 +69,6 @@ dependencies:
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: rake
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
73
  - - ! '>='
68
74
  - !ruby/object:Gem::Version
@@ -70,7 +76,6 @@ dependencies:
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
80
  - - ! '>='
76
81
  - !ruby/object:Gem::Version
@@ -78,7 +83,6 @@ dependencies:
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: fakeweb
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
87
  - - ! '>='
84
88
  - !ruby/object:Gem::Version
@@ -86,7 +90,6 @@ dependencies:
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
94
  - - ! '>='
92
95
  - !ruby/object:Gem::Version
@@ -108,58 +111,90 @@ files:
108
111
  - imagga.gemspec
109
112
  - lib/imagga.rb
110
113
  - lib/imagga/client.rb
114
+ - lib/imagga/commands.rb
115
+ - lib/imagga/core_client.rb
111
116
  - lib/imagga/exceptions.rb
112
- - lib/imagga/extract_options.rb
113
- - lib/imagga/extract_result_builder.rb
114
117
  - lib/imagga/image.rb
115
- - lib/imagga/rank_result_builder.rb
118
+ - lib/imagga/image_or_url_parametizer.rb
119
+ - lib/imagga/options.rb
120
+ - lib/imagga/parametizer.rb
121
+ - lib/imagga/rank_color_parametizer.rb
122
+ - lib/imagga/resolution_parametizer.rb
123
+ - lib/imagga/result_builder.rb
116
124
  - lib/imagga/version.rb
117
- - spec/lib/client_spec.rb
125
+ - spec/fixtures/crop_response.txt
126
+ - spec/fixtures/extract_response.txt
127
+ - spec/fixtures/rank_response.txt
128
+ - spec/integration/crop_spec.rb
129
+ - spec/integration/extract_spec.rb
130
+ - spec/integration/rank_spec.rb
131
+ - spec/lib/commands_spec.rb
132
+ - spec/lib/core_client_spec.rb
133
+ - spec/lib/crop_info_spec.rb
134
+ - spec/lib/crop_options_spec.rb
135
+ - spec/lib/crop_result_builder_spec.rb
118
136
  - spec/lib/extract_result_builder_spec.rb
119
137
  - spec/lib/extraction_options_spec.rb
120
138
  - spec/lib/image_color_spec.rb
139
+ - spec/lib/image_crop_spec.rb
121
140
  - spec/lib/image_info_spec.rb
141
+ - spec/lib/image_or_url_parametizer_spec.rb
122
142
  - spec/lib/image_spec.rb
143
+ - spec/lib/parametizer_spec.rb
144
+ - spec/lib/rank_color_parametizer_spec.rb
145
+ - spec/lib/rank_color_spec.rb
146
+ - spec/lib/rank_options_spec.rb
123
147
  - spec/lib/rank_result_builder_spec.rb
124
148
  - spec/lib/rank_similarity_spec.rb
149
+ - spec/lib/resolution_parametizer_spec.rb
125
150
  - spec/spec_helper.rb
126
151
  homepage: ''
127
152
  licenses: []
153
+ metadata: {}
128
154
  post_install_message:
129
155
  rdoc_options: []
130
156
  require_paths:
131
157
  - lib
132
158
  required_ruby_version: !ruby/object:Gem::Requirement
133
- none: false
134
159
  requirements:
135
160
  - - ! '>='
136
161
  - !ruby/object:Gem::Version
137
162
  version: '0'
138
- segments:
139
- - 0
140
- hash: 1906087538434497145
141
163
  required_rubygems_version: !ruby/object:Gem::Requirement
142
- none: false
143
164
  requirements:
144
165
  - - ! '>='
145
166
  - !ruby/object:Gem::Version
146
167
  version: '0'
147
- segments:
148
- - 0
149
- hash: 1906087538434497145
150
168
  requirements: []
151
169
  rubyforge_project:
152
- rubygems_version: 1.8.25
170
+ rubygems_version: 2.0.3
153
171
  signing_key:
154
- specification_version: 3
172
+ specification_version: 4
155
173
  summary: Ruby client for accessing Imagga API
156
174
  test_files:
157
- - spec/lib/client_spec.rb
175
+ - spec/fixtures/crop_response.txt
176
+ - spec/fixtures/extract_response.txt
177
+ - spec/fixtures/rank_response.txt
178
+ - spec/integration/crop_spec.rb
179
+ - spec/integration/extract_spec.rb
180
+ - spec/integration/rank_spec.rb
181
+ - spec/lib/commands_spec.rb
182
+ - spec/lib/core_client_spec.rb
183
+ - spec/lib/crop_info_spec.rb
184
+ - spec/lib/crop_options_spec.rb
185
+ - spec/lib/crop_result_builder_spec.rb
158
186
  - spec/lib/extract_result_builder_spec.rb
159
187
  - spec/lib/extraction_options_spec.rb
160
188
  - spec/lib/image_color_spec.rb
189
+ - spec/lib/image_crop_spec.rb
161
190
  - spec/lib/image_info_spec.rb
191
+ - spec/lib/image_or_url_parametizer_spec.rb
162
192
  - spec/lib/image_spec.rb
193
+ - spec/lib/parametizer_spec.rb
194
+ - spec/lib/rank_color_parametizer_spec.rb
195
+ - spec/lib/rank_color_spec.rb
196
+ - spec/lib/rank_options_spec.rb
163
197
  - spec/lib/rank_result_builder_spec.rb
164
198
  - spec/lib/rank_similarity_spec.rb
199
+ - spec/lib/resolution_parametizer_spec.rb
165
200
  - spec/spec_helper.rb
@@ -1,74 +0,0 @@
1
- module Imagga
2
- class BaseOptions
3
- attr_accessor :api_key, :api_secret
4
-
5
- def initialize(api_key, api_secret)
6
- @version = '1.0'
7
- @api_key = api_key || raise_missing(:api_key)
8
- @api_secret = api_secret || raise_missing(:api_secret)
9
- end
10
-
11
- def base_options
12
- { v: @version, api_key: @api_key }
13
- end
14
-
15
- def sign(options)
16
- sorted_options_string = options.keys.sort.map do |key|
17
- "%s=%s" % [key.to_s, options[key]]
18
- end.join('') << @api_secret
19
- Digest::MD5.hexdigest(sorted_options_string)
20
- end
21
- end
22
-
23
- class ExtractOptions < BaseOptions
24
-
25
- def options(urls_or_images, additional_options={})
26
- options = base_options.merge(
27
- method: 'imagga.colorsearch.extract',
28
- urls: build_urls(urls_or_images),
29
- )
30
-
31
- if ids = build_ids(urls_or_images)
32
- options.merge!(ids: ids)
33
- end
34
-
35
- [:extract_overall_colors, :extract_object_colors].each do |key|
36
- if additional_options.keys.include?(key) && (value = additional_options[key] ? 1 : 0)
37
- options.merge!(key => value)
38
- end
39
- end
40
-
41
- options.merge!(sig: sign(options))
42
- end
43
-
44
- def build_urls(urls_or_images)
45
- [urls_or_images].flatten.map{ |o| o.url rescue o }.join(',')
46
- end
47
-
48
- def build_ids(urls_or_images)
49
- ids = [urls_or_images].flatten.map{ |o| o.id rescue 0 }
50
- return if ids.uniq == [0]
51
- ids.join(',')
52
- end
53
-
54
- end
55
-
56
- class RankOptions < BaseOptions
57
- def options(opts)
58
- color_vector = opts.fetch(:color_vector)
59
- type = opts.fetch(:type)
60
- dist = opts.fetch(:dist)
61
- count = opts.fetch(:count)
62
-
63
- options = base_options.merge(
64
- method: 'imagga.colorsearch.rank',
65
- color_vector: color_vector,
66
- type: type,
67
- dist: dist,
68
- count: count
69
- )
70
-
71
- options.merge!(sig: sign(options))
72
- end
73
- end
74
- end