meducation_sdk 1.6.3 → 1.6.4

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: 501cacf9b074ebddc2a0f852918fdc1d6ca17397
4
- data.tar.gz: 561cfb74aa544ebc77c96911064e6b3dc749220d
3
+ metadata.gz: 1c88f47006482637173b6f0ecefb769bf0fc8cba
4
+ data.tar.gz: 413eca4a6ba923a7374bf5d4f0c526a0836c5969
5
5
  SHA512:
6
- metadata.gz: 3bf5137df9ad1424be8dd7ff986ed20d66ee1e5d701e87dcaf90cb6569e96091ab9e7e4f054fbac220842f9aae4535f33c042a33cdda3f552922cb5651d040ec
7
- data.tar.gz: ded18c907cdcce4e1ceddbcd789fba133d163db41f60b089e8fe27580c3aa07786cc40e4b47e5801b6074bb6fd0104109016c5d9ccd479190f264697377b12bf
6
+ metadata.gz: cc609c0703bfb356080658287b5ae6f4fe156d8eadbb3a2a5e69e5a80eebfd1638429ab3265bd277fe18a573efbbf8d3ebb570dd97bf6bca8a9d380a89cb5816
7
+ data.tar.gz: e5145e0d61744cba03195e9899de18ed8e4cae404b0c53783c0ed5ae254790d5663d48f6f59cb21433d55007172d072daeed6efb6e81ef48c5b5a0268f94e2f8
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ # 1.6.4 / 2014-03-13
2
+ * [FEATURE] Recommendations are padded with good resources to reach limit
3
+
1
4
  # 1.6.3 / 2014-03-12
2
5
  * [BUGFIX] Add ip_address to view sample
3
6
 
@@ -10,16 +10,23 @@ module MeducationSDK
10
10
  def initialize(item, options = {})
11
11
  @item = item
12
12
  @options = options
13
+ @limit = options[:limit] || 5
13
14
  end
14
15
 
15
16
  def recommend
16
- generate_recommendations
17
+ recommendations = generate_recommendations
18
+ if recommendations.size < @limit
19
+ log "recommendations.size (#{recommendations.size}) is < limit of #{@limit}"
20
+ recommendations += MeducationSDK::MediaFile.where('rating > 2').per(@limit - recommendations.size).order(:random).to_a
21
+ else
22
+ log "recommendations.size (#{recommendations.size}) is >= limit of #{@limit}"
23
+ end
24
+ recommendations
17
25
  rescue => e
18
26
  log_error("!!Recommender Error!!")
19
27
  log_error(e.message)
20
28
  log_error(e.backtrace)
21
- #Item::Recommendation.where(item_type: @item.class.name).where(item_id: @item.id).includes(:recommendation).map(&:recommendation)
22
- []
29
+ MeducationSDK::MediaFile.where('rating > 2').per(@limit).order(:random).to_a
23
30
  end
24
31
 
25
32
  def generate_recommendations
@@ -1,3 +1,3 @@
1
1
  module MeducationSDK
2
- VERSION = "1.6.3"
2
+ VERSION = "1.6.4"
3
3
  end
@@ -3,6 +3,14 @@ require_relative '../test_helper'
3
3
  module MeducationSDK
4
4
  class RecommenderTest < Minitest::Test
5
5
 
6
+ def setup
7
+ @per_result = mock
8
+ @per_result.stubs(where: @per_result)
9
+ @per_result.stubs(order: @per_result)
10
+ @per_result.stubs(per: @per_result)
11
+ @per_result.stubs(to_a: [])
12
+ end
13
+
6
14
  def empty_response
7
15
  mock(body: '[]')
8
16
  end
@@ -15,6 +23,10 @@ module MeducationSDK
15
23
  @item2 ||= MediaFile.new({id: 56})
16
24
  end
17
25
 
26
+ def item3
27
+ @item3 ||= MediaFile.new({id: 57})
28
+ end
29
+
18
30
  def test_should_call_new
19
31
  Recommender.expects(:new).with(item, {}).returns(mock(recommend: nil))
20
32
  Recommender.recommend(item)
@@ -26,7 +38,9 @@ module MeducationSDK
26
38
  end
27
39
 
28
40
  def test_should_call_the_recommender_service
41
+ @per_result.expects(:per).with(5).returns(@per_result)
29
42
  Net::HTTP.expects(:get_response).with("recommender.meducation.net", "/MediaFile/#{item.id}", 4567).returns(empty_response)
43
+ MediaFile.expects(:where).with('rating > 2').returns(@per_result)
30
44
  Recommender.new(item).recommend
31
45
  end
32
46
 
@@ -36,12 +50,46 @@ module MeducationSDK
36
50
  {"type" => "MediaFile", "id" => item2.id, "score" => 0.0078}
37
51
  ].to_json
38
52
 
53
+ @per_result.expects(:per).with(3).returns(@per_result)
39
54
  Net::HTTP.expects(:get_response).returns(mock(body: json))
40
55
  MediaFile.expects(:where).with({id: [item.id, item2.id]}).returns([item, item2])
56
+ MediaFile.expects(:where).with('rating > 2').returns(@per_result)
41
57
  items = Recommender.new(item).recommend
42
58
  assert_equal [item, item2], items
43
59
  end
44
60
 
61
+ def test_should_not_get_more_resources_if_enough_recommendations
62
+ json = [
63
+ {"type" => "MediaFile", "id" => item.id, "score" => 0.0097},
64
+ {"type" => "MediaFile", "id" => item2.id, "score" => 0.0078}
65
+ ].to_json
66
+
67
+ Net::HTTP.expects(:get_response).returns(mock(body: json))
68
+ MediaFile.expects(:where).with({id: [item.id, item2.id]}).returns([item, item2])
69
+ MediaFile.expects(:where).with('rating > 2').never
70
+ items = Recommender.new(item, limit: 2).recommend
71
+ assert_equal [item, item2], items
72
+ end
73
+
74
+ def test_should_get_more_resources_if_too_few_recommendations
75
+ json = [
76
+ {"type" => "MediaFile", "id" => item.id, "score" => 0.0097},
77
+ {"type" => "MediaFile", "id" => item2.id, "score" => 0.0078}
78
+ ].to_json
79
+
80
+ limit = 5
81
+
82
+ @per_result.expects(:per).with(3).returns(@per_result)
83
+ @per_result.stubs(to_a: [item3])
84
+
85
+ Net::HTTP.expects(:get_response).returns(mock(body: json))
86
+ MediaFile.expects(:where).with({id: [item.id, item2.id]}).returns([item, item2])
87
+ good_resources = mock
88
+ MediaFile.expects(:where).with('rating > 2').returns(@per_result)
89
+ items = Recommender.new(item, limit: limit).recommend
90
+ assert_equal [item, item2, item3], items
91
+ end
92
+
45
93
  def test_should_limit_correctly
46
94
  items = 6.times.map { |x| MediaFile.new({id: x}) }
47
95
  json = items.map {|item| {"type" => "MediaFile", "id" => item.id, "score" => 0.0097} }.to_json
@@ -51,13 +99,34 @@ module MeducationSDK
51
99
  results = Recommender.new(item, limit: 3).recommend
52
100
  end
53
101
 
54
- def test_should_log_an_exception
102
+ def test_should_log_recommender_exception
103
+ @per_result.expects(:per).with(5).returns(@per_result)
104
+ @per_result.stubs(to_a: [item3])
55
105
  Net::HTTP.expects(:get_response).raises(StandardError)
56
106
  MeducationSDK.config.logger.expects(:error).with("!!Recommender Error!!")
57
107
  MeducationSDK.config.logger.expects(:error).with("StandardError")
108
+ MediaFile.stubs(:where).with('rating > 2').returns(@per_result)
58
109
  Recommender.new(item).recommend
59
110
  end
60
111
 
112
+ def test_should_get_good_resources_if_error_from_recommender
113
+ @per_result.expects(:per).with(5).returns(@per_result)
114
+ @per_result.stubs(to_a: [item3])
115
+ Net::HTTP.expects(:get_response).raises(StandardError)
116
+ MediaFile.stubs(:where).with('rating > 2').returns(@per_result)
117
+ items = Recommender.new(item).recommend
118
+ assert_equal [item3], items
119
+ end
120
+
121
+ def test_should_get_good_resources_if_error_from_recommender
122
+ @per_result.expects(:per).with(5).returns(@per_result)
123
+ @per_result.stubs(to_a: [item3])
124
+ Net::HTTP.expects(:get_response).raises(StandardError)
125
+ MediaFile.stubs(:where).with('rating > 2').returns(@per_result)
126
+ items = Recommender.new(item).recommend
127
+ assert_equal [item3], items
128
+ end
129
+
61
130
  def test_should_catch_an_exception_and_render_backup_recommendations
62
131
  skip
63
132
  recommendation = Item::Recommendation.create!(
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meducation_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.3
4
+ version: 1.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Walker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-12 00:00:00.000000000 Z
11
+ date: 2014-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport