attr_accessible_block 0.2.0 → 0.2.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/Gemfile.lock +12 -10
- data/README.md +5 -5
- data/Rakefile +3 -3
- data/attr_accessible_block.gemspec +75 -0
- data/lib/attr_accessible_block.rb +9 -5
- data/test/test_attr_accessible_block.rb +9 -3
- metadata +30 -29
data/Gemfile.lock
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
GEM
|
|
2
2
|
remote: http://rubygems.org/
|
|
3
3
|
specs:
|
|
4
|
-
activemodel (3.0.
|
|
5
|
-
activesupport (= 3.0.
|
|
4
|
+
activemodel (3.0.7)
|
|
5
|
+
activesupport (= 3.0.7)
|
|
6
6
|
builder (~> 2.1.2)
|
|
7
|
-
i18n (~> 0.
|
|
8
|
-
activerecord (3.0.
|
|
9
|
-
activemodel (= 3.0.
|
|
10
|
-
activesupport (= 3.0.
|
|
7
|
+
i18n (~> 0.5.0)
|
|
8
|
+
activerecord (3.0.7)
|
|
9
|
+
activemodel (= 3.0.7)
|
|
10
|
+
activesupport (= 3.0.7)
|
|
11
11
|
arel (~> 2.0.2)
|
|
12
12
|
tzinfo (~> 0.3.23)
|
|
13
|
-
activesupport (3.0.
|
|
14
|
-
arel (2.0.
|
|
13
|
+
activesupport (3.0.7)
|
|
14
|
+
arel (2.0.9)
|
|
15
15
|
builder (2.1.2)
|
|
16
16
|
git (1.2.5)
|
|
17
17
|
i18n (0.5.0)
|
|
@@ -22,8 +22,10 @@ GEM
|
|
|
22
22
|
rake (0.8.7)
|
|
23
23
|
rcov (0.9.9)
|
|
24
24
|
shoulda (2.11.3)
|
|
25
|
-
sqlite3
|
|
26
|
-
|
|
25
|
+
sqlite3 (1.3.3)
|
|
26
|
+
sqlite3-ruby (1.3.3)
|
|
27
|
+
sqlite3 (>= 1.3.3)
|
|
28
|
+
tzinfo (0.3.27)
|
|
27
29
|
|
|
28
30
|
PLATFORMS
|
|
29
31
|
ruby
|
data/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
AttrAccessibleBlock 0.2
|
|
2
|
-
|
|
1
|
+
AttrAccessibleBlock 0.2.1
|
|
2
|
+
=========================
|
|
3
3
|
|
|
4
4
|
This is an ActiveRecord plugin with possibility to define block inside the `attr_accessible` class method.
|
|
5
5
|
|
|
@@ -12,7 +12,7 @@ It's also still possible to define class level accessibles, so an old `attr_acce
|
|
|
12
12
|
Main features:
|
|
13
13
|
|
|
14
14
|
* Possibility to add an accessible attributes based on current `record` state (eg. record.new_record?)
|
|
15
|
-
* Possibility to add additional variables and use it in the block (eg. user.role) `ActiveRecord::AttrAccessibleBlock.
|
|
15
|
+
* Possibility to add additional variables and use it in the block (eg. user.role) `ActiveRecord::AttrAccessibleBlock.add_variable(:user) { User.current || User.new }`
|
|
16
16
|
* Possibility to add permanently total accessibility in defined condition (eg.user.admin?) `ActiveRecord::AttrAccessibleBlock.always_accessible { user.admin? }`
|
|
17
17
|
|
|
18
18
|
Also it's possible to check directly is attribute mass-assignable or no using `attr_accessible?` instance method.
|
|
@@ -22,7 +22,7 @@ See an examples to understand the conception.
|
|
|
22
22
|
Installation
|
|
23
23
|
============
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
gem install attr_accessible_block
|
|
26
26
|
|
|
27
27
|
Examples
|
|
28
28
|
========
|
|
@@ -69,7 +69,7 @@ How do I add something similar to `record`, for example I want to check current
|
|
|
69
69
|
|
|
70
70
|
Easy, with `sentient_user` gem and add the code to the `config/initializers/plugins.rb` file:
|
|
71
71
|
|
|
72
|
-
ActiveRecord::AttrAccessibleBlock.
|
|
72
|
+
ActiveRecord::AttrAccessibleBlock.add_variable(:user) { User.current || User.new }
|
|
73
73
|
|
|
74
74
|
Now `user` method available, you can check:
|
|
75
75
|
|
data/Rakefile
CHANGED
|
@@ -14,11 +14,11 @@ Jeweler::Tasks.new do |gem|
|
|
|
14
14
|
gem.name = "attr_accessible_block"
|
|
15
15
|
gem.homepage = "http://github.com/dmitry/attr_accessible_block"
|
|
16
16
|
gem.license = "MIT"
|
|
17
|
-
gem.summary = %Q{Attribute accessible block (attr_accessible with a block
|
|
18
|
-
gem.description = %Q{
|
|
17
|
+
gem.summary = %Q{Attribute accessible block (attr_accessible with a dynamic block possibility)}
|
|
18
|
+
gem.description = %Q{Convinient possibility to change attr_accessible on the fly, using definition of the required accessible attributes in a block.}
|
|
19
19
|
gem.email = "dmitry.polushkin@gmail.com"
|
|
20
20
|
gem.authors = ["Dmitry Polushkin"]
|
|
21
|
-
gem.version = '0.2.
|
|
21
|
+
gem.version = '0.2.1'
|
|
22
22
|
gem.add_runtime_dependency 'activerecord', '>= 2.3.5'
|
|
23
23
|
end
|
|
24
24
|
Jeweler::RubygemsDotOrgTasks.new
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Generated by jeweler
|
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
|
+
# -*- encoding: utf-8 -*-
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |s|
|
|
7
|
+
s.name = %q{attr_accessible_block}
|
|
8
|
+
s.version = "0.2.1"
|
|
9
|
+
|
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
|
+
s.authors = ["Dmitry Polushkin"]
|
|
12
|
+
s.date = %q{2011-05-01}
|
|
13
|
+
s.description = %q{Convinient possibility to change attr_accessible on the fly, using definition of the required accessible attributes in a block.}
|
|
14
|
+
s.email = %q{dmitry.polushkin@gmail.com}
|
|
15
|
+
s.extra_rdoc_files = [
|
|
16
|
+
"README.md"
|
|
17
|
+
]
|
|
18
|
+
s.files = [
|
|
19
|
+
"Gemfile",
|
|
20
|
+
"Gemfile.lock",
|
|
21
|
+
"MIT-LICENSE",
|
|
22
|
+
"README.md",
|
|
23
|
+
"Rakefile",
|
|
24
|
+
"attr_accessible_block.gemspec",
|
|
25
|
+
"init.rb",
|
|
26
|
+
"install.rb",
|
|
27
|
+
"lib/attr_accessible_block.rb",
|
|
28
|
+
"tasks/attr_accessible_block_tasks.rake",
|
|
29
|
+
"test/schema.rb",
|
|
30
|
+
"test/test_attr_accessible_block.rb",
|
|
31
|
+
"test/test_helper.rb",
|
|
32
|
+
"uninstall.rb"
|
|
33
|
+
]
|
|
34
|
+
s.homepage = %q{http://github.com/dmitry/attr_accessible_block}
|
|
35
|
+
s.licenses = ["MIT"]
|
|
36
|
+
s.require_paths = ["lib"]
|
|
37
|
+
s.rubygems_version = %q{1.5.2}
|
|
38
|
+
s.summary = %q{Attribute accessible block (attr_accessible with a dynamic block possibility)}
|
|
39
|
+
s.test_files = [
|
|
40
|
+
"test/schema.rb",
|
|
41
|
+
"test/test_attr_accessible_block.rb",
|
|
42
|
+
"test/test_helper.rb"
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
if s.respond_to? :specification_version then
|
|
46
|
+
s.specification_version = 3
|
|
47
|
+
|
|
48
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
|
49
|
+
s.add_runtime_dependency(%q<activerecord>, [">= 2.3.5"])
|
|
50
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
|
51
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
52
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
|
53
|
+
s.add_development_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
|
|
54
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
|
55
|
+
s.add_runtime_dependency(%q<activerecord>, [">= 2.3.5"])
|
|
56
|
+
else
|
|
57
|
+
s.add_dependency(%q<activerecord>, [">= 2.3.5"])
|
|
58
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
59
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
60
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
|
61
|
+
s.add_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
|
|
62
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
|
63
|
+
s.add_dependency(%q<activerecord>, [">= 2.3.5"])
|
|
64
|
+
end
|
|
65
|
+
else
|
|
66
|
+
s.add_dependency(%q<activerecord>, [">= 2.3.5"])
|
|
67
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
|
68
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
|
69
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
|
70
|
+
s.add_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
|
|
71
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
|
72
|
+
s.add_dependency(%q<activerecord>, [">= 2.3.5"])
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
@@ -38,16 +38,21 @@ end
|
|
|
38
38
|
class ActiveRecord::AttrAccessibleBlock < Array
|
|
39
39
|
attr_reader :attrs, :record
|
|
40
40
|
|
|
41
|
+
@@variables = {}
|
|
42
|
+
@@always_accessible = nil
|
|
43
|
+
|
|
41
44
|
def initialize(attrs, record, &block)
|
|
42
45
|
@attrs = attrs
|
|
43
46
|
|
|
44
|
-
@@
|
|
47
|
+
@@variables.each do |name, func|
|
|
45
48
|
instance_variable_set("@#{name}", func.call)
|
|
46
49
|
end
|
|
47
50
|
|
|
48
51
|
@record = record
|
|
49
52
|
|
|
50
|
-
|
|
53
|
+
always_accessible = (@@always_accessible ? instance_eval(&@@always_accessible) : false)
|
|
54
|
+
|
|
55
|
+
unless always_accessible
|
|
51
56
|
instance_eval(&block)
|
|
52
57
|
|
|
53
58
|
flatten!
|
|
@@ -55,9 +60,8 @@ class ActiveRecord::AttrAccessibleBlock < Array
|
|
|
55
60
|
end
|
|
56
61
|
end
|
|
57
62
|
|
|
58
|
-
def self.
|
|
59
|
-
@@
|
|
60
|
-
@@before_options[name] = func
|
|
63
|
+
def self.add_variable(name, &block)
|
|
64
|
+
@@variables[name] = block
|
|
61
65
|
attr_reader name
|
|
62
66
|
end
|
|
63
67
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require 'test_helper'
|
|
2
2
|
|
|
3
|
-
ActiveRecord::AttrAccessibleBlock.
|
|
4
|
-
ActiveRecord::AttrAccessibleBlock.always_accessible { 'admin' == user.role }
|
|
3
|
+
ActiveRecord::AttrAccessibleBlock.add_variable(:user) { User.current || User.new }
|
|
5
4
|
|
|
6
5
|
class AttrAccessibleBlockTest < Test::Unit::TestCase
|
|
7
6
|
def setup
|
|
@@ -26,6 +25,10 @@ class AttrAccessibleBlockTest < Test::Unit::TestCase
|
|
|
26
25
|
end
|
|
27
26
|
|
|
28
27
|
def test_should_always_accessible
|
|
28
|
+
assert_nil ActiveRecord::AttrAccessibleBlock.send(:class_variable_get, :@@always_accessible)
|
|
29
|
+
ActiveRecord::AttrAccessibleBlock.always_accessible { 'admin' == user.role }
|
|
30
|
+
assert_not_nil ActiveRecord::AttrAccessibleBlock.send(:class_variable_get, :@@always_accessible)
|
|
31
|
+
|
|
29
32
|
user = User.new(:email => 'test@test.com', :password => 'test', :profile_attributes => {:first_name => 'first name', :last_name => 'last name'})
|
|
30
33
|
user.role = 'admin'
|
|
31
34
|
assert user.save
|
|
@@ -34,6 +37,9 @@ class AttrAccessibleBlockTest < Test::Unit::TestCase
|
|
|
34
37
|
assert_equal 'first name', user.profile.first_name
|
|
35
38
|
assert user.update_attributes(:profile_attributes => {:id => user.profile.id, :first_name => 'first'})
|
|
36
39
|
assert_equal 'first', user.profile.first_name
|
|
40
|
+
|
|
41
|
+
ActiveRecord::AttrAccessibleBlock.send(:class_variable_set, :@@always_accessible, nil)
|
|
42
|
+
assert_nil ActiveRecord::AttrAccessibleBlock.send(:class_variable_get, :@@always_accessible)
|
|
37
43
|
end
|
|
38
44
|
|
|
39
45
|
def test_should_change_only_on_create
|
|
@@ -57,7 +63,7 @@ class AttrAccessibleBlockTest < Test::Unit::TestCase
|
|
|
57
63
|
assert_equal false, l.attr_accessible?(:code)
|
|
58
64
|
end
|
|
59
65
|
|
|
60
|
-
def
|
|
66
|
+
def test_should_access_to_add_variable_reader
|
|
61
67
|
user = User.new(:email => 'test@test.com', :password => 'test', :profile_attributes => {:first_name => 'first name', :last_name => 'last name'})
|
|
62
68
|
user.role = 'manager'
|
|
63
69
|
assert user.save
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: attr_accessible_block
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
5
|
-
prerelease:
|
|
4
|
+
hash: 21
|
|
5
|
+
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 2
|
|
9
|
-
-
|
|
10
|
-
version: 0.2.
|
|
9
|
+
- 1
|
|
10
|
+
version: 0.2.1
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- Dmitry Polushkin
|
|
@@ -15,13 +15,12 @@ autorequire:
|
|
|
15
15
|
bindir: bin
|
|
16
16
|
cert_chain: []
|
|
17
17
|
|
|
18
|
-
date: 2011-01
|
|
18
|
+
date: 2011-05-01 00:00:00 +01:00
|
|
19
19
|
default_executable:
|
|
20
20
|
dependencies:
|
|
21
21
|
- !ruby/object:Gem::Dependency
|
|
22
22
|
name: activerecord
|
|
23
|
-
|
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
|
23
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
|
25
24
|
none: false
|
|
26
25
|
requirements:
|
|
27
26
|
- - ">="
|
|
@@ -32,12 +31,12 @@ dependencies:
|
|
|
32
31
|
- 3
|
|
33
32
|
- 5
|
|
34
33
|
version: 2.3.5
|
|
34
|
+
prerelease: false
|
|
35
35
|
type: :runtime
|
|
36
|
-
|
|
36
|
+
requirement: *id001
|
|
37
37
|
- !ruby/object:Gem::Dependency
|
|
38
38
|
name: shoulda
|
|
39
|
-
|
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
|
41
40
|
none: false
|
|
42
41
|
requirements:
|
|
43
42
|
- - ">="
|
|
@@ -46,12 +45,12 @@ dependencies:
|
|
|
46
45
|
segments:
|
|
47
46
|
- 0
|
|
48
47
|
version: "0"
|
|
48
|
+
prerelease: false
|
|
49
49
|
type: :development
|
|
50
|
-
|
|
50
|
+
requirement: *id002
|
|
51
51
|
- !ruby/object:Gem::Dependency
|
|
52
52
|
name: bundler
|
|
53
|
-
|
|
54
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
|
53
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
|
55
54
|
none: false
|
|
56
55
|
requirements:
|
|
57
56
|
- - ~>
|
|
@@ -62,12 +61,12 @@ dependencies:
|
|
|
62
61
|
- 0
|
|
63
62
|
- 0
|
|
64
63
|
version: 1.0.0
|
|
64
|
+
prerelease: false
|
|
65
65
|
type: :development
|
|
66
|
-
|
|
66
|
+
requirement: *id003
|
|
67
67
|
- !ruby/object:Gem::Dependency
|
|
68
68
|
name: jeweler
|
|
69
|
-
|
|
70
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
|
69
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
|
71
70
|
none: false
|
|
72
71
|
requirements:
|
|
73
72
|
- - ~>
|
|
@@ -78,12 +77,12 @@ dependencies:
|
|
|
78
77
|
- 5
|
|
79
78
|
- 2
|
|
80
79
|
version: 1.5.2
|
|
80
|
+
prerelease: false
|
|
81
81
|
type: :development
|
|
82
|
-
|
|
82
|
+
requirement: *id004
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: sqlite3-ruby
|
|
85
|
-
|
|
86
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
|
85
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
|
87
86
|
none: false
|
|
88
87
|
requirements:
|
|
89
88
|
- - ~>
|
|
@@ -94,12 +93,12 @@ dependencies:
|
|
|
94
93
|
- 3
|
|
95
94
|
- 2
|
|
96
95
|
version: 1.3.2
|
|
96
|
+
prerelease: false
|
|
97
97
|
type: :development
|
|
98
|
-
|
|
98
|
+
requirement: *id005
|
|
99
99
|
- !ruby/object:Gem::Dependency
|
|
100
100
|
name: rcov
|
|
101
|
-
|
|
102
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
|
101
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
|
103
102
|
none: false
|
|
104
103
|
requirements:
|
|
105
104
|
- - ">="
|
|
@@ -108,12 +107,12 @@ dependencies:
|
|
|
108
107
|
segments:
|
|
109
108
|
- 0
|
|
110
109
|
version: "0"
|
|
110
|
+
prerelease: false
|
|
111
111
|
type: :development
|
|
112
|
-
|
|
112
|
+
requirement: *id006
|
|
113
113
|
- !ruby/object:Gem::Dependency
|
|
114
114
|
name: activerecord
|
|
115
|
-
|
|
116
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
|
115
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
|
117
116
|
none: false
|
|
118
117
|
requirements:
|
|
119
118
|
- - ">="
|
|
@@ -124,9 +123,10 @@ dependencies:
|
|
|
124
123
|
- 3
|
|
125
124
|
- 5
|
|
126
125
|
version: 2.3.5
|
|
126
|
+
prerelease: false
|
|
127
127
|
type: :runtime
|
|
128
|
-
|
|
129
|
-
description:
|
|
128
|
+
requirement: *id007
|
|
129
|
+
description: Convinient possibility to change attr_accessible on the fly, using definition of the required accessible attributes in a block.
|
|
130
130
|
email: dmitry.polushkin@gmail.com
|
|
131
131
|
executables: []
|
|
132
132
|
|
|
@@ -140,6 +140,7 @@ files:
|
|
|
140
140
|
- MIT-LICENSE
|
|
141
141
|
- README.md
|
|
142
142
|
- Rakefile
|
|
143
|
+
- attr_accessible_block.gemspec
|
|
143
144
|
- init.rb
|
|
144
145
|
- install.rb
|
|
145
146
|
- lib/attr_accessible_block.rb
|
|
@@ -178,10 +179,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
178
179
|
requirements: []
|
|
179
180
|
|
|
180
181
|
rubyforge_project:
|
|
181
|
-
rubygems_version: 1.
|
|
182
|
+
rubygems_version: 1.5.2
|
|
182
183
|
signing_key:
|
|
183
184
|
specification_version: 3
|
|
184
|
-
summary: Attribute accessible block (attr_accessible with a block
|
|
185
|
+
summary: Attribute accessible block (attr_accessible with a dynamic block possibility)
|
|
185
186
|
test_files:
|
|
186
187
|
- test/schema.rb
|
|
187
188
|
- test/test_attr_accessible_block.rb
|