attr_accessible_block 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,17 +1,17 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activemodel (3.0.3)
5
- activesupport (= 3.0.3)
4
+ activemodel (3.0.7)
5
+ activesupport (= 3.0.7)
6
6
  builder (~> 2.1.2)
7
- i18n (~> 0.4)
8
- activerecord (3.0.3)
9
- activemodel (= 3.0.3)
10
- activesupport (= 3.0.3)
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.3)
14
- arel (2.0.6)
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-ruby (1.3.2)
26
- tzinfo (0.3.23)
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.before_options :user, lambda { User.current || User.new }`
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
- script/plugin install git://github.com//dmitry/attr_accessible_block.git
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.before_options :user, lambda { User.current || User.new }
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, dynamic)}
18
- gem.description = %Q{Now it's possible to change attr_accessible using definition of the required accessible attributes in a block.}
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.0'
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
- @@before_options.each do |name, func|
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
- unless instance_eval(&@@always_accessible)
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.before_options(name, func)
59
- @@before_options ||= {}
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.before_options :user, lambda { User.current || User.new }
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 test_should_access_to_before_options_reader
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: 23
5
- prerelease: false
4
+ hash: 21
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 0
10
- version: 0.2.0
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-16 00:00:00 +00:00
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
- prerelease: false
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
- version_requirements: *id001
36
+ requirement: *id001
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: shoulda
39
- prerelease: false
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
- version_requirements: *id002
50
+ requirement: *id002
51
51
  - !ruby/object:Gem::Dependency
52
52
  name: bundler
53
- prerelease: false
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
- version_requirements: *id003
66
+ requirement: *id003
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: jeweler
69
- prerelease: false
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
- version_requirements: *id004
82
+ requirement: *id004
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: sqlite3-ruby
85
- prerelease: false
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
- version_requirements: *id005
98
+ requirement: *id005
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: rcov
101
- prerelease: false
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
- version_requirements: *id006
112
+ requirement: *id006
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: activerecord
115
- prerelease: false
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
- version_requirements: *id007
129
- description: Now it's possible to change attr_accessible using definition of the required accessible attributes in a block.
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.3.7
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, dynamic)
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