indico 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # IndicoIo-ruby
2
2
 
3
- A Ruby wrapper for indico's APIs.
3
+ A ruby wrapper for the [indico API](http://indico.io).
4
4
 
5
- ## Installation
5
+ Installation
6
+ -------------
6
7
 
7
8
  Add this line to your application's Gemfile:
8
9
 
@@ -10,17 +11,23 @@ Add this line to your application's Gemfile:
10
11
 
11
12
  And then execute:
12
13
 
13
- $ bundle
14
+ $ bundle install
14
15
 
15
16
  Or install it yourself as:
16
17
 
17
18
  $ gem install indico
18
19
 
19
- Documentation
20
+
21
+ API Keys + Setup
22
+ ----------------
23
+ For API key registration and setup, checkout our [quickstart guide](http://docs.indico.io/v2.0/docs/api-keys).
24
+
25
+ Full Documentation
20
26
  ------------
21
- Found [here](http://indico.readme.io/v1.0/docs)
27
+ Detailed documentation and further code examples are available at [indico.reame.io](http://indico.readme.io/v2.0/docs/ruby)
22
28
 
23
- ## Usage
29
+ Examples
30
+ ---------
24
31
 
25
32
  ```ruby
26
33
  > require 'indico'
@@ -45,44 +52,25 @@ Found [here](http://indico.readme.io/v1.0/docs)
45
52
 
46
53
  ```
47
54
 
48
- ###Batch API Access
49
-
50
- If you'd like to use our batch api interface, please check out the [pricing page](https://indico.io/pricing) on our website to find the right plan for you.
51
-
52
- ```ruby
53
- > require 'indico'
54
-
55
- => true
55
+ Batch API
56
+ ---------
56
57
 
57
- > data = ["I believe in capital punishment", "The president is wrong"]
58
+ Each `Indico` method has a corresponding batch method for analyzing many examples with a single request. Simply pass in an array of inputs and receive an array of results in return.
58
59
 
59
- => ["I believe in capital punishment", "The president is wrong"]
60
-
61
- > Indico.batch_political(data, "username", "password")
62
-
63
- => [ {"Libertarian"=>0.3511057701654774, "Liberal"=>0.06709112089656208, "Green"=>0.03830472376983833, "Conservative"=>0.5434983851681222}, {"Libertarian"=>0.08762905907467175, "Liberal"=>0.18965142341591298, "Green"=>0.02612359787701222, "Conservative"=>0.696595919632403}]
64
- ````
65
-
66
- ###Private cloud API Access
67
-
68
- If you're looking to use indico's API for high throughput applications, please check out the [pricing page](https://indico.io/pricing) on our website to find the right plan for you.
69
60
 
70
61
  ```ruby
71
62
  > require 'indico'
72
63
 
73
64
  => true
74
65
 
75
- > data = ["I believe in capital punishment", "The president is wrong"]
66
+ > Indico.api_key = "YOUR_API_KEY"
76
67
 
77
- => ["I believe in capital punishment", "The president is wrong"]
68
+ => "YOUR_API_KEY"
78
69
 
79
- > Indico.batch_political(data, "username", "password", cloud)
80
-
81
- => [ {"Libertarian"=>0.3511057701654774, "Liberal"=>0.06709112089656208, "Green"=>0.03830472376983833, "Conservative"=>0.5434983851681222}, {"Libertarian"=>0.08762905907467175, "Liberal"=>0.18965142341591298, "Green"=>0.02612359787701222, "Conservative"=>0.696595919632403}]
82
- ````
83
-
84
- The `cloud` parameter redirects API calls to your private cloud hosted at `[cloud].indico.domains`
70
+ > Indico.batch_sentiment(['Best day ever', 'Worst day ever'])
85
71
 
72
+ => [0.9899001220871786, 0.005709885173415242]
73
+ ```
86
74
 
87
75
  ## Contributing
88
76
 
data/Rakefile CHANGED
@@ -1,2 +1 @@
1
- require "bundler/gem_tasks"
2
-
1
+ require 'bundler/gem_tasks'
data/indico.gemspec CHANGED
@@ -4,21 +4,23 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'indico/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "indico"
7
+ spec.name = 'indico'
8
8
  spec.version = Indico::VERSION
9
- spec.authors = ["Slater Victoroff", "Amit Ambardekar"]
10
- spec.email = ["slater@indico.io", "amitamb@gmail.com"]
11
- spec.summary = %q{A simple Ruby Wrapper for the indico set of APIs.}
12
- spec.description = %q{A simple Ruby Wrapper for the indico set of APIs.}
13
- spec.homepage = "https://github.com/IndicoDataSolutions/IndicoIo-ruby"
14
- spec.license = "MIT"
9
+ spec.authors = ['Slater Victoroff', 'Amit Ambardekar', 'Madison May', 'Annie Carlson']
10
+ spec.email = ['slater@indico.io', 'amitamb@gmail.com', 'madison@indico.io', 'annie@indico.io']
11
+ spec.summary = 'A simple Ruby Wrapper for the indico set of APIs.'
12
+ spec.description = 'A simple Ruby Wrapper for the indico set of APIs.'
13
+ spec.homepage = 'https://github.com/IndicoDataSolutions/IndicoIo-ruby'
14
+ spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
17
+ spec.executables = spec.files.grep('^bin\\/') { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep('^(test|spec|features)\\/')
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_runtime_dependency 'inifile', '~> 3.0.0'
22
+ spec.add_development_dependency 'bundler', '~> 1.6'
23
+ spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'rspec'
20
25
 
21
- spec.add_development_dependency "bundler", "~> 1.6"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rspec"
24
26
  end
data/lib/indico/helper.rb CHANGED
@@ -1,30 +1,44 @@
1
- require "base64"
1
+ require 'base64'
2
2
 
3
3
  module Indico
4
4
  private
5
5
 
6
6
  def self.url_join(root, api)
7
- if root.nil?
8
- "http://apiv1.indico.io/%s" % api
7
+ if !root
8
+ 'http://apiv2.indico.io/' + api
9
9
  else
10
- "http://" + root + ".indico.domains/" + api
10
+ Indico.cloud_protocol + root + '.indico.domains/' + api
11
11
  end
12
12
  end
13
13
 
14
- def self.api_handler(data, server, api, username=nil, password=nil)
14
+ def self.api_handler(data, api, config)
15
+ server = nil
16
+ api_key = nil
17
+ unless config.nil?
18
+ server = config[:cloud]
19
+ api_key = config[:api_key]
20
+ end
15
21
  d = {}
16
22
  d['data'] = data
17
23
  data_dict = JSON.dump(d)
18
- if username.nil?
19
- response = make_request(url_join(server, api), data_dict, HEADERS)
20
- else
21
- response = make_request(url_join(server, api), data_dict, encode_credentials(username, password))
24
+
25
+ if api_key.nil?
26
+ api_key = Indico.config['auth']
27
+ end
28
+
29
+ if server.nil?
30
+ server = Indico.config['cloud']
22
31
  end
32
+
33
+ response = make_request(url_join(server, api), data_dict,
34
+ add_api_key_to_header(api_key))
35
+
36
+
23
37
  results = JSON.parse(response.body)
24
- if results.key?("error")
25
- raise results["error"]
38
+ if results.key?('error')
39
+ fail results['error']
26
40
  else
27
- results = results["results"]
41
+ results['results']
28
42
  end
29
43
  end
30
44
 
@@ -43,11 +57,12 @@ module Indico
43
57
  http.request(request)
44
58
  end
45
59
 
46
- def self.encode_credentials(username, password)
47
- headers = { "Content-Type" => "application/json", "Accept" => "text/plain" }
48
- credentials = username + ":" + password
49
- headers["Authorization"] = "Basic " + Base64.strict_encode64(credentials)
60
+ def self.add_api_key_to_header(api_key)
61
+ if api_key.nil?
62
+ raise ArgumentError, 'api key is required'
63
+ end
64
+ headers = { 'Content-Type' => 'application/json', 'Accept' => 'text/plain' }
65
+ headers['X-ApiKey'] = api_key
50
66
  headers
51
67
  end
52
-
53
68
  end
@@ -0,0 +1,93 @@
1
+ require 'inifile'
2
+
3
+ module Indico
4
+ private
5
+
6
+ class << self; attr_accessor :config; end
7
+ class << self; attr_accessor :cloud_protocol; end
8
+
9
+ Indico.cloud_protocol = 'https://'
10
+
11
+ def self.valid_auth(config)
12
+ # Does a config hashmap have a valid auth definition?
13
+ return config['auth'] &&
14
+ config['auth']['api_key']
15
+ end
16
+
17
+ def self.valid_cloud(config)
18
+ # Does a config hashmap have a valid private cloud definition?
19
+ return config['private_cloud'] &&
20
+ config['private_cloud']['cloud']
21
+ end
22
+
23
+ def self.merge_config(prev_config, new_config)
24
+ # Merge two configurations, giving precedence to the second
25
+ if self.valid_auth(new_config)
26
+ prev_config['auth'] = new_config['auth']
27
+ end
28
+
29
+ if self.valid_cloud(new_config)
30
+ prev_config['private_cloud'] = new_config['private_cloud']
31
+ end
32
+
33
+ return prev_config
34
+ end
35
+
36
+ def self.load_config_files(filenames)
37
+ # Given a list of filenames, build up an ini file config
38
+ master_ini = self.new_config()
39
+
40
+ for filename in filenames
41
+ ini = IniFile.load(filename)
42
+ if not ini then
43
+ next
44
+ end
45
+ master_ini = self.merge_config(master_ini, ini)
46
+ end
47
+ return master_ini
48
+ end
49
+
50
+ def self.find_config_files()
51
+ # Provides a list of paths to search for indicorc files
52
+ localPath = File.join(Dir.pwd, ".indicorc")
53
+ globalPath = File.join(Dir.home, ".indicorc")
54
+ return [globalPath, localPath]
55
+ end
56
+
57
+ def self.load_environment_vars()
58
+ # Load environment variables into same format as INI file reader
59
+ return {'auth' => {'api_key' => ENV["INDICO_API_KEY"]},
60
+ 'private_cloud' => {'cloud' => ENV["INDICO_CLOUD"]}}
61
+ end
62
+
63
+ def self.new_config()
64
+ # Makes a new, empty config object
65
+ new_config = Hash.new
66
+ new_config['auth'] = false
67
+ new_config['cloud'] = false
68
+ return new_config
69
+ end
70
+
71
+ def self.simplify_config(config)
72
+ # Goes from nested representation to flatter version
73
+ new_config = self.new_config()
74
+ if self.valid_auth(config)
75
+ new_config['auth'] = config['auth']['api_key']
76
+ end
77
+ if self.valid_cloud(config)
78
+ new_config['cloud'] = config['private_cloud']['cloud']
79
+ end
80
+ return new_config
81
+ end
82
+
83
+ def self.load_config()
84
+ # Finds, loads, and simplifies all configuration types
85
+ paths = self.find_config_files()
86
+ config_file = self.load_config_files(paths)
87
+ env_vars = self.load_environment_vars()
88
+ config = self.merge_config(config_file, env_vars)
89
+ return self.simplify_config(config)
90
+ end
91
+ end
92
+
93
+ Indico.config = Indico.load_config()
@@ -1,3 +1,3 @@
1
1
  module Indico
2
- VERSION = "0.2.0"
2
+ VERSION = '0.2.2'
3
3
  end
data/lib/indico.rb CHANGED
@@ -1,75 +1,90 @@
1
- require "indico/version"
2
- require "indico/helper"
3
- require "uri"
4
- require "json"
5
- require "net/https"
1
+ require 'indico/version'
2
+ require 'indico/helper'
3
+ require 'indico/settings'
4
+ require 'uri'
5
+ require 'json'
6
+ require 'net/https'
6
7
 
7
8
  module Indico
9
+ HEADERS = { 'Content-Type' => 'application/json', 'Accept' => 'text/plain' }
8
10
 
9
- HEADERS = { "Content-Type" => "application/json", "Accept" => "text/plain" }
11
+ def self.api_key
12
+ config['auth']
13
+ end
14
+
15
+ def self.api_key=(api)
16
+ config['auth'] = api
17
+ end
18
+
19
+ def self.private_cloud
20
+ config['cloud']
21
+ end
22
+
23
+ def self.private_cloud=(cloud)
24
+ config['cloud'] = cloud
25
+ end
10
26
 
11
- def self.political(test_text, username=nil, password=nil, private_cloud=nil)
12
- api_handler(test_text, private_cloud, "political", username, password)
27
+ def self.political(test_text, config = nil)
28
+ api_handler(test_text, 'political', config)
13
29
  end
14
30
 
15
- def self.batch_political(test_text, username, password, private_cloud=nil)
16
- api_handler(test_text, private_cloud, "political/batch", username, password)
31
+ def self.batch_political(test_text, config = nil)
32
+ api_handler(test_text, 'political/batch', config)
17
33
  end
18
34
 
19
- def self.posneg(test_text, username=nil, password=nil, private_cloud=nil)
20
- api_handler(test_text, private_cloud, "sentiment", username, password)
35
+ def self.posneg(test_text, config = nil)
36
+ api_handler(test_text, 'sentiment', config)
21
37
  end
22
38
 
23
- def self.batch_posneg(test_text, username, password, private_cloud=nil)
24
- api_handler(test_text, private_cloud, "sentiment/batch", username, password)
39
+ def self.batch_posneg(test_text, config = nil)
40
+ api_handler(test_text, 'sentiment/batch', config)
25
41
  end
26
42
 
27
43
  def self.sentiment(*args)
28
- self.posneg(*args)
44
+ posneg(*args)
29
45
  end
30
46
 
31
47
  def self.batch_sentiment(*args)
32
- self.batch_posneg(*args)
48
+ batch_posneg(*args)
33
49
  end
34
50
 
35
- def self.language(test_text, username=nil, password=nil, private_cloud=nil)
36
- api_handler(test_text, private_cloud, "language", username, password)
51
+ def self.language(test_text, config = nil)
52
+ api_handler(test_text, 'language', config)
37
53
  end
38
54
 
39
- def self.batch_language(test_text, username, password, private_cloud=nil)
40
- api_handler(test_text, private_cloud, "language/batch", username, password)
55
+ def self.batch_language(test_text, config = nil)
56
+ api_handler(test_text, 'language/batch', config)
41
57
  end
42
58
 
43
- def self.text_tags(test_text, username=nil, password=nil, private_cloud=nil)
44
- api_handler(test_text, private_cloud, "texttags", username, password)
59
+ def self.text_tags(test_text, config = nil)
60
+ api_handler(test_text, 'texttags', config)
45
61
  end
46
62
 
47
- def self.batch_text_tags(test_text, username, password, private_cloud=nil)
48
- api_handler(test_text, private_cloud, "texttags/batch", username, password)
63
+ def self.batch_text_tags(test_text, config = nil)
64
+ api_handler(test_text, 'texttags/batch', config)
49
65
  end
50
66
 
51
- def self.fer(face, username=nil, password=nil, private_cloud=nil)
52
- api_handler(face, private_cloud, "fer", username, password)
67
+ def self.fer(face, config = nil)
68
+ api_handler(face, 'fer', config)
53
69
  end
54
70
 
55
- def self.batch_fer(test_text, username, password, private_cloud=nil)
56
- api_handler(test_text, private_cloud, "fer/batch", username, password)
71
+ def self.batch_fer(test_text, config = nil)
72
+ api_handler(test_text, 'fer/batch', config)
57
73
  end
58
74
 
59
- def self.facial_features(face, username=nil, password=nil, private_cloud=nil)
60
- api_handler(face, private_cloud, "facialfeatures", username, password)
75
+ def self.facial_features(face, config = nil)
76
+ api_handler(face, 'facialfeatures', config)
61
77
  end
62
78
 
63
- def self.batch_facial_features(test_text, username, password, private_cloud=nil)
64
- api_handler(test_text, private_cloud, "facialfeatures/batch", username, password)
79
+ def self.batch_facial_features(test_text, config = nil)
80
+ api_handler(test_text, 'facialfeatures/batch', config)
65
81
  end
66
82
 
67
- def self.image_features(face, username=nil, password=nil, private_cloud=nil)
68
- api_handler(face, private_cloud, "imagefeatures", username, password)
83
+ def self.image_features(face, config = nil)
84
+ api_handler(face, 'imagefeatures', config)
69
85
  end
70
86
 
71
- def self.batch_image_features(test_text, username, password, private_cloud=nil)
72
- api_handler(test_text, private_cloud, "imagefeatures/batch", username, password)
87
+ def self.batch_image_features(test_text, config = nil)
88
+ api_handler(test_text, 'imagefeatures/batch', config)
73
89
  end
74
-
75
90
  end
@@ -0,0 +1,5 @@
1
+ [auth]
2
+ api_key=testapikey
3
+
4
+ [private_cloud]
5
+ cloud=testcloud
@@ -0,0 +1,2 @@
1
+ [auth]
2
+ api_key=testapikey
@@ -1,37 +1,42 @@
1
1
  require 'spec_helper'
2
2
  require 'set'
3
3
 
4
- $username = ENV['INDICO_USERNAME']
5
- $password = ENV['INDICO_PASSWORD']
6
- $private_cloud = 'indico-test'
7
-
8
4
  describe Indico do
5
+ before do
6
+ api_key = ENV['INDICO_API_KEY']
7
+ private_cloud = 'indico-test'
8
+ @config_private_cloud = { api_key: api_key, cloud: private_cloud}
9
+ @config = { api_key: api_key}
10
+ end
9
11
 
10
- it "should tag text with correct political tags" do
11
- expected_keys = Set.new(["Conservative", "Green", "Liberal", "Libertarian"])
12
- data = ["Guns don't kill people."," People kill people."]
13
- response = Indico.batch_political(data, $username, $password) # Guns don't kill people. People kill people.
12
+ it 'should tag text with correct political tags' do
13
+ expected_keys = Set.new(%w(Conservative Green Liberal Libertarian))
14
+ data = ['Guns don\'t kill people.', ' People kill people.']
15
+ response = Indico.batch_political(data, @config)
14
16
 
15
17
  expect(Set.new(response[0].keys)).to eql(expected_keys)
16
18
  expect(Set.new(response[1].keys)).to eql(expected_keys)
17
19
  end
18
20
 
19
- it "should access a private cloud" do
20
- expected_keys = Set.new(["Conservative", "Green", "Liberal", "Libertarian"])
21
- data = ["Guns don't kill people."," People kill people."]
22
- response = Indico.batch_political(data, $username, $password, $private_cloud) # Guns don't kill people. People kill people.
21
+ it 'should access a private cloud' do
22
+ expected_keys = Set.new(%w(Conservative Green Liberal Libertarian))
23
+ data = ['Guns don\'t kill people.', ' People kill people.']
24
+
25
+ # for mocking: use http instead of https to route requests to our public cloud
26
+ Indico.cloud_protocol = 'http://'
27
+ response = Indico.batch_political(data, @config_private_cloud)
28
+ Indico.cloud_protocol = 'https://'
23
29
 
24
30
  expect(Set.new(response[0].keys)).to eql(expected_keys)
25
31
  expect(Set.new(response[1].keys)).to eql(expected_keys)
26
32
  end
27
33
 
28
- it "should tag text with correct sentiment tags" do
29
- response = Indico.batch_sentiment(["Worst movie ever."], $username, $password)
30
-
34
+ it 'should tag text with correct sentiment tags' do
35
+ response = Indico.batch_sentiment(['Worst movie ever.'], @config)
31
36
  expect(response[0] < 0.5).to eql(true)
32
37
  end
33
38
 
34
- it "should tag text with correct language tags" do
39
+ it 'should tag text with correct language tags' do
35
40
  expected_keys = Set.new([
36
41
  'English',
37
42
  'Spanish',
@@ -70,64 +75,63 @@ describe Indico do
70
75
  ])
71
76
 
72
77
  data = ['Quis custodiet ipsos custodes', 'Clearly english, foo!']
73
- response = Indico.batch_language(data, $username, $password)
78
+ response = Indico.batch_language(data, @config)
74
79
 
75
80
  expect(Set.new(response[0].keys)).to eql(expected_keys)
76
81
  expect(Set.new(response[1].keys)).to eql(expected_keys)
77
82
  end
78
83
 
79
- it "should tag text with correct text tags" do
80
- expected_keys = Set.new(['fashion', 'art', 'energy', 'economics', 'entrepreneur',
81
- 'books', 'politics', 'gardening', 'nba', 'conservative',
82
- 'technology', 'startups', 'relationships', 'education',
83
- 'humor', 'psychology', 'bicycling', 'investing', 'travel',
84
- 'cooking', 'christianity', 'environment', 'religion', 'health',
85
- 'hockey', 'pets', 'music', 'soccer', 'guns', 'gaming', 'jobs',
86
- 'business', 'nature', 'food', 'cars', 'photography', 'philosophy',
87
- 'geek', 'sports', 'baseball', 'news', 'television', 'entertainment',
88
- 'parenting', 'comics', 'science', 'nfl','programming',
89
- 'personalfinance', 'atheism', 'movies', 'anime', 'fitness',
90
- 'military', 'realestate', 'history'])
91
-
92
- data = ["Guns don't kill people.", "People kill people."]
93
- response = Indico.batch_text_tags(data, $username, $password) # Guns don't kill people. People kill people.
84
+ it 'should tag text with correct text tags' do
85
+ expected_keys = Set.new(%w(fashion art energy economics entrepreneur
86
+ books politics gardening nba conservative
87
+ technology startups relationships education
88
+ humor psychology bicycling investing travel
89
+ cooking christianity environment religion health
90
+ hockey pets music soccer guns gaming jobs
91
+ business nature food cars photography philosophy
92
+ geek sports baseball news television
93
+ entertainment parenting comics science nfl
94
+ programming personalfinance atheism movies anime
95
+ fitness military realestate history))
96
+
97
+ data = ['Guns don\'t kill people.', 'People kill people.']
98
+ response = Indico.batch_text_tags(data, @config)
94
99
 
95
100
  expect Set.new(response[0].keys).subset?(Set.new(expected_keys))
96
101
  expect Set.new(response[1].keys).subset?(Set.new(expected_keys))
97
102
  end
98
103
 
99
- it "should tag face with correct facial expression" do
100
- expected_keys = Set.new(["Angry", "Sad", "Neutral", "Surprise", "Fear", "Happy"])
101
- test_face = Array.new(48){Array.new(48){rand(100)/100.0} }
102
- response = Indico.batch_fer([test_face, test_face], $username, $password)
104
+ it 'should tag face with correct facial expression' do
105
+ expected_keys = Set.new(%w(Angry Sad Neutral Surprise Fear Happy))
106
+ test_face = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
107
+ response = Indico.batch_fer([test_face, test_face], @config)
103
108
 
104
109
  expect(Set.new(response[0].keys)).to eql(expected_keys)
105
110
  expect(Set.new(response[1].keys)).to eql(expected_keys)
106
111
  end
107
112
 
108
- it "should tag face with correct facial features" do
109
- test_face = Array.new(48){Array.new(48){rand(100)/100.0} }
110
- response = Indico.batch_facial_features([test_face, test_face], $username, $password)
111
-
113
+ it 'should tag face with correct facial features' do
114
+ test_face = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
115
+ response = Indico.batch_facial_features([test_face, test_face], @config)
112
116
  expect(response[0].length).to eql(48)
113
117
  expect(response[1].length).to eql(48)
114
118
  end
115
119
 
116
- it "should tag image with correct image features" do
117
- test_image = Array.new(48){Array.new(48){rand(100)/100.0} }
118
- response = Indico.batch_image_features([test_image, test_image], $username, $password)
119
-
120
+ it 'should tag image with correct image features' do
121
+ test_image = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
122
+ response = Indico.batch_image_features([test_image, test_image], @config)
120
123
  expect(response[0].length).to eql(2048)
121
124
  expect(response[1].length).to eql(2048)
122
125
  end
123
126
 
124
127
  # Uncomment when frontend updated to accept image urls
125
128
  # it "should accept image urls" do
126
- # test_image = "http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/48/Emotes-face-smile-icon.png"
127
- # response = Indico.batch_image_features([test_image, test_image], $username, $password)
129
+ # test_image = 'http://icons.iconarchive.com/icons/oxygen-icons.org/' +
130
+ # 'oxygen/48/Emotes-face-smile-icon.png'
131
+ # response = Indico.batch_image_features([test_image, test_image],
132
+ # @config)
128
133
 
129
134
  # expect(response[0].length).to eql(2048)
130
135
  # expect(response[1].length).to eql(2048)
131
136
  # end
132
-
133
137
  end
data/spec/indico_spec.rb CHANGED
@@ -1,34 +1,38 @@
1
1
  require 'spec_helper'
2
2
  require 'set'
3
3
 
4
- $username = ENV['INDICO_USERNAME']
5
- $password = ENV['INDICO_PASSWORD']
6
- $private_cloud = 'indico-test'
7
-
8
4
  describe Indico do
5
+ before do
6
+ api_key = ENV['INDICO_API_KEY']
7
+ private_cloud = 'indico-test'
8
+ @config = { api_key: api_key, cloud: private_cloud}
9
+ end
9
10
 
10
- it "should tag text with correct political tags" do
11
- expected_keys = Set.new(["Conservative", "Green", "Liberal", "Libertarian"])
12
- response = Indico.political("Guns don't kill people. People kill people.") # Guns don't kill people. People kill people.
11
+ it 'should tag text with correct political tags' do
12
+ expected_keys = Set.new(%w(Conservative Green Liberal Libertarian))
13
+ response = Indico.political('Guns don\'t kill people. People kill people.')
13
14
 
14
15
  expect(Set.new(response.keys)).to eql(expected_keys)
15
16
  end
16
17
 
17
- it "should tag text with correct political tags" do
18
- expected_keys = Set.new(["Conservative", "Green", "Liberal", "Libertarian"])
19
- data = "Guns don't kill people. People kill people."
20
- response = Indico.political(data, $username, $password, $private_cloud) # Guns don't kill people. People kill people.
21
-
18
+ it 'should tag text with correct political tags' do
19
+ expected_keys = Set.new(%w(Conservative Green Liberal Libertarian))
20
+ data = 'Guns don\'t kill people. People kill people.'
21
+
22
+ # for mocking: use http to redirect requests to our public cloud endpoint
23
+ Indico.cloud_protocol = 'http://'
24
+ response = Indico.political(data, @config)
25
+ Indico.cloud_protocol = 'https://'
22
26
  expect(Set.new(response.keys)).to eql(expected_keys)
23
27
  end
24
28
 
25
- it "should tag text with correct sentiment tags" do
26
- response = Indico.sentiment("Worst movie ever.")
29
+ it 'should tag text with correct sentiment tags' do
30
+ response = Indico.sentiment('Worst movie ever.')
27
31
 
28
32
  expect(response < 0.5).to eql(true)
29
33
  end
30
34
 
31
- it "should tag text with correct language tags" do
35
+ it 'should tag text with correct language tags' do
32
36
  expected_keys = Set.new([
33
37
  'English',
34
38
  'Spanish',
@@ -70,51 +74,59 @@ describe Indico do
70
74
  expect(Set.new(response.keys)).to eql(expected_keys)
71
75
  end
72
76
 
73
- it "should tag text with correct text tags" do
74
- expected_keys = Set.new(['fashion', 'art', 'energy', 'economics', 'entrepreneur',
75
- 'books', 'politics', 'gardening', 'nba', 'conservative',
76
- 'technology', 'startups', 'relationships', 'education',
77
- 'humor', 'psychology', 'bicycling', 'investing', 'travel',
78
- 'cooking', 'christianity', 'environment', 'religion', 'health',
79
- 'hockey', 'pets', 'music', 'soccer', 'guns', 'gaming', 'jobs',
80
- 'business', 'nature', 'food', 'cars', 'photography', 'philosophy',
81
- 'geek', 'sports', 'baseball', 'news', 'television', 'entertainment',
82
- 'parenting', 'comics', 'science', 'nfl','programming',
83
- 'personalfinance', 'atheism', 'movies', 'anime', 'fitness',
84
- 'military', 'realestate', 'history'])
85
- response = Indico.text_tags("Guns don't kill people. People kill people.") # Guns don't kill people. People kill people.
77
+ it 'should tag text with correct text tags' do
78
+ expected_keys = Set.new(%w(fashion art energy economics entrepreneur
79
+ books politics gardening nba conservative
80
+ technology startups relationships education
81
+ humor psychology bicycling investing travel
82
+ cooking christianity environment religion health
83
+ hockey pets music soccer guns gaming jobs
84
+ business nature food cars photography philosophy
85
+ geek sports baseball news television
86
+ entertainment parenting comics science nfl
87
+ programming personalfinance atheism movies anime
88
+ fitness military realestate history))
89
+ response = Indico.text_tags('Guns don\'t kill people. People kill people.')
86
90
 
87
91
  expect Set.new(response.keys).subset?(Set.new(expected_keys))
88
92
  end
89
93
 
90
- it "should tag face with correct facial expression" do
91
- expected_keys = Set.new(["Angry", "Sad", "Neutral", "Surprise", "Fear", "Happy"])
92
- test_face = Array.new(48){Array.new(48){rand(100)/100.0} }
94
+ it 'should tag face with correct facial expression' do
95
+ expected_keys = Set.new(%w(Angry Sad Neutral Surprise Fear Happy))
96
+ test_face = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
93
97
 
94
98
  response = Indico.fer(test_face)
95
99
 
96
100
  expect(Set.new(response.keys)).to eql(expected_keys)
97
101
  end
98
102
 
99
- it "should tag face with correct facial features" do
100
- test_face = Array.new(48){Array.new(48){rand(100)/100.0} }
103
+ it 'should tag face with correct facial features' do
104
+ test_face = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
101
105
  response = Indico.facial_features(test_face)
102
106
 
103
107
  expect(response.length).to eql(48)
104
108
  end
105
109
 
106
- it "should tag image with correct image features" do
107
- test_image = Array.new(48){Array.new(48){rand(100)/100.0} }
110
+ it 'should tag image with correct image features' do
111
+ test_image = Array.new(48) { Array.new(48) { rand(100) / 100.0 } }
112
+ response = Indico.image_features(test_image)
113
+
114
+ expect(response.length).to eql(2048)
115
+ end
116
+
117
+ it "should tag rgb image with correct image features" do
118
+ test_image = Array.new(48){Array.new(48){Array.new(3){rand(100)/100.0}}}
108
119
  response = Indico.image_features(test_image)
109
120
 
110
121
  expect(response.length).to eql(2048)
111
122
  end
112
123
 
113
124
  # Uncomment when frontend updated to accept image urls
114
- # it "should accept image urls" do
115
- # response = Indico.image_features("http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/48/Emotes-face-smile-icon.png")
125
+ # it 'should accept image urls' do
126
+ # response = Indico.image_features('http://icons.iconarchive.com/icons/' +
127
+ # 'oxygen-icons.org/oxygen/48/' +
128
+ # 'Emotes-face-smile-icon.png')
116
129
 
117
130
  # expect(response.length).to eql(2048)
118
131
  # end
119
-
120
132
  end
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ describe Indico do
4
+ it 'should correctly parse an ini file without raising an error' do
5
+ Indico.load_config_files(Indico.find_config_files())
6
+ end
7
+
8
+ it 'should find the correct config files' do
9
+ files = Indico.find_config_files()
10
+ expect(files[0]).to eql("#{Dir.home}/.indicorc")
11
+ expect(files[1]).to eql("#{Dir.pwd}/.indicorc")
12
+ end
13
+
14
+ it 'should read in config files properly' do
15
+ files = [
16
+ File.expand_path('../config/.indicorc.test', __FILE__),
17
+ File.expand_path('../config/.indicorc.test.2', __FILE__)
18
+ ]
19
+ config = Indico.load_config_files(files)
20
+ expected_auth = Hash.new
21
+ expected_auth['api_key'] = 'testapikey'
22
+ expect(config['auth']).to eql(expected_auth)
23
+ end
24
+
25
+ it 'should read in variables from the user\'s environment' do
26
+ api_key = 'testapikey'
27
+ cloud = 'cloud'
28
+ ENV['INDICO_API_KEY'] = api_key
29
+ ENV['INDICO_CLOUD'] = cloud
30
+
31
+ config = Indico.load_environment_vars()
32
+ expected_auth = Hash.new
33
+ expected_auth['api_key'] = 'testapikey'
34
+
35
+ expected_cloud = Hash.new
36
+ expected_cloud['cloud'] = cloud
37
+
38
+ expect(config['auth']).to eql(expected_auth)
39
+ expect(config['private_cloud']).to eql(expected_cloud)
40
+ end
41
+
42
+ it 'should combine file and env variable configuration' do
43
+ api_key = 'testapikey'
44
+ cloud = 'cloud'
45
+ ENV['INDICO_API_KEY'] = api_key
46
+ ENV['INDICO_CLOUD'] = cloud
47
+
48
+ expected = Hash.new
49
+ expected['auth'] = api_key
50
+ expected['cloud'] = cloud
51
+
52
+ config = Indico.load_config()
53
+ expect(config).to eql(expected)
54
+ end
55
+
56
+ it 'should merge configurations properly' do
57
+
58
+ file_api_key = 'file-api-key'
59
+ file_cloud = 'file-cloud'
60
+ file_config = Hash.new
61
+ file_config['auth'] = Hash.new
62
+ file_config['private_cloud'] = Hash.new
63
+ file_config['auth']['api_key'] = file_api_key
64
+ file_config['private_cloud']['cloud'] = file_cloud
65
+
66
+ env_api_key = 'env-api-key'
67
+ env_cloud = 'env-cloud'
68
+ ENV['INDICO_API_KEY'] = env_api_key
69
+ ENV['INDICO_CLOUD'] = env_cloud
70
+
71
+ env_config = Indico.load_environment_vars()
72
+ merged = Indico.merge_config(file_config, env_config)
73
+ expect(merged['auth']['api_key']).to eql(env_api_key)
74
+ expect(merged['private_cloud']['cloud']).to eql(env_cloud)
75
+ end
76
+
77
+ it 'should set api key with a call to set_api_key' do
78
+ Indico.api_key = nil
79
+ begin
80
+ Indico.political('Guns don\'t kill people. People kill people.')
81
+ rescue ArgumentError => exception
82
+ expect(exception.message).to eql('api key is required')
83
+ else
84
+ fail('api_key was not null')
85
+ end
86
+
87
+ begin
88
+ Indico.political('Guns don\'t kill people. People kill people.')
89
+ rescue ArgumentError => exception
90
+ expect(exception.message).to eql('api key is required')
91
+ else
92
+ fail('api_key was not null')
93
+ end
94
+ end
95
+ end
data/spec/spec_helper.rb CHANGED
@@ -2,7 +2,7 @@ require 'indico'
2
2
 
3
3
  # This file was generated by the `rspec --init` command. Conventionally, all
4
4
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
5
- # The generated `.rspec` file contains `--require spec_helper` which will cause this
5
+ # The generated `.rspec` file contains `--require spec_helper` which causes this
6
6
  # file to always be loaded, without a need to explicitly require it in any files.
7
7
  #
8
8
  # Given that it is always loaded, you are encouraged to keep this file as
metadata CHANGED
@@ -1,17 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: indico
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Slater Victoroff
9
9
  - Amit Ambardekar
10
+ - Madison May
11
+ - Annie Carlson
10
12
  autorequire:
11
13
  bindir: bin
12
14
  cert_chain: []
13
- date: 2015-03-20 00:00:00.000000000 Z
15
+ date: 2015-04-08 00:00:00.000000000 Z
14
16
  dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: inifile
19
+ requirement: !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: 3.0.0
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 3.0.0
15
33
  - !ruby/object:Gem::Dependency
16
34
  name: bundler
17
35
  requirement: !ruby/object:Gem::Requirement
@@ -64,6 +82,8 @@ description: A simple Ruby Wrapper for the indico set of APIs.
64
82
  email:
65
83
  - slater@indico.io
66
84
  - amitamb@gmail.com
85
+ - madison@indico.io
86
+ - annie@indico.io
67
87
  executables: []
68
88
  extensions: []
69
89
  extra_rdoc_files: []
@@ -77,9 +97,13 @@ files:
77
97
  - indico.gemspec
78
98
  - lib/indico.rb
79
99
  - lib/indico/helper.rb
100
+ - lib/indico/settings.rb
80
101
  - lib/indico/version.rb
102
+ - spec/config/.indicorc.test
103
+ - spec/config/.indicorc.test.2
81
104
  - spec/indico_batch_spec.rb
82
105
  - spec/indico_spec.rb
106
+ - spec/settings_spec.rb
83
107
  - spec/spec_helper.rb
84
108
  homepage: https://github.com/IndicoDataSolutions/IndicoIo-ruby
85
109
  licenses:
@@ -106,7 +130,4 @@ rubygems_version: 1.8.23
106
130
  signing_key:
107
131
  specification_version: 3
108
132
  summary: A simple Ruby Wrapper for the indico set of APIs.
109
- test_files:
110
- - spec/indico_batch_spec.rb
111
- - spec/indico_spec.rb
112
- - spec/spec_helper.rb
133
+ test_files: []