pbw 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +8 -8
  2. data/app/controllers/pbw/application_controller.rb +3 -16
  3. data/app/controllers/pbw/base_models_controller.rb +10 -32
  4. data/app/controllers/pbw/passwords_controller.rb +14 -0
  5. data/app/controllers/pbw/registrations_controller.rb +9 -6
  6. data/app/controllers/pbw/sessions_controller.rb +9 -4
  7. data/app/mailers/pbw/user_mailer.rb +16 -0
  8. data/app/models/pbw/area.rb +5 -5
  9. data/app/models/pbw/attached_process.rb +3 -3
  10. data/app/models/pbw/capability.rb +1 -1
  11. data/app/models/pbw/command.rb +2 -2
  12. data/app/models/pbw/constraint.rb +2 -2
  13. data/app/models/pbw/item.rb +2 -2
  14. data/app/models/pbw/item_container.rb +4 -4
  15. data/app/models/pbw/item_conversion.rb +1 -1
  16. data/app/models/pbw/process.rb +2 -2
  17. data/app/models/pbw/token.rb +7 -7
  18. data/app/models/pbw/trigger.rb +3 -3
  19. data/app/models/pbw/user.rb +30 -8
  20. data/config/initializers/devise.rb +1 -66
  21. data/config/locales/pbw.en.yml +7 -0
  22. data/config/routes.rb +2 -4
  23. data/lib/generators/pbw/install/install_generator.rb +22 -3
  24. data/lib/generators/pbw/model_generator.rb +6 -0
  25. data/lib/generators/pbw/resource_helpers.rb +16 -0
  26. data/lib/generators/pbw/rules/capability/capability_generator.rb +4 -2
  27. data/lib/generators/pbw/rules/constraint/constraint_generator.rb +4 -2
  28. data/lib/generators/pbw/rules/process/process_generator.rb +4 -2
  29. data/lib/generators/pbw/rules/trigger/trigger_generator.rb +4 -2
  30. data/lib/generators/pbw/scaffold_generator.rb +0 -12
  31. data/lib/generators/pbw/templates/app.coffee +5 -3
  32. data/lib/generators/pbw/templates/application.erb +24 -0
  33. data/lib/generators/pbw/templates/lifecycle.rb +1 -0
  34. data/lib/generators/pbw/templates/pbw.coffee +21 -0
  35. data/lib/generators/pbw/templates/router.coffee +15 -0
  36. data/lib/generators/pbw/templates/templates/home.jst +10 -1
  37. data/lib/generators/pbw/templates/templates/login.jst +25 -0
  38. data/lib/generators/pbw/templates/templates/recover_password.jst +17 -0
  39. data/lib/generators/pbw/templates/templates/signup.jst +29 -0
  40. data/lib/generators/pbw/templates/user_recovery.coffee +6 -0
  41. data/lib/generators/pbw/templates/user_registration.coffee +9 -0
  42. data/lib/generators/pbw/templates/user_session.coffee +8 -0
  43. data/lib/generators/pbw/templates/views/edit_view.coffee +15 -8
  44. data/lib/generators/pbw/templates/views/login_view.coffee +39 -0
  45. data/lib/generators/pbw/templates/views/new_view.coffee +5 -9
  46. data/lib/generators/pbw/templates/views/recovery_view.coffee +38 -0
  47. data/lib/generators/pbw/templates/views/signup_view.coffee +39 -0
  48. data/lib/pbw/engine.rb +5 -9
  49. data/lib/pbw/version.rb +1 -1
  50. data/lib/pbw.rb +15 -2
  51. data/vendor/assets/javascripts/backbone_datalink.js +21 -0
  52. metadata +16 -44
  53. data/app/controllers/pbw/capabilities_controller.rb +0 -7
  54. data/app/controllers/pbw/constraints_controller.rb +0 -7
  55. data/app/controllers/pbw/processes_controller.rb +0 -7
  56. data/app/controllers/pbw/triggers_controller.rb +0 -7
  57. data/public/Foundation-MIT-LICENSE.txt +0 -20
  58. data/public/config.rb +0 -26
  59. data/public/javascripts/foundation/foundation.alerts.js +0 -52
  60. data/public/javascripts/foundation/foundation.clearing.js +0 -516
  61. data/public/javascripts/foundation/foundation.cookie.js +0 -74
  62. data/public/javascripts/foundation/foundation.dropdown.js +0 -178
  63. data/public/javascripts/foundation/foundation.forms.js +0 -525
  64. data/public/javascripts/foundation/foundation.interchange.js +0 -271
  65. data/public/javascripts/foundation/foundation.joyride.js +0 -844
  66. data/public/javascripts/foundation/foundation.js +0 -447
  67. data/public/javascripts/foundation/foundation.magellan.js +0 -134
  68. data/public/javascripts/foundation/foundation.orbit.js +0 -390
  69. data/public/javascripts/foundation/foundation.placeholder.js +0 -179
  70. data/public/javascripts/foundation/foundation.reveal.js +0 -330
  71. data/public/javascripts/foundation/foundation.section.js +0 -422
  72. data/public/javascripts/foundation/foundation.tooltips.js +0 -208
  73. data/public/javascripts/foundation/foundation.topbar.js +0 -303
  74. data/public/javascripts/vendor/custom.modernizr.js +0 -4
  75. data/public/javascripts/vendor/jquery.js +0 -9807
  76. data/public/javascripts/vendor/zepto.js +0 -2000
  77. data/public/sass/_normalize.scss +0 -402
  78. data/public/sass/_settings.scss +0 -1271
  79. data/public/sass/app.scss +0 -48
  80. data/public/stylesheets/app.css +0 -6686
@@ -1,8 +1,10 @@
1
- require 'generators/pbw/scaffold_generator'
1
+ require 'generators/pbw/model_generator'
2
2
  require 'generators/pbw/rules/rules'
3
3
 
4
- class Pbw::Rules::ConstraintGenerator < Pbw::Generators::ScaffoldGenerator
4
+ class Pbw::Rules::ConstraintGenerator < Pbw::Generators::ModelGenerator
5
5
  source_root File.expand_path("../../../templates", __FILE__)
6
+ def create_backbone_model
7
+ end
6
8
  protected
7
9
  def base_model_class
8
10
  "Pbw::Constraint"
@@ -1,8 +1,10 @@
1
- require 'generators/pbw/scaffold_generator'
1
+ require 'generators/pbw/model_generator'
2
2
  require 'generators/pbw/rules/rules'
3
3
 
4
- class Pbw::Rules::ProcessGenerator < Pbw::Generators::ScaffoldGenerator
4
+ class Pbw::Rules::ProcessGenerator < Pbw::Generators::ModelGenerator
5
5
  source_root File.expand_path("../../../templates", __FILE__)
6
+ def create_backbone_model
7
+ end
6
8
  protected
7
9
  def base_model_class
8
10
  "Pbw::Process"
@@ -1,8 +1,10 @@
1
- require 'generators/pbw/scaffold_generator'
1
+ require 'generators/pbw/model_generator'
2
2
  require 'generators/pbw/rules/rules'
3
3
 
4
- class Pbw::Rules::TriggerGenerator < Pbw::Generators::ScaffoldGenerator
4
+ class Pbw::Rules::TriggerGenerator < Pbw::Generators::ModelGenerator
5
5
  source_root File.expand_path("../../../templates", __FILE__)
6
+ def create_backbone_model
7
+ end
6
8
  protected
7
9
  def base_model_class
8
10
  "Pbw::Trigger"
@@ -46,18 +46,6 @@ module Pbw
46
46
  template "templates/model.jst", File.join(backbone_path, "templates/#{model_namespace.downcase}", plural_name, "#{singular_name}.jst.ejs")
47
47
  end
48
48
 
49
- def create_resources
50
- generate "model", "#{model_namespace}::#{class_name} #{attributes.map{|attr| "#{attr.name}:#{attr.type}"}.join(' ')}"
51
- gsub_file "app/models/#{model_namespace.downcase}/#{file_name}.rb", "class #{model_namespace}::#{class_name}", "class #{model_namespace}::#{class_name} < #{base_model_class}"
52
- gsub_file "app/models/#{model_namespace.downcase}/#{file_name}.rb", "include Mongoid::Document", ""
53
- end
54
-
55
- def append_app_file
56
- inject_into_file "app/assets/javascripts/#{application_name.underscore}.js.coffee", :after => "Views: {}" do
57
- "\nwindow.#{js_app_name}.Models.#{model_namespace} = {}\nwindow.#{js_app_name}.Collections.#{model_namespace} = {}\nwindow.#{js_app_name}.Views.#{model_namespace} = {}\n"
58
- end
59
- end
60
-
61
49
  protected
62
50
  def available_views
63
51
  %w(index show new edit)
@@ -1,4 +1,5 @@
1
1
  #= require_self
2
+ #= require_tree ./helpers
2
3
  #= require_tree ./templates
3
4
  #= require_tree ./models
4
5
  #= require_tree ./views
@@ -7,7 +8,8 @@
7
8
  Backbone.Model.prototype.idAttribute = "_id";
8
9
 
9
10
  window.<%= js_app_name %> =
10
- Models: {}
11
- Collections: {}
11
+ User: null
12
+ Models: {Areas: {}, Items: {}, Commands: {}, Tokens: {}}
13
+ Collections: {Areas: {}, Items: {}, Commands: {}, Tokens: {}}
12
14
  Routers: {}
13
- Views: {}
15
+ Views: {Areas: {}, Items: {}, Commands: {}, Tokens: {}}
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <!--[if lt IE 7 ]> <html class="ie6" lang="en"> <![endif]-->
3
+ <!--[if IE 7 ]> <html class="ie7" lang="en"> <![endif]-->
4
+ <!--[if IE 8 ]> <html class="ie8" lang="en"> <![endif]-->
5
+ <!--[if (gte IE 9)|!(IE)]><!--> <html lang="en"> <!--<![endif]-->
6
+ <head>
7
+ <meta charset="utf-8" />
8
+ <!-- Uncomment to make IE8 render like IE7 -->
9
+ <!-- <meta http-equiv="X-UA-Compatible" content="IE=7" /> -->
10
+ <!-- Set the viewport width to device width for mobile -->
11
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
12
+ <title><%=application_name%></title>
13
+
14
+ <%%= stylesheet_link_tag "application", :media => "all" %>
15
+ <%%= csrf_meta_tags %>
16
+ </head>
17
+
18
+ <body>
19
+ <%%= javascript_include_tag "application" %>
20
+ <div id="app">
21
+ <%%= yield %>
22
+ </div>
23
+ </body>
24
+ </html>
@@ -3,6 +3,7 @@ module User
3
3
 
4
4
  def self.after_signup(user)
5
5
  # do anything that needs to happen immediately after a user signs up
6
+ user.make_superadmin! if Pbw::User.count == 1
6
7
  end
7
8
 
8
9
  def self.after_login(user)
@@ -0,0 +1,21 @@
1
+ # PBW Helper Methods
2
+
3
+ # Debugging to console
4
+ @debug = (message) ->
5
+ window.console && console.log message
6
+
7
+ # User session
8
+ @current_user = ->
9
+ window.<%= js_app_name %>.User
10
+
11
+ # Form error handling
12
+ @form_errors = (message, jqXHR) ->
13
+ debug message
14
+ debug jqXHR
15
+ $("#error").html('<h3>' + message + '</h3><ul>')
16
+ if jqXHR && jqXHR.responseText
17
+ _.each($.parseJSON(jqXHR.responseText), (value,key) ->
18
+ $("#error").append('<li>' + value + '</li>')
19
+ )
20
+ $("#error").append('</ul>')
21
+ $("#error").show()
@@ -4,8 +4,23 @@ class <%= router_name %> extends Backbone.Router
4
4
 
5
5
  routes:
6
6
  "" : "home"
7
+ "login" : "login"
8
+ "signup" : "signup"
9
+ "password_recovery" : "passwordRecovery"
7
10
 
8
11
 
9
12
  home: ->
10
13
  @view = new <%= "#{js_app_name}.Views.Home.IndexView" %>
14
+ $("#app").html(@view.render().el)
15
+
16
+ login: ->
17
+ @view = new <%= "#{js_app_name}.Views.Users.LoginView" %>
18
+ $("#app").html(@view.render().el)
19
+
20
+ signup: ->
21
+ @view = new <%= "#{js_app_name}.Views.Users.SignupView" %>
22
+ $("#app").html(@view.render().el)
23
+
24
+ passwordRecovery: ->
25
+ @view = new <%= "#{js_app_name}.Views.Users.RecoveryView" %>
11
26
  $("#app").html(@view.render().el)
@@ -1 +1,10 @@
1
- <!-- This is the home view of your app -->
1
+ <nav>
2
+ <ul>
3
+ <%% if(current_user()) { %>
4
+ <li><a href="/pbw/users/sign_out" data-method="delete">Sign out</a></li>
5
+ <%% } else { %>
6
+ <li><a href="#/signup">Sign up</a></li>
7
+ <li><a href="#/login">Login</a></li>
8
+ <%% } %>
9
+ </ul>
10
+ </nav>
@@ -0,0 +1,25 @@
1
+ <form id="new-user-session" name="user-session">
2
+ <div id="error"></div>
3
+ <input type="hidden" name="authenticity_token" value="<%%= $("meta[name='csrf-token']").attr("content") %>">
4
+ <fieldset>
5
+ <legend>Login</legend>
6
+ <div class="field">
7
+ <label for="name">Email:</label>
8
+ <input type="text" name="email" id="email" value="<%%= email %>" >
9
+ </div>
10
+ <div class="field">
11
+ <label for="name">Password:</label>
12
+ <input type="password" name="password" id="password">
13
+ </div>
14
+ <div class="field">
15
+ <label for="name">Remember me:</label>
16
+ <input type="checkbox" name="remember_me" id="remember_me">
17
+ </div>
18
+ <div class="actions">
19
+ <input type="submit" value="Login" />
20
+ </div>
21
+ </fieldset>
22
+ </form>
23
+
24
+ <a href="#/signup">Sign up</a><br/>
25
+ <a href="#/password_recovery">Forgot your password?</a>
@@ -0,0 +1,17 @@
1
+ <form id="new-user-password" name="user-password">
2
+ <div id="error"></div>
3
+ <input type="hidden" name="authenticity_token" value="<%%= $("meta[name='csrf-token']").attr("content") %>">
4
+ <fieldset>
5
+ <legend>Recover your password</legend>
6
+ <div class="field">
7
+ <label for="name">Email:</label>
8
+ <input type="text" name="email" id="email" value="<%%= email %>" >
9
+ </div>
10
+ <div class="actions">
11
+ <input type="submit" value="Send me reset password instructions" />
12
+ </div>
13
+ </fieldset>
14
+ </form>
15
+
16
+ <a href="#/signup">Sign up</a><br/>
17
+ <a href="#/login">Login</a>
@@ -0,0 +1,29 @@
1
+ <form id="new-user" name="user">
2
+ <div id="error"></div>
3
+ <input type="hidden" name="authenticity_token" value="<%%= $("meta[name='csrf-token']").attr("content") %>">
4
+ <fieldset>
5
+ <legend>Sign up</legend>
6
+ <div class="field">
7
+ <label for="name">Name:</label>
8
+ <input type="text" name="name" id="name" value="<%%= name %>" >
9
+ </div>
10
+ <div class="field">
11
+ <label for="name">Email:</label>
12
+ <input type="text" name="email" id="email" value="<%%= email %>" >
13
+ </div>
14
+ <div class="field">
15
+ <label for="name">Password:</label>
16
+ <input type="password" name="password" id="password">
17
+ </div>
18
+ <div class="field">
19
+ <label for="name">Confirm Password:</label>
20
+ <input type="password" name="password_confirmation" id="password_confirmation">
21
+ </div>
22
+ <div class="actions">
23
+ <input type="submit" value="Sign up" />
24
+ </div>
25
+ </fieldset>
26
+ </form>
27
+
28
+ <a href="#/login">Login</a><br/>
29
+ <a href="#/password_recovery">Forgot your password?</a>
@@ -0,0 +1,6 @@
1
+ class <%= js_user_model_namespace %>Recovery extends Backbone.Model
2
+ paramRoot: 'user'
3
+ url: '/pbw/users/password.json'
4
+
5
+ defaults:
6
+ email: null
@@ -0,0 +1,9 @@
1
+ class <%= js_user_model_namespace %>Registration extends Backbone.Model
2
+ paramRoot: 'user'
3
+ url: '/pbw/users.json'
4
+
5
+ defaults:
6
+ name: null
7
+ email: null
8
+ password: null
9
+ password_confirmation: null
@@ -0,0 +1,8 @@
1
+ class <%= js_user_model_namespace %>Session extends Backbone.Model
2
+ paramRoot: 'user'
3
+ url: '/pbw/users/sign_in.json'
4
+
5
+ defaults:
6
+ email: null
7
+ password: null
8
+ remember_me: null
@@ -6,21 +6,28 @@ class <%= view_namespace %>.EditView extends Backbone.View
6
6
  events:
7
7
  "submit #edit-<%= singular_name %>": "update"
8
8
 
9
+ constructor: (options) ->
10
+ super(options)
11
+ @model = options.model
12
+
13
+ @model.bind("change:errors", () =>
14
+ this.render()
15
+ )
16
+
17
+ @model.bind("error", (model, xhr, options) =>
18
+ form_errors 'There was a problem saving <%= singular_name %>', xhr
19
+ )
20
+
9
21
  update: (e) ->
10
22
  e.preventDefault()
11
23
  e.stopPropagation()
12
24
 
13
25
  @model.save(null,
14
- success: (<%= singular_name %>) =>
26
+ success: (<%= singular_name %>, response, options) =>
15
27
  @model = <%= singular_name %>
16
28
  window.location.hash = "/<%=model_namespace.downcase%>/#{@model.id}"
17
- error: (model, jqXHR) =>
18
- $("#error").html('<h2>There was a problem saving the <%= singular_name %></h2><ul>')
19
- _.each($.parseJSON(jqXHR.responseText), (value,key) ->
20
- $("#error").append('<li>' + value + '</li>')
21
- )
22
- $("#error").append('</ul>')
23
- $("#error").show()
29
+ error: (model, xhr, options) =>
30
+ form_errors 'There was a problem saving <%= singular_name %>', xhr
24
31
  )
25
32
 
26
33
  render: ->
@@ -0,0 +1,39 @@
1
+ <%= user_view_namespace %> ||= {}
2
+
3
+ class <%= user_view_namespace %>.LoginView extends Backbone.View
4
+ template: JST["<%= user_jst 'login' %>"]
5
+
6
+ events:
7
+ "submit #new-user-session": "save"
8
+
9
+ constructor: (options) ->
10
+ super(options)
11
+ @model = new <%= js_user_model_namespace %>Session
12
+
13
+ @model.bind("change:errors", () =>
14
+ this.render()
15
+ )
16
+
17
+ @model.bind("error", (model, xhr, options) =>
18
+ form_errors 'There was a problem logging in', xhr
19
+ )
20
+
21
+ save: (e) ->
22
+ e.preventDefault()
23
+ e.stopPropagation()
24
+
25
+ @model.unset("errors")
26
+
27
+ @model.save(@model.attributes,
28
+ success: (user, response, options) =>
29
+ @model = user
30
+ window.<%= js_app_name %>.User = @model
31
+ window.location.hash = "/"
32
+ )
33
+
34
+ render: ->
35
+ @$el.html(@template(@model.toJSON() ))
36
+
37
+ this.$("form").backboneLink(@model)
38
+
39
+ return this
@@ -14,6 +14,10 @@ class <%= view_namespace %>.NewView extends Backbone.View
14
14
  this.render()
15
15
  )
16
16
 
17
+ @model.bind("error", (model, xhr, options) =>
18
+ form_errors 'There was a problem saving <%= singular_name %>', xhr
19
+ )
20
+
17
21
  save: (e) ->
18
22
  e.preventDefault()
19
23
  e.stopPropagation()
@@ -21,17 +25,9 @@ class <%= view_namespace %>.NewView extends Backbone.View
21
25
  @model.unset("errors")
22
26
 
23
27
  @collection.create(@model.toJSON(),
24
- success: (<%= singular_name %>) =>
28
+ success: (<%= singular_name %>, response, options) =>
25
29
  @model = <%= singular_name %>
26
30
  window.location.hash = "/<%=model_namespace.downcase%>/#{@model.id}"
27
-
28
- error: (model, jqXHR) =>
29
- $("#error").html('<h2>There was a problem saving the <%= singular_name %></h2><ul>')
30
- _.each($.parseJSON(jqXHR.responseText), (value,key) ->
31
- $("#error").append('<li>' + value + '</li>')
32
- )
33
- $("#error").append('</ul>')
34
- $("#error").show()
35
31
  )
36
32
 
37
33
  render: ->
@@ -0,0 +1,38 @@
1
+ <%= user_view_namespace %> ||= {}
2
+
3
+ class <%= user_view_namespace %>.RecoveryView extends Backbone.View
4
+ template: JST["<%= user_jst 'recover_password' %>"]
5
+
6
+ events:
7
+ "submit #new-user-password": "save"
8
+
9
+ constructor: (options) ->
10
+ super(options)
11
+ @model = new <%= js_user_model_namespace %>Recovery
12
+
13
+ @model.bind("change:errors", () =>
14
+ this.render()
15
+ )
16
+
17
+ @model.bind("error", (model, xhr, options) =>
18
+ form_errors 'There was a problem recovering your password', xhr
19
+ )
20
+
21
+ save: (e) ->
22
+ e.preventDefault()
23
+ e.stopPropagation()
24
+
25
+ @model.unset("errors")
26
+
27
+ @model.save(@model.attributes,
28
+ success: (user_recovery, response, options) =>
29
+ @model = user_recovery
30
+ window.location.hash = "/"
31
+ )
32
+
33
+ render: ->
34
+ @$el.html(@template(@model.toJSON() ))
35
+
36
+ this.$("form").backboneLink(@model)
37
+
38
+ return this
@@ -0,0 +1,39 @@
1
+ <%= user_view_namespace %> ||= {}
2
+
3
+ class <%= user_view_namespace %>.SignupView extends Backbone.View
4
+ template: JST["<%= user_jst 'signup' %>"]
5
+
6
+ events:
7
+ "submit #new-user": "save"
8
+
9
+ constructor: (options) ->
10
+ super(options)
11
+ @model = new <%= js_user_model_namespace %>Registration
12
+
13
+ @model.bind("change:errors", () =>
14
+ this.render()
15
+ )
16
+
17
+ @model.bind("error", (model, xhr, options) =>
18
+ form_errors 'There was a problem signing up', xhr
19
+ )
20
+
21
+ save: (e) ->
22
+ e.preventDefault()
23
+ e.stopPropagation()
24
+
25
+ @model.unset("errors")
26
+
27
+ @model.save(@model.attributes,
28
+ success: (user, response, options) =>
29
+ @model = user
30
+ window.<%= js_app_name %>.User = @model
31
+ window.location.hash = "/"
32
+ )
33
+
34
+ render: ->
35
+ @$el.html(@template(@model.toJSON() ))
36
+
37
+ this.$("form").backboneLink(@model)
38
+
39
+ return this
data/lib/pbw/engine.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'pbw/version'
2
+ require 'mongoid'
3
+ require 'devise'
2
4
 
3
5
  module Pbw
4
6
  class Engine < ::Rails::Engine
@@ -20,6 +22,9 @@ module Pbw
20
22
  g.javascript_engine :coffee
21
23
  end
22
24
 
25
+ config.email_from_address = 'superadmin@localhost'
26
+ config.user_lifecycle_class = nil
27
+
23
28
  initializer "check config" do |app|
24
29
  config.mount_at += '/' unless config.mount_at.last == '/'
25
30
  end
@@ -28,17 +33,8 @@ module Pbw
28
33
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
29
34
  end
30
35
 
31
- def self.config(&block)
32
- yield Engine.config if block
33
- Engine.config
34
- end
35
-
36
36
  def self.version
37
37
  Pbw::VERSION
38
38
  end
39
-
40
- def self.user_lifecycle_class
41
- self.config.user_lifecycle_class || User::Lifecycle
42
- end
43
39
  end
44
40
  end
data/lib/pbw/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pbw
2
- VERSION = "0.0.9"
2
+ VERSION = "0.0.10"
3
3
  end
data/lib/pbw.rb CHANGED
@@ -1,6 +1,19 @@
1
- require 'mongoid'
2
- require 'devise'
3
1
  require "pbw/engine"
4
2
 
5
3
  module Pbw
4
+ def self.email_from_address
5
+ Engine.config.email_from_address
6
+ end
7
+
8
+ def self.email_from_address=(email)
9
+ Engine.config.email_from_address = email
10
+ end
11
+
12
+ def self.user_lifecycle_class
13
+ Engine.config.user_lifecycle_class || ::User::Lifecycle
14
+ end
15
+
16
+ def self.user_lifecycle_class=(klass)
17
+ Engine.config.user_lifecycle_class = klass
18
+ end
6
19
  end
@@ -0,0 +1,21 @@
1
+ (function($) {
2
+ return $.extend($.fn, {
3
+ backboneLink: function(model) {
4
+ return $(this).find(":input").each(function() {
5
+ var el, name;
6
+ el = $(this);
7
+ name = el.attr("name");
8
+ model.bind("change:" + name, function() {
9
+ return el.val(model.get(name));
10
+ });
11
+ return $(this).bind("change", function() {
12
+ var attrs;
13
+ el = $(this);
14
+ attrs = {};
15
+ attrs[el.attr("name")] = el.val();
16
+ return model.set(attrs);
17
+ });
18
+ });
19
+ }
20
+ });
21
+ })(jQuery);