sogger 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'fakeweb'
5
+
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
8
+ require 'sogger'
9
+
10
+ FakeWeb.register_uri :get, Sogger::Sogger::SO_FEED_URL, :body => File.read("test/fixtures/so_feed_sample.xml")
11
+
12
+ class Test::Unit::TestCase
13
+ include Sogger
14
+ def setup
15
+ Sogger.save_path = "test/feed.xml"
16
+ end
17
+
18
+ def read_sample_file(filename)
19
+ File.read("test/fixtures/#{filename}")
20
+ end
21
+
22
+ def teardown
23
+ File.delete(Sogger.save_path) if File.exists?(Sogger.save_path)
24
+ end
25
+ end
@@ -0,0 +1,60 @@
1
+ require 'helper'
2
+
3
+ class TestQuestion < Test::Unit::TestCase
4
+ context "Question" do
5
+ setup do
6
+ @xml_element = Nokogiri::XML(read_sample_file("so_feed_sample.xml")).css('entry').first
7
+ end
8
+
9
+ should "be initializeable from xml" do
10
+ assert_nothing_raised do
11
+ Question.from_xml(@xml_element)
12
+ end
13
+ end
14
+
15
+ should "have correct attributes when instantiated from xml" do
16
+ q = Question.from_xml(@xml_element)
17
+ expected_attributes = {
18
+ :title => "Windows and Minibuffer floating over the frame",
19
+ :url => "http://stackoverflow.com/questions/1856203/windows-and-minibuffer-floating-over-the-frame",
20
+ :tags => ["emacs"],
21
+ :published => DateTime.parse("2009-12-06T18:48:09Z")}
22
+
23
+ assert_equal expected_attributes, q.attributes
24
+ end
25
+
26
+ context "instance" do
27
+ setup do
28
+ @question = Question.from_xml(@xml_element)
29
+ end
30
+
31
+ should "have title attribute" do
32
+ assert_equal "Windows and Minibuffer floating over the frame", @question.title
33
+ end
34
+
35
+ should "have url attribute" do
36
+ assert_equal "http://stackoverflow.com/questions/1856203/windows-and-minibuffer-floating-over-the-frame", @question.url
37
+ end
38
+
39
+ should "have tags attribute" do
40
+ assert_equal ["emacs"], @question.tags
41
+ end
42
+
43
+ should "have published attribute" do
44
+ assert_equal DateTime.parse("2009-12-06T18:48:09+00:00"), @question.published
45
+ end
46
+ end
47
+ end
48
+
49
+ context "Array of questions" do
50
+ setup do
51
+ @newer_question = Question.new(:published => DateTime.parse("12/12/2009"))
52
+ @older_question = Question.new(:published => DateTime.parse("12/12/2008"))
53
+ @questions = [@older_question, @newer_question]
54
+ end
55
+
56
+ should "sort by published" do
57
+ assert_equal [@newer_question, @older_question], @questions.sort
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class TestRunner < Test::Unit::TestCase
4
+ # Tests pending for this
5
+
6
+ should "be true" do
7
+ assert true
8
+ end
9
+ end
@@ -0,0 +1,70 @@
1
+ require 'helper'
2
+
3
+ class TestSogger < Test::Unit::TestCase
4
+ context "Sogger" do
5
+ should "have an SO_FEED_URL" do
6
+ assert Sogger::SO_FEED_URL
7
+ end
8
+
9
+ should "have a save_path" do
10
+ assert Sogger.save_path
11
+ end
12
+
13
+ context "populated with data" do
14
+ setup do
15
+ @sogger = Sogger.new
16
+ @sogger.download_feed!
17
+ end
18
+
19
+ should "retrieve feed from #{Sogger::SO_FEED_URL}" do
20
+ assert_equal read_sample_file('so_feed_sample.xml'), @sogger.raw_data
21
+ end
22
+
23
+ should "parse collection of 30 questions" do
24
+ assert_equal 30, @sogger.questions.size
25
+ end
26
+
27
+ should "return question objects in questions collection" do
28
+ assert_equal Question, @sogger.questions.first.class
29
+ end
30
+
31
+ should "have questions always sorted" do
32
+ newer_question = Question.new(:published => DateTime.parse("12/12/2009"))
33
+ older_question = Question.new(:published => DateTime.parse("12/12/2008"))
34
+ @sogger.instance_variable_set("@questions", [older_question, newer_question])
35
+ assert_equal [newer_question, older_question], @sogger.questions
36
+ end
37
+
38
+ should "save feed" do
39
+ @sogger.save!
40
+ assert File.exists?(Sogger.save_path)
41
+ end
42
+
43
+ should "load feed" do
44
+ @sogger.save!
45
+ sogger2 = Sogger.new
46
+ sogger2.load!
47
+ assert_equal read_sample_file('so_feed_sample.xml'), sogger2.raw_data
48
+ end
49
+
50
+ should "return new question when subtracted from another sogger" do
51
+ very_new_question1 = Question.new(:published => DateTime.parse("12/12/2012"))
52
+ very_new_question2 = Question.new(:published => DateTime.parse("12/12/2010"))
53
+ very_old_question = Question.new(:published => DateTime.parse("12/12/1999"))
54
+ fixture_question = Question.new(:published => DateTime.parse("2009-12-06T07:14:23Z"))
55
+
56
+ collection = [very_old_question, very_new_question1, fixture_question, very_new_question2]
57
+ newer_sogger = Sogger.new(collection)
58
+
59
+ expected_difference = [very_new_question1, very_new_question2]
60
+ actual_difference = (newer_sogger - @sogger).questions
61
+
62
+ expected_inspect = expected_difference.map{|q| q.published.strftime('%d/%m/%y %H:%M:%S')}.inspect
63
+ actual_inspect = actual_difference.map{|q| q.published.strftime('%d/%m/%y %H:%M:%S')}.inspect
64
+
65
+ assert_equal expected_difference, actual_difference,
66
+ "Expected #{expected_inspect}, but was #{actual_inspect}."
67
+ end
68
+ end
69
+ end
70
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sogger
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Maxim Chernyak
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-12-08 00:00:00 -05:00
13
+ default_executable: sogger
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: meow
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: shoulda
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: fakeweb
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ description: Simple tool that growls new questions from Stack Overflow. Supports filtering by tags.
56
+ email: max@bitsonnet.com
57
+ executables:
58
+ - sogger
59
+ extensions: []
60
+
61
+ extra_rdoc_files:
62
+ - LICENSE
63
+ - README.md
64
+ files:
65
+ - .document
66
+ - .gitignore
67
+ - LICENSE
68
+ - README.md
69
+ - Rakefile
70
+ - VERSION
71
+ - bin/sogger
72
+ - lib/sogger.rb
73
+ - lib/sogger/question.rb
74
+ - lib/sogger/runner.rb
75
+ - lib/sogger/sogger.rb
76
+ - sogger.gemspec
77
+ - test/fixtures/so_feed_sample.xml
78
+ - test/helper.rb
79
+ - test/test_question.rb
80
+ - test/test_runner.rb
81
+ - test/test_sogger.rb
82
+ has_rdoc: true
83
+ homepage: http://github.com/maxim/sogger
84
+ licenses: []
85
+
86
+ post_install_message:
87
+ rdoc_options:
88
+ - --charset=UTF-8
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: "0"
96
+ version:
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: "0"
102
+ version:
103
+ requirements: []
104
+
105
+ rubyforge_project:
106
+ rubygems_version: 1.3.5
107
+ signing_key:
108
+ specification_version: 3
109
+ summary: Stack overflow growler written in Ruby.
110
+ test_files:
111
+ - test/helper.rb
112
+ - test/test_question.rb
113
+ - test/test_runner.rb
114
+ - test/test_sogger.rb