wheels 0.0.21 → 0.0.22

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.21
1
+ 0.0.22
@@ -1,19 +1,20 @@
1
1
  class AccessControlEntriesController < InheritedResources::Base
2
- before_filter :authenticate!
3
- has_scope :by_resource, :using => [:class, :resource_id]
2
+ ajax_loading
3
+ before_filter :authenticate_user!
4
+ belongs_to :user, :optional => true
5
+ has_scope :by_resource, :using => [:resource_class, :resource_id]
6
+ has_scope :by_role, :using=>[:role_id]
7
+ has_scope :by_class, :using=>[:class]
8
+ respond_to :html, :js
4
9
 
5
- def collection
6
- @access_control_entries ||= load_resource
10
+ def new_ace
11
+ a = AccessControlEntry.new
12
+ a.user_id = params[:user_id]
13
+ a.role_id = params[:role_id]
14
+ a.resource_class_name = params[:resource_class]
15
+ a.options[:id] = params[:resource_id]
16
+ return a
7
17
  end
8
-
9
- private
10
- def load_resource
11
- if params[:id]
12
- AccessControlEntry.find(params[:id])
13
- else
14
- raise "No resource id supplied" unless params[:class]
15
- AccessControlEntry.find_by_resource_class_name_and_resource_id params[:class], params[:resource_id]
16
- end
17
- end
18
+ helper_method :new_ace
18
19
  end
19
20
 
@@ -1,6 +1,13 @@
1
1
  class PagesController < InheritedResources::Base
2
+ before_filter :resource, :only=>[:update, :show, :destroy, :edit]
3
+ authorize_resource
4
+ has_scope :tagged_with, :as => :tag
5
+ has_scope :accessible_by, :type=>:boolean, :default=>true do |c,s|
6
+ s.accessible_by(c.current_ability)
7
+ end
8
+
2
9
  def resource
3
- page_id = params[:id] || Layout.current[:default_page]
10
+ page_id = params[:id]
4
11
  if page_id.is_numeric?
5
12
  @page ||= Page.find(page_id)
6
13
  else
@@ -6,52 +6,59 @@ class AccessControlEntry < ActiveRecord::Base
6
6
  where(:resource_class_name=>resource_class_name).
7
7
  where(:resource_id=>resource_id)
8
8
  }
9
+ scope :by_role, lambda {|role_id|
10
+ where(:role_id=>role_id)
11
+ }
12
+ scope :by_class, lambda {|class_name|
13
+ where(:resource_class_name=>class_name)
14
+ }
9
15
 
10
16
  def resource
11
- @resource ||= (resource_id.nil? ? self.resource_class_name.constantize :
12
- self.resource_class_name.constantize.find(self.resource_id))
17
+ @resource ||= self.resource_class_name.constantize
13
18
  end
14
19
 
15
20
  def resource=(res)
16
21
  @resource = res
17
22
  if res.type==Class
18
- self.resource_id = nil
19
23
  self.resource_class_name = res.name
20
24
  else
21
- self.resource_id = res.id
25
+ self.options[:id] = res.id
22
26
  self.resource_class_name = res.class.name
23
27
  end
24
28
  end
25
29
 
26
30
  def options
27
- @options ||= eval(self.serialized_options)
31
+ @options ||= (self.serialized_options ? eval(self.serialized_options) : {})
32
+ end
33
+
34
+ def options_str
35
+ options.map{|u,v| "#{u.inspect}=>#{v.is_numeric? ? v : v.inspect}"}.join(", ")
28
36
  end
37
+ def options_str=(str)
38
+ opts = str.split(",").map(&:strip).map_hash{|keyval|
39
+ key, val = keyval.split("=>").map(&:strip)
40
+ val = val.to_i if val.is_numeric?
41
+ if key.index(":")
42
+ key = key.gsub(/\:/, "").to_sym
43
+ end
44
+ {key=>val}
45
+ }
29
46
 
30
- def options=(opts)
31
- raise "I only take hash" unless opts.class==Hash
32
- klasses = %w(String Symbol)
33
- opts.delete_if{|u,v| !klasses.include?(u.class.name) || !klasses.include?(v.class.name)}
34
47
  @options = opts
35
48
  self.serialized_options = opts.inspect
36
49
  end
37
50
 
38
51
  def configure(ability)
39
- ability.send method_name, verb, resource, options
52
+ raise "I only like Ability" unless ability.class==Ability
53
+ ability.send method_name, verb.to_sym, resource, options
54
+ puts "ability.send #{method_name}, #{verb.to_sym.inspect}, #{resource.inspect}, #{options.inspect}"
40
55
  end
41
56
 
42
57
  def self.can(verb, resource, options={})
43
- AccessControlEntry.new(true, verb, resource, options )
58
+ AccessControlEntry.new(:can=>true, :verb=> verb, :resource=>resource, :options=>options )
44
59
  end
45
60
  def self.cannot(verb, resource, options)
46
- AccessControlEntry.new(false, verb, resource, options )
47
- end
48
-
49
- def initialize(can, verb, resource, options={})
50
- @options = options
51
- self.can = can
52
- self.verb = verb
53
- self.resource = resource
54
- self.options = options
61
+ AccessControlEntry.new(:can=>false, :verb=> verb, :resource=>resource, :options=>options )
55
62
  end
56
63
 
57
64
  def method_name
@@ -66,14 +73,16 @@ class AccessControlEntry < ActiveRecord::Base
66
73
  end
67
74
 
68
75
  def role=(role)
69
- if role.kind_of? Role
70
- self.role_id = role.id
71
- else
72
- role = role.to_s.camelize
73
- if role.is_numeric?
74
- self.role_id= role
76
+ unless role.empty?
77
+ if role.kind_of? Role
78
+ self.role_id = role.id
75
79
  else
76
- self.role_id= Role.find_by_name(role).id
80
+ role = role.to_s.camelize
81
+ if role.is_numeric?
82
+ self.role_id= role
83
+ else
84
+ self.role_id= Role.find_by_name(role).id
85
+ end
77
86
  end
78
87
  end
79
88
  end
data/app/models/page.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class Page < ActiveRecord::Base
2
2
  has_many :images
3
-
3
+ acts_as_taggable
4
4
  end
5
5
 
data/app/models/role.rb CHANGED
@@ -2,6 +2,14 @@ class Role < ActiveRecord::Base
2
2
  has_many :users
3
3
  has_many :access_control_entries
4
4
 
5
+ def self.collection_entries
6
+ roles = [["Not Set", nil]]
7
+ Role.all.map{|t| [t.name, t.id]}.each do |t|
8
+ roles << t
9
+ end
10
+ roles
11
+ end
12
+
5
13
  SUPER = 1
6
14
  ADMIN = 2
7
15
  USER = 3
@@ -1,27 +1,33 @@
1
- = form_for @access_control_entry do |f|
1
+ = form_for @access_control_entry, :remote=>true do |f|
2
2
  -if @access_control_entry.errors.any?
3
3
  #errorExplanation
4
4
  %h2= "#{pluralize(@access_control_entry.errors.count, "error")} prohibited this access_control_entry from being saved:"
5
5
  %ul
6
6
  - @access_control_entry.errors.full_messages.each do |msg|
7
7
  %li= msg
8
- %ul.form_fields
8
+ = hidden_field_tag :container, "ace_listing"
9
+ = hidden_field_tag :ajax_function, "append"
10
+ %ul.ace_form_fields
9
11
  %li
10
- = f.label :resource_class_name
11
- = f.select :resource_class_name, [["Forum", "Forum"], ["Page", "Page"]]
12
- = f.hidden_field :resource_id
12
+ .name Email
13
+ = f.text_field :user_email, :class=>"email"
13
14
  %li
14
- = f.label :user_email
15
- = f.text_field :user_email
15
+ .name Role
16
+ = f.select :role, Role.collection_entries
16
17
  %li
17
- = f.label :role
18
- = f.select :role, ["Admin", "User", "Nobody"]
19
- %li
20
- = f.label :can
18
+ .name Can?
21
19
  = f.check_box :can
22
20
  %li
23
- = f.label :verb
24
- = f.text_field :verb
21
+ .name verb
22
+ = f.text_field :verb, :class=>"verb"
23
+ %li
24
+ .name Resource
25
+ = f.select :resource_class_name, [["Forum", "Forum"], ["Page", "Page"]]
26
+ = f.hidden_field :resource_id
27
+ %li
28
+ .name options
29
+ = f.text_field :options_str, :class=>"verb"
30
+
25
31
  %li
26
- = f.submit 'Save'
32
+ = f.submit 'Save', :disable_with=>"Saving..."
27
33
 
@@ -0,0 +1,46 @@
1
+ %h1 Listing Access Control Entries for
2
+
3
+ %ul.listing#ace_listing
4
+ - @access_control_entries.each do |ace|
5
+ %li
6
+ %ul.ace{:id=>ace.element_id}
7
+ %li= ace.user.email if ace.user
8
+ %li= ace.role.name if ace.role
9
+ %li= ace.can ? "Can" : "Cannot"
10
+ %li= ace.verb
11
+ %li= ace.resource_class_name
12
+ %li= ace.options_str if ace.options_str
13
+ - if can? :edit, ace
14
+ %li= link_to "Edit", edit_access_control_entry_path(ace), :remote=>true
15
+ - if can? :destroy, ace
16
+ %li= link_to "X", ace, :method=>:delete, :remote=>true, "data-confirm"=>"Are you sure?"
17
+
18
+ - if can? :create, AccessControlEntry
19
+ %h2 Enter a new Access Control Entry
20
+ = form_for new_ace, :remote=>true do |f|
21
+ = hidden_field_tag :container, "ace_listing"
22
+ = hidden_field_tag :ajax_function, "append"
23
+ %ul.ace_form_fields
24
+ %li
25
+ .name Email
26
+ = f.text_field :user_email, :class=>"email"
27
+ %li
28
+ .name Role
29
+ = f.select :role, Role.collection_entries
30
+ %li
31
+ .name Can?
32
+ = f.check_box :can
33
+ %li
34
+ .name verb
35
+ = f.text_field :verb, :class=>"verb"
36
+ %li
37
+ .name Resource
38
+ = f.select :resource_class_name, [["Forum", "Forum"], ["Page", "Page"]]
39
+ = f.hidden_field :resource_id
40
+ %li
41
+ .name options
42
+ = f.text_field :options_str, :class=>"verb"
43
+
44
+ %li
45
+ = f.submit 'Save', :disable_with=>"Saving..."
46
+
@@ -0,0 +1,12 @@
1
+ %ul.ace{:id=>resource.element_id}
2
+ %li= resource.user.email if resource.user
3
+ %li= resource.role.name if resource.role
4
+ %li= resource.can ? "Can" : "Cannot"
5
+ %li= resource.verb
6
+ %li= resource.resource_class_name
7
+ %li= resource.options_str if resource.options_str
8
+ - if can? :edit, resource
9
+ %li= link_to "Edit", edit_access_control_entry_path(resource), :remote=>true
10
+ - if can? :destroy, resource
11
+ %li= link_to "X", resource, :method=>:delete, :remote=>true, "data-confirm"=>"Are you sure?"
12
+
@@ -0,0 +1,3 @@
1
+ $('##{container}').#{ajax_function}(#{raw render_js('show')});
2
+ = render :partial => "loadbehind/view"
3
+
@@ -0,0 +1,3 @@
1
+ $('##{container}').remove();
2
+ = render :partial => "loadbehind/destroy"
3
+
@@ -0,0 +1,3 @@
1
+ $('##{container}').#{ajax_function}(#{raw render_js('form')});
2
+ = render :partial => "loadbehind/edit"
3
+
@@ -1,29 +1,2 @@
1
- %h1 Listing access_control_entries
1
+ = render :partial => "index"
2
2
 
3
- %table
4
- %tr
5
- %th Resource class name
6
- %th Resource
7
- %th User
8
- %th Role
9
- %th Can
10
- %th Verb
11
- %th
12
- %th
13
- %th
14
-
15
- - @access_control_entries.each do |access_control_entry|
16
- %tr
17
- %td= access_control_entry.resource_class_name
18
- %td= access_control_entry.resource_id
19
- %td= access_control_entry.user_id
20
- %td= access_control_entry.role_id
21
- %td= access_control_entry.can
22
- %td= access_control_entry.verb
23
- %td= link_to 'Show', access_control_entry
24
- %td= link_to 'Edit', edit_access_control_entry_path(access_control_entry)
25
- %td= link_to 'Destroy', access_control_entry, :confirm => 'Are you sure?', :method => :delete
26
-
27
- %br
28
-
29
- = link_to 'New access_control_entry', new_access_control_entry_path
@@ -0,0 +1,3 @@
1
+ $('##{container}').#{ajax_function}(#{raw render_js('index')});
2
+ = render :partial => "loadbehind/view"
3
+
@@ -0,0 +1,3 @@
1
+ $('##{container}').#{ajax_function}(#{raw render_js('form')});
2
+ = render :partial => "loadbehind/edit"
3
+
@@ -1,22 +1,2 @@
1
- %p
2
- %b Resource class name:
3
- = @access_control_entry.resource_class_name
4
- %p
5
- %b Resource:
6
- = @access_control_entry.resource_id
7
- %p
8
- %b User:
9
- = @access_control_entry.user_id
10
- %p
11
- %b Role:
12
- = @access_control_entry.role_id
13
- %p
14
- %b Can:
15
- = @access_control_entry.can
16
- %p
17
- %b Verb:
18
- = @access_control_entry.verb
1
+ = render :partial => "show"
19
2
 
20
- = link_to 'Edit', edit_access_control_entry_path(@access_control_entry)
21
- \|
22
- = link_to 'Back', access_control_entries_path
@@ -0,0 +1,4 @@
1
+ $('##{container}').#{ajax_function}(#{raw render_js('show')});
2
+ alert('#{container}');
3
+ = render :partial => "loadbehind/view"
4
+
@@ -0,0 +1,3 @@
1
+ $('##{container}').#{ajax_function}(#{raw render_js('show')});
2
+ = render :partial => "loadbehind/view"
3
+
@@ -11,6 +11,10 @@
11
11
  .field
12
12
  = f.label :title
13
13
  = f.text_field :title
14
+ .field
15
+ = f.label :tag_list
16
+ = f.text_field :tag_list
17
+
14
18
  .field
15
19
  = f.label :body
16
20
  = f.text_area :body, :class=>'ckeditor_textarea'
@@ -1,5 +1,14 @@
1
1
  = link_to 'New page', new_page_path if can? :create, Page
2
2
 
3
+ = content_for :links do
4
+ - @pages.each do |page|
5
+ %li
6
+ = link_to page.title, page
7
+ - if can? :edit, @page
8
+ = link_to '| Edit', edit_page_path(page)
9
+ - if can? :manage, @page
10
+ = link_to '| Access Ctrl', access_control_entries_path(:resource_class=>"Page", :resource_id=>page.id)
11
+
3
12
  - @pages.each do |page|
4
13
  %h1= link_to page.title, page
5
14
  = link_to "Edit", edit_page_path(page) if can? :edit, page
@@ -3,4 +3,6 @@
3
3
 
4
4
  - if can? :edit, @page
5
5
  = link_to 'Edit', edit_page_path(@page)
6
+ - if can? :manage, @page
7
+ = link_to 'Edit Access', access_control_entries_path(:resource_class=>"Page", :resource_id=>@page.id)
6
8
 
@@ -100,6 +100,8 @@ a
100
100
  list-style-type: none
101
101
  li
102
102
  float: left
103
+ div
104
+ display: inline
103
105
  a
104
106
  padding: 0 15px
105
107
  display: block
data/wheels.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{wheels}
8
- s.version = "0.0.21"
8
+ s.version = "0.0.22"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tyler Gannon"]
12
- s.date = %q{2010-08-16}
12
+ s.date = %q{2010-08-17}
13
13
  s.description = %q{Call rails generate wheels.}
14
14
  s.email = %q{tgannon@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -50,10 +50,19 @@ Gem::Specification.new do |s|
50
50
  "app/models/tagging.rb",
51
51
  "app/models/user.rb",
52
52
  "app/views/access_control_entries/_form.html.haml",
53
+ "app/views/access_control_entries/_index.html.haml",
54
+ "app/views/access_control_entries/_show.html.haml",
55
+ "app/views/access_control_entries/create.js.haml",
56
+ "app/views/access_control_entries/destroy.js.haml",
53
57
  "app/views/access_control_entries/edit.html.haml",
58
+ "app/views/access_control_entries/edit.js.haml",
54
59
  "app/views/access_control_entries/index.html.haml",
60
+ "app/views/access_control_entries/index.js.haml",
55
61
  "app/views/access_control_entries/new.html.haml",
62
+ "app/views/access_control_entries/new.js.haml",
56
63
  "app/views/access_control_entries/show.html.haml",
64
+ "app/views/access_control_entries/show.js.haml",
65
+ "app/views/access_control_entries/update.js.haml",
57
66
  "app/views/blogs/_form.html.haml",
58
67
  "app/views/blogs/edit.html.haml",
59
68
  "app/views/blogs/index.html.haml",
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wheels
3
3
  version: !ruby/object:Gem::Version
4
- hash: 53
4
+ hash: 51
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 21
10
- version: 0.0.21
9
+ - 22
10
+ version: 0.0.22
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tyler Gannon
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-16 00:00:00 -07:00
18
+ date: 2010-08-17 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -75,10 +75,19 @@ files:
75
75
  - app/models/tagging.rb
76
76
  - app/models/user.rb
77
77
  - app/views/access_control_entries/_form.html.haml
78
+ - app/views/access_control_entries/_index.html.haml
79
+ - app/views/access_control_entries/_show.html.haml
80
+ - app/views/access_control_entries/create.js.haml
81
+ - app/views/access_control_entries/destroy.js.haml
78
82
  - app/views/access_control_entries/edit.html.haml
83
+ - app/views/access_control_entries/edit.js.haml
79
84
  - app/views/access_control_entries/index.html.haml
85
+ - app/views/access_control_entries/index.js.haml
80
86
  - app/views/access_control_entries/new.html.haml
87
+ - app/views/access_control_entries/new.js.haml
81
88
  - app/views/access_control_entries/show.html.haml
89
+ - app/views/access_control_entries/show.js.haml
90
+ - app/views/access_control_entries/update.js.haml
82
91
  - app/views/blogs/_form.html.haml
83
92
  - app/views/blogs/edit.html.haml
84
93
  - app/views/blogs/index.html.haml