extraextra 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Gemfile.lock +2 -0
- data/README.rdoc +5 -5
- data/VERSION +1 -1
- data/extraextra.gemspec +3 -3
- data/lib/extra/extra.rb +33 -7
- data/spec/extraextra_spec.rb +14 -8
- data/spec/factories/user.rb +13 -0
- data/spec/spec_helper.rb +17 -0
- metadata +5 -5
- data/README.md +0 -107
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -56,15 +56,15 @@ This returns an array of Extra objects. To find out more about a particular
|
|
56
56
|
|
57
57
|
$ extra = Extra::Extra::! :sports, user, "hit a home run!"
|
58
58
|
|
59
|
-
$ extra.who
|
59
|
+
$ extra.who
|
60
60
|
=> #<User:0x0000010089ea80>
|
61
|
-
$ extra.what
|
61
|
+
$ extra.what
|
62
62
|
=> "hit a home run"
|
63
|
-
$ extra.where
|
63
|
+
$ extra.where
|
64
64
|
=> nil # currently undecided
|
65
|
-
$ extra.when
|
65
|
+
$ extra.when
|
66
66
|
=> 1283311813
|
67
|
-
$ extra.how
|
67
|
+
$ extra.how
|
68
68
|
=> nil # currently undecided
|
69
69
|
$ extra.to_s
|
70
70
|
=> "Steve hit a home run"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/extraextra.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{extraextra}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Steve Klabnik"]
|
@@ -14,7 +14,6 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.email = %q{steve@steveklabnik.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
"README.md",
|
18
17
|
"README.rdoc"
|
19
18
|
]
|
20
19
|
s.files = [
|
@@ -23,7 +22,6 @@ Gem::Specification.new do |s|
|
|
23
22
|
"Gemfile",
|
24
23
|
"Gemfile.lock",
|
25
24
|
"LICENSE",
|
26
|
-
"README.md",
|
27
25
|
"README.rdoc",
|
28
26
|
"Rakefile",
|
29
27
|
"VERSION",
|
@@ -31,6 +29,7 @@ Gem::Specification.new do |s|
|
|
31
29
|
"lib/extra/extra.rb",
|
32
30
|
"lib/extraextra.rb",
|
33
31
|
"spec/extraextra_spec.rb",
|
32
|
+
"spec/factories/user.rb",
|
34
33
|
"spec/spec.opts",
|
35
34
|
"spec/spec_helper.rb",
|
36
35
|
"test.rb"
|
@@ -42,6 +41,7 @@ Gem::Specification.new do |s|
|
|
42
41
|
s.summary = %q{Super simple news feeds powered by MongoDB.}
|
43
42
|
s.test_files = [
|
44
43
|
"spec/extraextra_spec.rb",
|
44
|
+
"spec/factories/user.rb",
|
45
45
|
"spec/spec_helper.rb"
|
46
46
|
]
|
47
47
|
|
data/lib/extra/extra.rb
CHANGED
@@ -3,12 +3,29 @@ include Mongo
|
|
3
3
|
|
4
4
|
module Extra
|
5
5
|
|
6
|
+
# Extra is the main class in Extra! Extra! It's what gets returned from
|
7
|
+
# queries, and is the main interface to the entire system.
|
6
8
|
class Extra
|
7
9
|
|
10
|
+
attr_accessor :category,
|
11
|
+
:who_id,
|
12
|
+
:who_name,
|
13
|
+
:who_class,
|
14
|
+
:what,
|
15
|
+
:when
|
16
|
+
|
17
|
+
# For now, this is just a simple sentence describing what happened.
|
18
|
+
# We'll see if something more complex makes sense later.
|
19
|
+
def to_s
|
20
|
+
"#{who_name} #{what}"
|
21
|
+
end
|
8
22
|
|
9
23
|
class << self
|
10
24
|
attr_accessor :db, :collection
|
11
25
|
|
26
|
+
# The source method is used to set up the connection to MongoDB. Right now
|
27
|
+
# it has to be called by the user before doing anything else, which sucks.
|
28
|
+
# I'll probably add in something to make it autoconnect soon.
|
12
29
|
def source opts={}
|
13
30
|
opts[:host] ||= "localhost"
|
14
31
|
opts[:port] ||= 27017
|
@@ -16,20 +33,29 @@ module Extra
|
|
16
33
|
self.collection = db["extras"]
|
17
34
|
end
|
18
35
|
|
36
|
+
# Extra::Extra.! is the method used to report what's going on. It takes a
|
37
|
+
# symbol for a category, the user who did whatever's newsworthy, and some
|
38
|
+
# text that describes what happened.
|
19
39
|
def !(category, user, text)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
40
|
+
|
41
|
+
args = {
|
42
|
+
category: category,
|
43
|
+
who_id: user.id,
|
44
|
+
who_name: user.username,
|
45
|
+
who_class: user.class.to_s,
|
46
|
+
what: text,
|
47
|
+
when: Time.now.to_s
|
48
|
+
}
|
49
|
+
collection.insert args
|
50
|
+
Extra.new args
|
26
51
|
end
|
27
52
|
|
53
|
+
# This method returns all Extras that are associated with a given person.
|
28
54
|
def read_all_about_it user
|
29
55
|
|
30
56
|
collection.find(who_id: user.id,
|
31
57
|
who_class: user.class.to_s
|
32
|
-
).
|
58
|
+
).collect{|args| Extra.new args }
|
33
59
|
|
34
60
|
end
|
35
61
|
end
|
data/spec/extraextra_spec.rb
CHANGED
@@ -10,8 +10,8 @@ describe Extra::Extra do
|
|
10
10
|
obj = mock("Connection")
|
11
11
|
db = mock("db")
|
12
12
|
db.should_receive(:[])
|
13
|
-
obj.should_receive(:db).with("extraextra").and_return(db)
|
14
|
-
Mongo::Connection.should_receive(:new).
|
13
|
+
obj.should_receive(:db).with("extraextra").twice.and_return(db)
|
14
|
+
Mongo::Connection.should_receive(:new).twice.and_return(obj)
|
15
15
|
Extra::Extra.should_receive(:db=).and_return(db)
|
16
16
|
Extra::Extra.should_receive(:db).and_return(db)
|
17
17
|
|
@@ -39,14 +39,20 @@ describe Extra::Extra do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should return Extras for the user" do
|
42
|
-
user =
|
43
|
-
|
44
|
-
|
45
|
-
collection.should_receive(:find).with(:who_id=>1, :who_class=>"User").and_return([extra])
|
46
|
-
Extra::Extra.should_receive(:collection).and_return(collection)
|
42
|
+
user = Factory(:user)
|
43
|
+
Extra::Extra.source
|
44
|
+
extra = Extra::Extra::! :breaking, user, "hit a home run"
|
47
45
|
|
48
46
|
extras = Extra::Extra.read_all_about_it(user)
|
49
|
-
extras.should ==
|
47
|
+
extras.length.should == 1
|
48
|
+
ex = extras.first
|
49
|
+
ex.category.should == extra.category
|
50
|
+
ex.who_id.should == extra.who_id
|
51
|
+
ex.who_name.should == extra.who_name
|
52
|
+
ex.who_class.should == extra.who_class
|
53
|
+
ex.what.should == extra.what
|
54
|
+
ex.when.should == extra.when
|
55
|
+
ex.to_s.should == extra.to_s
|
50
56
|
end
|
51
57
|
end
|
52
58
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,7 +3,24 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
3
3
|
require 'extraextra'
|
4
4
|
require 'spec'
|
5
5
|
require 'spec/autorun'
|
6
|
+
require 'factory_girl'
|
7
|
+
|
8
|
+
Dir.glob(File.join(File.dirname(__FILE__), '/factories/*.rb')).each do |factory|
|
9
|
+
require factory
|
10
|
+
end
|
11
|
+
|
6
12
|
|
7
13
|
Spec::Runner.configure do |config|
|
14
|
+
|
15
|
+
config.mock_with :rspec
|
16
|
+
|
17
|
+
config.after(:each) do
|
18
|
+
|
19
|
+
db = Connection.new.db('extraextra')
|
20
|
+
unless db.class.to_s == "Spec::Mocks::Mock"
|
21
|
+
coll = db.collection('extras')
|
22
|
+
coll.remove
|
23
|
+
end
|
24
|
+
end
|
8
25
|
|
9
26
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Steve Klabnik
|
@@ -55,7 +55,6 @@ extensions: []
|
|
55
55
|
|
56
56
|
extra_rdoc_files:
|
57
57
|
- LICENSE
|
58
|
-
- README.md
|
59
58
|
- README.rdoc
|
60
59
|
files:
|
61
60
|
- .document
|
@@ -63,7 +62,6 @@ files:
|
|
63
62
|
- Gemfile
|
64
63
|
- Gemfile.lock
|
65
64
|
- LICENSE
|
66
|
-
- README.md
|
67
65
|
- README.rdoc
|
68
66
|
- Rakefile
|
69
67
|
- VERSION
|
@@ -71,6 +69,7 @@ files:
|
|
71
69
|
- lib/extra/extra.rb
|
72
70
|
- lib/extraextra.rb
|
73
71
|
- spec/extraextra_spec.rb
|
72
|
+
- spec/factories/user.rb
|
74
73
|
- spec/spec.opts
|
75
74
|
- spec/spec_helper.rb
|
76
75
|
- test.rb
|
@@ -88,7 +87,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
88
87
|
requirements:
|
89
88
|
- - ">="
|
90
89
|
- !ruby/object:Gem::Version
|
91
|
-
hash:
|
90
|
+
hash: 3599394924060512683
|
92
91
|
segments:
|
93
92
|
- 0
|
94
93
|
version: "0"
|
@@ -109,4 +108,5 @@ specification_version: 3
|
|
109
108
|
summary: Super simple news feeds powered by MongoDB.
|
110
109
|
test_files:
|
111
110
|
- spec/extraextra_spec.rb
|
111
|
+
- spec/factories/user.rb
|
112
112
|
- spec/spec_helper.rb
|
data/README.md
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
EXTRA! EXTRA! READ ALL ABOUT IT!
|
2
|
-
================================
|
3
|
-
|
4
|
-
Need to add a news feed to your application? EXTRA! EXTRA! is just the Gem
|
5
|
-
for you! This is a common need for many social applications. EXTRA! EXTRA!
|
6
|
-
uses MongoDB to give you super fast, super convenient feeds.
|
7
|
-
|
8
|
-
## Quick Note ###############################################################
|
9
|
-
|
10
|
-
Not all of this works yet. This is just a prerelease. README driven
|
11
|
-
development FTW!
|
12
|
-
|
13
|
-
## Install ##################################################################
|
14
|
-
|
15
|
-
EXTRA! EXTRA! will be distributed via Rubygems, so just
|
16
|
-
|
17
|
-
$ gem install extraextra
|
18
|
-
|
19
|
-
and you'll be reading the news in no time!
|
20
|
-
|
21
|
-
## Source ###################################################################
|
22
|
-
|
23
|
-
The source of EXTRA! EXTRA! is on GitHub, and can be found here:
|
24
|
-
|
25
|
-
http://github.com/steveklabnik/extraextra
|
26
|
-
|
27
|
-
It can be cloned via
|
28
|
-
|
29
|
-
$ git clone git://github.com/steveklabnik/extraextra.git
|
30
|
-
|
31
|
-
## Requirements #############################################################
|
32
|
-
|
33
|
-
* **Ruby 1.9** Sorry for you 1.8 people, 1.9 is the current version of Ruby.
|
34
|
-
* **mongo** If you're going to use MongoDB...
|
35
|
-
|
36
|
-
## Usage ####################################################################
|
37
|
-
|
38
|
-
The first thing you'll need to do is configure EXTRA! EXTRA! to use your
|
39
|
-
MongoDB installation.
|
40
|
-
|
41
|
-
Extra::Extra.source :host => "localhost", :port => "1337"
|
42
|
-
|
43
|
-
To record something newsworthy, just do this:
|
44
|
-
|
45
|
-
$ Extra::Extra::! :breaking, user, "has just done something awesome!"
|
46
|
-
|
47
|
-
To find out what interesting things a particular user has done:
|
48
|
-
|
49
|
-
$ Extra::Extra.read_all_about_it user
|
50
|
-
|
51
|
-
or
|
52
|
-
|
53
|
-
$ Extra::Extra.the_scoop user
|
54
|
-
|
55
|
-
This returns an array of Extra objects. To find out more about a particular
|
56
|
-
Extra:
|
57
|
-
|
58
|
-
$ extra = Extra::Extra::! :sports, user, "hit a home run!"
|
59
|
-
|
60
|
-
$ extra.who?
|
61
|
-
=> #<User:0x0000010089ea80>
|
62
|
-
$ extra.what?
|
63
|
-
=> "hit a home run"
|
64
|
-
$ extra.where?
|
65
|
-
=> nil # currently undecided
|
66
|
-
$ extra.when?
|
67
|
-
=> 1283311813
|
68
|
-
$ extra.how?
|
69
|
-
=> nil # currently undecided
|
70
|
-
$ extra.to_s
|
71
|
-
=> "Steve hit a home run"
|
72
|
-
|
73
|
-
The name in to_s comes from user#username. If you use something else...
|
74
|
-
I'll provide a way to override this eventually.
|
75
|
-
|
76
|
-
To only see breaking news:
|
77
|
-
|
78
|
-
$ user.breaking_news
|
79
|
-
|
80
|
-
This will filter out only the news in the 'breaking' category.
|
81
|
-
|
82
|
-
To find out what interesting things a users's friends have done:
|
83
|
-
|
84
|
-
$ user.scope_the_scene
|
85
|
-
|
86
|
-
To define what who you're friends with, make a method on your user model
|
87
|
-
named my_peeps. For a (hypothetical) example:
|
88
|
-
|
89
|
-
class User
|
90
|
-
def my_peeps
|
91
|
-
User.friends.collect(&:id)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
The my_peeps method should return an Array of ids. This method will be
|
96
|
-
called during scope_the_scene to determine what results get returned.
|
97
|
-
|
98
|
-
## Contributing #############################################################
|
99
|
-
|
100
|
-
Fork, commit, pull request. Bonus points for topic branches and great commit
|
101
|
-
messages.
|
102
|
-
|
103
|
-
In particular, I will accept most patches that add good aliases for methods.
|
104
|
-
|
105
|
-
## This is just a cleverly named logging framework ##########################
|
106
|
-
|
107
|
-
No, it's not. Shut up.
|