client_api 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a8e5d87f310ae57ea06b0282a36e015129420b48
4
- data.tar.gz: 9f20f1165b4c16d1e27b9c64701acb2cc9f10a7f
3
+ metadata.gz: 8c676ea36f31d7b2e7557c063c76a32076be2241
4
+ data.tar.gz: b3a618898f38ceea740ed80bfd5e63b243156b7a
5
5
  SHA512:
6
- metadata.gz: 812b9c852a358ffdb8e7ed164320e8b7b6472d03da1f4226f9d446872d2b828feef3a7442f42924387462d5ccc1d9152024fa90de9b4bca9dd2b83e64da6967d
7
- data.tar.gz: 4c458de28d0639c77c12e48cd6ded1e32e317c482542c6e36846951cc221ff09effbf5c26edf86ebcc87a250a9d6238ab14b70c21cef01f73a282eee96f7a22d
6
+ metadata.gz: 729fec766c741bd7467288f160538f16c21940d6b12b14d71354d5363fad973e074bc846918bf62ec38bdf223cb780ceac3221a2b92a14e3547f81e20be24be4
7
+ data.tar.gz: 7166dbc2230799322b8540c8262b361c7cc3ecdfcb7eb29d63e3a474491b5c8d6609b1cefaad316bdd4a356731add01b623d98eea6afdde2887501ceee045685
data/Gemfile CHANGED
@@ -1,6 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
  gem "autotest"
3
3
  gem "autotest-growl"
4
+ gem "uuid"
4
5
  gem "ZenTest"
5
6
  # Specify your gem's dependencies in client_api.gemspec
6
7
  gemspec
@@ -0,0 +1,86 @@
1
+ require 'json'
2
+ require 'rest-client'
3
+ require_relative '../conf/conf_api'
4
+ require_relative 'handler'
5
+
6
+
7
+
8
+ module Recommender
9
+ class Client
10
+
11
+
12
+ def self.connect(api_key)
13
+ new(api_key)
14
+ end
15
+
16
+ def add_item(add_param)
17
+ score = get_action_score(add_param[:engine_name],add_param[:action])
18
+ score != nil ? Handler.load_data(get_load_parameter(add_param,score)) : false
19
+ end
20
+
21
+ def load_data(param)
22
+ parameter = {engine_name: param[:engine_name],data: param[:data],api_key: @api_key,token: @token}
23
+ Handler.load_data(parameter)
24
+ end
25
+
26
+ def get_similar_users(param)
27
+ parameter = {engine_name: param[:engine_name],api_key: @api_key,token: @token,id: param[:id],nb_wanted: param[:n]}
28
+ Handler.similar_users(parameter)
29
+ end
30
+
31
+ def get_similar_items(param)
32
+ parameter = {engine_name: param[:engine_name],api_key: @api_key,token: @token,id: param[:id],nb_wanted: param[:n]}
33
+ Handler.similar_items(parameter)
34
+ end
35
+
36
+ def get_recommendations(param)
37
+ parameter = {engine_name: param[:engine_name],api_key: @api_key,token: @token,id: param[:id],nb_wanted: param[:n]}
38
+ Handler.recommend(parameter)
39
+ end
40
+
41
+ private
42
+
43
+ def initialize(api_key)
44
+ @api_key = api_key
45
+ @token = Handler.connect_app(get_connect_param(api_key))
46
+ end
47
+
48
+ def get_connect_param(api_key)
49
+ {object: {api_key: api_key}.to_json,option: {user: false,app: true}.to_json}
50
+ end
51
+
52
+ def get_engine(engine_name)
53
+ param = {model_name: 'Engine',condition: {name: engine_name}.to_json}
54
+ object = call_api('/restricted/read',param)
55
+ engine = JSON.parse(object)
56
+ engine[0]
57
+ end
58
+
59
+ def get_load_parameter(add_param,score)
60
+ {engine_name: add_param[:engine_name],api_key: @api_key,token: @token,data: [{customer_id: add_param[:customer_id],item_id: add_param[:item_id],preference: score}].to_json}
61
+
62
+ end
63
+
64
+ def get_action_score(engine_name,action)
65
+ score = nil
66
+ engine = get_engine(engine_name)
67
+ actions = engine["engine_conf"]["actions"]
68
+ actions.each do |a|
69
+ if a["action"] == action
70
+ score = a["score"].to_i
71
+ break
72
+ end
73
+ end
74
+ score
75
+ end
76
+
77
+ def call_api(uri,param)
78
+ begin
79
+ RestClient.get API_SERVER+uri,params: param
80
+ rescue => e
81
+ e.response
82
+ end
83
+ end
84
+
85
+ end
86
+ end
@@ -1,3 +1,3 @@
1
1
  module ClientApi
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
data/lib/client_api.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  require "client_api/version"
2
2
  require_relative 'client_api/handler'
3
+ require_relative 'client_api/client'
3
4
 
4
5
  module ClientApi
5
-
6
+
6
7
  class Handler
7
8
  end
8
9
  end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe Recommender::Client do
5
+
6
+
7
+ let(:api_key) { "e26b56a0-f08f-0131-ddaf-080027ab4d7b" }
8
+ let(:add_param) {{type: 'article',engine_name: 'engine1',customer_id: 5,item_id: 2,action: 'Like'}}
9
+ let(:client) { Recommender::Client.connect(api_key)}
10
+ let(:param_similar_users) {{engine_name: 'engine1',id: 1,n: 4}}
11
+ let(:param_similar_items) {{type: 'article',engine_name: 'engine2',id: 1,n: 4}}
12
+
13
+ describe '.connect' do
14
+ context "When a application attemps to log in" do
15
+ it{expect(Recommender::Client.connect(api_key)).to be_a Recommender::Client}
16
+ end
17
+ end
18
+
19
+ describe '#add_item' do
20
+ context "When an application wants to add new data" do
21
+ it{expect(client.add_item(add_param)).to be_truthy}
22
+ end
23
+ end
24
+
25
+ describe '#load_data' do
26
+ context "When an application wants to load data" do
27
+ it{expect(client.load_data(param_load('engine1'))).to be_truthy}
28
+ it{expect(client.load_data(param_load('engine2'))).to be_truthy}
29
+ end
30
+ end
31
+
32
+ describe '#get_similar_users' do
33
+ context "When an application wants to get similar users" do
34
+ it{expect(client.get_similar_users(param_similar_users)).to_not eq nil}
35
+ end
36
+ end
37
+
38
+ describe '#get_similar_items' do
39
+ context "When an application wants to get similar items" do
40
+ it{expect(client.get_similar_items(param_similar_items)).to_not eq nil}
41
+ end
42
+ end
43
+
44
+ describe '#get_recommandations' do
45
+ context "When an application wants to get recommandations for a user" do
46
+ it{expect(client.get_recommendations(param_similar_items)).to_not eq nil}
47
+ end
48
+ end
49
+
50
+
51
+ end
data/spec/handler_spec.rb CHANGED
@@ -93,7 +93,9 @@ describe Handler do
93
93
 
94
94
  describe '.load_data' do
95
95
  context "When data are successfully load" do
96
- # it {expect(Handler.load_data(params_to_load)).to eq true }
96
+ populate_engine
97
+ it {expect(Handler.load_data(params_to_load1)).to eq true }
98
+ it {expect(Handler.load_data(params_to_load2)).to eq true }
97
99
  end
98
100
  end
99
101
 
data/spec/spec_helper.rb CHANGED
@@ -1,28 +1,50 @@
1
1
  require 'client_api'
2
+ require 'uuid'
2
3
  require 'redis'
3
4
  require 'json'
5
+ require 'rest-client'
6
+ require_relative '../lib/conf/conf_api'
4
7
 
5
8
 
6
9
 
7
10
  def engine_data_sample
8
11
  engine_data = []
9
12
  engine_data << {customer_id: 1,item_id: 1,preference: 1}
10
- 10.times do
13
+ 200.times do
11
14
  engine_data << {customer_id: rand(1..5),item_id: rand(1..10),preference: rand(1..5)}
12
15
  end
16
+ 100.times do
17
+ engine_data << {customer_id: rand(2..5),item_id: rand(10..20),preference: rand(1..5)}
18
+ end
13
19
  engine_data
14
20
  end
15
21
 
16
22
  def params_user_based
17
- {engine_name: 'eng869',api_key: '926eb0b0-e99d-0131-7e06-080027ab4d7b',token: 'token1',id: 1,nb_wanted: 2}
23
+ {engine_name: 'engUser',api_key: '926eb0b0-e99d-0131-7e06-080027ab4d7b',token: 'token1',id: 1,nb_wanted: 2}
18
24
  end
19
25
 
20
26
  def params_item_based
21
- {engine_name: 'eng111',api_key: '926eb0b0-e99d-0131-7e06-080027ab4d7b',token: 'token2',id: 1,nb_wanted: 2}
27
+ {engine_name: 'engItem',api_key: '926eb0b0-e99d-0131-7e06-080027ab4d7b',token: 'token2',id: 1,nb_wanted: 2}
28
+ end
29
+
30
+ def populate_engine(api_key)
31
+ nb = rand(10000)
32
+ RestClient.post(API_SERVER+'/restricted/object/new',{model_name: 'Application',content: {name: "app",api_key: api_key,url: "http://www.app#{nb}.com",user_id: 1}.to_json})
33
+ #RestClient.post(API_SERVER+'/restricted/object/new',{model_name: 'Engine',content: {name: "engUser",engine_conf: {similarity_metric: "PearsonCorrelationSimilarity",reco_algo:"GenericUserBasedRecommender", actions: [{action: "Like",score: "1"}],neighborhood: 6}.to_json,application_id: 391}.to_json})
34
+ #RestClient.post(API_SERVER+'/restricted/object/new',{model_name: 'Engine',content: {name: "engItem",engine_conf: {similarity_metric: "PearsonCorrelationSimilarity",reco_algo:"GenericItemBasedRecommender", actions: [{action: "Like",score: "1"}],neighborhood: 6}.to_json,application_id: 391}.to_json})
35
+ end
36
+
37
+
38
+ def params_to_load1
39
+ {engine_name: 'engItem',data: engine_data_sample.to_json,api_key: '926eb0b0-e99d-0131-7e06-080027ab4d7b',token: 'token2'}
22
40
  end
23
41
 
24
42
 
25
- def params_to_load
26
- {engine_name: 'eng111',data: engine_data_sample.to_json,api_key: '926eb0b0-e99d-0131-7e06-080027ab4d7b',token: 'token2'}
43
+ def params_to_load2
44
+ {engine_name: 'engUser',data: engine_data_sample.to_json,api_key: '926eb0b0-e99d-0131-7e06-080027ab4d7b',token: 'token2'}
45
+ end
46
+
47
+ def param_load(engine_name)
48
+ {engine_name: engine_name,data: engine_data_sample.to_json}
27
49
  end
28
50
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: client_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - 'fabira && atakem '
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-17 00:00:00.000000000 Z
11
+ date: 2014-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -96,9 +96,11 @@ files:
96
96
  - Rakefile
97
97
  - client_api.gemspec
98
98
  - lib/client_api.rb
99
+ - lib/client_api/client.rb
99
100
  - lib/client_api/handler.rb
100
101
  - lib/client_api/version.rb
101
102
  - lib/conf/conf_api.rb
103
+ - spec/client_spec.rb
102
104
  - spec/handler_spec.rb
103
105
  - spec/spec_helper.rb
104
106
  homepage: ''
@@ -126,5 +128,6 @@ signing_key:
126
128
  specification_version: 4
127
129
  summary: '"module client-API"'
128
130
  test_files:
131
+ - spec/client_spec.rb
129
132
  - spec/handler_spec.rb
130
133
  - spec/spec_helper.rb