cheddargetter_client_rails 0.1.16 → 0.1.26
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/README.rdoc +122 -73
- data/VERSION +1 -1
- data/cheddargetter_client_rails.gemspec +4 -2
- data/lib/cheddargetter_client_rails.rb +22 -1
- data/lib/cheddargetter_client_rails/subscription.rb +30 -0
- data/lib/rails/naming.rb +9 -0
- data/spec/cheddargetter_client_rails/subscription_spec.rb +44 -1
- data/spec/cheddargetter_client_rails_spec.rb +88 -0
- data/spec/naming_spec.rb +78 -0
- metadata +6 -4
    
        data/README.rdoc
    CHANGED
    
    | @@ -26,20 +26,19 @@ It can be very simple if you go with the default columns, ie: | |
| 26 26 |  | 
| 27 27 | 
             
            Then the declaration in the model is simply:
         | 
| 28 28 |  | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 29 | 
            +
             class User < ActiveRecord::Base
         | 
| 30 | 
            +
              has_subscription
         | 
| 31 | 
            +
             end
         | 
| 32 32 |  | 
| 33 33 | 
             
            These are the only required columns however you can change their names locally very easily.
         | 
| 34 34 |  | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
              end
         | 
| 35 | 
            +
             class User < ActiveRecord::Base
         | 
| 36 | 
            +
              has_subscription :customerCode => :customer_code,
         | 
| 37 | 
            +
               :firstName => :name,
         | 
| 38 | 
            +
               :lastName  => :l_name,
         | 
| 39 | 
            +
               :email			=> :business_email,
         | 
| 40 | 
            +
               :planCode   => "FREE_PLAN"										
         | 
| 41 | 
            +
             end
         | 
| 43 42 |  | 
| 44 43 | 
             
            Note that the plan code can also take a string.
         | 
| 45 44 |  | 
| @@ -56,13 +55,13 @@ The has_subscription will also takes additional key/values of items that appear | |
| 56 55 | 
             
            	:company
         | 
| 57 56 | 
             
            	:zip
         | 
| 58 57 |  | 
| 59 | 
            -
            When the save is called on the subscription object or  | 
| 58 | 
            +
            When the save is called on the subscription object or the user it grabs all shared attributes from your ActiveRecord record. 
         | 
| 60 59 |  | 
| 61 60 | 
             
            === In the controller
         | 
| 62 61 |  | 
| 63 62 | 
             
            Make sure the subscription is always set on the user as some data may only exist there.
         | 
| 64 63 |  | 
| 65 | 
            -
            	class  | 
| 64 | 
            +
            	class SubscriptionController < ApplicationController
         | 
| 66 65 | 
             
            	  def edit
         | 
| 67 66 | 
             
            	    @user = current_user
         | 
| 68 67 | 
             
            	  end
         | 
| @@ -70,7 +69,7 @@ Make sure the subscription is always set on the user as some data may only exist | |
| 70 69 | 
             
            	  def update
         | 
| 71 70 | 
             
            	    @user = current_user
         | 
| 72 71 |  | 
| 73 | 
            -
            	    if @user. | 
| 72 | 
            +
            	    if @user.update_attributes(params[:user])
         | 
| 74 73 | 
             
            	      redirect_to edit_credit_card_path, :flash => {:success => 'Billing information updated'}
         | 
| 75 74 | 
             
            	    else     
         | 
| 76 75 | 
             
            	      render 'edit'
         | 
| @@ -81,75 +80,125 @@ Make sure the subscription is always set on the user as some data may only exist | |
| 81 80 | 
             
            Or in a user controller
         | 
| 82 81 |  | 
| 83 82 | 
             
             class UsersController < ApplicationController
         | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 83 | 
            +
              def new
         | 
| 84 | 
            +
               @user = User.new
         | 
| 85 | 
            +
              end
         | 
| 87 86 |  | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
            			@user.build_subscription(params[:cheddargetter_client_rails_subscription])
         | 
| 87 | 
            +
              def create
         | 
| 88 | 
            +
               @user = User.new(params[:user])
         | 
| 91 89 |  | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 90 | 
            +
               if @user.save
         | 
| 91 | 
            +
                redirect_to after_creation_path, :flash => {:success => 'User successfully created'}
         | 
| 92 | 
            +
               else     
         | 
| 93 | 
            +
                render 'new'
         | 
| 94 | 
            +
               end
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
              def update
         | 
| 98 | 
            +
               @user = User.find(params[:id])
         | 
| 99 | 
            +
             | 
| 100 | 
            +
               if @user.update_attributes(params[:user])
         | 
| 101 | 
            +
                redirect_to @user, :flash => {:success => 'User successfully updated'}
         | 
| 102 | 
            +
               else
         | 
| 103 | 
            +
                render 'edit'
         | 
| 104 | 
            +
               end
         | 
| 105 | 
            +
              end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
             end
         | 
| 99 108 |  | 
| 100 109 | 
             
            The user save will take care of saving the subscription to CheddarGetter.
         | 
| 101 110 |  | 
| 102 111 | 
             
            === In the view
         | 
| 103 112 |  | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 113 | 
            +
            In order to save through the user param it is important to nest the subscription params
         | 
| 114 | 
            +
            in the user params with fields for.  This is an example of how to set up the form properly.
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            	<%= form_for(@user) do |f| %>
         | 
| 117 | 
            +
            	  <%= @user.errors.full_messages.each do |message|%>
         | 
| 118 | 
            +
            			<%= message %>
         | 
| 119 | 
            +
            		<% end %>
         | 
| 120 | 
            +
            	  <% if @user.errors.any? %>
         | 
| 121 | 
            +
            	    <div id="error_explanation">
         | 
| 122 | 
            +
            	      <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            	      <ul>
         | 
| 125 | 
            +
            	      <% @user.errors.full_messages.each do |msg| %>
         | 
| 126 | 
            +
            	        <li><%= msg %></li>
         | 
| 127 | 
            +
            	      <% end %>
         | 
| 128 | 
            +
            	      </ul>
         | 
| 129 | 
            +
            	    </div>
         | 
| 130 | 
            +
            	  <% end %>
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            	  <div class="field">
         | 
| 133 | 
            +
            	    <%= f.label :email %><br />
         | 
| 134 | 
            +
            	    <%= f.text_field :email %>
         | 
| 135 | 
            +
            	  </div>
         | 
| 136 | 
            +
            	  <div class="field">
         | 
| 137 | 
            +
            	    <%= f.label :first_name %><br />
         | 
| 138 | 
            +
            	    <%= f.text_field :first_name %>
         | 
| 139 | 
            +
            	  </div>
         | 
| 140 | 
            +
            	  <div class="field">
         | 
| 141 | 
            +
            	    <%= f.label :last_name %><br />
         | 
| 142 | 
            +
            	    <%= f.text_field :last_name %>
         | 
| 143 | 
            +
            	  </div>
         | 
| 144 | 
            +
            	  <div class="field">
         | 
| 145 | 
            +
            	    <%= f.label :plan_code, "User Plan" %><br />
         | 
| 146 | 
            +
            	    <%= f.select :plan_code, User::Plans #This is a collection of my plans, ie, [['Free Plan', 'FREE_PLAN'], ['Paid Plan'], ['PAID_PLAN']].  You will need to use your own plans here.
         | 
| 147 | 
            +
            	     %> 
         | 
| 148 | 
            +
            	  </div>
         | 
| 149 | 
            +
             | 
| 150 | 
            +
            		The following fields are only required if selecting a paid plan.
         | 
| 151 | 
            +
            		<%= fields_for(:'user[subscription]') do |s| %> #THIS IS THE TRICKY WAY TO NEST THE SUBSCRIPTION PROPERLY.
         | 
| 110 152 | 
             
            			<dl>
         | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
            			</ | 
| 150 | 
            -
            		 | 
| 153 | 
            +
            	      <dt>First Name:</dt>
         | 
| 154 | 
            +
            	      <dd>
         | 
| 155 | 
            +
            	              <%= s.text_field :ccFirstName,:autocomplete => "off" %>
         | 
| 156 | 
            +
            	      </dd>
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            	      <dt>Last Name:</dt>
         | 
| 159 | 
            +
            	      <dd>
         | 
| 160 | 
            +
            	              <%= s.text_field :ccLastName, :autocomplete => "off" %>
         | 
| 161 | 
            +
            	      </dd>
         | 
| 162 | 
            +
             | 
| 163 | 
            +
            	      <dt>Card Number:</dt>
         | 
| 164 | 
            +
            	      <dd>
         | 
| 165 | 
            +
            	              <%= s.text_field :ccNumber,:autocomplete => "off" %>
         | 
| 166 | 
            +
            	      </dd>
         | 
| 167 | 
            +
            	      <dt>Expiration Date:</dt>
         | 
| 168 | 
            +
            	      <dd>
         | 
| 169 | 
            +
            	              <%= s.text_field :ccExpiration, :autocomplete => 'off' %>
         | 
| 170 | 
            +
            	      </dd>
         | 
| 171 | 
            +
            	      <dt>Address:</dt>
         | 
| 172 | 
            +
            	      <dd>
         | 
| 173 | 
            +
            	              <%= s.text_field :ccAddress, :autocomplete => 'off' %>
         | 
| 174 | 
            +
            	      </dd>
         | 
| 175 | 
            +
            	      <dt>City:</dt>
         | 
| 176 | 
            +
            	      <dd>
         | 
| 177 | 
            +
            	              <%= s.text_field :ccCity, :autocomplete => 'off' %>
         | 
| 178 | 
            +
            	      </dd>
         | 
| 179 | 
            +
            	      <dt>State:</dt>
         | 
| 180 | 
            +
            	      <dd>
         | 
| 181 | 
            +
            	              <%= s.text_field :ccState, :autocomplete => 'off' %>
         | 
| 182 | 
            +
            	      </dd>
         | 
| 183 | 
            +
            	      <dt>Zip Code:</dt>
         | 
| 184 | 
            +
            	      <dd>
         | 
| 185 | 
            +
            	              <%= s.text_field :zip, :autocomplete => 'off' %>
         | 
| 186 | 
            +
            	      </dd>
         | 
| 187 | 
            +
            	      <dt>Country:</dt>
         | 
| 188 | 
            +
            	      <dd>
         | 
| 189 | 
            +
            	              <%= s.text_field :ccCountry, :autocomplete => 'off' %>
         | 
| 190 | 
            +
            	      </dd>
         | 
| 191 | 
            +
            			</dl>
         | 
| 192 | 
            +
            		<% end %>
         | 
| 193 | 
            +
            	
         | 
| 194 | 
            +
            		<div class="actions">
         | 
| 195 | 
            +
            	    <%= f.submit %>
         | 
| 196 | 
            +
            	  </div>
         | 
| 151 197 | 
             
            	<% end %>
         | 
| 152 198 |  | 
| 199 | 
            +
            You'll want to user the current_subscription method to get a subscription object with current data.
         | 
| 200 | 
            +
            CheddarGetter only stores the last 4 of the credit card. This data is gotten by calling ccLastFour
         | 
| 201 | 
            +
            on the subscription object gotten through the current_subscription call. 
         | 
| 153 202 |  | 
| 154 203 | 
             
            == Contributing to cheddargetter_client_rails
         | 
| 155 204 |  | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.1. | 
| 1 | 
            +
            0.1.26
         | 
| @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{cheddargetter_client_rails}
         | 
| 8 | 
            -
              s.version = "0.1. | 
| 8 | 
            +
              s.version = "0.1.26"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Brent Wooden"]
         | 
| 12 | 
            -
              s.date = %q{2011-05- | 
| 12 | 
            +
              s.date = %q{2011-05-16}
         | 
| 13 13 | 
             
              s.description = %q{Integrates CheddarGetter api with Active Record. Uses cheddargetter_client_ruby.}
         | 
| 14 14 | 
             
              s.email = %q{brent.wooden@gmail.com}
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
| @@ -35,11 +35,13 @@ Gem::Specification.new do |s| | |
| 35 35 | 
             
                "lib/generators/cheddargetter/cheddargetter_generator.rb",
         | 
| 36 36 | 
             
                "lib/generators/cheddargetter/templates/cheddargetter.yml",
         | 
| 37 37 | 
             
                "lib/generators/cheddargetter/templates/cheddargetter_client.rb",
         | 
| 38 | 
            +
                "lib/rails/naming.rb",
         | 
| 38 39 | 
             
                "lib/rails/record_identifier.rb",
         | 
| 39 40 | 
             
                "spec/cheddargetter_client_rails/subscription_spec.rb",
         | 
| 40 41 | 
             
                "spec/cheddargetter_client_rails_spec.rb",
         | 
| 41 42 | 
             
                "spec/fixtures/users.yml",
         | 
| 42 43 | 
             
                "spec/generator_spec.rb",
         | 
| 44 | 
            +
                "spec/naming_spec.rb",
         | 
| 43 45 | 
             
                "spec/record_identifier_spec.rb",
         | 
| 44 46 | 
             
                "spec/spec_helper.rb"
         | 
| 45 47 | 
             
              ]
         | 
| @@ -2,6 +2,7 @@ require 'active_support' | |
| 2 2 | 
             
            require 'action_controller/record_identifier'
         | 
| 3 3 | 
             
            require 'cheddargetter_client_ruby'
         | 
| 4 4 | 
             
            require 'rails/record_identifier'
         | 
| 5 | 
            +
            require 'rails/naming'
         | 
| 5 6 |  | 
| 6 7 | 
             
            module CheddargetterClientRails
         | 
| 7 8 | 
             
              autoload :Subscription, 'cheddargetter_client_rails/subscription'
         | 
| @@ -26,6 +27,10 @@ module CheddargetterClientRails | |
| 26 27 | 
             
                end
         | 
| 27 28 |  | 
| 28 29 | 
             
                def supplement_subscription_fields
         | 
| 30 | 
            +
                  if subscription.is_a?(ActiveSupport::HashWithIndifferentAccess)
         | 
| 31 | 
            +
                    self.subscription = CheddargetterClientRails::Subscription.new(subscription)
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 29 34 | 
             
                  self.class.shared_columns.each do |subscription_column, user_attribute|
         | 
| 30 35 | 
             
                    if(subscription_column == :planCode && user_attribute.is_a?(String)) #user can specify planCode as a string
         | 
| 31 36 | 
             
                      subscription.send(subscription_column.to_s + '=', user_attribute)
         | 
| @@ -78,6 +83,21 @@ module CheddargetterClientRails | |
| 78 83 | 
             
                  build_subscription(attributes_hash)
         | 
| 79 84 | 
             
                  subscription.save
         | 
| 80 85 | 
             
                end
         | 
| 86 | 
            +
                
         | 
| 87 | 
            +
                def update_subscription
         | 
| 88 | 
            +
                  if !new_record?
         | 
| 89 | 
            +
                    subscription.customerCode = customer_code_column_value if subscription.customerCode.blank? and customer_code_column_value.present?
         | 
| 90 | 
            +
                    if shared_attributes_have_changed? || subscription.fields_present?
         | 
| 91 | 
            +
                      subscription.update
         | 
| 92 | 
            +
                    end
         | 
| 93 | 
            +
                  end
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
                
         | 
| 96 | 
            +
                def shared_attributes_have_changed?
         | 
| 97 | 
            +
                  self.class.shared_columns.collect do |cgkey, column|
         | 
| 98 | 
            +
                    self.send(column.to_s + '_changed?')
         | 
| 99 | 
            +
                  end.include?(true)      
         | 
| 100 | 
            +
                end
         | 
| 81 101 | 
             
              end
         | 
| 82 102 |  | 
| 83 103 | 
             
              module ClassMethods
         | 
| @@ -101,7 +121,8 @@ module CheddargetterClientRails | |
| 101 121 |  | 
| 102 122 | 
             
                  validate        :validate_subscription
         | 
| 103 123 | 
             
                  after_create    :create_subscription
         | 
| 104 | 
            -
                  before_destroy  :destroy_subscription | 
| 124 | 
            +
                  before_destroy  :destroy_subscription
         | 
| 125 | 
            +
                  after_save      :update_subscription            
         | 
| 105 126 | 
             
                end
         | 
| 106 127 |  | 
| 107 128 | 
             
                def responds_to_customer_code_column?
         | 
| @@ -4,6 +4,25 @@ module CheddargetterClientRails | |
| 4 4 |  | 
| 5 5 | 
             
                Months = ("01".."12").freeze
         | 
| 6 6 | 
             
                Years  = (Date.current.year..Date.current.year+10).collect{|y| y.to_s }.freeze
         | 
| 7 | 
            +
                CGKeys =  [   
         | 
| 8 | 
            +
                  :planCode,
         | 
| 9 | 
            +
                  :company,
         | 
| 10 | 
            +
                  :firstName,
         | 
| 11 | 
            +
                  :lastName,
         | 
| 12 | 
            +
                  :ccFirstName,
         | 
| 13 | 
            +
                  :ccLastName,
         | 
| 14 | 
            +
                  :ccExpiration,
         | 
| 15 | 
            +
                  :ccNumber,
         | 
| 16 | 
            +
                  :ccLastFour,
         | 
| 17 | 
            +
                  :ccCountry,
         | 
| 18 | 
            +
                  :ccAddress,
         | 
| 19 | 
            +
                  :ccCity,
         | 
| 20 | 
            +
                  :ccState,
         | 
| 21 | 
            +
                  :customerCode,
         | 
| 22 | 
            +
                  :email,
         | 
| 23 | 
            +
                  :zip    
         | 
| 24 | 
            +
                ]
         | 
| 25 | 
            +
              
         | 
| 7 26 |  | 
| 8 27 | 
             
                attr_accessor :planCode,
         | 
| 9 28 | 
             
                              :company,
         | 
| @@ -182,5 +201,16 @@ module CheddargetterClientRails | |
| 182 201 | 
             
                    :email => email
         | 
| 183 202 | 
             
                  }     
         | 
| 184 203 | 
             
                end
         | 
| 204 | 
            +
                
         | 
| 205 | 
            +
                def to_key
         | 
| 206 | 
            +
                  nil
         | 
| 207 | 
            +
                end
         | 
| 208 | 
            +
                
         | 
| 209 | 
            +
                def fields_present?
         | 
| 210 | 
            +
                  CGKeys.collect do |key|
         | 
| 211 | 
            +
                    val = send(key)
         | 
| 212 | 
            +
                    val if val.present?
         | 
| 213 | 
            +
                  end.compact.present?
         | 
| 214 | 
            +
                end
         | 
| 185 215 | 
             
              end
         | 
| 186 216 | 
             
            end
         | 
    
        data/lib/rails/naming.rb
    ADDED
    
    | @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            module ActiveModel::Naming
         | 
| 2 | 
            +
              def self.singular(record_or_class)
         | 
| 3 | 
            +
                model_name_from_record_or_class(record_or_class).singular.gsub('cheddargetter_client_rails_', '')
         | 
| 4 | 
            +
              end
         | 
| 5 | 
            +
              
         | 
| 6 | 
            +
              def self.plural(record_or_class)
         | 
| 7 | 
            +
                model_name_from_record_or_class(record_or_class).plural.gsub('cheddargetter_client_rails_', '')
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
            end
         | 
| @@ -1,7 +1,27 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe CheddargetterClientRails::Subscription do
         | 
| 4 | 
            -
               | 
| 4 | 
            +
              before {
         | 
| 5 | 
            +
                class TestUser < ActiveRecord::Base
         | 
| 6 | 
            +
                  attr_accessor :customer_code, :first_name, :last_name, :plan_code, :email
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def self.column_names
         | 
| 9 | 
            +
                    []
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                        
         | 
| 12 | 
            +
                  has_subscription :customerCode => :customer_code,
         | 
| 13 | 
            +
                                            :firstName    => :first_name, 
         | 
| 14 | 
            +
                                            :lastName     => :last_name, 
         | 
| 15 | 
            +
                                            :ccFirstName  => :first_name, 
         | 
| 16 | 
            +
                                            :ccLastName   => :last_name, 
         | 
| 17 | 
            +
                                            :planCode     => :plan_code
         | 
| 18 | 
            +
                                                          
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              }
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              before { ActiveRecord::Base.stub(:connection).and_return mock(:columns => []) }
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
              let(:user)          { TestUser.new }
         | 
| 5 25 | 
             
              let(:subscription)  { CheddargetterClientRails::Subscription.new }
         | 
| 6 26 | 
             
              let(:customer_code) { 'JOHN_DOE' }
         | 
| 7 27 |  | 
| @@ -196,4 +216,27 @@ describe CheddargetterClientRails::Subscription do | |
| 196 216 | 
             
                  })
         | 
| 197 217 | 
             
                }
         | 
| 198 218 | 
             
              end
         | 
| 219 | 
            +
              
         | 
| 220 | 
            +
              describe 'to_key' do
         | 
| 221 | 
            +
                subject { subscription.to_key }
         | 
| 222 | 
            +
                it { should eq(nil) }
         | 
| 223 | 
            +
              end
         | 
| 224 | 
            +
              
         | 
| 225 | 
            +
              describe 'subscription_fields_present?' do
         | 
| 226 | 
            +
                subject { user.subscription.fields_present? }
         | 
| 227 | 
            +
                
         | 
| 228 | 
            +
                context 'when they are not present' do
         | 
| 229 | 
            +
                  it { should be_false }
         | 
| 230 | 
            +
                end
         | 
| 231 | 
            +
                
         | 
| 232 | 
            +
                context 'when one is and it is nil' do
         | 
| 233 | 
            +
                  before { user.subscription.firstName = nil }
         | 
| 234 | 
            +
                  it { should be_false }
         | 
| 235 | 
            +
                end
         | 
| 236 | 
            +
                
         | 
| 237 | 
            +
                context 'when is and it is not nil' do
         | 
| 238 | 
            +
                  before { user.subscription.firstName = 'Joe' }
         | 
| 239 | 
            +
                  it { should be_true }
         | 
| 240 | 
            +
                end
         | 
| 241 | 
            +
              end
         | 
| 199 242 | 
             
            end
         | 
| @@ -338,6 +338,38 @@ describe "CheddargetterClientRails" do | |
| 338 338 | 
             
                    user.subscription.planCode.should == "EVERYBODYS_PLAN"
         | 
| 339 339 | 
             
                  }
         | 
| 340 340 | 
             
                end
         | 
| 341 | 
            +
                
         | 
| 342 | 
            +
                context 'when subscription is a ActiveSupport::HashWithIndifferentAccess' do
         | 
| 343 | 
            +
                  let!(:user) {
         | 
| 344 | 
            +
                    TestUser.new  
         | 
| 345 | 
            +
                  }
         | 
| 346 | 
            +
                  
         | 
| 347 | 
            +
                  before { user.subscription = ActiveSupport::HashWithIndifferentAccess.new }
         | 
| 348 | 
            +
             | 
| 349 | 
            +
                  before { user.class.stub(:shared_columns).and_return({
         | 
| 350 | 
            +
                                                              :firstName    => :first_name, 
         | 
| 351 | 
            +
                                                              :lastName     => :last_name, 
         | 
| 352 | 
            +
                                                              :ccFirstName  => :first_name, 
         | 
| 353 | 
            +
                                                              :ccLastName   => :last_name, 
         | 
| 354 | 
            +
                                                              :planCode     => :plan_code
         | 
| 355 | 
            +
                                                            })
         | 
| 356 | 
            +
                  }
         | 
| 357 | 
            +
             | 
| 358 | 
            +
                  before {
         | 
| 359 | 
            +
                    user.customer_code  = "FIRST_NAME" 
         | 
| 360 | 
            +
                    user.first_name     = "First"
         | 
| 361 | 
            +
                    user.last_name      = "Last"
         | 
| 362 | 
            +
                    user.plan_code      = "TEST_PLAN"
         | 
| 363 | 
            +
                  }
         | 
| 364 | 
            +
             | 
| 365 | 
            +
                  subject { user.supplement_subscription_fields }
         | 
| 366 | 
            +
                  specify { 
         | 
| 367 | 
            +
                    subject
         | 
| 368 | 
            +
                    user.subscription.firstName.should == "First"
         | 
| 369 | 
            +
                    user.subscription.lastName.should == "Last"
         | 
| 370 | 
            +
                    user.subscription.planCode.should == "TEST_PLAN"
         | 
| 371 | 
            +
                  }
         | 
| 372 | 
            +
                end
         | 
| 341 373 | 
             
              end
         | 
| 342 374 |  | 
| 343 375 | 
             
              describe 'create_subscription' do
         | 
| @@ -494,4 +526,60 @@ describe "CheddargetterClientRails" do | |
| 494 526 | 
             
                before { user.subscription.should_receive(:save) }
         | 
| 495 527 | 
             
                it do subject end
         | 
| 496 528 | 
             
              end
         | 
| 529 | 
            +
              
         | 
| 530 | 
            +
              describe 'update_subscription' do
         | 
| 531 | 
            +
                subject { user.update_subscription }
         | 
| 532 | 
            +
                
         | 
| 533 | 
            +
                context 'when user is a new record' do
         | 
| 534 | 
            +
                  before { user.stub(:new_record?).and_return(true) }
         | 
| 535 | 
            +
                  before { user.subscription.should_not_receive(:save) }
         | 
| 536 | 
            +
                  it do subject end      
         | 
| 537 | 
            +
                end
         | 
| 538 | 
            +
                
         | 
| 539 | 
            +
                context 'when user is not a new record' do
         | 
| 540 | 
            +
                  before { user.stub(:new_record?).and_return(false) }
         | 
| 541 | 
            +
                  before { user.customer_code = 'coooode' }
         | 
| 542 | 
            +
                  
         | 
| 543 | 
            +
                  context 'and shared_attributes have not changed' do
         | 
| 544 | 
            +
                    before { user.stub(:shared_attributes_have_changed?).and_return false }
         | 
| 545 | 
            +
                    before { user.subscription.stub(:fields_present?).and_return false }
         | 
| 546 | 
            +
                    before { user.subscription.should_not_receive(:save) }        
         | 
| 547 | 
            +
                    it do subject end        
         | 
| 548 | 
            +
                  end
         | 
| 549 | 
            +
                
         | 
| 550 | 
            +
                  context 'and shared_attributes have changed' do        
         | 
| 551 | 
            +
                    before { user.stub(:shared_attributes_have_changed?).and_return true }
         | 
| 552 | 
            +
                    
         | 
| 553 | 
            +
                    context 'but subscription fields are not present' do
         | 
| 554 | 
            +
                      before { user.subscription.stub(:fields_present?).and_return false }
         | 
| 555 | 
            +
                      before { user.subscription.should_receive(:update) }        
         | 
| 556 | 
            +
                      it do subject end          
         | 
| 557 | 
            +
                    end
         | 
| 558 | 
            +
                
         | 
| 559 | 
            +
                    context 'and attributes have changed and subscription fields are present' do
         | 
| 560 | 
            +
                      before { user.subscription.stub(:fields_present?).and_return true }
         | 
| 561 | 
            +
                      before { user.subscription.should_receive(:update) }        
         | 
| 562 | 
            +
                      it do subject end
         | 
| 563 | 
            +
                    end
         | 
| 564 | 
            +
                  end
         | 
| 565 | 
            +
                end
         | 
| 566 | 
            +
              end
         | 
| 567 | 
            +
              
         | 
| 568 | 
            +
              describe 'shared_attributes_have_changed?' do
         | 
| 569 | 
            +
                subject { user.shared_attributes_have_changed? }
         | 
| 570 | 
            +
                before { 
         | 
| 571 | 
            +
                  user.class.shared_columns.each do |cgkey, attribute|
         | 
| 572 | 
            +
                    user.stub((attribute.to_s + '_changed?').to_sym).and_return false
         | 
| 573 | 
            +
                  end 
         | 
| 574 | 
            +
                }
         | 
| 575 | 
            +
                
         | 
| 576 | 
            +
                context 'when attributes have not changed' do
         | 
| 577 | 
            +
                  it { should be_false }
         | 
| 578 | 
            +
                end
         | 
| 579 | 
            +
                
         | 
| 580 | 
            +
                context 'when an attribute has changed' do
         | 
| 581 | 
            +
                  before { user.stub((user.class.shared_columns.first[1]).to_s + '_changed?').and_return true }
         | 
| 582 | 
            +
                  it { should be_true }
         | 
| 583 | 
            +
                end
         | 
| 584 | 
            +
              end
         | 
| 497 585 | 
             
            end
         | 
    
        data/spec/naming_spec.rb
    ADDED
    
    | @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "RecordIdentifier" do
         | 
| 4 | 
            +
              before {
         | 
| 5 | 
            +
                class TestUser < ActiveRecord::Base
         | 
| 6 | 
            +
                  attr_accessor :customer_code, :first_name, :last_name, :plan_code, :email
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def self.column_names
         | 
| 9 | 
            +
                    []
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
                        
         | 
| 12 | 
            +
                  has_subscription :customerCode => :customer_code,
         | 
| 13 | 
            +
                                            :firstName    => :first_name, 
         | 
| 14 | 
            +
                                            :lastName     => :last_name, 
         | 
| 15 | 
            +
                                            :ccFirstName  => :first_name, 
         | 
| 16 | 
            +
                                            :ccLastName   => :last_name, 
         | 
| 17 | 
            +
                                            :planCode     => :plan_code
         | 
| 18 | 
            +
                                                          
         | 
| 19 | 
            +
                end    
         | 
| 20 | 
            +
              }
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              before { ActiveRecord::Base.stub(:connection).and_return mock(:columns => []) }
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
              describe 'singular' do
         | 
| 25 | 
            +
                subject { ActiveModel::Naming.singular(record_or_class) }
         | 
| 26 | 
            +
                
         | 
| 27 | 
            +
                context 'called with class' do
         | 
| 28 | 
            +
                  let(:record_or_class) { CheddargetterClientRails::Subscription }
         | 
| 29 | 
            +
                  it { should eq('subscription') }
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
                
         | 
| 32 | 
            +
                context 'called with class' do
         | 
| 33 | 
            +
                  let(:record_or_class) { CheddargetterClientRails::Subscription.new }
         | 
| 34 | 
            +
                  it { should eq('subscription') }      
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
                
         | 
| 37 | 
            +
                context 'with user model' do
         | 
| 38 | 
            +
                  context 'called with class' do
         | 
| 39 | 
            +
                    let(:record_or_class) { TestUser }
         | 
| 40 | 
            +
                    it { should eq('test_user') }
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  context 'called with class' do
         | 
| 44 | 
            +
                    let(:record_or_class) { TestUser.new }
         | 
| 45 | 
            +
                    it { should eq('test_user') }      
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
              
         | 
| 50 | 
            +
              describe 'plural' do
         | 
| 51 | 
            +
                subject { ActiveModel::Naming.plural(record_or_class) }
         | 
| 52 | 
            +
                
         | 
| 53 | 
            +
                context 'called with class' do
         | 
| 54 | 
            +
                  let(:record_or_class) { CheddargetterClientRails::Subscription }
         | 
| 55 | 
            +
                  it { should eq('subscriptions') }
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
                
         | 
| 58 | 
            +
                context 'called with class' do
         | 
| 59 | 
            +
                  let(:record_or_class) { CheddargetterClientRails::Subscription.new }
         | 
| 60 | 
            +
                  it { should eq('subscriptions') }      
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
                
         | 
| 63 | 
            +
                context 'with user model' do
         | 
| 64 | 
            +
                  context 'called with class' do
         | 
| 65 | 
            +
                    let(:record_or_class) { TestUser }
         | 
| 66 | 
            +
                    it { should eq('test_users') }
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  context 'called with class' do
         | 
| 70 | 
            +
                    let(:record_or_class) { TestUser.new }
         | 
| 71 | 
            +
                    it { should eq('test_users') }      
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
              
         | 
| 76 | 
            +
              
         | 
| 77 | 
            +
              
         | 
| 78 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: cheddargetter_client_rails
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 47
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 8 | 
             
              - 1
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0.1. | 
| 9 | 
            +
              - 26
         | 
| 10 | 
            +
              version: 0.1.26
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Brent Wooden
         | 
| @@ -15,7 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2011-05- | 
| 18 | 
            +
            date: 2011-05-16 00:00:00 -04:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -138,11 +138,13 @@ files: | |
| 138 138 | 
             
            - lib/generators/cheddargetter/cheddargetter_generator.rb
         | 
| 139 139 | 
             
            - lib/generators/cheddargetter/templates/cheddargetter.yml
         | 
| 140 140 | 
             
            - lib/generators/cheddargetter/templates/cheddargetter_client.rb
         | 
| 141 | 
            +
            - lib/rails/naming.rb
         | 
| 141 142 | 
             
            - lib/rails/record_identifier.rb
         | 
| 142 143 | 
             
            - spec/cheddargetter_client_rails/subscription_spec.rb
         | 
| 143 144 | 
             
            - spec/cheddargetter_client_rails_spec.rb
         | 
| 144 145 | 
             
            - spec/fixtures/users.yml
         | 
| 145 146 | 
             
            - spec/generator_spec.rb
         | 
| 147 | 
            +
            - spec/naming_spec.rb
         | 
| 146 148 | 
             
            - spec/record_identifier_spec.rb
         | 
| 147 149 | 
             
            - spec/spec_helper.rb
         | 
| 148 150 | 
             
            has_rdoc: true
         |