acts_as_publicable 0.0.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 ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .yardoc
data/.infinity_test ADDED
@@ -0,0 +1,3 @@
1
+ infinity_test do
2
+ use :rubies => %w(1.8.7 1.9.2), :test_framework => :rspec
3
+ end
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --tty
3
+ --format nested
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
data/README.textile ADDED
@@ -0,0 +1,58 @@
1
+ This gem will give you only two scopes and a method for handling
2
+ published/unpublished stuff. Nothing remarkable bur saved me a lot of typing
3
+ when I wrote it for a project with an huge number of publishable models.
4
+ Suggestions are more than welcome.
5
+
6
+ h2. How It Works
7
+
8
+ In order to use in your model, write something like the following:
9
+
10
+ <pre>
11
+ class Articile < ActiveRecord::Base
12
+ acts_as_publicable
13
+ end
14
+ </pre>
15
+
16
+ With that you get two very simple scopes:
17
+
18
+ <pre>
19
+ ruby-1.9.2-p180 :001 > Article.unpublished
20
+ Article Load (0.2ms) SELECT `articles`.* FROM `articles` WHERE (published is false)
21
+ => []
22
+ ruby-1.9.2-p180 :002 > Article.published
23
+ Article Load (0.2ms) SELECT `articles`.* FROM `articles` WHERE (published is true)
24
+ => []
25
+ </pre>
26
+
27
+ and a method to publish an article:
28
+
29
+ <pre>
30
+ ruby-1.9.2-p180 :011 > @article=Article.first
31
+ Article Load (0.2ms) SELECT `articles`.* FROM `articles` LIMIT 1
32
+ ruby-1.9.2-p180 :012 > @article.publish!
33
+ SQL (0.1ms) BEGIN
34
+ AREL (0.2ms) UPDATE `articles` SET `published` = 1, `updated_at` = '2011-04-05 08:50:45' WHERE (`articles`.`id` = 1)
35
+ SQL (48.3ms) COMMIT
36
+ => true
37
+ </pre>
38
+
39
+ h2. Generator
40
+
41
+ You can use a generator to add the published field to your target model:
42
+
43
+ rails g acts_as_publicable model_name
44
+
45
+ It will generate a simple migration that will add the neeeded field.
46
+
47
+ h2. Roadmap
48
+
49
+ * comment code
50
+ * add a date for handling a better publishing concept
51
+
52
+ h2. Copyright
53
+
54
+ This program is free software. It comes without any warranty,
55
+ to the extent permitted by applicable law. You can redistribute
56
+ it and/or modify it under the terms of the Do What The Fuck You
57
+ Want To Public License, Version 2, as published by Sam Hocevar.
58
+ See http://sam.zoy.org/wtfpl/COPYING for more details.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+
6
+ desc 'Default: run specs'
7
+ task :default => :spec
8
+ RSpec::Core::RakeTask.new do |t|
9
+ t.pattern = "spec/**/*_spec.rb"
10
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "acts_as_publicable/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "acts_as_publicable"
7
+ s.version = ActsAsPublicable::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["lucapette"]
10
+ s.email = ["lucapette@gmail.com"]
11
+ s.homepage = "https://github.com/lucapette/acts_as_publicable"
12
+ s.summary = %q{a simple ActiveRecord extension for handling publishable stuff}
13
+ s.description = %q{This gem will give you only two scopes and a method for handling
14
+ published/unpublished stuff. Nothing remarkable bur saved me a lot of typing
15
+ when I wrote it for a project with an huge number of publishable models.
16
+ Suggestions are more than welcome.}
17
+
18
+ s.add_development_dependency 'sqlite3'
19
+ s.add_dependency "rails", ">= 3.0.0"
20
+ s.add_development_dependency "rspec-rails", ">= 2.5.0"
21
+
22
+ s.rubyforge_project = "acts_as_publicable"
23
+
24
+ s.files = `git ls-files`.split("\n")
25
+ s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
26
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
27
+ s.require_paths = ["lib"]
28
+ end
@@ -0,0 +1,6 @@
1
+ require "active_record"
2
+ require "acts_as_publicable/acts_as_publicable"
3
+
4
+ if defined?(ActiveRecord::Base)
5
+ ActiveRecord::Base.send :include, ActsAsPublicable::ActiveRecordExtension
6
+ end
@@ -0,0 +1,26 @@
1
+ module ActsAsPublicable
2
+
3
+ class FieldNotPresentError < StandardError; end
4
+ module ActiveRecordExtension
5
+
6
+ extend ActiveSupport::Concern
7
+
8
+ module ClassMethods
9
+ def acts_as_publicable
10
+ raise ActsAsPublicable::FieldNotPresentError unless column_names.include?(:published.to_s)
11
+ scope :published, where("published is true")
12
+ scope :unpublished, where("published is false")
13
+ end
14
+ end
15
+
16
+ module InstanceMethods
17
+
18
+ def publish!
19
+ self.published = true
20
+ save
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module ActsAsPublicable
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,9 @@
1
+ Description:
2
+ This generator will give you a migration for the published field on the
3
+ given model
4
+
5
+ Example:
6
+ rails generate acts_as_publicable model_name
7
+
8
+ This will create something like:
9
+ db/migrate/20110404120349_add_published_to_table_name.rb
@@ -0,0 +1,13 @@
1
+ class ActsAsPublicableGenerator < Rails::Generators::NamedBase
2
+ include Rails::Generators::Migration
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ def manifest
6
+ migration_template 'migration.rb', "db/migrate/add_publicable_to_#{table_name}"
7
+ end
8
+
9
+ def self.next_migration_number(path)
10
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
11
+ end
12
+
13
+ end
@@ -0,0 +1,9 @@
1
+ class AddPublishedTo<%= table_name.camelize %> < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :<%= table_name %>, :published, :boolean
4
+ end
5
+
6
+ def self.down
7
+ remove_column :<%= table_name %>, :published
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ describe "acts_as_publicable" do
4
+ it "raises an error when it's not present published field" do
5
+ lambda {
6
+ class Post
7
+ acts_as_publicable
8
+ end
9
+ }.should raise_error ActsAsPublicable::FieldNotPresentError
10
+ end
11
+
12
+ it "adds published scope" do
13
+ Article.should respond_to(:published)
14
+ end
15
+
16
+ it "adds unpublished scope" do
17
+ Article.should respond_to(:unpublished)
18
+ end
19
+
20
+ describe "#publish!" do
21
+ it "publish an article" do
22
+ @article = Article.create!(:title=>"Awesome article")
23
+ @article.publish!
24
+ @article.should be_published
25
+ end
26
+ end
27
+
28
+ end
data/spec/schema.rb ADDED
@@ -0,0 +1,12 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+
3
+ create_table "articles", :force => true do |t|
4
+ t.string "title"
5
+ t.boolean "published", :default => false
6
+ end
7
+
8
+ create_table "posts", :force => true do |t|
9
+ t.string "name"
10
+ end
11
+
12
+ end
@@ -0,0 +1,27 @@
1
+ def load_models!
2
+ ActiveRecord::Base.descendants.each do |model|
3
+ model.delete_all
4
+ Object.class_eval { remove_const model.name if const_defined?(model.name) }
5
+ end
6
+
7
+ load File.dirname(__FILE__) + "/support/models.rb"
8
+ end
9
+
10
+ Bundler.setup
11
+ require "rails/all"
12
+ Bundler.require(:default)
13
+
14
+ require "rspec/rails"
15
+ require "acts_as_publicable"
16
+
17
+
18
+ ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
19
+ load "schema.rb"
20
+
21
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
22
+
23
+ RSpec.configure do |config|
24
+ config.before do
25
+ load_models!
26
+ end
27
+ end
@@ -0,0 +1,6 @@
1
+ class Article < ActiveRecord::Base
2
+ acts_as_publicable
3
+ end
4
+
5
+ class Post < ActiveRecord::Base
6
+ end
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acts_as_publicable
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - lucapette
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-04-05 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: sqlite3
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 3.0.0
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec-rails
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.5.0
47
+ type: :development
48
+ version_requirements: *id003
49
+ description: |-
50
+ This gem will give you only two scopes and a method for handling
51
+ published/unpublished stuff. Nothing remarkable bur saved me a lot of typing
52
+ when I wrote it for a project with an huge number of publishable models.
53
+ Suggestions are more than welcome.
54
+ email:
55
+ - lucapette@gmail.com
56
+ executables: []
57
+
58
+ extensions: []
59
+
60
+ extra_rdoc_files: []
61
+
62
+ files:
63
+ - .gitignore
64
+ - .infinity_test
65
+ - .rspec
66
+ - Gemfile
67
+ - README.textile
68
+ - Rakefile
69
+ - acts_as_publicable.gemspec
70
+ - lib/acts_as_publicable.rb
71
+ - lib/acts_as_publicable/acts_as_publicable.rb
72
+ - lib/acts_as_publicable/version.rb
73
+ - lib/generators/USAGE
74
+ - lib/generators/acts_as_publicable_generator.rb
75
+ - lib/generators/templates/migration.rb
76
+ - spec/acts_as_publicable/acts_as_publicable_spec.rb
77
+ - spec/schema.rb
78
+ - spec/spec_helper.rb
79
+ - spec/support/models.rb
80
+ has_rdoc: true
81
+ homepage: https://github.com/lucapette/acts_as_publicable
82
+ licenses: []
83
+
84
+ post_install_message:
85
+ rdoc_options: []
86
+
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: "0"
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: "0"
101
+ requirements: []
102
+
103
+ rubyforge_project: acts_as_publicable
104
+ rubygems_version: 1.6.2
105
+ signing_key:
106
+ specification_version: 3
107
+ summary: a simple ActiveRecord extension for handling publishable stuff
108
+ test_files: []
109
+