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 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