muck-raker 0.1.31 → 0.1.32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. data/README.rdoc +2 -1
  2. data/VERSION +1 -1
  3. data/app/controllers/muck/aggregations_controller.rb +330 -0
  4. data/app/controllers/muck/identity_feeds_controller.rb +1 -0
  5. data/app/helpers/muck_raker_aggregations_helper.rb +11 -0
  6. data/app/helpers/muck_raker_services_helper.rb +3 -3
  7. data/app/models/aggregation.rb +21 -1
  8. data/app/models/aggregation_feed.rb +13 -0
  9. data/app/models/feed.rb +21 -7
  10. data/app/models/service.rb +3 -1
  11. data/app/models/service_category.rb +1 -0
  12. data/app/views/aggregations/_data_source.html.erb +4 -0
  13. data/app/views/aggregations/_data_sources.html.erb +10 -0
  14. data/app/views/aggregations/new.html.erb +12 -0
  15. data/app/views/identity_feeds/{_service_categories.html.erb → _available_service_categories.html.erb} +0 -0
  16. data/app/views/identity_feeds/index.html.erb +1 -1
  17. data/config/muck_raker_routes.rb +1 -0
  18. data/db/bootstrap/services.yml +24 -2
  19. data/db/migrate/20090915041650_aggregations_to_polymorphic.rb +15 -0
  20. data/lib/active_record/acts/muck_aggregation_owner.rb +30 -0
  21. data/lib/muck_raker.rb +2 -0
  22. data/locales/en.yml +5 -0
  23. data/muck-raker.gemspec +91 -3
  24. data/test/rails_root/app/models/user.rb +1 -0
  25. data/test/rails_root/config/environment.rb +1 -1
  26. data/test/rails_root/config/routes.rb +1 -0
  27. data/test/rails_root/config/solr/cores/de/conf/solrconfig.xml +9 -2
  28. data/test/rails_root/config/solr/cores/en/conf/solrconfig.xml +9 -2
  29. data/test/rails_root/config/solr/cores/es/conf/solrconfig.xml +9 -2
  30. data/test/rails_root/config/solr/cores/fr/conf/solrconfig.xml +9 -2
  31. data/test/rails_root/config/solr/cores/ja/conf/solrconfig.xml +9 -2
  32. data/test/rails_root/config/solr/cores/nl/conf/solrconfig.xml +11 -4
  33. data/test/rails_root/config/solr/cores/ru/conf/solrconfig.xml +9 -2
  34. data/test/rails_root/config/solr/cores/zh/conf/solrconfig.xml +9 -2
  35. data/test/rails_root/db/bootstrap/services.yml +13 -2
  36. data/test/rails_root/db/migrate/20090915041650_aggregations_to_polymorphic.rb +15 -0
  37. data/test/rails_root/public/images/service_icons/16/citeulike.png +0 -0
  38. data/test/rails_root/public/images/service_icons/16/dailymotion.png +0 -0
  39. data/test/rails_root/public/images/service_icons/16/diigo.png +0 -0
  40. data/test/rails_root/public/images/service_icons/16/fotolog.png +0 -0
  41. data/test/rails_root/public/images/service_icons/16/goodreads.png +0 -0
  42. data/test/rails_root/public/images/service_icons/16/googleblog.png +0 -0
  43. data/test/rails_root/public/images/service_icons/16/googlenews.png +0 -0
  44. data/test/rails_root/public/images/service_icons/16/identica.png +0 -0
  45. data/test/rails_root/public/images/service_icons/16/joost.png +0 -0
  46. data/test/rails_root/public/images/service_icons/16/librarything.png +0 -0
  47. data/test/rails_root/public/images/service_icons/16/mendeley.png +0 -0
  48. data/test/rails_root/public/images/service_icons/16/oai.png +0 -0
  49. data/test/rails_root/public/images/service_icons/16/odeo.png +0 -0
  50. data/test/rails_root/public/images/service_icons/16/opml.png +0 -0
  51. data/test/rails_root/public/images/service_icons/16/pandora.png +0 -0
  52. data/test/rails_root/public/images/service_icons/16/photobucket.png +0 -0
  53. data/test/rails_root/public/images/service_icons/16/polyvore.png +0 -0
  54. data/test/rails_root/public/images/service_icons/16/simpy.png +0 -0
  55. data/test/rails_root/public/images/service_icons/16/smugmug.png +0 -0
  56. data/test/rails_root/public/images/service_icons/16/tag.png +0 -0
  57. data/test/rails_root/public/images/service_icons/16/tumblr.png +0 -0
  58. data/test/rails_root/public/images/service_icons/16/xanga.png +0 -0
  59. data/test/rails_root/public/images/service_icons/16/zooomr.png +0 -0
  60. data/test/rails_root/public/images/service_icons/16/zotero.png +0 -0
  61. data/test/rails_root/public/images/service_icons/24/amazon.png +0 -0
  62. data/test/rails_root/public/images/service_icons/24/citeulike.png +0 -0
  63. data/test/rails_root/public/images/service_icons/24/dailymotion.png +0 -0
  64. data/test/rails_root/public/images/service_icons/24/diigo.png +0 -0
  65. data/test/rails_root/public/images/service_icons/24/fotolog.png +0 -0
  66. data/test/rails_root/public/images/service_icons/24/goodreads.png +0 -0
  67. data/test/rails_root/public/images/service_icons/24/googleblog.png +0 -0
  68. data/test/rails_root/public/images/service_icons/24/googlenews.png +0 -0
  69. data/test/rails_root/public/images/service_icons/24/identica.png +0 -0
  70. data/test/rails_root/public/images/service_icons/24/joost.png +0 -0
  71. data/test/rails_root/public/images/service_icons/24/librarything.png +0 -0
  72. data/test/rails_root/public/images/service_icons/24/mendeley.png +0 -0
  73. data/test/rails_root/public/images/service_icons/24/oai.png +0 -0
  74. data/test/rails_root/public/images/service_icons/24/odeo.png +0 -0
  75. data/test/rails_root/public/images/service_icons/24/opml.png +0 -0
  76. data/test/rails_root/public/images/service_icons/24/pandora.png +0 -0
  77. data/test/rails_root/public/images/service_icons/24/photobucket.png +0 -0
  78. data/test/rails_root/public/images/service_icons/24/polyvore.png +0 -0
  79. data/test/rails_root/public/images/service_icons/24/simpy.png +0 -0
  80. data/test/rails_root/public/images/service_icons/24/smugmug.png +0 -0
  81. data/test/rails_root/public/images/service_icons/24/tag.png +0 -0
  82. data/test/rails_root/public/images/service_icons/24/tumblr.png +0 -0
  83. data/test/rails_root/public/images/service_icons/24/xanga.png +0 -0
  84. data/test/rails_root/public/images/service_icons/24/zooomr.png +0 -0
  85. data/test/rails_root/public/images/service_icons/24/zotero.png +0 -0
  86. data/test/rails_root/public/images/service_icons/48/amazon.png +0 -0
  87. data/test/rails_root/public/images/service_icons/48/citeulike.png +0 -0
  88. data/test/rails_root/public/images/service_icons/48/dailymotion.png +0 -0
  89. data/test/rails_root/public/images/service_icons/48/diigo.png +0 -0
  90. data/test/rails_root/public/images/service_icons/48/fotolog.png +0 -0
  91. data/test/rails_root/public/images/service_icons/48/goodreads.png +0 -0
  92. data/test/rails_root/public/images/service_icons/48/googleblog.png +0 -0
  93. data/test/rails_root/public/images/service_icons/48/googlenews.png +0 -0
  94. data/test/rails_root/public/images/service_icons/48/identica.png +0 -0
  95. data/test/rails_root/public/images/service_icons/48/joost.png +0 -0
  96. data/test/rails_root/public/images/service_icons/48/librarything.png +0 -0
  97. data/test/rails_root/public/images/service_icons/48/mendeley.png +0 -0
  98. data/test/rails_root/public/images/service_icons/48/oai.png +0 -0
  99. data/test/rails_root/public/images/service_icons/48/odeo.png +0 -0
  100. data/test/rails_root/public/images/service_icons/48/opml.png +0 -0
  101. data/test/rails_root/public/images/service_icons/48/pandora.png +0 -0
  102. data/test/rails_root/public/images/service_icons/48/photobucket.png +0 -0
  103. data/test/rails_root/public/images/service_icons/48/polyvore.png +0 -0
  104. data/test/rails_root/public/images/service_icons/48/simpy.png +0 -0
  105. data/test/rails_root/public/images/service_icons/48/smugmug.png +0 -0
  106. data/test/rails_root/public/images/service_icons/48/tag.png +0 -0
  107. data/test/rails_root/public/images/service_icons/48/tumblr.png +0 -0
  108. data/test/rails_root/public/images/service_icons/48/xanga.png +0 -0
  109. data/test/rails_root/public/images/service_icons/48/zooomr.png +0 -0
  110. data/test/rails_root/public/images/service_icons/48/zotero.png +0 -0
  111. data/test/rails_root/public/images/service_icons/60/amazon.png +0 -0
  112. data/test/rails_root/public/images/service_icons/60/citeulike.png +0 -0
  113. data/test/rails_root/public/images/service_icons/60/dailymotion.png +0 -0
  114. data/test/rails_root/public/images/service_icons/60/diigo.png +0 -0
  115. data/test/rails_root/public/images/service_icons/60/fotolog.png +0 -0
  116. data/test/rails_root/public/images/service_icons/60/goodreads.png +0 -0
  117. data/test/rails_root/public/images/service_icons/60/googleblog.png +0 -0
  118. data/test/rails_root/public/images/service_icons/60/googlenews.png +0 -0
  119. data/test/rails_root/public/images/service_icons/60/identica.png +0 -0
  120. data/test/rails_root/public/images/service_icons/60/joost.png +0 -0
  121. data/test/rails_root/public/images/service_icons/60/librarything.png +0 -0
  122. data/test/rails_root/public/images/service_icons/60/mendeley.png +0 -0
  123. data/test/rails_root/public/images/service_icons/60/oai.png +0 -0
  124. data/test/rails_root/public/images/service_icons/60/odeo.png +0 -0
  125. data/test/rails_root/public/images/service_icons/60/opml.png +0 -0
  126. data/test/rails_root/public/images/service_icons/60/pandora.png +0 -0
  127. data/test/rails_root/public/images/service_icons/60/photobucket.png +0 -0
  128. data/test/rails_root/public/images/service_icons/60/polyvore.png +0 -0
  129. data/test/rails_root/public/images/service_icons/60/simpy.png +0 -0
  130. data/test/rails_root/public/images/service_icons/60/smugmug.png +0 -0
  131. data/test/rails_root/public/images/service_icons/60/tag.png +0 -0
  132. data/test/rails_root/public/images/service_icons/60/tumblr.png +0 -0
  133. data/test/rails_root/public/images/service_icons/60/xanga.png +0 -0
  134. data/test/rails_root/public/images/service_icons/60/zooomr.png +0 -0
  135. data/test/rails_root/public/images/service_icons/60/zotero.png +0 -0
  136. data/test/rails_root/public/images/service_icons/amazon.png +0 -0
  137. data/test/rails_root/public/stylesheets/application.css +4 -0
  138. data/test/rails_root/test/factories.rb +7 -0
  139. data/test/rails_root/test/functional/identity_feeds_controller_test.rb +11 -4
  140. data/test/rails_root/test/test_helper.rb +8 -0
  141. data/test/rails_root/test/unit/aggregation_feed_test.rb +17 -0
  142. data/test/rails_root/test/unit/aggregation_test.rb +24 -0
  143. data/test/rails_root/test/unit/amazon_request_test.rb +14 -0
  144. data/test/rails_root/test/unit/feed_test.rb +51 -0
  145. data/test/rails_root/test/unit/identity_feed_test.rb +10 -0
  146. data/test/rails_root/test/unit/service_test.rb +3 -10
  147. data/test/rails_root/test/unit/user_test.rb +4 -1
  148. metadata +91 -3
@@ -585,7 +585,7 @@ goodreads:
585
585
  sort: 55
586
586
  name: Goodreads
587
587
  uri: "http://www.goodreads.com"
588
- icon: librarything.png
588
+ icon: goodreads.png
589
589
  use_for: "identity"
590
590
  service_category_id: 10
591
591
  active: true
@@ -621,4 +621,15 @@ amazon:
621
621
  use_for: "identity"
622
622
  service_category_id: 10
623
623
  active: true
624
- prompt: amazon_prompt
624
+ prompt: amazon_prompt
625
+ twitter:
626
+ id: 59
627
+ name: Twitter
628
+ uri: "http://www.twitter.com"
629
+ api_uri:
630
+ uri_template: "http://search.twitter.com/search.atom?q=+{tag}"
631
+ icon: twitter.png
632
+ sort: 59
633
+ use_for: "tags"
634
+ service_category_id: 5
635
+ active: true
@@ -0,0 +1,15 @@
1
+ class AggregationsToPolymorphic < ActiveRecord::Migration
2
+ def self.up
3
+ remove_column :aggregations, :user_id
4
+ add_column :aggregations, :ownable_id, :integer
5
+ add_column :aggregations, :ownable_type, :string
6
+ add_index :aggregations, [:ownable_id, :ownable_type]
7
+ end
8
+
9
+ def self.down
10
+ add_column :aggregations, :user_id, :integer
11
+ remove_column :aggregations, :ownable_id, :integer
12
+ remove_column :aggregations, :ownable_type, :string
13
+ remove_index :aggregations, [:ownable_id, :ownable_type]
14
+ end
15
+ end
@@ -94,3 +94,7 @@ ul#my-services-list li form {right:-25px;position:absolute;top:3px;}
94
94
  ul.service-summary{margin:0;padding:0;list-style:none;}
95
95
  ul.service-summary a.service-link{display:inline-block;margin:2px 0;padding:2px 0 5px 28px;text-decoration:none;}
96
96
  .waiting{margin:3px 0;padding-left:20px;background:transparent url('/images/spinner.gif') no-repeat scroll left bottom;}
97
+ #sources-list ul {float:left;display:inline-block;height:130px;margin:0 20px;width:130px;}
98
+ #sources-list ul li{padding:2px 0 5px 25px;}
99
+ #sources-list ul li input{margin:0;}
100
+ #sources-list ul li.source-title{font-weight:bolder;font-size:1.4em;margin:10px 0 0 0;padding:0;}
@@ -74,6 +74,13 @@ Factory.define :comment do |f|
74
74
  f.user {|a| a.association(:user)}
75
75
  end
76
76
 
77
+ Factory.define :aggregation do |f|
78
+ f.name { Factory.next(:name) }
79
+ f.title { Factory.next(:name) }
80
+ f.description { Factory.next(:description) }
81
+ f.ownable {|a| a.association(:user)}
82
+ end
83
+
77
84
  Factory.define :feed do |f|
78
85
  f.contributor { |a| a.association(:user) }
79
86
  f.uri { Factory.next(:uri) }
@@ -9,6 +9,8 @@ class Muck::IdentityFeedsControllerTest < ActionController::TestCase
9
9
  setup do
10
10
  @user = Factory(:user)
11
11
  @service = Factory(:service)
12
+ activate_authlogic
13
+ login_as @user
12
14
  end
13
15
 
14
16
  context "GET index" do
@@ -56,7 +58,9 @@ class Muck::IdentityFeedsControllerTest < ActionController::TestCase
56
58
  @uri = TEST_URI
57
59
  post :create, :service_id => @service.to_param, :uri => @uri, :user_id => @user
58
60
  end
59
- should_set_the_flash_to(I18n.t('muck.raker.successfully_added_uri_feed'))
61
+ should "set success in the flash" do
62
+ ensure_flash_contains(I18n.t('muck.raker.successfully_added_uri_feed'))
63
+ end
60
64
  end
61
65
 
62
66
  context "POST create using valid service username" do
@@ -68,7 +72,8 @@ class Muck::IdentityFeedsControllerTest < ActionController::TestCase
68
72
  setup do
69
73
  post :create, :service_id => @service.to_param, :username => @username, :user_id => @user
70
74
  end
71
- should_set_the_flash_to(I18n.t('muck.raker.successfully_added_username_feed'))
75
+ should_respond_with :success
76
+ should_set_the_flash_to(I18n.t('muck.raker.successfully_added_username_feed', :service => ''))
72
77
  end
73
78
  context "json" do
74
79
  setup do
@@ -85,7 +90,7 @@ class Muck::IdentityFeedsControllerTest < ActionController::TestCase
85
90
  post :create, :service_id => @service.to_param, :username => @username, :user_id => @user
86
91
  post :create, :service_id => @service.to_param, :username => @username, :user_id => @user
87
92
  end
88
- should_set_the_flash_to(I18n.t('muck.raker.already_added_username_Feed'))
93
+ should_set_the_flash_to(I18n.t('muck.raker.already_added_username_feed', :service => '', :username => 'jbasdf')) # really do have to hard code the string here. @username is nil
89
94
  should_respond_with :success
90
95
  should_render_template :new
91
96
  end
@@ -97,7 +102,9 @@ class Muck::IdentityFeedsControllerTest < ActionController::TestCase
97
102
  post :create, :service_id => @service.to_param, :uri => @uri, :user_id => @user
98
103
  post :create, :service_id => @service.to_param, :uri => @uri, :user_id => @user
99
104
  end
100
- should_set_the_flash_to(I18n.t('muck.raker.already_added_uri_Feed'))
105
+ should "set already added in the flash" do
106
+ ensure_flash_contains(I18n.t('muck.raker.already_added_uri_feed', :uri => @uri))
107
+ end
101
108
  should_respond_with :success
102
109
  should_render_template :new
103
110
  end
@@ -40,6 +40,14 @@ class ActiveSupport::TestCase
40
40
  def ensure_flash(val)
41
41
  assert_contains flash.values, val, ", Flash: #{flash.inspect}"
42
42
  end
43
+
44
+ def ensure_flash_contains(val)
45
+ flash.values.each do |flv|
46
+ return true if flv.include?(val)
47
+ end
48
+ false
49
+ end
50
+
43
51
  end
44
52
 
45
53
  # turn off solr for tests
@@ -0,0 +1,17 @@
1
+ # == Schema Information
2
+ #
3
+ # Table name: aggregation_feeds
4
+ #
5
+ # id :integer(4) not null, primary key
6
+ # aggregation_id :integer(4)
7
+ # feed_id :integer(4)
8
+ #
9
+
10
+ require File.dirname(__FILE__) + '/../test_helper'
11
+
12
+ class AggregationFeedTest < ActiveSupport::TestCase
13
+ context "aggregation feed" do
14
+ should_belong_to :aggregation
15
+ should_belong_to :feed
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ # == Schema Information
2
+ #
3
+ # Table name: aggregations
4
+ #
5
+ # id :integer(4) not null, primary key
6
+ # name :string(255)
7
+ # title :string(255)
8
+ # description :text
9
+ # top_tags :text
10
+ # created_at :datetime
11
+ # updated_at :datetime
12
+ # ownable_id :integer(4)
13
+ # ownable_type :string(255)
14
+ #
15
+
16
+ require File.dirname(__FILE__) + '/../test_helper'
17
+
18
+ class AggregationTest < ActiveSupport::TestCase
19
+ context "aggregation" do
20
+ should_belong_to :ownable
21
+ should_have_many :aggregation_feeds
22
+ should_have_many :feeds
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class AmazonRequestTest < ActiveSupport::TestCase
4
+
5
+ context "amazon wish list" do
6
+ setup do
7
+ @email = 'justinball@gmail.com'
8
+ end
9
+ should "get wishlist" do
10
+ #AmazonRequest.get_amazon_feeds(@email)
11
+ end
12
+ end
13
+
14
+ end
@@ -116,6 +116,57 @@ class FeedTest < ActiveSupport::TestCase
116
116
  end
117
117
  end
118
118
 
119
+ context "global feed and references" do
120
+ setup do
121
+ @global_feed = Factory(:feed)
122
+ @user = Factory(:user)
123
+ @feed = Factory(:feed)
124
+ @user.feeds << @feed
125
+ @feed.reload
126
+ @identity_feed = Factory(:feed)
127
+ @user.own_feeds << @identity_feed
128
+ @identity_feed.reload
129
+ @aggregation_feed = Factory(:feed)
130
+ @aggregation = Factory(:aggregation, :ownable => @user)
131
+ @aggregation.feeds << @aggregation_feed
132
+ end
133
+
134
+ context "referenced feed" do
135
+ context "feed" do
136
+ should "be non-global" do
137
+ assert !@feed.global?
138
+ end
139
+ should "be in use" do
140
+ assert @feed.in_use?
141
+ end
142
+ end
143
+ context "identity feed" do
144
+ should "be non-global" do
145
+ assert !@identity_feed.global?
146
+ end
147
+ should "be in use" do
148
+ assert @identity_feed.in_use?
149
+ end
150
+ end
151
+ context "aggregation feed" do
152
+ should "be non-global" do
153
+ assert !@aggregation_feed.global?
154
+ end
155
+ should "be in use" do
156
+ assert @aggregation_feed.in_use?
157
+ end
158
+ end
159
+ end
160
+ context "global feed" do
161
+ should "be a global feed" do
162
+ assert @global_feed.global?
163
+ end
164
+ should "not be in use" do
165
+ assert !@global_feed.in_use?
166
+ end
167
+ end
168
+ end
169
+
119
170
  context "Create feed from service" do
120
171
  setup do
121
172
  @login = 'jbasdf'
@@ -1,3 +1,13 @@
1
+ # == Schema Information
2
+ #
3
+ # Table name: identity_feeds
4
+ #
5
+ # id :integer(4) not null, primary key
6
+ # feed_id :integer(4) not null
7
+ # ownable_id :integer(4) not null
8
+ # ownable_type :string(255) not null
9
+ #
10
+
1
11
  require File.dirname(__FILE__) + '/../test_helper'
2
12
 
3
13
  class IdentityFeedTest < ActiveSupport::TestCase
@@ -10,9 +10,11 @@
10
10
  # icon :string(2083) default("rss.gif")
11
11
  # sort :integer(4)
12
12
  # requires_password :boolean(1)
13
- # is_identity :boolean(1)
13
+ # use_for :string(255)
14
14
  # service_category_id :integer(4)
15
15
  # active :boolean(1) default(TRUE)
16
+ # prompt :string(255)
17
+ # template :string(255)
16
18
  #
17
19
 
18
20
  require File.dirname(__FILE__) + '/../test_helper'
@@ -56,13 +58,4 @@ class ServiceTest < ActiveSupport::TestCase
56
58
  end
57
59
  end
58
60
 
59
- context "amazon wish list" do
60
- setup do
61
- @email = 'justinball@gmail.com'
62
- end
63
- should "get wishlist" do
64
- Service.get_amazon_feeds(@email)
65
- end
66
- end
67
-
68
61
  end
@@ -30,11 +30,14 @@
30
30
  require File.dirname(__FILE__) + '/../test_helper'
31
31
 
32
32
  class UserTest < ActiveSupport::TestCase
33
- context "feeds" do
33
+ context "users" do
34
34
  setup do
35
35
  @user = Factory(:user)
36
36
  end
37
37
  should_have_many :feed_parents
38
+ should_have_many :aggregations
38
39
  should_have_many :feeds
40
+ should_have_many :own_feeds
41
+ should_have_many :identity_feeds
39
42
  end
40
43
  end