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.
- checksums.yaml +15 -0
- data/README.md +28 -1
- data/imagga.gemspec +1 -0
- data/lib/imagga.rb +8 -3
- data/lib/imagga/client.rb +12 -34
- data/lib/imagga/commands.rb +42 -0
- data/lib/imagga/core_client.rb +25 -0
- data/lib/imagga/exceptions.rb +3 -0
- data/lib/imagga/image.rb +59 -2
- data/lib/imagga/image_or_url_parametizer.rb +21 -0
- data/lib/imagga/options.rb +74 -0
- data/lib/imagga/parametizer.rb +18 -0
- data/lib/imagga/rank_color_parametizer.rb +17 -0
- data/lib/imagga/resolution_parametizer.rb +17 -0
- data/lib/imagga/result_builder.rb +27 -0
- data/lib/imagga/version.rb +1 -1
- data/spec/fixtures/crop_response.txt +62 -0
- data/spec/fixtures/extract_response.txt +253 -0
- data/spec/fixtures/rank_response.txt +12 -0
- data/spec/integration/crop_spec.rb +60 -0
- data/spec/integration/extract_spec.rb +51 -0
- data/spec/integration/rank_spec.rb +103 -0
- data/spec/lib/commands_spec.rb +70 -0
- data/spec/lib/core_client_spec.rb +43 -0
- data/spec/lib/crop_info_spec.rb +15 -0
- data/spec/lib/crop_options_spec.rb +24 -0
- data/spec/lib/crop_result_builder_spec.rb +4 -0
- data/spec/lib/extraction_options_spec.rb +16 -51
- data/spec/lib/image_crop_spec.rb +34 -0
- data/spec/lib/image_or_url_parametizer_spec.rb +65 -0
- data/spec/lib/parametizer_spec.rb +42 -0
- data/spec/lib/rank_color_parametizer_spec.rb +27 -0
- data/spec/lib/rank_color_spec.rb +51 -0
- data/spec/lib/rank_options_spec.rb +28 -0
- data/spec/lib/rank_result_builder_spec.rb +1 -12
- data/spec/lib/resolution_parametizer_spec.rb +60 -0
- metadata +63 -28
- data/lib/imagga/extract_options.rb +0 -74
- data/lib/imagga/extract_result_builder.rb +0 -11
- data/lib/imagga/rank_result_builder.rb +0 -9
- data/spec/lib/client_spec.rb +0 -352
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            module Imagga
         | 
| 2 | 
            +
              class ResolutionParametizer
         | 
| 3 | 
            +
                include Parametizer
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def parametrize(resolution_array_or_string)
         | 
| 6 | 
            +
                  { resolutions: build_resolutions(resolution_array_or_string) }
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def build_resolutions(resolution_array_or_string)
         | 
| 10 | 
            +
                  [resolution_array_or_string].flatten.map{ |o| build_resolution_string(o) rescue o }.join(',')
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def build_resolution_string(resolution)
         | 
| 14 | 
            +
                  resolution.gsub('x', ',')
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            module Imagga
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              class BaseBuilder
         | 
| 4 | 
            +
                def build_from(result)
         | 
| 5 | 
            +
                  result[key].map { |o| result_class.new(o) }
         | 
| 6 | 
            +
                end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                def key; self.class::KEY; end
         | 
| 9 | 
            +
                def result_class; self.class::CLASS; end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              class RankResultBuilder < BaseBuilder
         | 
| 13 | 
            +
                KEY   = 'rank_similarity'
         | 
| 14 | 
            +
                CLASS = RankSimilarity
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              class ExtractResultBuilder < BaseBuilder
         | 
| 18 | 
            +
                KEY   = 'colors'
         | 
| 19 | 
            +
                CLASS = ImageInfo
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              class CropResultBuilder < BaseBuilder
         | 
| 23 | 
            +
                KEY   = 'smart_croppings'
         | 
| 24 | 
            +
                CLASS = CropInfo
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            end
         | 
    
        data/lib/imagga/version.rb
    CHANGED
    
    
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            {
         | 
| 2 | 
            +
              "smart_croppings":[
         | 
| 3 | 
            +
                {
         | 
| 4 | 
            +
                  "url":"http:\/\/www.stockpodium.com\/stock-photo-7890736\/couple-child-spending-time-together-image.jpg",
         | 
| 5 | 
            +
                  "croppings":[
         | 
| 6 | 
            +
                    {
         | 
| 7 | 
            +
                      "target_width":"150",
         | 
| 8 | 
            +
                      "target_height":"200",
         | 
| 9 | 
            +
                      "x1":156,
         | 
| 10 | 
            +
                      "y1":0,
         | 
| 11 | 
            +
                      "x2":355,
         | 
| 12 | 
            +
                      "y2":265
         | 
| 13 | 
            +
                    },
         | 
| 14 | 
            +
                    {
         | 
| 15 | 
            +
                      "target_width":"100",
         | 
| 16 | 
            +
                      "target_height":"50",
         | 
| 17 | 
            +
                      "x1":0,
         | 
| 18 | 
            +
                      "y1":0,
         | 
| 19 | 
            +
                      "x2":399,
         | 
| 20 | 
            +
                      "y2":200
         | 
| 21 | 
            +
                    },
         | 
| 22 | 
            +
                    {
         | 
| 23 | 
            +
                      "target_width":"75",
         | 
| 24 | 
            +
                      "target_height":"75",
         | 
| 25 | 
            +
                      "x1":86,
         | 
| 26 | 
            +
                      "y1":0,
         | 
| 27 | 
            +
                      "x2":352,
         | 
| 28 | 
            +
                      "y2":265
         | 
| 29 | 
            +
                    }
         | 
| 30 | 
            +
                  ]
         | 
| 31 | 
            +
                },
         | 
| 32 | 
            +
                {
         | 
| 33 | 
            +
                  "url":"http:\/\/www.stockpodium.com\/stock-photo-7314730\/hand-keys-car-image.jpg",
         | 
| 34 | 
            +
                  "croppings":[
         | 
| 35 | 
            +
                    {
         | 
| 36 | 
            +
                      "target_width":"150",
         | 
| 37 | 
            +
                      "target_height":"200",
         | 
| 38 | 
            +
                      "x1":61,
         | 
| 39 | 
            +
                      "y1":0,
         | 
| 40 | 
            +
                      "x2":286,
         | 
| 41 | 
            +
                      "y2":299
         | 
| 42 | 
            +
                    },
         | 
| 43 | 
            +
                    {
         | 
| 44 | 
            +
                      "target_width":"100",
         | 
| 45 | 
            +
                      "target_height":"50",
         | 
| 46 | 
            +
                      "x1":0,
         | 
| 47 | 
            +
                      "y1":37,
         | 
| 48 | 
            +
                      "x2":399,
         | 
| 49 | 
            +
                      "y2":237
         | 
| 50 | 
            +
                    },
         | 
| 51 | 
            +
                    {
         | 
| 52 | 
            +
                      "target_width":"75",
         | 
| 53 | 
            +
                      "target_height":"75",
         | 
| 54 | 
            +
                      "x1":24,
         | 
| 55 | 
            +
                      "y1":0,
         | 
| 56 | 
            +
                      "x2":324,
         | 
| 57 | 
            +
                      "y2":299
         | 
| 58 | 
            +
                    }
         | 
| 59 | 
            +
                  ]
         | 
| 60 | 
            +
                }
         | 
| 61 | 
            +
              ]
         | 
| 62 | 
            +
            }
         | 
| @@ -0,0 +1,253 @@ | |
| 1 | 
            +
            {
         | 
| 2 | 
            +
               "colors":[
         | 
| 3 | 
            +
                  {
         | 
| 4 | 
            +
                     "url":"http:\/\/www.stockpodium.com\/stock-photo-8244245\/smiling-presenting-2-apples-image.jpg",
         | 
| 5 | 
            +
                     "info":{
         | 
| 6 | 
            +
                        "image_colors":[
         | 
| 7 | 
            +
                           {
         | 
| 8 | 
            +
                              "percent":"38.90",
         | 
| 9 | 
            +
                              "r":"247",
         | 
| 10 | 
            +
                              "g":"245",
         | 
| 11 | 
            +
                              "b":"243",
         | 
| 12 | 
            +
                              "html_code":"#f7f5f3",
         | 
| 13 | 
            +
                              "closest_palette_color":"white",
         | 
| 14 | 
            +
                              "closest_palette_color_parent":"white",
         | 
| 15 | 
            +
                              "closest_palette_distance":1.8304102578
         | 
| 16 | 
            +
                           },
         | 
| 17 | 
            +
                           {
         | 
| 18 | 
            +
                              "percent":"35.16",
         | 
| 19 | 
            +
                              "r":"206",
         | 
| 20 | 
            +
                              "g":"167",
         | 
| 21 | 
            +
                              "b":"146",
         | 
| 22 | 
            +
                              "html_code":"#cea792",
         | 
| 23 | 
            +
                              "closest_palette_color":"fresco",
         | 
| 24 | 
            +
                              "closest_palette_color_parent":"beige",
         | 
| 25 | 
            +
                              "closest_palette_distance":4.93287465177
         | 
| 26 | 
            +
                           },
         | 
| 27 | 
            +
                           {
         | 
| 28 | 
            +
                              "percent":"10.41",
         | 
| 29 | 
            +
                              "r":"150",
         | 
| 30 | 
            +
                              "g":"60",
         | 
| 31 | 
            +
                              "b":"45",
         | 
| 32 | 
            +
                              "html_code":"#963c2d",
         | 
| 33 | 
            +
                              "closest_palette_color":"ribbon red",
         | 
| 34 | 
            +
                              "closest_palette_color_parent":"red",
         | 
| 35 | 
            +
                              "closest_palette_distance":5.6423821179
         | 
| 36 | 
            +
                           },
         | 
| 37 | 
            +
                           {
         | 
| 38 | 
            +
                              "percent":"8.38",
         | 
| 39 | 
            +
                              "r":"55",
         | 
| 40 | 
            +
                              "g":"37",
         | 
| 41 | 
            +
                              "b":"31",
         | 
| 42 | 
            +
                              "html_code":"#37251f",
         | 
| 43 | 
            +
                              "closest_palette_color":"espresso",
         | 
| 44 | 
            +
                              "closest_palette_color_parent":"brown",
         | 
| 45 | 
            +
                              "closest_palette_distance":5.91329502182
         | 
| 46 | 
            +
                           },
         | 
| 47 | 
            +
                           {
         | 
| 48 | 
            +
                              "percent":"7.15",
         | 
| 49 | 
            +
                              "r":"168",
         | 
| 50 | 
            +
                              "g":"181",
         | 
| 51 | 
            +
                              "b":"45",
         | 
| 52 | 
            +
                              "html_code":"#a8b52d",
         | 
| 53 | 
            +
                              "closest_palette_color":"mint",
         | 
| 54 | 
            +
                              "closest_palette_color_parent":"olive green",
         | 
| 55 | 
            +
                              "closest_palette_distance":10.7126507469
         | 
| 56 | 
            +
                           }
         | 
| 57 | 
            +
                        ],
         | 
| 58 | 
            +
                        "foreground_colors":[
         | 
| 59 | 
            +
                           {
         | 
| 60 | 
            +
                              "percent":"45.92",
         | 
| 61 | 
            +
                              "r":"200",
         | 
| 62 | 
            +
                              "g":"180",
         | 
| 63 | 
            +
                              "b":"112",
         | 
| 64 | 
            +
                              "html_code":"#c8b470",
         | 
| 65 | 
            +
                              "closest_palette_color":"medium olive",
         | 
| 66 | 
            +
                              "closest_palette_color_parent":"skin",
         | 
| 67 | 
            +
                              "closest_palette_distance":7.22056402093
         | 
| 68 | 
            +
                           },
         | 
| 69 | 
            +
                           {
         | 
| 70 | 
            +
                              "percent":"34.21",
         | 
| 71 | 
            +
                              "r":"162",
         | 
| 72 | 
            +
                              "g":"79",
         | 
| 73 | 
            +
                              "b":"61",
         | 
| 74 | 
            +
                              "html_code":"#a24f3d",
         | 
| 75 | 
            +
                              "closest_palette_color":"fiesta",
         | 
| 76 | 
            +
                              "closest_palette_color_parent":"red",
         | 
| 77 | 
            +
                              "closest_palette_distance":6.29194294147
         | 
| 78 | 
            +
                           },
         | 
| 79 | 
            +
                           {
         | 
| 80 | 
            +
                              "percent":"19.86",
         | 
| 81 | 
            +
                              "r":"52",
         | 
| 82 | 
            +
                              "g":"35",
         | 
| 83 | 
            +
                              "b":"31",
         | 
| 84 | 
            +
                              "html_code":"#34231f",
         | 
| 85 | 
            +
                              "closest_palette_color":"espresso",
         | 
| 86 | 
            +
                              "closest_palette_color_parent":"brown",
         | 
| 87 | 
            +
                              "closest_palette_distance":6.49089812519
         | 
| 88 | 
            +
                           }
         | 
| 89 | 
            +
                        ],
         | 
| 90 | 
            +
                        "background_colors":[
         | 
| 91 | 
            +
                           {
         | 
| 92 | 
            +
                              "percent":"58.05",
         | 
| 93 | 
            +
                              "r":"249",
         | 
| 94 | 
            +
                              "g":"248",
         | 
| 95 | 
            +
                              "b":"247",
         | 
| 96 | 
            +
                              "html_code":"#f9f8f7",
         | 
| 97 | 
            +
                              "closest_palette_color":"white",
         | 
| 98 | 
            +
                              "closest_palette_color_parent":"white",
         | 
| 99 | 
            +
                              "closest_palette_distance":2.48109615666
         | 
| 100 | 
            +
                           },
         | 
| 101 | 
            +
                           {
         | 
| 102 | 
            +
                              "percent":"36.41",
         | 
| 103 | 
            +
                              "r":"206",
         | 
| 104 | 
            +
                              "g":"177",
         | 
| 105 | 
            +
                              "b":"161",
         | 
| 106 | 
            +
                              "html_code":"#ceb1a1",
         | 
| 107 | 
            +
                              "closest_palette_color":"pearl pink",
         | 
| 108 | 
            +
                              "closest_palette_color_parent":"light pink",
         | 
| 109 | 
            +
                              "closest_palette_distance":4.11506425614
         | 
| 110 | 
            +
                           },
         | 
| 111 | 
            +
                           {
         | 
| 112 | 
            +
                              "percent":"5.55",
         | 
| 113 | 
            +
                              "r":"150",
         | 
| 114 | 
            +
                              "g":"100",
         | 
| 115 | 
            +
                              "b":"77",
         | 
| 116 | 
            +
                              "html_code":"#96644d",
         | 
| 117 | 
            +
                              "closest_palette_color":"light bronze",
         | 
| 118 | 
            +
                              "closest_palette_color_parent":"skin",
         | 
| 119 | 
            +
                              "closest_palette_distance":6.37479340147
         | 
| 120 | 
            +
                           }
         | 
| 121 | 
            +
                        ],
         | 
| 122 | 
            +
                        "object_percentage":38.4,
         | 
| 123 | 
            +
                        "color_variance":"33"
         | 
| 124 | 
            +
                     }
         | 
| 125 | 
            +
                  },
         | 
| 126 | 
            +
                  {
         | 
| 127 | 
            +
                     "url":"http:\/\/www.stockpodium.com\/stock-photo-9289532\/car-dirving-very-fast-under-image.jpg",
         | 
| 128 | 
            +
                     "info":{
         | 
| 129 | 
            +
                        "image_colors":[
         | 
| 130 | 
            +
                           {
         | 
| 131 | 
            +
                              "percent":"38.53",
         | 
| 132 | 
            +
                              "r":"103",
         | 
| 133 | 
            +
                              "g":"98",
         | 
| 134 | 
            +
                              "b":"98",
         | 
| 135 | 
            +
                              "html_code":"#676262",
         | 
| 136 | 
            +
                              "closest_palette_color":"blue steel",
         | 
| 137 | 
            +
                              "closest_palette_color_parent":"grey",
         | 
| 138 | 
            +
                              "closest_palette_distance":10.486937593
         | 
| 139 | 
            +
                           },
         | 
| 140 | 
            +
                           {
         | 
| 141 | 
            +
                              "percent":"26.31",
         | 
| 142 | 
            +
                              "r":"42",
         | 
| 143 | 
            +
                              "g":"37",
         | 
| 144 | 
            +
                              "b":"33",
         | 
| 145 | 
            +
                              "html_code":"#2a2521",
         | 
| 146 | 
            +
                              "closest_palette_color":"espresso",
         | 
| 147 | 
            +
                              "closest_palette_color_parent":"brown",
         | 
| 148 | 
            +
                              "closest_palette_distance":8.14492880108
         | 
| 149 | 
            +
                           },
         | 
| 150 | 
            +
                           {
         | 
| 151 | 
            +
                              "percent":"16.19",
         | 
| 152 | 
            +
                              "r":"178",
         | 
| 153 | 
            +
                              "g":"182",
         | 
| 154 | 
            +
                              "b":"190",
         | 
| 155 | 
            +
                              "html_code":"#b2b6be",
         | 
| 156 | 
            +
                              "closest_palette_color":"frost",
         | 
| 157 | 
            +
                              "closest_palette_color_parent":"light grey",
         | 
| 158 | 
            +
                              "closest_palette_distance":2.82095071372
         | 
| 159 | 
            +
                           },
         | 
| 160 | 
            +
                           {
         | 
| 161 | 
            +
                              "percent":"12.06",
         | 
| 162 | 
            +
                              "r":"197",
         | 
| 163 | 
            +
                              "g":"51",
         | 
| 164 | 
            +
                              "b":"45",
         | 
| 165 | 
            +
                              "html_code":"#c5332d",
         | 
| 166 | 
            +
                              "closest_palette_color":"fiesta",
         | 
| 167 | 
            +
                              "closest_palette_color_parent":"red",
         | 
| 168 | 
            +
                              "closest_palette_distance":5.41278686601
         | 
| 169 | 
            +
                           },
         | 
| 170 | 
            +
                           {
         | 
| 171 | 
            +
                              "percent":"6.91",
         | 
| 172 | 
            +
                              "r":"86",
         | 
| 173 | 
            +
                              "g":"97",
         | 
| 174 | 
            +
                              "b":"28",
         | 
| 175 | 
            +
                              "html_code":"#56611c",
         | 
| 176 | 
            +
                              "closest_palette_color":"moss",
         | 
| 177 | 
            +
                              "closest_palette_color_parent":"olive green",
         | 
| 178 | 
            +
                              "closest_palette_distance":9.97695248255
         | 
| 179 | 
            +
                           }
         | 
| 180 | 
            +
                        ],
         | 
| 181 | 
            +
                        "foreground_colors":[
         | 
| 182 | 
            +
                           {
         | 
| 183 | 
            +
                              "percent":"62.98",
         | 
| 184 | 
            +
                              "r":"199",
         | 
| 185 | 
            +
                              "g":"50",
         | 
| 186 | 
            +
                              "b":"43",
         | 
| 187 | 
            +
                              "html_code":"#c7322b",
         | 
| 188 | 
            +
                              "closest_palette_color":"fiesta",
         | 
| 189 | 
            +
                              "closest_palette_color_parent":"red",
         | 
| 190 | 
            +
                              "closest_palette_distance":5.44027296941
         | 
| 191 | 
            +
                           },
         | 
| 192 | 
            +
                           {
         | 
| 193 | 
            +
                              "percent":"22.01",
         | 
| 194 | 
            +
                              "r":"140",
         | 
| 195 | 
            +
                              "g":"132",
         | 
| 196 | 
            +
                              "b":"144",
         | 
| 197 | 
            +
                              "html_code":"#8c8490",
         | 
| 198 | 
            +
                              "closest_palette_color":"shadow",
         | 
| 199 | 
            +
                              "closest_palette_color_parent":"light grey",
         | 
| 200 | 
            +
                              "closest_palette_distance":3.40761167276
         | 
| 201 | 
            +
                           },
         | 
| 202 | 
            +
                           {
         | 
| 203 | 
            +
                              "percent":"15.01",
         | 
| 204 | 
            +
                              "r":"61",
         | 
| 205 | 
            +
                              "g":"38",
         | 
| 206 | 
            +
                              "b":"43",
         | 
| 207 | 
            +
                              "html_code":"#3d262b",
         | 
| 208 | 
            +
                              "closest_palette_color":"espresso",
         | 
| 209 | 
            +
                              "closest_palette_color_parent":"brown",
         | 
| 210 | 
            +
                              "closest_palette_distance":5.85441000013
         | 
| 211 | 
            +
                           }
         | 
| 212 | 
            +
                        ],
         | 
| 213 | 
            +
                        "background_colors":[
         | 
| 214 | 
            +
                           {
         | 
| 215 | 
            +
                              "percent":"41.07",
         | 
| 216 | 
            +
                              "r":"103",
         | 
| 217 | 
            +
                              "g":"97",
         | 
| 218 | 
            +
                              "b":"97",
         | 
| 219 | 
            +
                              "html_code":"#676161",
         | 
| 220 | 
            +
                              "closest_palette_color":"blue steel",
         | 
| 221 | 
            +
                              "closest_palette_color_parent":"grey",
         | 
| 222 | 
            +
                              "closest_palette_distance":10.6345471176
         | 
| 223 | 
            +
                           },
         | 
| 224 | 
            +
                           {
         | 
| 225 | 
            +
                              "percent":"39.63",
         | 
| 226 | 
            +
                              "r":"53",
         | 
| 227 | 
            +
                              "g":"51",
         | 
| 228 | 
            +
                              "b":"34",
         | 
| 229 | 
            +
                              "html_code":"#353322",
         | 
| 230 | 
            +
                              "closest_palette_color":"graphite",
         | 
| 231 | 
            +
                              "closest_palette_color_parent":"black",
         | 
| 232 | 
            +
                              "closest_palette_distance":9.18317865786
         | 
| 233 | 
            +
                           },
         | 
| 234 | 
            +
                           {
         | 
| 235 | 
            +
                              "percent":"19.29",
         | 
| 236 | 
            +
                              "r":"174",
         | 
| 237 | 
            +
                              "g":"180",
         | 
| 238 | 
            +
                              "b":"187",
         | 
| 239 | 
            +
                              "html_code":"#aeb4bb",
         | 
| 240 | 
            +
                              "closest_palette_color":"frost",
         | 
| 241 | 
            +
                              "closest_palette_color_parent":"light grey",
         | 
| 242 | 
            +
                              "closest_palette_distance":2.03931376316
         | 
| 243 | 
            +
                           }
         | 
| 244 | 
            +
                        ],
         | 
| 245 | 
            +
                        "object_percentage":17.99,
         | 
| 246 | 
            +
                        "color_variance":"37",
         | 
| 247 | 
            +
                        "image_packed":null,
         | 
| 248 | 
            +
                        "foreground_packed":null,
         | 
| 249 | 
            +
                        "background_packed":null
         | 
| 250 | 
            +
                     }
         | 
| 251 | 
            +
                  }
         | 
| 252 | 
            +
               ]
         | 
| 253 | 
            +
            }
         | 
| @@ -0,0 +1,60 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'fake_web'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe "Image crop suggestions" do
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              let(:base_uri)         { 'http://example.com' }
         | 
| 7 | 
            +
              let(:image_url)        { 'http://image' }
         | 
| 8 | 
            +
              let(:fake_service_url) { 'http://example.com/extractionrestserver.php' }
         | 
| 9 | 
            +
              let(:crop_response)    { IO.read('./spec/fixtures/crop_response.txt') }
         | 
| 10 | 
            +
              let(:failed_signature_response) { '{"error_code":3,"error_message":"Invalid signature"}' }
         | 
| 11 | 
            +
              let(:params) { [
         | 
| 12 | 
            +
                [
         | 
| 13 | 
            +
                  Imagga::Image.new(url: 'http://image1', id: '333'),
         | 
| 14 | 
            +
                  Imagga::Image.new(url: 'http://image2')
         | 
| 15 | 
            +
                ],
         | 
| 16 | 
            +
                  resolutions: ['100x50', '40x200'],
         | 
| 17 | 
            +
                  no_scaling: true
         | 
| 18 | 
            +
                ]
         | 
| 19 | 
            +
              }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              subject { Imagga::Client.new(api_key: '123456', api_secret: 'secret', base_uri: base_uri) }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              context "with successful request" do
         | 
| 24 | 
            +
                before do
         | 
| 25 | 
            +
                  FakeWeb.register_uri(:post, fake_service_url, body: crop_response)
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                it "produces image crop info" do
         | 
| 29 | 
            +
                  subject.crop(*params).size.should == 2
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              context "with failing request" do
         | 
| 34 | 
            +
                before do
         | 
| 35 | 
            +
                  FakeWeb.register_uri(:post, fake_service_url, body: failed_signature_response)
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                it "raises exception" do
         | 
| 39 | 
            +
                  expect { subject.crop(*params) }.to raise_error(Imagga::ClientException)
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                context "exception" do
         | 
| 43 | 
            +
                  before do
         | 
| 44 | 
            +
                    begin
         | 
| 45 | 
            +
                      subject.crop(*params)
         | 
| 46 | 
            +
                    rescue Imagga::ClientException => e
         | 
| 47 | 
            +
                      @exception = e
         | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  it "has message" do
         | 
| 52 | 
            +
                    @exception.message.should == 'Invalid signature'
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  it "has error code" do
         | 
| 56 | 
            +
                    @exception.error_code.should == 3
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
            end
         | 
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            require 'fake_web'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            describe "Image info extraction service" do
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              let(:base_uri)         { 'http://example.com' }
         | 
| 7 | 
            +
              let(:image_url)        { 'http://image' }
         | 
| 8 | 
            +
              let(:fake_service_url) { 'http://example.com/colorsearchserver.php' }
         | 
| 9 | 
            +
              let(:extract_response) { IO.read('./spec/fixtures/extract_response.txt') }
         | 
| 10 | 
            +
              let(:failed_signature_response) { '{"error_code":3,"error_message":"Invalid signature"}' }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              subject { Imagga::Client.new(api_key: '123456', api_secret: 'secret', base_uri: base_uri) }
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              context "with successful request" do
         | 
| 15 | 
            +
                before do
         | 
| 16 | 
            +
                  FakeWeb.register_uri(:post, fake_service_url, body: extract_response)
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                it "extracts image info" do
         | 
| 20 | 
            +
                  subject.extract(image_url).size.should == 2
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              context "with failing request" do
         | 
| 25 | 
            +
                before do
         | 
| 26 | 
            +
                  FakeWeb.register_uri(:post, fake_service_url, body: failed_signature_response)
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it "raises exception" do
         | 
| 30 | 
            +
                  expect { subject.extract(image_url) }.to raise_error(Imagga::ClientException)
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                context "exception" do
         | 
| 34 | 
            +
                  before do
         | 
| 35 | 
            +
                    begin
         | 
| 36 | 
            +
                      subject.extract(image_url)
         | 
| 37 | 
            +
                    rescue Imagga::ClientException => e
         | 
| 38 | 
            +
                      @exception = e
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  it "has message" do
         | 
| 43 | 
            +
                    @exception.message.should == 'Invalid signature'
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  it "has error code" do
         | 
| 47 | 
            +
                    @exception.error_code.should == 3
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
              end
         | 
| 51 | 
            +
            end
         |