mist 0.6.0 → 0.6.1
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.
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/app/controllers/mist/posts_controller.rb +1 -5
- data/app/models/mist/post.rb +40 -33
- data/lib/mist/version.rb +1 -1
- data/spec/controllers/posts_controller_spec.rb +26 -1
- data/spec/models/mist/post_spec.rb +5 -1
- metadata +22 -22
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -9,11 +9,7 @@ class Mist::PostsController < ApplicationController
|
|
9
9
|
# GET /posts
|
10
10
|
# GET /posts.json
|
11
11
|
def index
|
12
|
-
|
13
|
-
@posts = Mist::Post.last(20).reverse
|
14
|
-
else
|
15
|
-
@posts = Mist::Post.recently_published(20)
|
16
|
-
end
|
12
|
+
@posts = Mist::Post.recently_published(20, Mist.authorized?(:view_drafts, self))
|
17
13
|
|
18
14
|
respond_to do |format|
|
19
15
|
format.html # index.html.erb
|
data/app/models/mist/post.rb
CHANGED
@@ -25,40 +25,51 @@ class Mist::Post < Mist::GitModel
|
|
25
25
|
after_initialize :load_code_examples_from_gist
|
26
26
|
after_destroy :destroy_gist
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
class << self
|
29
|
+
def load_existing_with_attribute(attribute_name, array)
|
30
|
+
array.collect { |(post_id, attribute_value)| find post_id, attribute_name => attribute_value }.reject { |i| i.nil? }
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
def most_popular(count)
|
34
|
+
# invert <=> so that result is descending order
|
35
|
+
load_existing_with_attribute :popularity, self[:popular_posts].sort { |a, b| -(a[1].to_i <=> b[1].to_i) }
|
36
|
+
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
def increase_popularity(post)
|
39
|
+
self[:popular_posts][post.id] = popularity_for(post.id) + 1
|
40
|
+
save_meta_data :popular_posts
|
41
|
+
post.popularity = self[:popular_posts][post.id]
|
42
|
+
end
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
def popularity_for(post_id)
|
45
|
+
self[:popular_posts][post_id] || 0
|
46
|
+
end
|
46
47
|
|
47
|
-
|
48
|
-
|
49
|
-
|
48
|
+
def recently_published(count, include_unpublished = false)
|
49
|
+
recent = all_by_publication_date(include_unpublished)
|
50
|
+
recent.tap do |result|
|
51
|
+
result.pop while result.length > count
|
52
|
+
end
|
50
53
|
end
|
51
|
-
end
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
55
|
+
def all_by_publication_date(include_unpublished = false)
|
56
|
+
publications = self[:published_at].sort do |(ka,va), (kb,vb)|
|
57
|
+
if va.nil?
|
58
|
+
vb.nil? ? 0 : -1
|
59
|
+
else
|
60
|
+
vb.nil? ? 1 : -(va <=> vb)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
publications.select! { |(post, publish_date)| !publish_date.blank? } unless include_unpublished
|
65
|
+
load_existing_with_attribute :published_at, publications
|
66
|
+
end
|
57
67
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
68
|
+
def matching_tags(tags)
|
69
|
+
return [] if tags.blank?
|
70
|
+
matches = self[:tags].inject({}) { |h,(k,v)| ((t = v.split(TAG_DELIM)) & tags).size > 0 ? h[k] = t : nil; h }
|
71
|
+
load_existing_with_attribute :tags, matches.sort { |a, b| -((a[1] & tags).size <=> (b[1] & tags).size) }
|
72
|
+
end
|
62
73
|
end
|
63
74
|
|
64
75
|
def similar_posts(max_count = nil)
|
@@ -84,12 +95,8 @@ class Mist::Post < Mist::GitModel
|
|
84
95
|
self.class.save_meta_data :popular_posts
|
85
96
|
end
|
86
97
|
|
87
|
-
if published_at_changed?
|
88
|
-
|
89
|
-
self.class[:published_at].delete id
|
90
|
-
else
|
91
|
-
self.class[:published_at][id] = published_at
|
92
|
-
end
|
98
|
+
if published_at_changed? || new_record?
|
99
|
+
self.class[:published_at][id] = published_at
|
93
100
|
self.class.save_meta_data :published_at
|
94
101
|
end
|
95
102
|
|
data/lib/mist/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Mist::PostsController do
|
4
|
-
before { Mist.authorize
|
4
|
+
before { Mist.authorize { true } }
|
5
5
|
|
6
6
|
# This should return the minimal set of attributes required to create a valid
|
7
7
|
# Post. As you add validations to Post, be sure to
|
@@ -30,6 +30,31 @@ describe Mist::PostsController do
|
|
30
30
|
get :index, {:use_route => :mist}, valid_session
|
31
31
|
assigns(:posts).should eq([post])
|
32
32
|
end
|
33
|
+
|
34
|
+
describe "with 7 posts" do
|
35
|
+
before do
|
36
|
+
@one = create(:post, :title => "one", :published_at => 1.day.ago)
|
37
|
+
@two = create(:post, :title => "two", :published_at => 5.days.ago)
|
38
|
+
@three = create(:post, :title => "three", :published_at => 1.day.from_now)
|
39
|
+
@four = create(:post, :title => "four", :published_at => nil)
|
40
|
+
@five = create(:post, :title => "five", :published_at => 2.days.from_now)
|
41
|
+
@six = create(:post, :title => "six", :published_at => Time.now)
|
42
|
+
@seven = create(:post, :title => "seven", :published_at => 2.days.ago)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "assigns the posts in order" do
|
46
|
+
get :index, {:use_route => :mist}, valid_session
|
47
|
+
assigns(:posts).collect { |p| p.id }.should eq([@four.id, @five.id, @three.id, @six.id, @one.id, @seven.id, @two.id])
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "when not authorized" do
|
51
|
+
before { Mist.authorize { false } }
|
52
|
+
it "assigns the posts in order, omitting unpublished" do
|
53
|
+
get :index, {:use_route => :mist}, valid_session
|
54
|
+
assigns(:posts).collect { |p| p.id }.should eq([@five.id, @three.id, @six.id, @one.id, @seven.id, @two.id])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
33
58
|
end
|
34
59
|
|
35
60
|
describe "GET show" do
|
@@ -63,7 +63,11 @@ describe Mist::Post do
|
|
63
63
|
describe "recent posts" do
|
64
64
|
before do
|
65
65
|
@order = [ 1.day.ago, 2.days.ago, 3.days.ago, 4.days.ago, 5.days.ago ]
|
66
|
-
|
66
|
+
Mist::Post.create!(:title => "title0", :content => "content", :published_at => @order[0])
|
67
|
+
Mist::Post.create!(:title => "title2", :content => "content", :published_at => @order[2])
|
68
|
+
Mist::Post.create!(:title => "title4", :content => "content", :published_at => @order[4])
|
69
|
+
Mist::Post.create!(:title => "title1", :content => "content", :published_at => @order[1])
|
70
|
+
Mist::Post.create!(:title => "title3", :content => "content", :published_at => @order[3])
|
67
71
|
end
|
68
72
|
|
69
73
|
it "should order by published_at descending" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-28 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: git
|
16
|
-
requirement: &
|
16
|
+
requirement: &2155922540 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.2'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2155922540
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: github-markup
|
27
|
-
requirement: &
|
27
|
+
requirement: &2155918340 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0.7'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2155918340
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: redcarpet
|
38
|
-
requirement: &
|
38
|
+
requirement: &2155916640 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '2.0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2155916640
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activegist
|
49
|
-
requirement: &
|
49
|
+
requirement: &2155914440 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0.6'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2155914440
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: cucumber-rails
|
60
|
-
requirement: &
|
60
|
+
requirement: &2155894500 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.2.1
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2155894500
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: database_cleaner
|
71
|
-
requirement: &
|
71
|
+
requirement: &2154971300 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.7.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2154971300
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec-rails
|
82
|
-
requirement: &
|
82
|
+
requirement: &2154970700 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 2.8.1
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2154970700
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: fakeweb
|
93
|
-
requirement: &
|
93
|
+
requirement: &2154970240 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 1.3.0
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2154970240
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: factory_girl_rails
|
104
|
-
requirement: &
|
104
|
+
requirement: &2154969740 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - =
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: 1.4.0
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2154969740
|
113
113
|
description: a git-powered, gist-backed blogging engine for Rails 3
|
114
114
|
email:
|
115
115
|
- sinisterchipmunk@gmail.com
|
@@ -277,7 +277,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
277
277
|
version: '0'
|
278
278
|
segments:
|
279
279
|
- 0
|
280
|
-
hash:
|
280
|
+
hash: 915941666166025158
|
281
281
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
282
282
|
none: false
|
283
283
|
requirements:
|
@@ -286,7 +286,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
286
286
|
version: '0'
|
287
287
|
segments:
|
288
288
|
- 0
|
289
|
-
hash:
|
289
|
+
hash: 915941666166025158
|
290
290
|
requirements: []
|
291
291
|
rubyforge_project: mist
|
292
292
|
rubygems_version: 1.8.10
|