pbw 0.0.10 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Rakefile +1 -10
- data/app/controllers/pbw/{application_controller.rb → base_controller.rb} +1 -3
- data/app/controllers/pbw/base_models_controller.rb +13 -19
- data/app/controllers/pbw/item_containers_controller.rb +36 -0
- data/app/controllers/pbw/passwords_controller.rb +2 -2
- data/app/controllers/pbw/registrations_controller.rb +5 -3
- data/app/controllers/pbw/sessions_controller.rb +6 -3
- data/app/controllers/pbw/tokens_controller.rb +4 -0
- data/app/models/pbw/ability.rb +3 -3
- data/app/models/pbw/attached_process.rb +2 -0
- data/app/models/pbw/capability.rb +1 -1
- data/app/models/pbw/constraint.rb +1 -1
- data/app/models/pbw/trigger.rb +1 -1
- data/app/models/pbw/user.rb +3 -3
- data/config/initializers/mongoid_accessible_attributes.rb +14 -0
- data/config/routes.rb +15 -6
- data/lib/generators/pbw/area/area_generator.rb +4 -0
- data/lib/generators/pbw/install/install_generator.rb +1 -1
- data/lib/generators/pbw/item/item_generator.rb +4 -0
- data/lib/generators/pbw/resource_helpers.rb +4 -0
- data/lib/generators/pbw/rules/command/command_generator.rb +10 -0
- data/lib/generators/pbw/scaffold_generator.rb +15 -12
- data/lib/generators/pbw/templates/index.erb +1 -0
- data/lib/generators/pbw/templates/model.coffee +5 -5
- data/lib/generators/pbw/templates/pbw.coffee +18 -9
- data/lib/generators/pbw/templates/router.coffee +9 -0
- data/lib/generators/pbw/templates/templates/edit.jst +19 -4
- data/lib/generators/pbw/templates/templates/home.jst +2 -1
- data/lib/generators/pbw/templates/templates/index.jst +21 -10
- data/lib/generators/pbw/templates/templates/model.jst +15 -2
- data/lib/generators/pbw/templates/templates/new.jst +20 -4
- data/lib/generators/pbw/templates/templates/show.jst +12 -3
- data/lib/generators/pbw/templates/user_recovery.coffee +0 -1
- data/lib/generators/pbw/templates/user_registration.coffee +0 -1
- data/lib/generators/pbw/templates/user_session.coffee +0 -1
- data/lib/generators/pbw/templates/views/edit_view.coffee +19 -8
- data/lib/generators/pbw/templates/views/index_view.coffee +10 -2
- data/lib/generators/pbw/templates/views/login_view.coffee +20 -8
- data/lib/generators/pbw/templates/views/new_view.coffee +13 -5
- data/lib/generators/pbw/templates/views/recovery_view.coffee +8 -3
- data/lib/generators/pbw/templates/views/show_view.coffee +11 -1
- data/lib/generators/pbw/templates/views/signup_view.coffee +19 -5
- data/lib/generators/pbw/token/token_generator.rb +4 -0
- data/lib/pbw/engine.rb +1 -0
- data/lib/pbw/version.rb +1 -1
- data/vendor/assets/javascripts/Backbone.CollectionBinder.js +281 -0
- data/vendor/assets/javascripts/Backbone.ModelBinder.js +576 -0
- metadata +6 -6
- data/app/controllers/pbw/item_conversions_controller.rb +0 -7
- data/vendor/assets/javascripts/backbone_datalink.js +0 -21
- data/vendor/assets/javascripts/backbone_rails_sync.js +0 -81
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NDBhYjIwMmM3NWQ0ODM0ZTY2OGFhZGU5YmQ4M2U3N2FmZjY3YmZkZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OTk0NzNmYTE2NTY4MTE5YWVmNTUwMjcxY2I1ODJhNWE1ZWQ5NTM1OA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NmZlMDAxMTdhMmY2YjhjZmYyYjgxMWMzNDY5NzkzMzZiOWI3NGU5MTY0NTE0
|
10
|
+
Y2RiOWFhZWIyNjA1MThhN2EwMGE1N2ZiZDkyYjZkZDU2ZDI5ZTU2Y2QwMDRl
|
11
|
+
NmI1MzliZDA4YWMxNWFhMDc1NDU5MjExNTY2NDE2ZTY0ZmM0ODI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
Y2IxMmU1YmI4ZWQxOTY3YjBkNGI2NGE5NjA4MmZhZTg4NjIyNTM2NzJkN2I4
|
14
|
+
ODhjNGEzOWVlMmZjOGFhNDZkZWM2NTc2MmIwMWU2MWFlZDczMjBhYjlkMjA1
|
15
|
+
NzEyMDg1OTYwY2JjMDIxMjYxOTQ4MGQzZTM3ZTJlMWNjMGY0Zjc=
|
data/Rakefile
CHANGED
@@ -19,9 +19,7 @@ namespace :backbone do
|
|
19
19
|
task :download_latest do
|
20
20
|
files = {
|
21
21
|
'underscore.js'=>'http://underscorejs.org/underscore.js',
|
22
|
-
'backbone.js' => 'http://backbonejs.org/backbone.js'
|
23
|
-
'backbone_datalink.js' => 'https://raw.github.com/codebrew/backbone-rails/master/vendor/assets/javascripts/backbone_datalink.js',
|
24
|
-
'backbone_rails_sync.js' => 'https://raw.github.com/codebrew/backbone-rails/master/vendor/assets/javascripts/backbone_rails_sync.js'
|
22
|
+
'backbone.js' => 'http://backbonejs.org/backbone.js'
|
25
23
|
}
|
26
24
|
|
27
25
|
vendor_dir = "vendor/assets/javascripts"
|
@@ -36,13 +34,6 @@ namespace :backbone do
|
|
36
34
|
end
|
37
35
|
end
|
38
36
|
|
39
|
-
namespace :compass do
|
40
|
-
desc "Compile scss in public with compass"
|
41
|
-
task :compile do
|
42
|
-
system "cd public && compass compile"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
37
|
|
47
38
|
Bundler::GemHelper.install_tasks
|
48
39
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Pbw
|
2
|
-
class
|
2
|
+
class BaseController < ActionController::Base
|
3
3
|
respond_to :json
|
4
4
|
|
5
5
|
rescue_from ::CanCan::AccessDenied do |exception|
|
@@ -10,8 +10,6 @@ module Pbw
|
|
10
10
|
render json: {:error => exception.message}, status: 404
|
11
11
|
end
|
12
12
|
|
13
|
-
protected
|
14
|
-
|
15
13
|
def current_ability
|
16
14
|
@current_ability ||= Ability.new(current_user)
|
17
15
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Pbw
|
2
|
-
class BaseModelsController <
|
2
|
+
class BaseModelsController < BaseController
|
3
3
|
attr_accessor :model_class
|
4
4
|
|
5
5
|
before_filter :authenticate_user!
|
@@ -23,21 +23,17 @@ module Pbw
|
|
23
23
|
|
24
24
|
def index
|
25
25
|
session[:referrer] = request.url
|
26
|
-
|
26
|
+
if @models && !@models.empty?
|
27
|
+
render json: @models.to_json
|
28
|
+
else
|
29
|
+
render json: '', status: :unprocessable_entity
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
def show
|
30
34
|
render json: @model.to_json
|
31
35
|
end
|
32
36
|
|
33
|
-
def edit
|
34
|
-
render json: @model.to_json
|
35
|
-
end
|
36
|
-
|
37
|
-
def new
|
38
|
-
render json: @model.to_json
|
39
|
-
end
|
40
|
-
|
41
37
|
def create
|
42
38
|
if @model.save
|
43
39
|
render json: @model.to_json
|
@@ -47,7 +43,7 @@ module Pbw
|
|
47
43
|
end
|
48
44
|
|
49
45
|
def update
|
50
|
-
if @model.update_attributes(params
|
46
|
+
if @model.update_attributes(params)
|
51
47
|
render json: @model.to_json
|
52
48
|
else
|
53
49
|
render json: @model.errors.full_messages.to_json, status: :unprocessable_entity
|
@@ -73,33 +69,31 @@ module Pbw
|
|
73
69
|
self.model_class
|
74
70
|
end
|
75
71
|
|
76
|
-
def model_param
|
77
|
-
model_class.name.underscore.downcase.to_sym
|
78
|
-
end
|
79
|
-
|
80
72
|
def model_id
|
81
73
|
params[:id]
|
82
74
|
end
|
83
75
|
|
84
76
|
def index_models
|
85
|
-
authorize! :manage,
|
77
|
+
authorize! :manage, real_model_class
|
86
78
|
@models = model_class.desc(:created_at)
|
87
79
|
end
|
88
80
|
|
89
81
|
def model_for_create
|
90
82
|
authorize! :create, real_model_class
|
91
|
-
@model = real_model_class.new(params
|
83
|
+
@model = real_model_class.new(params)
|
84
|
+
@model.accessible = :all
|
92
85
|
update_model_before_create(@model)
|
93
86
|
end
|
94
87
|
|
95
88
|
def model_for_read
|
96
|
-
@model =
|
89
|
+
@model = real_model_class.find(model_id)
|
97
90
|
authorize! :read, @model
|
98
91
|
end
|
99
92
|
|
100
93
|
def model_for_update
|
101
|
-
@model =
|
94
|
+
@model = real_model_class.find(model_id)
|
102
95
|
authorize! :update, @model
|
96
|
+
@model.accessible = :all
|
103
97
|
update_model_before_update(@model)
|
104
98
|
end
|
105
99
|
end
|
@@ -3,5 +3,41 @@ module Pbw
|
|
3
3
|
def set_model_class
|
4
4
|
self.model_class = ItemContainer
|
5
5
|
end
|
6
|
+
|
7
|
+
def real_model_class
|
8
|
+
self.model_class
|
9
|
+
end
|
10
|
+
|
11
|
+
def token_or_area_or_user
|
12
|
+
return @token_or_area_or_user if defined?(@token_or_area_or_user) && @token_or_area_or_user
|
13
|
+
begin
|
14
|
+
unless params[:_type].blank?
|
15
|
+
klass = Kernel.get_const(params[:_type])
|
16
|
+
return @token_or_area_or_user = klass.find(params[:container_id])
|
17
|
+
else
|
18
|
+
return @token_or_area_or_user = current_user
|
19
|
+
end
|
20
|
+
rescue
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def index_models
|
26
|
+
authorize! :read, token_or_area_or_user
|
27
|
+
@models = token_or_area_or_user.item_containers
|
28
|
+
end
|
29
|
+
|
30
|
+
def model_for_create
|
31
|
+
authorize! :update, token_or_area_or_user
|
32
|
+
@model = model_class.new(params)
|
33
|
+
if token_or_area_or_user.ancestors.include?(Area)
|
34
|
+
@model.area = token_or_area_or_user
|
35
|
+
elsif token_or_area_or_user.ancestors.include?(Token)
|
36
|
+
@model.token = token_or_area_or_user
|
37
|
+
elsif token_or_area_or_user.ancestors.include?(User)
|
38
|
+
@model.user = token_or_area_or_user
|
39
|
+
end
|
40
|
+
update_model_before_create(@model)
|
41
|
+
end
|
6
42
|
end
|
7
43
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Pbw
|
2
2
|
class PasswordsController < Devise::PasswordsController
|
3
3
|
respond_to :json
|
4
|
-
|
4
|
+
|
5
5
|
def create
|
6
|
-
self.resource = resource_class.where(
|
6
|
+
self.resource = resource_class.where(params).first
|
7
7
|
if resource && resource.reset_password!
|
8
8
|
head :no_content
|
9
9
|
else
|
@@ -1,12 +1,14 @@
|
|
1
1
|
module Pbw
|
2
2
|
class RegistrationsController < Devise::RegistrationsController
|
3
3
|
respond_to :json
|
4
|
-
|
4
|
+
|
5
5
|
def create
|
6
|
-
self.resource = User.new(params
|
7
|
-
logger.error "Password confirmed? #{params[:user][:password] == params[:user][:password_confirmation]}"
|
6
|
+
self.resource = User.new(params)
|
8
7
|
if resource.save && resource.send_registration_email
|
8
|
+
unwrapped = params
|
9
|
+
params[:user] = unwrapped
|
9
10
|
Pbw.user_lifecycle_class.after_signup(resource)
|
11
|
+
sign_in(:user, resource)
|
10
12
|
render json: resource
|
11
13
|
else
|
12
14
|
render json: resource.errors.full_messages.to_json, status: :unprocessable_entity
|
@@ -1,16 +1,19 @@
|
|
1
1
|
module Pbw
|
2
2
|
class SessionsController < Devise::SessionsController
|
3
3
|
respond_to :json
|
4
|
-
|
4
|
+
|
5
5
|
def create
|
6
|
+
unwrapped = params
|
7
|
+
params[:user] = unwrapped
|
6
8
|
self.resource = warden.authenticate!(auth_options)
|
7
9
|
sign_in(resource_name, resource)
|
8
10
|
Pbw.user_lifecycle_class.after_login(current_user)
|
9
11
|
render json: current_user.to_json, status: :ok
|
10
12
|
end
|
11
13
|
|
12
|
-
def
|
13
|
-
|
14
|
+
def destroy
|
15
|
+
signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
|
16
|
+
render json: '', status: :ok
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
data/app/models/pbw/ability.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
class Ability
|
1
|
+
module Pbw
|
2
|
+
class Ability
|
4
3
|
include CanCan::Ability
|
5
4
|
|
6
5
|
MANAGED_CLASSES = [Area, Capability, Command, Constraint, Item, ItemContainer, ItemConversion, Process, Rule, Token, Trigger, User]
|
@@ -34,4 +33,5 @@ class Ability
|
|
34
33
|
return klass if subject_class.ancestors.include?(klass)
|
35
34
|
end
|
36
35
|
end
|
36
|
+
end
|
37
37
|
end
|
data/app/models/pbw/trigger.rb
CHANGED
data/app/models/pbw/user.rb
CHANGED
@@ -54,7 +54,7 @@ module Pbw
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def admin?
|
57
|
-
self.role == "admin"
|
57
|
+
self.role == "admin" || superadmin?
|
58
58
|
end
|
59
59
|
|
60
60
|
def make_admin!
|
@@ -63,7 +63,7 @@ module Pbw
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def moderator?
|
66
|
-
self.role == "moderator"
|
66
|
+
self.role == "moderator" || admin?
|
67
67
|
end
|
68
68
|
|
69
69
|
def make_moderator!
|
@@ -72,7 +72,7 @@ module Pbw
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def player?
|
75
|
-
self.role == "player"
|
75
|
+
self.role == "player" || moderator?
|
76
76
|
end
|
77
77
|
|
78
78
|
def send_registration_email
|
data/config/routes.rb
CHANGED
@@ -8,12 +8,21 @@ Pbw::Engine.routes.draw do
|
|
8
8
|
get "#{controller}/:_type" => "#{controller}\#index"
|
9
9
|
get "#{controller}/:_type/:id" => "#{controller}\#show"
|
10
10
|
post "#{controller}/:_type" => "#{controller}\#create"
|
11
|
-
|
12
|
-
get "#{controller}/:_type/:id/edit" => "#{controller}\#edit"
|
13
|
-
delete "#{controller}/:_type/:id" => "#{controller}\#delete"
|
11
|
+
delete "#{controller}/:_type/:id" => "#{controller}\#destroy"
|
14
12
|
put "#{controller}/:_type/:id" => "#{controller}\#update"
|
15
13
|
end
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
|
15
|
+
%W{areas tokens}.each do |controller|
|
16
|
+
get "#{controller}/:_type/:container_id/items" => "item_containers\#index"
|
17
|
+
get "#{controller}/:_type/:container_id/items/:id" => "item_containers\#show"
|
18
|
+
post "#{controller}/:_type/:container_id/items" => "item_containers\#create"
|
19
|
+
delete "#{controller}/:_type/:container_id/items/:id" => "item_containers\#destroy"
|
20
|
+
put "#{controller}/:_type/:container_id/items/:id" => "item_containers\#update"
|
21
|
+
end
|
22
|
+
|
23
|
+
get "users/items" => "item_containers\#index"
|
24
|
+
get "users/items/:id" => "item_containers\#show"
|
25
|
+
post "users/items" => "item_containers\#create"
|
26
|
+
put "users/items/:id" => "item_containers\#update"
|
27
|
+
delete "users/items/:id" => "item_containers\#destroy"
|
19
28
|
end
|
@@ -12,7 +12,7 @@ module Pbw
|
|
12
12
|
|
13
13
|
def inject_backbone
|
14
14
|
inject_into_file "app/assets/javascripts/application.js", :before => "//= require_tree" do
|
15
|
-
"//= require underscore\n//= require backbone\n//= require
|
15
|
+
"//= require underscore\n//= require backbone\n//= require Backbone.ModelBinder\n//= require Backbone.CollectionBinder\n//= require #{application_name.underscore}\n"
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -24,4 +24,14 @@ class Pbw::Rules::CommandGenerator < Pbw::Generators::ScaffoldGenerator
|
|
24
24
|
def model_namespace
|
25
25
|
"Commands"
|
26
26
|
end
|
27
|
+
|
28
|
+
def default_attributes
|
29
|
+
super
|
30
|
+
@default_attributes << {name: 'token', default_value: ''}
|
31
|
+
@default_attributes
|
32
|
+
end
|
33
|
+
|
34
|
+
def param_root
|
35
|
+
'command'
|
36
|
+
end
|
27
37
|
end
|
@@ -13,15 +13,15 @@ module Pbw
|
|
13
13
|
end
|
14
14
|
if available_views.include?('new')
|
15
15
|
routes << "#{route_entry("#{plural_model_name}/new","new#{model_namespace}#{class_name}")}"
|
16
|
-
route_methods << "#{route_method("new#{model_namespace}#{
|
16
|
+
route_methods << "#{route_method("new#{model_namespace}#{class_name.camelize}", "New")}"
|
17
17
|
end
|
18
18
|
if available_views.include?('edit')
|
19
19
|
routes << "#{route_entry("#{plural_model_name}/:id/edit","edit#{model_namespace}#{class_name}")}"
|
20
|
-
route_methods << "#{route_method("edit#{model_namespace}#{
|
20
|
+
route_methods << "#{route_method("edit#{model_namespace}#{class_name.camelize}", "Edit")}"
|
21
21
|
end
|
22
22
|
if available_views.include?('show')
|
23
23
|
routes << "#{route_entry("#{plural_model_name}/:id","show#{model_namespace}#{class_name}")}"
|
24
|
-
route_methods << "#{route_method("show#{model_namespace}#{
|
24
|
+
route_methods << "#{route_method("show#{model_namespace}#{class_name.camelize}", "Show")}"
|
25
25
|
end
|
26
26
|
if available_views.include?('index') # needs to be at the end
|
27
27
|
routes << "#{route_entry("#{plural_model_name}/.*","index#{model_namespace}#{plural_name.camelize}")}"
|
@@ -47,6 +47,14 @@ module Pbw
|
|
47
47
|
end
|
48
48
|
|
49
49
|
protected
|
50
|
+
def param_root
|
51
|
+
class_name.underscore
|
52
|
+
end
|
53
|
+
|
54
|
+
def default_attributes
|
55
|
+
@default_attributes = [{name: 'name', default_value: ''}, {name: '_type', default_value: "#{class_namespace}"}]
|
56
|
+
end
|
57
|
+
|
50
58
|
def available_views
|
51
59
|
%w(index show new edit)
|
52
60
|
end
|
@@ -70,19 +78,14 @@ module Pbw
|
|
70
78
|
when 'Index'
|
71
79
|
"@view = new #{view_namespace}.#{view}View(#{plural_model_name}: @#{plural_model_name})"
|
72
80
|
when 'New'
|
73
|
-
"#{singular_model_name} = new
|
81
|
+
"#{singular_model_name} = new #{js_model_namespace}\n @view = new #{view_namespace}.#{view}View(model: #{singular_model_name})"
|
74
82
|
when 'Edit', 'Show'
|
75
|
-
"#{singular_model_name} = new
|
83
|
+
"#{singular_model_name} = new #{js_model_namespace}({_id: id})\n @view = new #{view_namespace}.#{view}View(model: #{singular_model_name})"
|
76
84
|
end
|
77
85
|
"
|
78
86
|
#{method_name}: #{method_params}->
|
79
|
-
|
80
|
-
|
81
|
-
#{view_js}
|
82
|
-
$(\"#app\").html(@view.render().el)
|
83
|
-
error: (model, response) ->
|
84
|
-
window.console && console.log response
|
85
|
-
"
|
87
|
+
#{view_js}
|
88
|
+
$(\"#app\").html(@view.render().el)"
|
86
89
|
end
|
87
90
|
end
|
88
91
|
end
|