wheels 0.1.15 → 0.1.16

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.15
1
+ 0.1.16
@@ -2,11 +2,8 @@ class PagesController < InheritedResources::Base
2
2
  respond_to :js, :html
3
3
  ajax_loading
4
4
  before_filter :authenticate_user!, :except=>[:show]
5
- before_filter :parse_request_url, :only=>:show
6
- before_filter :resource, :only=>[:update, :show, :destroy, :edit]
7
- before_filter :maybe_authenticate, :only=>[:show]
8
- before_filter :set_collection_name
9
- authorize_resource
5
+ before_filter :authorize_resource, :except=>[:index, :show]
6
+
10
7
  has_scope :tagged_with, :as => :tag
11
8
 
12
9
  has_scope :accessible_by, :type=>:boolean, :default=>true do |c,s|
@@ -14,10 +11,31 @@ class PagesController < InheritedResources::Base
14
11
  end
15
12
 
16
13
  def show
17
- resource
18
14
  @sidebar = true
19
- @child_pages = @sitemap.children.accessible_by(current_ability)
20
- show!
15
+ if params[:id]
16
+ @sitemap ||= resource.sitemaps.sort{|t,u| t.url.size <=> u.url.size}[0]
17
+ @page = resource
18
+ else
19
+ @sitemap = Sitemap.from_request_params(params)
20
+ @page = @sitemap.try(:resource)
21
+ end
22
+ if @page
23
+ @child_pages = @sitemap.children.is_a?(Array) ? [] : @sitemap.children.accessible_by(current_ability)
24
+
25
+ if can_access_resources?
26
+ respond_with @page, @sitemap, @child_pages, @attachments
27
+ else
28
+ if user_signed_in?
29
+ flash[:notice] = "How did you find that page? Please contact your administrator if you believe you should have access to that resource."
30
+ redirect_to root_url
31
+ else
32
+ authenticate_user!
33
+ end
34
+ end
35
+ else
36
+ flash[:notice] = "Sorry, we couldn't find the resource you were looking for!"
37
+ redirect_to root_url
38
+ end
21
39
  end
22
40
 
23
41
  def edit
@@ -42,39 +60,19 @@ class PagesController < InheritedResources::Base
42
60
  end
43
61
  end
44
62
 
45
- def set_collection_name
46
- if params[:page_id]
47
- self.resources_configuration[:self][:collection_name] = :children
48
- end
49
- end
50
-
51
- def parse_request_url
52
- if params["level1"]
53
- @sitemap = Sitemap.find_by_path(*[1,2,3,4].map{|i|params["level#{i}"]})
54
- @page = @sitemap.resource
55
- end
56
- end
57
-
58
-
59
63
  def resource
60
- unless @page
61
- page_id = params[:id]
62
- if page_id.is_numeric?
63
- @page ||= Page.find(page_id)
64
- else
65
- @page ||= Page.where(["lower(pages.title) = ?", page_id.downcase.gsub(/[_]/, ' ')]).first
66
- end
67
- @attachments ||= @page.attachments
68
- end
69
- @sitemap ||= @page.sitemaps.sort{|t,u| t.url.size <=> u.url.size}[0]
70
- @page
64
+ return @page ||= Page.find(params[:id])
65
+ @attachments = @page.attachments
71
66
  end
72
67
 
73
68
  def maybe_authenticate
74
69
  unless user_signed_in?
75
- authenticate_user! unless current_ability.can? :read, resource
70
+ authenticate_user! unless current_ability.can?(:read, resource) && current_ability.can?(:read, @sitemap)
76
71
  end
77
72
  end
78
73
 
74
+ def can_access_resources?
75
+ current_ability.can?(params[:action].to_sym, resource) && current_ability.can?(params[:action].to_sym, @sitemap)
76
+ end
79
77
  end
80
78
 
@@ -1,5 +1,5 @@
1
1
  class UsersController < InheritedResources::Base
2
- respond_to :html, :js, :only=>[:edit, :show, :update]
2
+ respond_to :html, :js, :only=>[:edit, :show, :update, :change_password]
3
3
  respond_to :json, :only=>[:verify_password]
4
4
 
5
5
  before_filter :authenticate_user!, :resource
@@ -9,12 +9,22 @@ class UsersController < InheritedResources::Base
9
9
  end
10
10
 
11
11
  def update
12
- resource
13
-
12
+ if params[:commit] == "Update Account"
13
+ @user = User.find(params[:id])
14
+ @user._validators.delete_if{|k,v| k.in?(:password, :password_confirmation)}
15
+ params[:user].delete_if{|k,v| k.in?("password", "password_confirmation")}
16
+ @user.class_eval do
17
+ attr_accessor :old_password
18
+ validates :email, :presence => true, :email => true
19
+ validates :old_password, :presence=>true, :password=>true
20
+ end
21
+ else
22
+ @user = resource
23
+ end
14
24
 
15
25
  update! do |success, failure|
16
26
  failure.html{redirect_to my_account_path}
17
- success.html{flash[:notice] = "Your password has been updated."; redirect_to root_url}
27
+ success.html{flash[:notice] = "Your account has been updated."; redirect_to root_url}
18
28
  end
19
29
  end
20
30
 
@@ -19,10 +19,10 @@ class AccessControlEntry < ActiveRecord::Base
19
19
 
20
20
  def resource=(res)
21
21
  @res = res
22
- if res.is_a? Class then resource_type = res.name
22
+ if res.is_a? Class then self.resource_type = res.name
23
23
  else
24
- resource_id = res.id
25
- resource_type = res.class.name
24
+ self.resource_id = res.id
25
+ self.resource_type = res.class.name
26
26
  end
27
27
  end
28
28
 
@@ -2,12 +2,11 @@ class Profile < ActiveRecord::Base
2
2
  acts_as_tagger
3
3
  belongs_to :user
4
4
  validates_uniqueness_of :alias
5
+ validates :phone, :phone=>true
5
6
  has_attached_file :image,
6
7
  :storage => :s3,
7
8
  :s3_credentials => "#{Rails.root}/config/amazon_s3.yml",
8
9
  :path => "/:style/:filename",
9
10
  :styles => { :medium => "300x300>", :thumb => "100x100>" }
10
-
11
-
12
11
  end
13
12
 
@@ -1,4 +1,11 @@
1
1
  class Sitemap < ActiveRecord::Base
2
+ after_create :create_resource
3
+ after_save :reload_root
4
+ alias_attribute :name, :menu_text
5
+ before_destroy :on_before_destroy
6
+ belongs_to :parent, :class_name=>'Sitemap', :foreign_key=>'parent_id'
7
+ belongs_to :resource, :polymorphic => true
8
+ has_many :access_control_entries, :as => :resource
2
9
  has_many :children, :class_name=>'Sitemap', :foreign_key=>'parent_id', :dependent => :destroy do
3
10
  def sorted
4
11
  sort{|t, u| if t.nil? || t.position.nil?; 1;
@@ -6,35 +13,9 @@ class Sitemap < ActiveRecord::Base
6
13
  else t.position <=> u.position end}
7
14
  end
8
15
  end
9
-
10
- has_many :access_control_entries, :as => :resource
11
-
12
- alias_attribute :name, :menu_text
13
-
14
- def self.new_main_menu_page(name)
15
- Sitemap.create( :parent=>self.main_menu,
16
- :menu_text=>name,
17
- :resource=>Page.create(:title=>name),
18
- :position=>Sitemap.main_menu.children.count)
19
- end
20
-
21
- belongs_to :parent, :class_name=>'Sitemap', :foreign_key=>'parent_id'
22
- belongs_to :resource, :polymorphic => true
23
- after_create :create_resource
24
- before_destroy :on_before_destroy
25
- after_save :reload_root
26
- validates :resource, :presence=>true
27
16
  accepts_nested_attributes_for :children
28
-
29
- def reload_root
30
- Sitemap.instance_variable_set('@_root', nil)
31
- end
32
-
33
- def on_before_destroy
34
- resource.destroy if resource && resource.sitemaps.size==1
35
- end
36
-
37
17
  scope :orphans, where(:parent_id=>nil).where("menu_text <> 'root'")
18
+ validates :resource, :presence=>true
38
19
 
39
20
  def as_json(*a)
40
21
  {
@@ -54,7 +35,7 @@ class Sitemap < ActiveRecord::Base
54
35
  :state=>treeview_state,
55
36
  :children=> children.sorted
56
37
  }.as_json(*a)
57
- end
38
+ end
58
39
 
59
40
  def resource_attributes=(attrib={})
60
41
  raise "Cant build resource without resource_type" if resource_type.empty?
@@ -63,13 +44,6 @@ class Sitemap < ActiveRecord::Base
63
44
  resource.save
64
45
  end
65
46
 
66
- def create_resource
67
- if self.resource_type && !self.resource_id
68
- self.resource = resource_type.constantize.new
69
- self.save
70
- end
71
- end
72
-
73
47
  def url
74
48
  if self == Sitemap.main_menu
75
49
  '/'
@@ -80,6 +54,21 @@ class Sitemap < ActiveRecord::Base
80
54
  end
81
55
  end
82
56
 
57
+ # Callbacks
58
+ def reload_root
59
+ Sitemap.instance_variable_set('@_root', nil)
60
+ end
61
+
62
+ def on_before_destroy
63
+ resource.destroy if resource && resource.sitemaps.size==1
64
+ end
65
+
66
+ def create_resource
67
+ if self.resource_type && !self.resource_id
68
+ self.resource = resource_type.constantize.new
69
+ self.save
70
+ end
71
+ end
83
72
 
84
73
  #########################################################################
85
74
  #
@@ -87,8 +76,9 @@ class Sitemap < ActiveRecord::Base
87
76
  #
88
77
  #########################################################################
89
78
 
90
- def self.root
91
- @_root ||= Sitemap.find_by_menu_text_and_parent_id('root', nil)
79
+ def self.from_request_params(params)
80
+ puts params.slice(:level1, :level2, :level3, :level4).values.inspect + "\n"*30
81
+ find_by_path params.slice(:level1, :level2, :level3, :level4).values
92
82
  end
93
83
 
94
84
  def self.lost_and_found
@@ -99,26 +89,38 @@ class Sitemap < ActiveRecord::Base
99
89
  root.children.select{|t| t.menu_text=='Main Menu'}[0]
100
90
  end
101
91
 
92
+ def self.root
93
+ @_root ||= Sitemap.find_by_menu_text_and_parent_id('root', nil)
94
+ end
95
+
96
+ def self.new_main_menu_page(name)
97
+ Sitemap.create( :parent=>self.main_menu,
98
+ :menu_text=>name,
99
+ :resource=>Page.create(:title=>name),
100
+ :position=>Sitemap.main_menu.children.count)
101
+ end
102
+
102
103
  def self.settings
103
104
  root.children.select{|t| t.menu_text=='Settings'}[0]
104
105
  end
105
106
 
107
+ #########################################################################
108
+ #
109
+ # Private Methods
110
+ #
111
+ #########################################################################
106
112
  def self.find_by_path(*path_args)
113
+ path_args.flatten!
107
114
  path = path_args.reverse
108
115
  path.delete(nil)
109
116
  obj = Sitemap.main_menu
110
117
  while (path_piece=path.pop)
111
118
  obj = obj.children.select{|t| t.menu_text.downcase==path_piece.downcase.gsub(/_/, ' ')}[0]
112
- raise "Path error '#{path_piece}' in '#{path_args.join('/')}'" unless obj
119
+ break unless obj
113
120
  end
114
121
  return obj
115
122
  end
116
123
 
117
- #########################################################################
118
- #
119
- # Private Methods
120
- #
121
- #########################################################################
122
124
 
123
125
  private
124
126
  def build_resource(params={})
@@ -137,14 +139,6 @@ class Sitemap < ActiveRecord::Base
137
139
  end
138
140
  end
139
141
 
140
- def new_model
141
- resource_class.new(:sitemaps=>[self]) if resource_class
142
- end
143
-
144
- def resource_class
145
- resource_type.camelize.constantize unless resource_type.empty?
146
- end
147
-
148
142
  def icon_name
149
143
  case resource_type
150
144
  when "Page"
@@ -156,6 +150,14 @@ class Sitemap < ActiveRecord::Base
156
150
  end
157
151
  end
158
152
 
153
+ def new_model
154
+ resource_class.new(:sitemaps=>[self]) if resource_class
155
+ end
156
+
157
+ def resource_class
158
+ resource_type.camelize.constantize unless resource_type.empty?
159
+ end
160
+
159
161
  def treeview_state
160
162
  if resource.is_a?(Menu)
161
163
  "open"
data/app/models/user.rb CHANGED
@@ -6,9 +6,6 @@ class User < ActiveRecord::Base
6
6
  has_many :access_control_entries, :dependent=>:destroy
7
7
  before_create :create_profile
8
8
 
9
- form_attributes( {"Edit your profile" => :profile_attributes},
10
- {"Change your password" => [:old_password, :new_password, {"Re-type password"=>:password_confirmation}]})
11
-
12
9
  accepts_nested_attributes_for :profile
13
10
 
14
11
  def initialize(*args)
@@ -58,18 +55,17 @@ class User < ActiveRecord::Base
58
55
  save
59
56
  end
60
57
  devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :token_authenticatable, :lockable, :timeoutable
61
-
62
58
  end
63
59
 
64
60
  class FullyValidatedUser < User
65
61
  def class
66
62
  User
67
63
  end
64
+ _validators[:password].delete_if{|t| t.is_a? ActiveModel::Validations::PresenceValidator}
68
65
  attr_accessor :old_password
69
66
  validates :email, :presence => true, :email => true
70
- validates :old_password, :presence=>true , :password=>true
67
+ validates :old_password, :presence=>true, :password=>true
71
68
  validates :password, :length=>{:minimum=>6}
72
69
  validates :password_confirmation, :equal_to=>{:other=>:password}
73
- validates :phone, :phone=>true
74
70
  end
75
71
 
@@ -0,0 +1,38 @@
1
+ %h1 Change Password
2
+
3
+ .form
4
+ = form_for resource do |f|
5
+ -if resource.errors.any?
6
+ #errorExplanation
7
+ %h2= "#{pluralize(resource.errors.count, "error")} prohibited this change:"
8
+ %ul
9
+ - resource.errors.full_messages.each do |msg|
10
+ %li= msg
11
+ .field
12
+ .fieldName= label_tag "Please enter your old password for verification."
13
+ .fieldValue= f.password_field :old_password, :id=>"old_password"
14
+ .field
15
+ .fieldName= label_tag "New Password:"
16
+ .fieldValue= f.password_field :password, :id=>"password"
17
+ .field
18
+ .fieldName= label_tag "Confirm Password:"
19
+ .fieldalue= f.password_field :password_confirmation
20
+ .submit= f.submit "Change Password"
21
+
22
+ :css
23
+ .extra_form_data {
24
+ display: none;
25
+ }
26
+
27
+ = content_for :head do
28
+ = javascript_include_tag %w(jquery.validate jquery-validate/additional-methods.js)
29
+
30
+
31
+ :javascript
32
+ var checkingPassword = true;
33
+ $(function(){
34
+
35
+ $('form').validate({onkeyup: function(element) {}});
36
+ $('#old_password').rules("add", {verify_user : true, alphanumeric: true})
37
+ });
38
+
@@ -1,4 +1,4 @@
1
- %h1 Change Your Password
1
+ %h1 Update your personal info:
2
2
 
3
3
  .form
4
4
  = form_for resource do |f|
@@ -10,7 +10,6 @@
10
10
  %li= msg
11
11
 
12
12
  .fieldGroup
13
- .fieldGroupTitle Edit your personal info
14
13
  = f.fields_for :profile do |pf|
15
14
  .field
16
15
  .fieldName= pf.label :first_name
@@ -30,18 +29,10 @@
30
29
  .field
31
30
  .fieldName= pf.label :position
32
31
  .fieldValue= pf.text_field :position
33
- .fieldGroup
34
- .fieldGroupTitle Change your password
35
32
  .field
36
- .fieldName= label_tag "Old Password:"
33
+ .fieldName= label_tag "Please enter your password for verification:"
37
34
  .fieldValue= f.password_field :old_password, :id=>"old_password"
38
- .field
39
- .fieldName= label_tag "New Password:"
40
- .fieldValue= f.password_field :password, :id=>"password"
41
- .field
42
- .fieldName= label_tag "Confirm Password:"
43
- .fieldalue= f.password_field :password_confirmation
44
- .submit= f.submit "Change Password"
35
+ .submit= f.submit "Update Account"
45
36
 
46
37
  :css
47
38
  .extra_form_data {
@@ -49,7 +40,7 @@
49
40
  }
50
41
 
51
42
  = content_for :head do
52
- = javascript_include_tag %w(jquery.validate jquery-validate/extra-methods.js)
43
+ = javascript_include_tag %w(jquery.validate jquery-validate/additional-methods.js)
53
44
 
54
45
 
55
46
  :javascript
data/lib/wheels/routes.rb CHANGED
@@ -50,7 +50,10 @@ module ActionDispatch::Routing
50
50
  match '/css' => 'app_configs#css'
51
51
  match '/admin' => "sitemaps#index"
52
52
  match "my_account" => "users#edit"
53
+ match "change_password" => "users#change_password"
53
54
  match "verify_password" => "users#verify", :format=>:json
55
+ match '/:level1(/:level2(/:level3(/:level4)))' =>'pages#show'
56
+
54
57
  end
55
58
  end
56
59
  end
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.1.15"
8
+ s.version = "0.1.16"
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-09-16}
12
+ s.date = %q{2010-09-17}
13
13
  s.description = %q{Call rails generate wheels.}
14
14
  s.email = %q{tgannon@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -216,6 +216,7 @@ Gem::Specification.new do |s|
216
216
  "app/views/sitemaps/index.json.erb",
217
217
  "app/views/sitemaps/new.html.haml",
218
218
  "app/views/sitemaps/new.js.erb",
219
+ "app/views/users/change_password.html.haml",
219
220
  "app/views/users/edit.html.haml",
220
221
  "app/views/users/index.html.haml",
221
222
  "config/amazon_s3.yml",
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 15
9
- version: 0.1.15
8
+ - 16
9
+ version: 0.1.16
10
10
  platform: ruby
11
11
  authors:
12
12
  - Tyler Gannon
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-16 00:00:00 -07:00
17
+ date: 2010-09-17 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -239,6 +239,7 @@ files:
239
239
  - app/views/sitemaps/index.json.erb
240
240
  - app/views/sitemaps/new.html.haml
241
241
  - app/views/sitemaps/new.js.erb
242
+ - app/views/users/change_password.html.haml
242
243
  - app/views/users/edit.html.haml
243
244
  - app/views/users/index.html.haml
244
245
  - config/amazon_s3.yml