pbw 0.0.10 → 0.1.0
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.
- 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
|