alfred 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 +4 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/.travis.yml +1 -0
- data/Gemfile +4 -0
- data/Rakefile +6 -0
- data/alfred.gemspec +25 -0
- data/lib/alfred.rb +18 -0
- data/lib/alfred/engine.rb +4 -0
- data/lib/alfred/generators/alfred/install_generator.rb +13 -0
- data/lib/alfred/generators/templates/alfred.rb +6 -0
- data/lib/alfred/models.rb +53 -0
- data/lib/alfred/orm/active_record.rb +3 -0
- data/lib/alfred/version.rb +3 -0
- data/spec/models_spec.rb +209 -0
- data/spec/spec_helper.rb +6 -0
- metadata +107 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm 1.9.2@alfred --create
|
data/.travis.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm: 1.9.2
|
data/Gemfile
ADDED
data/Rakefile
ADDED
data/alfred.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "alfred/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "alfred"
|
7
|
+
s.version = Alfred::VERSION
|
8
|
+
s.authors = ["Daniel Spangenberg"]
|
9
|
+
s.email = ["daniel.spangenberg@parcydo.com"]
|
10
|
+
s.homepage = "http://rubygems.org/gems/alfred"
|
11
|
+
s.summary = %q{Alfred is the unobtrusive butler who takes care of the uninvited guests.}
|
12
|
+
s.description = %q{Alfred provides better attr_accessor handling on your application.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "alfred"
|
15
|
+
|
16
|
+
s.add_dependency "rails", "~> 3.1.0.rc"
|
17
|
+
s.add_development_dependency "activerecord"
|
18
|
+
s.add_development_dependency "rr"
|
19
|
+
s.add_development_dependency "rspec"
|
20
|
+
|
21
|
+
s.files = `git ls-files`.split("\n")
|
22
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
23
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
end
|
data/lib/alfred.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rails'
|
2
|
+
|
3
|
+
module Alfred
|
4
|
+
autoload :Models, 'alfred/models'
|
5
|
+
|
6
|
+
# Automaticly add password_confirmation if password exists.
|
7
|
+
mattr_accessor :auto_password_confirmation
|
8
|
+
@@auto_password_confirmation = true
|
9
|
+
|
10
|
+
# Default way to setup Alfred. Run rails generate alfred:install to create
|
11
|
+
# a fresh initializer with all configuration values.
|
12
|
+
def self.setup
|
13
|
+
yield self
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'alfred/engine'
|
18
|
+
require 'alfred/orm/active_record' if defined?(ActiveRecord)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Alfred
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path("../../templates", __FILE__)
|
5
|
+
|
6
|
+
desc "Creates a Alfred initializer."
|
7
|
+
|
8
|
+
def copy_initializer
|
9
|
+
template "alfred.rb", "config/initializers/alfred.rb"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Alfred
|
2
|
+
module Models
|
3
|
+
def alfred_accessible(*args)
|
4
|
+
alfred(:accessible, *args)
|
5
|
+
end
|
6
|
+
|
7
|
+
def alfred_protected(*args)
|
8
|
+
alfred(:protected, *args)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def alfred(method, *args)
|
14
|
+
options = args.extract_options!
|
15
|
+
|
16
|
+
if options[:as]
|
17
|
+
if method == :accessible
|
18
|
+
args = args + accessible_attributes(options[:inherit] || :default).to_a
|
19
|
+
else
|
20
|
+
args = args + protected_attributes(options[:inherit] || :default).to_a
|
21
|
+
end
|
22
|
+
args = args + [{ as: options[:as] }]
|
23
|
+
end
|
24
|
+
|
25
|
+
if args.include?(:password) && Alfred.auto_password_confirmation
|
26
|
+
args = args + [:password_confirmation]
|
27
|
+
end
|
28
|
+
|
29
|
+
if options[:on] && [:create, :update].include?(options[:on])
|
30
|
+
if options[:on] == :create
|
31
|
+
before = :before_create
|
32
|
+
else
|
33
|
+
before = :before_update
|
34
|
+
end
|
35
|
+
if method == :accessible
|
36
|
+
self.class.send(:define_method, before) do
|
37
|
+
attr_accessible(*args)
|
38
|
+
end
|
39
|
+
else
|
40
|
+
self.class.send(:define_method, before) do
|
41
|
+
attr_protected(*args)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
else
|
45
|
+
if method == :accessible
|
46
|
+
attr_accessible(*args)
|
47
|
+
else
|
48
|
+
attr_protected(*args)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/spec/models_spec.rb
ADDED
@@ -0,0 +1,209 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class AlfredModel
|
4
|
+
include ActiveModel::MassAssignmentSecurity
|
5
|
+
extend Alfred::Models
|
6
|
+
attr_accessor :a, :b, :c, :d, :e, :f
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Alfred::Models do
|
10
|
+
|
11
|
+
describe "accessible" do
|
12
|
+
|
13
|
+
describe "create attr_accessible" do
|
14
|
+
it "add's attr_accessible with default role" do
|
15
|
+
class AAModel < AlfredModel
|
16
|
+
alfred_accessible :a, :b
|
17
|
+
end
|
18
|
+
AAModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b].map(&:to_s)))
|
19
|
+
end
|
20
|
+
|
21
|
+
it "appends attr_accessible to default role" do
|
22
|
+
class ABModel < AlfredModel
|
23
|
+
alfred_accessible :a, :b
|
24
|
+
alfred_accessible :c, :d
|
25
|
+
end
|
26
|
+
ABModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b, :c, :d].map(&:to_s)))
|
27
|
+
end
|
28
|
+
|
29
|
+
it "add's attr_accessible with custom role" do
|
30
|
+
class ACModel < AlfredModel
|
31
|
+
alfred_accessible :a, :b, as: :custom
|
32
|
+
end
|
33
|
+
ACModel.accessible_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b].map(&:to_s)))
|
34
|
+
end
|
35
|
+
|
36
|
+
it "appends attr_accessible to custom role" do
|
37
|
+
class ADModel < AlfredModel
|
38
|
+
alfred_accessible :a, :b, as: :custom
|
39
|
+
alfred_accessible :c, :d, as: :custom
|
40
|
+
end
|
41
|
+
ADModel.accessible_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b, :c, :d].map(&:to_s)))
|
42
|
+
end
|
43
|
+
|
44
|
+
it "add's attr_accessible to event" do
|
45
|
+
class AEModel < AlfredModel
|
46
|
+
alfred_accessible :a, :b, on: :create
|
47
|
+
end
|
48
|
+
AEModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([].map(&:to_s)))
|
49
|
+
AEModel.before_create
|
50
|
+
AEModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b].map(&:to_s)))
|
51
|
+
end
|
52
|
+
|
53
|
+
it "appends attr_accessible with custom role to event" do
|
54
|
+
class AFModel < AlfredModel
|
55
|
+
alfred_accessible :a, :b, as: :custom, on: :create
|
56
|
+
end
|
57
|
+
AFModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([].map(&:to_s)))
|
58
|
+
AFModel.before_create
|
59
|
+
AFModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([].map(&:to_s)))
|
60
|
+
AFModel.accessible_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b].map(&:to_s)))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "inheritance" do
|
65
|
+
it "inherits from default role" do
|
66
|
+
class AGModel < AlfredModel
|
67
|
+
alfred_accessible :a, :b
|
68
|
+
alfred_accessible :c, :d, as: :custom
|
69
|
+
alfred_accessible :e, :f, as: :custom2
|
70
|
+
end
|
71
|
+
AGModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b].map(&:to_s)))
|
72
|
+
AGModel.accessible_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b, :c, :d].map(&:to_s)))
|
73
|
+
AGModel.accessible_attributes(:custom2).should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b, :e, :f].map(&:to_s)))
|
74
|
+
end
|
75
|
+
|
76
|
+
it "inherits from custom role" do
|
77
|
+
class AHModel < AlfredModel
|
78
|
+
alfred_accessible :a, :b
|
79
|
+
alfred_accessible :c, :d, as: :custom
|
80
|
+
alfred_accessible :e, :f, as: :custom2, inherit: :custom
|
81
|
+
end
|
82
|
+
AHModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b].map(&:to_s)))
|
83
|
+
AHModel.accessible_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b, :c, :d].map(&:to_s)))
|
84
|
+
AHModel.accessible_attributes(:custom2).should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:a, :b, :c, :d, :e, :f].map(&:to_s)))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "auto password confirmation" do
|
89
|
+
it "add's automatically password_confirmation if enabled" do
|
90
|
+
Alfred.auto_password_confirmation = true
|
91
|
+
class AIModel < AlfredModel
|
92
|
+
attr_accessor :password, :password_confirmation
|
93
|
+
alfred_accessible :password
|
94
|
+
end
|
95
|
+
AIModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:password, :password_confirmation].map(&:to_s)))
|
96
|
+
end
|
97
|
+
|
98
|
+
it "not add's automatically password_confirmation if disabled" do
|
99
|
+
Alfred.auto_password_confirmation = false
|
100
|
+
class AJModel < AlfredModel
|
101
|
+
attr_accessor :password, :password_confirmation
|
102
|
+
alfred_accessible :password
|
103
|
+
end
|
104
|
+
AJModel.accessible_attributes.should eq(ActiveModel::MassAssignmentSecurity::WhiteList.new([:password].map(&:to_s)))
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "protected" do
|
111
|
+
|
112
|
+
describe "create attr_protected" do
|
113
|
+
it "add's attr_protected with default role" do
|
114
|
+
class PAModel < AlfredModel
|
115
|
+
alfred_protected :a, :b
|
116
|
+
end
|
117
|
+
PAModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b].map(&:to_s)))
|
118
|
+
end
|
119
|
+
|
120
|
+
it "appends attr_protected to default role" do
|
121
|
+
class PBModel < AlfredModel
|
122
|
+
alfred_protected :a, :b
|
123
|
+
alfred_protected :c, :d
|
124
|
+
end
|
125
|
+
PBModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b, :c, :d].map(&:to_s)))
|
126
|
+
end
|
127
|
+
|
128
|
+
it "add's attr_protected with custom role" do
|
129
|
+
class PCModel < AlfredModel
|
130
|
+
alfred_protected :a, :b, as: :custom
|
131
|
+
end
|
132
|
+
PCModel.protected_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b].map(&:to_s)))
|
133
|
+
end
|
134
|
+
|
135
|
+
it "appends attr_protected to custom role" do
|
136
|
+
class PDModel < AlfredModel
|
137
|
+
alfred_protected :a, :b, as: :custom
|
138
|
+
alfred_protected :c, :d, as: :custom
|
139
|
+
end
|
140
|
+
PDModel.protected_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b, :c, :d].map(&:to_s)))
|
141
|
+
end
|
142
|
+
|
143
|
+
it "add's attr_protected to event" do
|
144
|
+
class PEModel < AlfredModel
|
145
|
+
alfred_protected :a, :b, on: :create
|
146
|
+
end
|
147
|
+
PEModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([].map(&:to_s)))
|
148
|
+
PEModel.before_create
|
149
|
+
PEModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b].map(&:to_s)))
|
150
|
+
end
|
151
|
+
|
152
|
+
it "appends attr_protected with custom role to event" do
|
153
|
+
class PFModel < AlfredModel
|
154
|
+
alfred_protected :a, :b, as: :custom, on: :create
|
155
|
+
end
|
156
|
+
PFModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([].map(&:to_s)))
|
157
|
+
PFModel.before_create
|
158
|
+
PFModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([].map(&:to_s)))
|
159
|
+
PFModel.protected_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b].map(&:to_s)))
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
describe "inheritance" do
|
164
|
+
it "inherits from default role" do
|
165
|
+
class PGModel < AlfredModel
|
166
|
+
alfred_protected :a, :b
|
167
|
+
alfred_protected :c, :d, as: :custom
|
168
|
+
alfred_protected :e, :f, as: :custom2
|
169
|
+
end
|
170
|
+
PGModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b].map(&:to_s)))
|
171
|
+
PGModel.protected_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b, :c, :d].map(&:to_s)))
|
172
|
+
PGModel.protected_attributes(:custom2).should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b, :e, :f].map(&:to_s)))
|
173
|
+
end
|
174
|
+
|
175
|
+
it "inherits from custom role" do
|
176
|
+
class PHModel < AlfredModel
|
177
|
+
alfred_protected :a, :b
|
178
|
+
alfred_protected :c, :d, as: :custom
|
179
|
+
alfred_protected :e, :f, as: :custom2, inherit: :custom
|
180
|
+
end
|
181
|
+
PHModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b].map(&:to_s)))
|
182
|
+
PHModel.protected_attributes(:custom).should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b, :c, :d].map(&:to_s)))
|
183
|
+
PHModel.protected_attributes(:custom2).should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:a, :b, :c, :d, :e, :f].map(&:to_s)))
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
describe "auto password confirmation" do
|
188
|
+
it "add's automatically password_confirmation if enabled" do
|
189
|
+
Alfred.auto_password_confirmation = true
|
190
|
+
class PIModel < AlfredModel
|
191
|
+
attr_accessor :password, :password_confirmation
|
192
|
+
alfred_protected :password
|
193
|
+
end
|
194
|
+
PIModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:password, :password_confirmation].map(&:to_s)))
|
195
|
+
end
|
196
|
+
|
197
|
+
it "not add's automatically password_confirmation if disabled" do
|
198
|
+
Alfred.auto_password_confirmation = false
|
199
|
+
class PJModel < AlfredModel
|
200
|
+
attr_accessor :password, :password_confirmation
|
201
|
+
alfred_protected :password
|
202
|
+
end
|
203
|
+
PJModel.protected_attributes.should eq(ActiveModel::MassAssignmentSecurity::BlackList.new([:password].map(&:to_s)))
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
end
|
208
|
+
|
209
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: alfred
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Spangenberg
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-08-11 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: &70320733483060 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.1.0.rc
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70320733483060
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activerecord
|
27
|
+
requirement: &70320733482640 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70320733482640
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rr
|
38
|
+
requirement: &70320733482180 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70320733482180
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: &70320733481760 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70320733481760
|
58
|
+
description: Alfred provides better attr_accessor handling on your application.
|
59
|
+
email:
|
60
|
+
- daniel.spangenberg@parcydo.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- .gitignore
|
66
|
+
- .rspec
|
67
|
+
- .rvmrc
|
68
|
+
- .travis.yml
|
69
|
+
- Gemfile
|
70
|
+
- Rakefile
|
71
|
+
- alfred.gemspec
|
72
|
+
- lib/alfred.rb
|
73
|
+
- lib/alfred/engine.rb
|
74
|
+
- lib/alfred/generators/alfred/install_generator.rb
|
75
|
+
- lib/alfred/generators/templates/alfred.rb
|
76
|
+
- lib/alfred/models.rb
|
77
|
+
- lib/alfred/orm/active_record.rb
|
78
|
+
- lib/alfred/version.rb
|
79
|
+
- spec/models_spec.rb
|
80
|
+
- spec/spec_helper.rb
|
81
|
+
homepage: http://rubygems.org/gems/alfred
|
82
|
+
licenses: []
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project: alfred
|
101
|
+
rubygems_version: 1.8.8
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: Alfred is the unobtrusive butler who takes care of the uninvited guests.
|
105
|
+
test_files:
|
106
|
+
- spec/models_spec.rb
|
107
|
+
- spec/spec_helper.rb
|