muck-raker 0.1.36 → 0.1.37

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.36
1
+ 0.1.37
@@ -15,7 +15,7 @@ class Muck::FeedPreviewsController < ApplicationController
15
15
 
16
16
  def select_feeds
17
17
  @feed = Feed.new(params[:feed])
18
- @feeds = Feed.gather_information(@feed.uri)
18
+ @feeds = Feed.gather_information(@feed.uri).compact
19
19
  respond_to do |format|
20
20
  format.pjs do
21
21
  render_as_html do
@@ -2,7 +2,8 @@ class Muck::FeedsController < ApplicationController
2
2
 
3
3
  unloadable
4
4
 
5
- before_filter :get_owner
5
+ before_filter :login_required, :except => ['index', 'show']
6
+ before_filter :get_owner, :except => ['index', 'show']
6
7
 
7
8
  def index
8
9
  @feeds = Feed.find(:all, :conditions => 'status >= 0', :order => (params[:order] || 'title') + (params[:asc] == 'false' ? ' DESC' : ' ASC') + ', title', :include => [:default_language]).paginate(:page => @page, :per_page => @per_page)
@@ -99,6 +100,9 @@ class Muck::FeedsController < ApplicationController
99
100
  end
100
101
 
101
102
  def has_permission_to_add_feed(user, parent)
103
+ return false if user.blank?
104
+ return true if user.admin?
105
+ return false if parent.blank?
102
106
  user == parent || parent.can_add_feed?(user)
103
107
  end
104
108
 
@@ -1,5 +1,4 @@
1
1
  class Muck::OpmlsController < ApplicationController
2
-
3
2
  unloadable
4
3
 
5
4
  def index
@@ -13,7 +12,7 @@ class Muck::OpmlsController < ApplicationController
13
12
  @terms = params[:terms]
14
13
  respond_to do |format|
15
14
  format.html { render :template => 'opmls/index' }
16
- format.opml { render(:layout => false) }
15
+ format.opml { render :template => 'opmls/index' }
17
16
  end
18
17
  end
19
18
  end
data/app/models/feed.rb CHANGED
@@ -144,13 +144,14 @@ class Feed < ActiveRecord::Base
144
144
  feeds = []
145
145
  @available_feeds = discover_feeds(uri)
146
146
  @available_feeds.each do |feed|
147
- feeds << from_feedzirra(Feedzirra::Feed.fetch_and_parse(feed.url))
147
+ feeds << from_feedzirra(Feedzirra::Feed.fetch_and_parse(feed.url)) unless feed.blank?
148
148
  end
149
149
  feeds
150
150
  end
151
151
 
152
152
  # Turns a feed from feedzirra into a muck feed
153
153
  def self.from_feedzirra(feed)
154
+ return if feed.blank?
154
155
  Feed.new(:short_title => feed.title,
155
156
  :title => feed.title,
156
157
  :display_uri => feed.url,
@@ -1,3 +1,9 @@
1
+ # Google ajax feed api reference:
2
+ # http://code.google.com/apis/ajaxfeeds/documentation/reference.html
3
+ #
4
+ # Google code playground:
5
+ # http://code.google.com/apis/ajax/playground/?exp=search#load_feed
6
+ #
1
7
  class GoogleFeedRequest
2
8
  include HTTParty
3
9
  format :json
@@ -9,6 +15,14 @@ class GoogleFeedRequest
9
15
  @api_key_id = api_key_id
10
16
  end
11
17
 
18
+ def self.lookup_feed(uri)
19
+ get('http://ajax.googleapis.com/ajax/services/feed/lookup', :query => build_google_query({:q => uri}))
20
+ end
21
+
22
+ def self.load_feed(uri)
23
+ get('http://ajax.googleapis.com/ajax/services/feed/load', :query => build_google_query({:q => uri}))
24
+ end
25
+
12
26
  # Search for feeds using google. This will return
13
27
  # a collection of 'Feed' objects
14
28
  def self.find_feeds(query)
@@ -18,9 +32,7 @@ class GoogleFeedRequest
18
32
  # Search for feeds using google. This will return
19
33
  # a hash with the results
20
34
  def self.find_google_feeds(query)
21
- query_options = {:q => query, :v => '1.0'}
22
- query_options[:key] = GlobalConfig.google_ajax_api_key if GlobalConfig.google_ajax_api_key
23
- get('http://ajax.googleapis.com/ajax/services/feed/find', :query => query_options)
35
+ get('http://ajax.googleapis.com/ajax/services/feed/find', :query => build_google_query({:q => query}))
24
36
  end
25
37
 
26
38
  # convert the result of a google query to 'Feed' objects
@@ -33,4 +45,11 @@ class GoogleFeedRequest
33
45
  end
34
46
  end
35
47
 
48
+ # Add standard items to the google query
49
+ def self.build_google_query(query_options)
50
+ query_options[:v] = '1.0'
51
+ query_options[:key] = GlobalConfig.google_ajax_api_key if GlobalConfig.google_ajax_api_key
52
+ query_options
53
+ end
54
+
36
55
  end
@@ -142,7 +142,7 @@ class Service < ActiveRecord::Base
142
142
  # attempts to find a service using a uri
143
143
  def self.find_service_by_uri(uri)
144
144
  @services ||= Service.all
145
- service = @services.detect { |service| service.uri && service.uri.length > 0 && uri.include?(service.uri) }
145
+ service = @services.detect { |service| service.uri && service.uri.length > 0 && (uri.include?(service.uri) || service.uri.include?(uri)) }
146
146
  service ||= Service.find_by_name('rss') # this will return the default rss service
147
147
  service
148
148
  end
data/muck-raker.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{muck-raker}
8
- s.version = "0.1.36"
8
+ s.version = "0.1.37"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joel Duffin Justin Ball"]
@@ -25,42 +25,53 @@ class Muck::FeedsControllerTest < ActionController::TestCase
25
25
  should_render_template :show
26
26
  end
27
27
 
28
- context "GET new" do
28
+ context "logged in" do
29
29
  setup do
30
- get :new
30
+ @admin = Factory(:user)
31
+ @admin_role = Factory(:role, :rolename => 'administrator')
32
+ @admin.roles << @admin_role
33
+ activate_authlogic
34
+ login_as @admin
31
35
  end
32
- should_not_set_the_flash
33
- should_respond_with :success
34
- should_render_template :new
35
- end
36
-
37
- context "GET new_extended" do
38
- setup do
39
- get :new_extended
36
+
37
+ context "GET new" do
38
+ setup do
39
+ get :new
40
+ end
41
+ should_not_set_the_flash
42
+ should_respond_with :success
43
+ should_render_template :new
44
+ end
45
+
46
+ context "GET new_extended" do
47
+ setup do
48
+ get :new_extended
49
+ end
50
+ should_not_set_the_flash
51
+ should_respond_with :success
52
+ should_render_template :new_extended
40
53
  end
41
- should_not_set_the_flash
42
- should_respond_with :success
43
- should_render_template :new_extended
44
- end
45
54
 
46
- context "POST create (simple)" do
47
- setup do
48
- post :create, :feed => { :uri => TEST_RSS_URI }
55
+ context "POST create (simple)" do
56
+ setup do
57
+ post :create, :feed => { :uri => TEST_RSS_URI }
58
+ end
59
+ should_set_the_flash_to(I18n.t('muck.raker.feed_successfully_created', :uri => TEST_RSS_URI))
49
60
  end
50
- should_set_the_flash_to(I18n.t('muck.raker.feed_successfully_created', :uri => TEST_RSS_URI))
51
- end
52
-
53
- context "POST create (advanced)" do
54
- setup do
55
- post :create, :feed => { :uri => TEST_RSS_URI,
56
- :display_uri => 'http://www.example.com',
57
- :title => 'test feed long',
58
- :short_title => 'test feed',
59
- :description => 'foo bar' }
61
+
62
+ context "POST create (advanced)" do
63
+ setup do
64
+ post :create, :feed => { :uri => TEST_RSS_URI,
65
+ :display_uri => 'http://www.example.com',
66
+ :title => 'test feed long',
67
+ :short_title => 'test feed',
68
+ :description => 'foo bar' }
69
+ end
70
+ should_set_the_flash_to(I18n.t('muck.raker.feed_successfully_created', :uri => TEST_RSS_URI))
60
71
  end
61
- should_set_the_flash_to(I18n.t('muck.raker.feed_successfully_created', :uri => TEST_RSS_URI))
62
- end
63
72
 
73
+ end
74
+
64
75
  end
65
76
 
66
77
  end
@@ -5,7 +5,7 @@ class Muck::OpmlsControllerTest < ActionController::TestCase
5
5
  tests Muck::OpmlsController
6
6
 
7
7
  context "opmls controller" do
8
-
8
+
9
9
  context "GET new" do
10
10
  setup do
11
11
  get :new
@@ -7,6 +7,7 @@ gem 'thoughtbot-factory_girl' # from github
7
7
  require 'factory_girl'
8
8
  require 'mocha'
9
9
  require 'authlogic/test_case'
10
+ require 'active_record/fixtures'
10
11
  require 'redgreen' rescue LoadError
11
12
  require File.expand_path(File.dirname(__FILE__) + '/factories')
12
13
  require File.join(File.dirname(__FILE__), 'shoulda_macros', 'controller')
@@ -56,3 +57,20 @@ class ActsAsSolr::Post
56
57
  true
57
58
  end
58
59
  end
60
+
61
+
62
+ # load in the default data required to run the app
63
+ def bootstrap_services
64
+ ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym)
65
+
66
+ ServiceCategory.delete_all
67
+ yml = File.join(File.dirname(__FILE__), '..', '..', '..', 'db', 'bootstrap',"service_categories")
68
+ Fixtures.new(Service.connection,"service_categories",ServiceCategory,yml).insert_fixtures
69
+
70
+ Service.delete_all
71
+ yml = File.join(File.dirname(__FILE__), '..', '..', '..', 'db', 'bootstrap',"services")
72
+ Fixtures.new(Service.connection,"services",Service,yml).insert_fixtures
73
+
74
+ end
75
+
76
+ bootstrap_services
@@ -3,10 +3,8 @@ require File.dirname(__FILE__) + '/../test_helper'
3
3
  class GoogleFeedRequestTest < ActiveSupport::TestCase
4
4
 
5
5
  context "google feed requests" do
6
- setup do
7
- Factory(:service)
8
- end
9
- context "find_feeds" do
6
+
7
+ context "find feeds" do
10
8
  setup do
11
9
  @feeds = GoogleFeedRequest.find_feeds('ruby')
12
10
  end
@@ -18,7 +16,7 @@ class GoogleFeedRequestTest < ActiveSupport::TestCase
18
16
  end
19
17
  end
20
18
 
21
- context "find_google_feeds" do
19
+ context "find feeds (raw results)" do
22
20
  setup do
23
21
  @feeds = GoogleFeedRequest.find_google_feeds('ruby')
24
22
  end
@@ -27,6 +25,24 @@ class GoogleFeedRequestTest < ActiveSupport::TestCase
27
25
  end
28
26
  end
29
27
 
28
+ context "lookup feed" do
29
+ setup do
30
+ @result = GoogleFeedRequest.lookup_feed('http://www.justinball.com')
31
+ end
32
+ should "discover rss feed using uri" do
33
+ assert_equal 'http://www.justinball.com/feed/', @result['responseData']['url']
34
+ end
35
+ end
36
+
37
+ context "load feed" do
38
+ setup do
39
+ @entries = GoogleFeedRequest.load_feed('http://www.justinball.com')
40
+ end
41
+ should "get entries from feed" do
42
+ assert @entries.length > 0
43
+ end
44
+ end
45
+
30
46
  end
31
47
 
32
48
  end
@@ -84,10 +84,10 @@ class ServiceTest < ActiveSupport::TestCase
84
84
  feeds = Service.build_feeds(@user, tag)
85
85
  assert feeds.any?{|feed| feed.display_uri == (@uri_template.sub('{tag}', tag))}
86
86
  end
87
- should "build a feed for every service" do
87
+ should "build a feed for every tag service" do
88
88
  tag = 'cycling'
89
89
  feeds = Service.build_feeds(@user, tag)
90
- assert_equal Service.all.length, feeds.length
90
+ assert_equal Service.tag_services.length, feeds.length
91
91
  assert feeds.any?{|feed| feed.uri == (@template.sub('{tag}', tag))}
92
92
  end
93
93
  should "build a limited number of feeds for tag" do
@@ -96,10 +96,10 @@ class ServiceTest < ActiveSupport::TestCase
96
96
  assert_equal 1, feeds.length
97
97
  assert feeds.any?{|feed| feed.uri == (@template.sub('{tag}', tag))}
98
98
  end
99
- should "create a feed for every service" do
99
+ should "create a feed for every tag service" do
100
100
  tag = 'physics'
101
101
  feeds = Service.create_feeds(@user, tag)
102
- assert_equal Service.all.length, feeds.length
102
+ assert_equal Service.tag_services.length, feeds.length
103
103
  assert feeds.any?{|feed| feed.uri == (@template.sub('{tag}', tag))}
104
104
  end
105
105
  should "create a limited number of feeds for tag" do
@@ -138,12 +138,20 @@ class ServiceTest < ActiveSupport::TestCase
138
138
 
139
139
  context "Find service by uri" do
140
140
  setup do
141
+ Service.delete_all
141
142
  @service = Factory(:service, :uri => 'http://www.example.com')
142
143
  end
143
- should "find service" do
144
+ after do
145
+ bootstrap_services
146
+ end
147
+ should "find service when uri is shorter" do
144
148
  service = Service.find_service_by_uri('example.com')
145
149
  assert_equal @service, service
146
150
  end
151
+ should "find service uri is longer" do
152
+ service = Service.find_service_by_uri('http://www.example.com/other_stuff')
153
+ assert_equal @service, service
154
+ end
147
155
  end
148
156
 
149
157
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muck-raker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.36
4
+ version: 0.1.37
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Duffin Justin Ball