| @@ -6,6 +6,7 @@ | ||
| 6 | 6 | #= require jquery.json-editor | 
| 7 | 7 | #= require latlon_and_geo | 
| 8 | 8 | #= require ./worker-checker | 
| 9 | +#= require ./users | |
| 9 | 10 | #= require_self | 
| 10 | 11 |  | 
| 11 | 12 |  window.setupJsonEditor = ($editor = $(".live-json-editor")) -> | 
| @@ -0,0 +1,6 @@ | ||
| 1 | +//alert("i get included"); | |
| 2 | +function remove_fields(link){ | |
| 3 | +  $(link).prev().val("1"); | |
| 4 | + alert($(link).prev().val()) | |
| 5 | +  $(link).parent(".fields").hide(); | |
| 6 | +} | 
| @@ -14,4 +14,17 @@ module ApplicationHelper | ||
| 14 | 14 | link_to '<span class="label label-warning">No</span>'.html_safe, agent_path(agent, :tab => (agent.recent_error_logs? ? 'logs' : 'details')) | 
| 15 | 15 | end | 
| 16 | 16 | end | 
| 17 | + | |
| 18 | +  def link_to_remove_fields(name, f, options = {}) | |
| 19 | + f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)", options) | |
| 20 | + end | |
| 21 | + | |
| 22 | +  def link_to_add_fields(name, f, options = {}) | |
| 23 | + new_object = f.object.class.reflect_on_association(association).klass.new | |
| 24 | +    fields = f.fields_for(association, new_object, :child_index => "new_#{ association }") do |builder| | |
| 25 | + render(association.to_s.singularize + "_fields", :f => builder) | |
| 26 | + end | |
| 27 | +    link_to_function(name, "add_fields(this, \"#{ association }\", \"#{ escape_javascript(fields) }\")", options) | |
| 28 | + end | |
| 29 | + | |
| 17 | 30 | end | 
| @@ -22,6 +22,10 @@ class User < ActiveRecord::Base | ||
| 22 | 22 |    validates_format_of :username, :with => /\A[a-zA-Z0-9_-]{3,15}\Z/, :message => "can only contain letters, numbers, underscores, and dashes, and must be between 3 and 15 characters in length." | 
| 23 | 23 | validates_inclusion_of :invitation_code, :on => :create, :in => INVITATION_CODES, :message => "is not valid" | 
| 24 | 24 |  | 
| 25 | + has_many :user_credentials, :dependent => :destroy | |
| 26 | +  accepts_nested_attributes_for :user_credentials, :reject_if => lambda { |attrs| attrs.all? { |key, value| value.blank? } }, | |
| 27 | + :allow_destroy => true | |
| 28 | + attr_accessible :user_credentials_attributes | |
| 25 | 29 | has_many :events, :order => "events.created_at desc", :dependent => :delete_all, :inverse_of => :user | 
| 26 | 30 | has_many :agents, :order => "agents.created_at desc", :dependent => :destroy, :inverse_of => :user | 
| 27 | 31 | has_many :logs, :through => :agents, :class_name => "AgentLog" | 
| @@ -0,0 +1,4 @@ | ||
| 1 | +class UserCredential < ActiveRecord::Base | |
| 2 | + attr_accessible :credential_name, :credential_value, :user_id | |
| 3 | + belongs_to :user | |
| 4 | +end | 
| @@ -0,0 +1,8 @@ | ||
| 1 | +<p class="fields"> | |
| 2 | + <%= f.label :credential_name, "Name" %> | |
| 3 | + <%= f.text_field :credential_name %> | |
| 4 | + <%= f.label :credential_value, "Value" %> | |
| 5 | + <%= f.text_field :credential_value %> | |
| 6 | + <%= f.hidden_field :_destroy %> | |
| 7 | + <%= link_to_function "remove", "remove_fields(this)" %> | |
| 8 | +</p> | 
| @@ -1,3 +1,4 @@ | ||
| 1 | +hello doctor | |
| 1 | 2 | <div class='container'> | 
| 2 | 3 | <div class='row'> | 
| 3 | 4 | <div class='span8 offset2'> | 
| @@ -48,6 +49,12 @@ | ||
| 48 | 49 | <div class='form-actions'> | 
| 49 | 50 | <%= f.submit "Update", :class => "btn btn-primary" %> | 
| 50 | 51 | </div> | 
| 52 | + now the new stuff | |
| 53 | + <div class="control-group"> | |
| 54 | + <%= f.fields_for(:user_credentials) do |uc| %> | |
| 55 | + <%= render 'user_credentials_fields', :f => uc %> | |
| 56 | + <% end %> | |
| 57 | + </div> | |
| 51 | 58 | <% end %> | 
| 52 | 59 |  | 
| 53 | 60 | <h3>Cancel my account</h3> | 
| @@ -58,4 +65,4 @@ | ||
| 58 | 65 | </div> | 
| 59 | 66 | </div> | 
| 60 | 67 | </div> | 
| 61 | -</div> | |
| 68 | +</div> | 
| @@ -0,0 +1,12 @@ | ||
| 1 | +class CreateUserCredentials < ActiveRecord::Migration | |
| 2 | + def change | |
| 3 | + create_table :user_credentials do |t| | |
| 4 | + t.integer :user_id | |
| 5 | + t.string :credential_name | |
| 6 | + t.string :credential_value | |
| 7 | + | |
| 8 | + t.timestamps | |
| 9 | + end | |
| 10 | + add_index :user_credentials, [:user_id, :credential_name], :unique => true | |
| 11 | + end | |
| 12 | +end | 
| @@ -0,0 +1,5 @@ | ||
| 1 | +require 'spec_helper' | |
| 2 | + | |
| 3 | +describe UserCredential do | |
| 4 | +  pending "add some examples to (or delete) #{__FILE__}" | |
| 5 | +end |