Merge branch 'refs/heads/snippets_expiration' into dev

Conflicts:
	db/schema.rb
This commit is contained in:
Nihad Abbasov 2011-10-28 00:28:37 +05:00
commit 89fa800e28
11 changed files with 71 additions and 31 deletions

View file

@ -1,2 +1,11 @@
module SnippetsHelper module SnippetsHelper
def lifetime_select_options
options = [
['forever', nil],
['1 day', "#{Date.current + 1.day}"],
['1 week', "#{Date.current + 1.week}"],
['1 month', "#{Date.current + 1.month}"]
]
options_for_select(options)
end
end end

View file

@ -22,6 +22,9 @@ class Snippet < ActiveRecord::Base
:presence => true, :presence => true,
:length => { :within => 0..10000 } :length => { :within => 0..10000 }
scope :fresh, order("created_at DESC")
scope :non_expired, where(["expires_at IS NULL OR expires_at > ?", Time.current])
def self.content_types def self.content_types
[ [
".rb", ".py", ".pl", ".scala", ".c", ".cpp", ".java", ".rb", ".py", ".pl", ".scala", ".c", ".cpp", ".java",
@ -33,6 +36,10 @@ class Snippet < ActiveRecord::Base
def colorize def colorize
system_colorize(content, file_name) system_colorize(content, file_name)
end end
def expired?
expires_at && expires_at < Time.current
end
end end
# == Schema Information # == Schema Information
# #
@ -46,5 +53,6 @@ end
# created_at :datetime # created_at :datetime
# updated_at :datetime # updated_at :datetime
# file_name :string(255) # file_name :string(255)
# expires_at :datetime
# #

View file

@ -23,7 +23,7 @@
= link_to project_snippets_path(@project), :class => (controller.controller_name == "snippets") ? "current" : nil do = link_to project_snippets_path(@project), :class => (controller.controller_name == "snippets") ? "current" : nil do
Snippets Snippets
- if @project.snippets.count > 0 - if @project.snippets.count > 0
%span{ :class => "top_menu_count" }= @project.snippets.count %span{ :class => "top_menu_count" }= @project.snippets.non_expired.count
- if @commit - if @commit
%span= link_to truncate(commit_name(@project,@commit), :length => 15), project_commit_path(@project, :id => @commit.id), :class => current_page?(:controller => "commits", :action => "show", :project_id => @project, :id => @commit.id) ? "current" : nil %span= link_to truncate(commit_name(@project,@commit), :length => 15), project_commit_path(@project, :id => @commit.id), :class => current_page?(:controller => "commits", :action => "show", :project_id => @project, :id => @commit.id) ? "current" : nil

View file

@ -12,6 +12,9 @@
%tr %tr
%td= f.label :file_name %td= f.label :file_name
%td= f.text_field :file_name, :placeholder => "example.rb" %td= f.text_field :file_name, :placeholder => "example.rb"
%tr
%td= f.label "Lifetime"
%td= f.select :expires_at, lifetime_select_options
%tr %tr
%td{:colspan => 2} %td{:colspan => 2}
= f.label :content, "Code" = f.label :content, "Code"

View file

@ -1,4 +1,5 @@
%tr{ :id => dom_id(snippet), :class => "snippet", :url => project_snippet_path(@project, snippet) } - unless snippet.expired?
%tr{ :id => dom_id(snippet), :class => "snippet", :url => project_snippet_path(@project, snippet) }
%td %td
= image_tag gravatar_icon(snippet.author.email), :class => "left", :width => 40, :style => "padding:0 5px;" = image_tag gravatar_icon(snippet.author.email), :class => "left", :width => 40, :style => "padding:0 5px;"
= truncate snippet.author.name, :lenght => 20 = truncate snippet.author.name, :lenght => 20

View file

@ -8,7 +8,7 @@
%th Title %th Title
%th File name %th File name
%th %th
= render @snippets = render @snippets.fresh
:javascript :javascript
$('.delete-snippet').live('ajax:success', function() { $('.delete-snippet').live('ajax:success', function() {
$(this).closest('tr').fadeOut(); }); $(this).closest('tr').fadeOut(); });

View file

@ -1,7 +1,8 @@
%h2 - if !@snippet.expired?
%h2
= "Snippet ##{@snippet.id} - #{@snippet.title}" = "Snippet ##{@snippet.id} - #{@snippet.title}"
.view_file .view_file
.view_file_header .view_file_header
%strong %strong
= @snippet.file_name = @snippet.file_name
@ -10,13 +11,16 @@
:erb :erb
<%= raw @snippet.colorize %> <%= raw @snippet.colorize %>
- if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user - if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
= link_to 'Edit', edit_project_snippet_path(@project, @snippet), :class => "lbutton positive" = link_to 'Edit', edit_project_snippet_path(@project, @snippet), :class => "lbutton positive"
- if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user - if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
= link_to 'Destroy', [@project, @snippet], :confirm => 'Are you sure?', :method => :delete, :class => "lbutton delete-snippet negative", :id => "destroy_snippet_#{@snippet.id}" = link_to 'Destroy', [@project, @snippet], :confirm => 'Are you sure?', :method => :delete, :class => "lbutton delete-snippet negative", :id => "destroy_snippet_#{@snippet.id}"
.clear .clear
%br %br
.snippet_notes= render "notes/notes" .snippet_notes= render "notes/notes"
.clear .clear
- else
%h2
Sorry, this snippet is no longer exists

View file

@ -0,0 +1,5 @@
class AddExpiresAtToSnippets < ActiveRecord::Migration
def change
add_column :snippets, :expires_at, :datetime
end
end

View file

@ -65,6 +65,7 @@ ActiveRecord::Schema.define(:version => 20111027142641) do
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "file_name" t.string "file_name"
t.datetime "expires_at"
end end
create_table "users", :force => true do |t| create_table "users", :force => true do |t|

View file

@ -26,5 +26,6 @@ end
# created_at :datetime # created_at :datetime
# updated_at :datetime # updated_at :datetime
# file_name :string(255) # file_name :string(255)
# expires_at :datetime
# #

View file

@ -23,6 +23,14 @@ describe "Snippets" do
it { should have_content(@snippet.project.name) } it { should have_content(@snippet.project.name) }
it { should have_content(@snippet.author.name) } it { should have_content(@snippet.author.name) }
it "doesn't show expired snippets" do
@snippet.update_attribute(:expires_at, 1.day.ago.to_time)
visit project_snippet_path(project, @snippet)
page.should have_content("Sorry, this snippet is no longer exists")
page.should_not have_content(@snippet.title)
page.should_not have_content(@snippet.content)
end
describe "Destroy" do describe "Destroy" do
before do before do
# admin access to remove snippet # admin access to remove snippet