activerecord-be_readonly 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,46 @@
1
+ Be Readonly for ActiveRecord 3.x/4.x and Rails 3.x/4.x
2
+ =====
3
+
4
+ Makes any ActiveRecord model become read-only in Rails with:
5
+
6
+ be_readonly
7
+
8
+ There are other gems that provide similar behavior, but from what I saw, they did either too much or too little. This one is just right, and be_readonly couldn't be much shorter to type and read without just being "readonly", but readonly would be too easily confused with related instance methods in ActiveRecord.
9
+
10
+ ### What it does
11
+
12
+ Adding this gem to you bundle will add a class method called be_readonly on each model when Rails loads via a railtie.
13
+
14
+ If be_readonly is called on the class, it defines the class methods: delete and delete_all and the instance methods: before_create, before_save, before_destroy, and delete to all raise a ActiveRecord::ReadOnlyRecord error. It also defines the instance method readonly? to return true, which disables a lot that tries to create and update in ActiveRecord.
15
+
16
+ ### Setup
17
+
18
+ In your ActiveRecord/Rails 3.0+ project, add this to your Gemfile:
19
+
20
+ gem 'activerecord-be_readonly'
21
+
22
+ For the development version:
23
+
24
+ gem 'activerecord-be_readonly', :git => 'git://github.com/garysweaver/activerecord-be_readonly.git'
25
+
26
+ Then run:
27
+
28
+ bundle install
29
+
30
+ ### Usage
31
+
32
+ In your model just include this, preferably somewhere noticeable like at the top:
33
+
34
+ be_readonly
35
+
36
+ ### Using without Rails
37
+
38
+ Or if you are off-rails, but use ActiveRecord, just do this in the model class:
39
+
40
+ include BeReadonly::Now
41
+
42
+ ### License
43
+
44
+ Copyright (c) 2012 Gary S. Weaver, released under the [MIT license][lic].
45
+
46
+ [lic]: http://github.com/garysweaver/activerecord-be_readonly/blob/master/LICENSE
@@ -0,0 +1,10 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new(:test) do |t|
4
+ t.libs << 'test'
5
+ t.test_files = FileList['test/**/*_test.rb']
6
+ t.verbose = true
7
+ end
8
+
9
+ desc "Run tests"
10
+ task :default => :test
@@ -0,0 +1,4 @@
1
+ require 'activerecord-be_readonly/version'
2
+ require 'activerecord-be_readonly/model'
3
+ require 'activerecord-be_readonly/now'
4
+ require 'activerecord-be_readonly/railtie' if defined?(Rails)
@@ -0,0 +1,47 @@
1
+ module BeReadonly
2
+ module Model
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ end
7
+
8
+ module ClassMethods
9
+ def be_readonly
10
+ extend BeReadonlyClassMethods # intentionally not in ClassMethods which is automatically extended via ActiveSupport::Concern
11
+ include BeReadonlyInstanceMethods # intentionally not just InstanceMethods as those would be automatically included via ActiveSupport::Concern
12
+ end
13
+ end
14
+
15
+ module BeReadonlyClassMethods
16
+ def delete(id_or_array)
17
+ raise ActiveRecord::ReadOnlyRecord
18
+ end
19
+
20
+ def delete_all(conditions = nil)
21
+ raise ActiveRecord::ReadOnlyRecord
22
+ end
23
+ end
24
+
25
+ module BeReadonlyInstanceMethods
26
+ def readonly?
27
+ return true
28
+ end
29
+
30
+ def before_create
31
+ raise ActiveRecord::ReadOnlyRecord
32
+ end
33
+
34
+ def before_save
35
+ raise ActiveRecord::ReadOnlyRecord
36
+ end
37
+
38
+ def before_destroy
39
+ raise ActiveRecord::ReadOnlyRecord
40
+ end
41
+
42
+ def delete
43
+ raise ActiveRecord::ReadOnlyRecord
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,9 @@
1
+ module BeReadonly
2
+ module Now
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ include BeReadonly::Model
6
+ be_readonly
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ require 'activerecord-be_readonly'
2
+
3
+ module BeReadonly
4
+ class Railtie < Rails::Railtie
5
+ initializer "activerecord-be_readonly.active_record" do
6
+ ActiveSupport.on_load(:active_record) do
7
+ # ActiveRecord::Base gets new behavior
8
+ include BeReadonly::Model # ActiveSupport::Concern
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module BeReadonly
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord-be_readonly
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Gary S. Weaver
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Makes read-only models easier to implement in ActiveRecord 3.x/4.x.
31
+ email:
32
+ - garysweaver@gmail.com
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - lib/activerecord-be_readonly/model.rb
38
+ - lib/activerecord-be_readonly/now.rb
39
+ - lib/activerecord-be_readonly/railtie.rb
40
+ - lib/activerecord-be_readonly/version.rb
41
+ - lib/activerecord-be_readonly.rb
42
+ - Rakefile
43
+ - README.md
44
+ homepage: https://github.com/garysweaver/activerecord-be_readonly
45
+ licenses:
46
+ - MIT
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirements: []
64
+ rubyforge_project:
65
+ rubygems_version: 1.8.24
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: Easy read-only models for ActiveRecord 3.x/4.x.
69
+ test_files: []