pixmatch 0.1.0 → 0.2.0

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.
data/README.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = Pixmatch
2
2
 
3
- Pixmatch REST API client library for TinEye[http://www.tineye.com/] reverse-image search.
3
+ Pixmatch REST API client library for Pixmatch[http://ideeinc.com/products/pixmatch/], automated image matching API by Idee[http://ideeinc.com]. Given an image to look for, it locates identical or modified images within or between large scale image collections.
4
4
 
5
5
  == Using
6
6
 
@@ -55,7 +55,7 @@ Pixmatch REST API client library for TinEye[http://www.tineye.com/] reverse-imag
55
55
  <<: *settings
56
56
  username: '<your username>'
57
57
  password: '<your password>'
58
- endpoint: 'http://<your url>.tineye.com'
58
+ endpoint: '<your url>.tineye.com'
59
59
  * Run 'bundle install'
60
60
  * Test with 'rspec spec'
61
61
  * Send pull requests.
data/lib/pixmatch/api.rb CHANGED
@@ -3,19 +3,19 @@ require File.expand_path('../request', __FILE__)
3
3
  # Adapted from the Ruby Twitter gem.
4
4
  # @see https://github.com/jnunemaker/twitter
5
5
  module Pixmatch
6
- # @private
7
- class API
8
- # @private
9
- attr_accessor(*Configuration::VALID_OPTIONS_KEYS)
10
-
11
- # Creates a new API
12
- def initialize(options = {})
13
- options = Pixmatch.options.merge(options)
14
- Configuration::VALID_OPTIONS_KEYS.each do |key|
15
- send("#{key}=", options[key])
16
- end
17
- end
18
-
19
- include Request
20
- end
6
+ # @private
7
+ class API
8
+ # @private
9
+ attr_accessor(*Configuration::VALID_OPTIONS_KEYS)
10
+
11
+ # Creates a new API
12
+ def initialize(options = {})
13
+ options = Pixmatch.options.merge(options)
14
+ Configuration::VALID_OPTIONS_KEYS.each do |key|
15
+ send("#{key}=", options[key])
16
+ end
17
+ end
18
+
19
+ include Request
20
+ end
21
21
  end
@@ -1,15 +1,15 @@
1
1
  # Adapted from the Ruby Twitter gem.
2
2
  # @see https://github.com/jnunemaker/twitter
3
3
  module Pixmatch
4
- # Wrapper for the Pixmatch REST API
5
- class Client < API
6
- Dir[File.expand_path('../client/*.rb', __FILE__)].each { |f| require f }
7
-
8
- include Pixmatch::Client::Ping
9
- include Pixmatch::Client::Count
10
- include Pixmatch::Client::Add
11
- include Pixmatch::Client::List
12
- include Pixmatch::Client::Delete
13
- include Pixmatch::Client::Search
14
- end
4
+ # Wrapper for the Pixmatch REST API
5
+ class Client < API
6
+ Dir[File.expand_path('../client/*.rb', __FILE__)].each { |f| require f }
7
+
8
+ include Pixmatch::Client::Ping
9
+ include Pixmatch::Client::Count
10
+ include Pixmatch::Client::Add
11
+ include Pixmatch::Client::List
12
+ include Pixmatch::Client::Delete
13
+ include Pixmatch::Client::Search
14
+ end
15
15
  end
@@ -1,49 +1,49 @@
1
1
  # Adapted from the Ruby Twitter gem.
2
2
  # @see https://github.com/jnunemaker/twitter
3
3
  module Pixmatch
4
- # Defines constants and methods related to configuration.
5
- module Configuration
6
- # An array of valid keys in the options hash when configuring a {Flixated::API}.
7
- VALID_OPTIONS_KEYS = [
8
- :username,
9
- :password,
10
- :endpoint
11
- ].freeze
12
-
13
- # By default, don't set a username.
14
- DEFAULT_USERNAME = nil.freeze
15
-
16
- # By default, don't set a password.
17
- DEFAULT_PASSWORD = nil.freeze
18
-
19
- # The endpoint that will be used to connect if none is set.
20
- DEFAULT_ENDPOINT = 'https://api.tineye.com'.freeze
21
-
22
- # @private
23
- attr_accessor(*VALID_OPTIONS_KEYS)
24
-
25
- # When this module is extended, set all configuration options to their default values.
26
- def self.extended(base)
27
- base.reset
28
- end
29
-
30
- # Convenience method to allow configuration options to be set in a block.
31
- def configure
32
- yield self
33
- end
34
-
35
- # Create a hash of options and their values.
36
- def options
37
- VALID_OPTIONS_KEYS.inject({}) do |option,key|
38
- option.merge!(key => send(key))
39
- end
40
- end
41
-
42
- # Reset all configuration options to default.
43
- def reset
44
- self.username = DEFAULT_USERNAME
45
- self.password = DEFAULT_PASSWORD
46
- self.endpoint = DEFAULT_ENDPOINT
47
- end
48
- end
4
+ # Defines constants and methods related to configuration.
5
+ module Configuration
6
+ # An array of valid keys in the options hash when configuring a {Flixated::API}.
7
+ VALID_OPTIONS_KEYS = [
8
+ :username,
9
+ :password,
10
+ :endpoint
11
+ ].freeze
12
+
13
+ # By default, don't set a username.
14
+ DEFAULT_USERNAME = nil.freeze
15
+
16
+ # By default, don't set a password.
17
+ DEFAULT_PASSWORD = nil.freeze
18
+
19
+ # The endpoint that will be used to connect if none is set.
20
+ DEFAULT_ENDPOINT = 'https://api.tineye.com'.freeze
21
+
22
+ # @private
23
+ attr_accessor(*VALID_OPTIONS_KEYS)
24
+
25
+ # When this module is extended, set all configuration options to their default values.
26
+ def self.extended(base)
27
+ base.reset
28
+ end
29
+
30
+ # Convenience method to allow configuration options to be set in a block.
31
+ def configure
32
+ yield self
33
+ end
34
+
35
+ # Create a hash of options and their values.
36
+ def options
37
+ VALID_OPTIONS_KEYS.inject({}) do |option,key|
38
+ option.merge!(key => send(key))
39
+ end
40
+ end
41
+
42
+ # Reset all configuration options to default.
43
+ def reset
44
+ self.username = DEFAULT_USERNAME
45
+ self.password = DEFAULT_PASSWORD
46
+ self.endpoint = DEFAULT_ENDPOINT
47
+ end
48
+ end
49
49
  end
@@ -2,27 +2,27 @@ require 'uri'
2
2
  require 'rest_client'
3
3
 
4
4
  module Pixmatch
5
- module Request
6
- private
7
-
8
- def request(http_method, path, query_params = {}, data_params = {})
9
- capture RestClient::Request.new({
10
- method: http_method,
11
- url: "#{endpoint}/#{paramify(path, query_params)}",
12
- user: username,
13
- password: password
14
- }.merge(data_params)).execute
15
- end
16
-
17
- def capture(response)
18
- json = Utils.parse_json(response)
19
- Utils.handle_error(json)
20
- json
21
- end
22
-
23
- def paramify(path, params)
5
+ module Request
6
+ private
7
+
8
+ def request(http_method, path, query_params = {}, data_params = {})
9
+ capture RestClient::Request.new({
10
+ method: http_method,
11
+ url: "#{endpoint}/#{paramify(path, query_params)}",
12
+ user: username,
13
+ password: password
14
+ }.merge(data_params)).execute
15
+ end
16
+
17
+ def capture(response)
18
+ json = Utils.parse_json(response)
19
+ Utils.handle_error(json)
20
+ json
21
+ end
22
+
23
+ def paramify(path, params)
24
24
  URI.encode("#{path}/?#{params.map { |k,v| "#{k}=#{v}" }.join('&')}")
25
25
  end
26
26
 
27
- end
27
+ end
28
28
  end
@@ -1,5 +1,5 @@
1
1
  require 'hashie'
2
- require 'yajl'
2
+ require 'json'
3
3
 
4
4
  module Pixmatch
5
5
  # @private
@@ -11,7 +11,7 @@ module Pixmatch
11
11
 
12
12
  # Parses JSON and returns a Hashie::Mash
13
13
  def self.parse_json(json)
14
- Hashie::Mash.new(Yajl::Parser.new.parse(json))
14
+ Hashie::Mash.new(JSON.parse(json))
15
15
  end
16
16
  end
17
17
  end
@@ -1,3 +1,3 @@
1
1
  module Pixmatch
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/pixmatch.rb CHANGED
@@ -8,23 +8,23 @@ require File.expand_path('../pixmatch/client', __FILE__)
8
8
  # Adapted from the Ruby Twitter gem.
9
9
  # @see https://github.com/jnunemaker/twitter
10
10
  module Pixmatch
11
- extend Configuration
12
-
13
- # Alias for pixmatch::Client.new
14
- #
15
- # @return {pixmatch::Client}
16
- def self.client(options = {})
17
- Pixmatch::Client.new(options)
18
- end
19
-
20
- # Delegate to pixmatch::Client
21
- def self.method_missing(method, *args, &block)
22
- return super unless client.respond_to?(method)
23
- client.send(method, *args, &block)
24
- end
25
-
26
- # Delegate to pixmatch::Client
27
- def self.respond_to?(method)
28
- return client.respond_to?(method) || super
29
- end
11
+ extend Configuration
12
+
13
+ # Alias for pixmatch::Client.new
14
+ #
15
+ # @return {pixmatch::Client}
16
+ def self.client(options = {})
17
+ Pixmatch::Client.new(options)
18
+ end
19
+
20
+ # Delegate to pixmatch::Client
21
+ def self.method_missing(method, *args, &block)
22
+ return super unless client.respond_to?(method)
23
+ client.send(method, *args, &block)
24
+ end
25
+
26
+ # Delegate to pixmatch::Client
27
+ def self.respond_to?(method)
28
+ return client.respond_to?(method) || super
29
+ end
30
30
  end
metadata CHANGED
@@ -1,126 +1,94 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pixmatch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- segments:
6
- - 0
7
- - 1
8
- - 0
9
- prerelease: false
4
+ version: 0.2.0
5
+ prerelease:
10
6
  platform: ruby
11
7
  authors:
12
8
  - Daniel Doubrovkine
13
- autorequire: !!null
9
+ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
- date: 2011-04-13 00:00:00.000000000 -04:00
17
- default_executable: !!null
12
+ date: 2011-06-02 00:00:00.000000000 -04:00
13
+ default_executable:
18
14
  dependencies:
19
15
  - !ruby/object:Gem::Dependency
20
16
  name: rest-client
21
- requirement: &86264460 !ruby/object:Gem::Requirement
17
+ requirement: &73142630 !ruby/object:Gem::Requirement
22
18
  none: false
23
19
  requirements:
24
20
  - - ~>
25
21
  - !ruby/object:Gem::Version
26
22
  version: 1.6.1
27
- segments:
28
- - 1
29
- - 6
30
- - 1
31
23
  type: :runtime
32
24
  prerelease: false
33
- version_requirements: *86264460
25
+ version_requirements: *73142630
34
26
  - !ruby/object:Gem::Dependency
35
- name: yajl-ruby
36
- requirement: &86264070 !ruby/object:Gem::Requirement
27
+ name: json
28
+ requirement: &73142020 !ruby/object:Gem::Requirement
37
29
  none: false
38
30
  requirements:
39
31
  - - ~>
40
32
  - !ruby/object:Gem::Version
41
- version: 0.8.1
42
- segments:
43
- - 0
44
- - 8
45
- - 1
33
+ version: 1.5.1
46
34
  type: :runtime
47
35
  prerelease: false
48
- version_requirements: *86264070
36
+ version_requirements: *73142020
49
37
  - !ruby/object:Gem::Dependency
50
38
  name: hashie
51
- requirement: &86263680 !ruby/object:Gem::Requirement
39
+ requirement: &73141620 !ruby/object:Gem::Requirement
52
40
  none: false
53
41
  requirements:
54
42
  - - ~>
55
43
  - !ruby/object:Gem::Version
56
44
  version: 1.0.0
57
- segments:
58
- - 1
59
- - 0
60
- - 0
61
45
  type: :runtime
62
46
  prerelease: false
63
- version_requirements: *86263680
47
+ version_requirements: *73141620
64
48
  - !ruby/object:Gem::Dependency
65
49
  name: rspec
66
- requirement: &86263290 !ruby/object:Gem::Requirement
50
+ requirement: &73141140 !ruby/object:Gem::Requirement
67
51
  none: false
68
52
  requirements:
69
53
  - - ~>
70
54
  - !ruby/object:Gem::Version
71
55
  version: 2.5.0
72
- segments:
73
- - 2
74
- - 5
75
- - 0
76
56
  type: :development
77
57
  prerelease: false
78
- version_requirements: *86263290
58
+ version_requirements: *73141140
79
59
  - !ruby/object:Gem::Dependency
80
60
  name: bundler
81
- requirement: &86262900 !ruby/object:Gem::Requirement
61
+ requirement: &73140550 !ruby/object:Gem::Requirement
82
62
  none: false
83
63
  requirements:
84
64
  - - ~>
85
65
  - !ruby/object:Gem::Version
86
66
  version: 1.0.10
87
- segments:
88
- - 1
89
- - 0
90
- - 10
91
67
  type: :development
92
68
  prerelease: false
93
- version_requirements: *86262900
69
+ version_requirements: *73140550
94
70
  - !ruby/object:Gem::Dependency
95
71
  name: jeweler
96
- requirement: &86262510 !ruby/object:Gem::Requirement
72
+ requirement: &73139280 !ruby/object:Gem::Requirement
97
73
  none: false
98
74
  requirements:
99
75
  - - ~>
100
76
  - !ruby/object:Gem::Version
101
- version: 1.5.2
102
- segments:
103
- - 1
104
- - 5
105
- - 2
77
+ version: 1.6.2
106
78
  type: :development
107
79
  prerelease: false
108
- version_requirements: *86262510
80
+ version_requirements: *73139280
109
81
  - !ruby/object:Gem::Dependency
110
82
  name: yard
111
- requirement: &86262120 !ruby/object:Gem::Requirement
83
+ requirement: &73138540 !ruby/object:Gem::Requirement
112
84
  none: false
113
85
  requirements:
114
86
  - - ~>
115
87
  - !ruby/object:Gem::Version
116
88
  version: 0.6.4
117
- segments:
118
- - 0
119
- - 6
120
- - 4
121
89
  type: :development
122
90
  prerelease: false
123
- version_requirements: *86262120
91
+ version_requirements: *73138540
124
92
  description: Pixmatch REST API client library for Ruby
125
93
  email: dblock@dblock.org
126
94
  executables: []
@@ -145,13 +113,11 @@ files:
145
113
  - lib/pixmatch/version.rb
146
114
  - LICENSE.txt
147
115
  - README.rdoc
148
- - spec/pixmatch_spec.rb
149
- - spec/spec_helper.rb
150
116
  has_rdoc: true
151
117
  homepage: http://github.com/dblock/pixmatch
152
118
  licenses:
153
119
  - MIT
154
- post_install_message: !!null
120
+ post_install_message:
155
121
  rdoc_options: []
156
122
  require_paths:
157
123
  - lib
@@ -163,21 +129,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
163
129
  version: '0'
164
130
  segments:
165
131
  - 0
166
- hash: -137474991
132
+ hash: 1011322973
167
133
  required_rubygems_version: !ruby/object:Gem::Requirement
168
134
  none: false
169
135
  requirements:
170
136
  - - ! '>='
171
137
  - !ruby/object:Gem::Version
172
138
  version: '0'
173
- segments:
174
- - 0
175
139
  requirements: []
176
- rubyforge_project: !!null
177
- rubygems_version: 1.3.7
178
- signing_key: !!null
140
+ rubyforge_project:
141
+ rubygems_version: 1.6.2
142
+ signing_key:
179
143
  specification_version: 3
180
144
  summary: Pixmatch REST API client library for Ruby
181
- test_files:
182
- - spec/pixmatch_spec.rb
183
- - spec/spec_helper.rb
145
+ test_files: []
@@ -1,87 +0,0 @@
1
- require 'yaml'
2
-
3
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
4
-
5
- describe "Pixmatch" do
6
- before(:each) do
7
- Pixmatch.configure do |config|
8
- pixmatch_yml = File.join(File.dirname(__FILE__), '../config/pixmatch.yml')
9
- pixmatch_yml = File.join(File.dirname(__FILE__), '../config/pixmatch.yml.default') if ! File.exists?(pixmatch_yml)
10
- raise "missing config/pixmatch.yml" if ! File.exists?(pixmatch_yml)
11
- pixmatch_config = YAML.load_file(pixmatch_yml)['test']
12
- config.username = pixmatch_config['username']
13
- config.password = pixmatch_config['password']
14
- config.endpoint = pixmatch_config['endpoint']
15
- end
16
- end
17
- describe "methods" do
18
- it "ping" do
19
- response = Pixmatch.ping()
20
- response['status'].should == "ok"
21
- response['method'].should == "ping"
22
- end
23
- it "count" do
24
- count = Pixmatch.count()
25
- count.is_a?(Integer).should be_true
26
- count.should >= 0
27
- end
28
- it "add with one path" do
29
- response = Pixmatch.add(File.join(File.dirname(__FILE__), 'assets/mona-lisa.jpg'))
30
- response['status'].should == "ok"
31
- response['method'].should == "add"
32
- end
33
- it "add with one path as an array" do
34
- response = Pixmatch.add([ File.join(File.dirname(__FILE__), 'assets/mona-lisa.jpg') ])
35
- response['status'].should == "ok"
36
- response['method'].should == "add"
37
- end
38
- it "add with one File object" do
39
- response = Pixmatch.add(File.new(File.join(File.dirname(__FILE__), 'assets/mona-lisa.jpg')))
40
- response['status'].should == "ok"
41
- response['method'].should == "add"
42
- end
43
- it "add with one File object as an array" do
44
- response = Pixmatch.add([ File.new(File.join(File.dirname(__FILE__), 'assets/mona-lisa.jpg')) ])
45
- response['status'].should == "ok"
46
- response['method'].should == "add"
47
- end
48
- it "add with an array of File objects" do
49
- response = Pixmatch.add(Dir.glob(File.join(File.dirname(__FILE__), 'assets/*.jpg')))
50
- response['status'].should == "ok"
51
- response['method'].should == "add"
52
- end
53
- it "list" do
54
- result = Pixmatch.list()
55
- result.is_a?(Array).should be_true
56
- result.size.should >= 0
57
- end
58
- it "delete with one name" do
59
- Pixmatch.add([ File.new(File.join(File.dirname(__FILE__), 'assets/mona-lisa.jpg')) ])
60
- count = Pixmatch.count
61
- response = Pixmatch.delete('mona-lisa.jpg')
62
- response['status'].should == "ok"
63
- response['method'].should == "delete"
64
- Pixmatch.count.should == count - 1
65
- end
66
- it "delete an array of names" do
67
- Pixmatch.add(Dir.glob(File.join(File.dirname(__FILE__), 'assets/*.jpg')))
68
- count = Pixmatch.count
69
- filenames = Dir.glob(File.join(File.dirname(__FILE__), 'assets/*.jpg')).map { |f| File.basename(f) }
70
- response = Pixmatch.delete(filenames)
71
- response['status'].should == "ok"
72
- response['method'].should == "delete"
73
- Pixmatch.count.should == count - filenames.size
74
- end
75
- it "search" do
76
- Pixmatch.add(Dir.glob(File.join(File.dirname(__FILE__), 'assets/*.jpg')))
77
- response = Pixmatch.search(File.join(File.dirname(__FILE__), 'assets/mona-lisa.jpg'))
78
- response.is_a?(Array).should be_true
79
- response.size.should >= 0
80
- response.each { |result|
81
- result.is_a?(Hash).should be_true
82
- result.has_key?('score').should be_true
83
- result.has_key?('filename').should be_true
84
- }
85
- end
86
- end
87
- end
data/spec/spec_helper.rb DELETED
@@ -1,11 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
-
4
- require 'rspec'
5
- require 'pixmatch'
6
-
7
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
8
-
9
- RSpec.configure do |config|
10
-
11
- end