Commit 89fa800e authored by Nihad Abbasov's avatar Nihad Abbasov

Merge branch 'refs/heads/snippets_expiration' into dev

Conflicts:
	db/schema.rb
parents f4e7ad7a b6cdd1c8
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
......@@ -22,6 +22,9 @@ class Snippet < ActiveRecord::Base
:presence => true,
: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
[
".rb", ".py", ".pl", ".scala", ".c", ".cpp", ".java",
......@@ -33,6 +36,10 @@ class Snippet < ActiveRecord::Base
def colorize
system_colorize(content, file_name)
end
def expired?
expires_at && expires_at < Time.current
end
end
# == Schema Information
#
......@@ -46,5 +53,6 @@ end
# created_at :datetime
# updated_at :datetime
# file_name :string(255)
# expires_at :datetime
#
......@@ -23,7 +23,7 @@
= link_to project_snippets_path(@project), :class => (controller.controller_name == "snippets") ? "current" : nil do
Snippets
- 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
%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
......
......@@ -12,6 +12,9 @@
%tr
%td= f.label :file_name
%td= f.text_field :file_name, :placeholder => "example.rb"
%tr
%td= f.label "Lifetime"
%td= f.select :expires_at, lifetime_select_options
%tr
%td{:colspan => 2}
= f.label :content, "Code"
......
%tr{ :id => dom_id(snippet), :class => "snippet", :url => project_snippet_path(@project, snippet) }
%td
= image_tag gravatar_icon(snippet.author.email), :class => "left", :width => 40, :style => "padding:0 5px;"
= truncate snippet.author.name, :lenght => 20
%td= html_escape snippet.title
%td= html_escape snippet.file_name
%td
- if can?(current_user, :admin_snippet, @project) || snippet.author == current_user
= link_to 'Edit', edit_project_snippet_path(@project, snippet), :class => "lbutton positive"
- if can?(current_user, :admin_snippet, @project) || snippet.author == current_user
= link_to 'Destroy', [@project, snippet], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "lbutton delete-snippet negative", :id => "destroy_snippet_#{snippet.id}"
- unless snippet.expired?
%tr{ :id => dom_id(snippet), :class => "snippet", :url => project_snippet_path(@project, snippet) }
%td
= image_tag gravatar_icon(snippet.author.email), :class => "left", :width => 40, :style => "padding:0 5px;"
= truncate snippet.author.name, :lenght => 20
%td= html_escape snippet.title
%td= html_escape snippet.file_name
%td
- if can?(current_user, :admin_snippet, @project) || snippet.author == current_user
= link_to 'Edit', edit_project_snippet_path(@project, snippet), :class => "lbutton positive"
- if can?(current_user, :admin_snippet, @project) || snippet.author == current_user
= link_to 'Destroy', [@project, snippet], :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "lbutton delete-snippet negative", :id => "destroy_snippet_#{snippet.id}"
......@@ -8,7 +8,7 @@
%th Title
%th File name
%th
= render @snippets
= render @snippets.fresh
:javascript
$('.delete-snippet').live('ajax:success', function() {
$(this).closest('tr').fadeOut(); });
%h2
= "Snippet ##{@snippet.id} - #{@snippet.title}"
- if !@snippet.expired?
%h2
= "Snippet ##{@snippet.id} - #{@snippet.title}"
.view_file
.view_file_header
%strong
= @snippet.file_name
%br/
.view_file_content
:erb
<%= raw @snippet.colorize %>
.view_file
.view_file_header
%strong
= @snippet.file_name
%br/
.view_file_content
:erb
<%= raw @snippet.colorize %>
- if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
= link_to 'Edit', edit_project_snippet_path(@project, @snippet), :class => "lbutton positive"
- 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}"
.clear
%br
.snippet_notes= render "notes/notes"
- if can?(current_user, :admin_snippet, @project) || @snippet.author == current_user
= link_to 'Edit', edit_project_snippet_path(@project, @snippet), :class => "lbutton positive"
- 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}"
.clear
%br
.snippet_notes= render "notes/notes"
.clear
.clear
- else
%h2
Sorry, this snippet is no longer exists
class AddExpiresAtToSnippets < ActiveRecord::Migration
def change
add_column :snippets, :expires_at, :datetime
end
end
......@@ -65,6 +65,7 @@ ActiveRecord::Schema.define(:version => 20111027142641) do
t.datetime "created_at"
t.datetime "updated_at"
t.string "file_name"
t.datetime "expires_at"
end
create_table "users", :force => true do |t|
......
......@@ -26,5 +26,6 @@ end
# created_at :datetime
# updated_at :datetime
# file_name :string(255)
# expires_at :datetime
#
......@@ -23,6 +23,14 @@ describe "Snippets" do
it { should have_content(@snippet.project.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
before do
# admin access to remove snippet
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment