redline 0.2.0 → 0.3.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.
- data/.gitignore +1 -0
- data/README.rdoc +5 -6
- data/VERSION +1 -1
- data/lib/redline/customer/base.rb +2 -1
- data/lib/redline/customer/instance.rb +2 -4
- data/lib/redline/customer/settings.rb +6 -2
- data/redline.gemspec +3 -3
- data/spec/customer_spec.rb +24 -4
- data/spec/db/models.rb +4 -2
- metadata +38 -21
    
        data/.gitignore
    CHANGED
    
    
    
        data/README.rdoc
    CHANGED
    
    | @@ -11,7 +11,7 @@ Redline also includes a lightweight manual subscription billing system, if you d | |
| 11 11 |  | 
| 12 12 | 
             
            === This software is delivered "as is" without warranty. As with any piece of code, please study it if you include it in your project, especially for such a critical component of your application.
         | 
| 13 13 |  | 
| 14 | 
            -
            While I believe the tests cover the code well, there may be certain cases that I have not  | 
| 14 | 
            +
            While I believe the tests cover the code well, there may be certain cases that I have not experienced or predicted. This is a manual billing script, so dreadful things may occur; please help out and add to the tests if you see, or god forbid experience, any problems.
         | 
| 15 15 |  | 
| 16 16 | 
             
            It is my intention to convert to gateway handled subscriptions, once Braintree adds this functionality to their gem.
         | 
| 17 17 |  | 
| @@ -56,7 +56,8 @@ If you don't like the default settings or your user needs a field mapping, you c | |
| 56 56 |  | 
| 57 57 | 
             
              class User < ActiveRecord::Base
         | 
| 58 58 | 
             
                has_a_braintree_customer do
         | 
| 59 | 
            -
                  attribute_map : | 
| 59 | 
            +
                  attribute_map :first_name => :firstname, :last_name => :lastname
         | 
| 60 | 
            +
                  custom_fields :ip_address, :tax_id
         | 
| 60 61 | 
             
                end
         | 
| 61 62 |  | 
| 62 63 | 
             
                has_a_subscription do
         | 
| @@ -71,10 +72,8 @@ If you don't like the default settings or your user needs a field mapping, you c | |
| 71 72 |  | 
| 72 73 | 
             
            * Fork the project.
         | 
| 73 74 | 
             
            * Make your feature addition or bug fix.
         | 
| 74 | 
            -
            * Add tests for it. This is important so I don't break it in a
         | 
| 75 | 
            -
             | 
| 76 | 
            -
            * Commit, do not mess with rakefile, version, or history.
         | 
| 77 | 
            -
              (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
         | 
| 75 | 
            +
            * Add tests for it. This is important so I don't break it in a future version unintentionally.
         | 
| 76 | 
            +
            * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
         | 
| 78 77 | 
             
            * Send me a pull request. Bonus points for topic branches.
         | 
| 79 78 |  | 
| 80 79 | 
             
            == Copyright
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0. | 
| 1 | 
            +
            0.3.0
         | 
| @@ -11,7 +11,8 @@ module RedLine | |
| 11 11 | 
             
            				before_create  :create_customer
         | 
| 12 12 | 
             
            				before_update  :update_customer
         | 
| 13 13 | 
             
            				before_destroy :delete_customer
         | 
| 14 | 
            -
            				cattr_accessor : | 
| 14 | 
            +
            				cattr_accessor :braintree_customer_attribute_map
         | 
| 15 | 
            +
            				cattr_accessor :braintree_customer_custom_fields
         | 
| 15 16 | 
             
            			end
         | 
| 16 17 | 
             
            		end
         | 
| 17 18 | 
             
            	end
         | 
| @@ -3,10 +3,8 @@ module RedLine | |
| 3 3 | 
             
            		module InstanceMethods
         | 
| 4 4 | 
             
            			def braintree_customer_attributes
         | 
| 5 5 | 
             
            				wanted_attributes = Braintree::Customer._create_signature.reject{|a| a.is_a? Hash}.reject{|a| a == :id}
         | 
| 6 | 
            -
            				 | 
| 7 | 
            -
            					 | 
| 8 | 
            -
            					rewritten_hash
         | 
| 9 | 
            -
            				end.reject{|key, value| !wanted_attributes.include?(key)}
         | 
| 6 | 
            +
            				wanted_attributes.inject({}) {|hash, key| hash.merge(key => (self.send(self.class.braintree_customer_attribute_map[key] || key) rescue nil))}.
         | 
| 7 | 
            +
            					merge(:custom_fields => self.class.braintree_customer_custom_fields.inject({}) {|hash, key| hash.merge(key => (self.send(self.class.braintree_customer_attribute_map[key] || key) rescue nil))})
         | 
| 10 8 | 
             
            			end
         | 
| 11 9 | 
             
            			def customer
         | 
| 12 10 | 
             
            				Braintree::Customer.find(customer_id) if customer_id
         | 
| @@ -2,10 +2,14 @@ module RedLine | |
| 2 2 | 
             
            	module Customer
         | 
| 3 3 | 
             
            		module Settings
         | 
| 4 4 | 
             
            			def set_default_customer_options
         | 
| 5 | 
            -
            				attribute_map  | 
| 5 | 
            +
            				attribute_map unless (send :braintree_customer_attribute_map)
         | 
| 6 | 
            +
            				custom_fields unless (send :braintree_customer_custom_fields)
         | 
| 6 7 | 
             
            			end
         | 
| 7 8 | 
             
            			def attribute_map(attributes = {})
         | 
| 8 | 
            -
            				self. | 
| 9 | 
            +
            				self.braintree_customer_attribute_map = attributes
         | 
| 10 | 
            +
            			end
         | 
| 11 | 
            +
            			def custom_fields(*attributes)
         | 
| 12 | 
            +
            				self.braintree_customer_custom_fields = attributes
         | 
| 9 13 | 
             
            			end
         | 
| 10 14 | 
             
            		end
         | 
| 11 15 | 
             
            	end
         | 
    
        data/redline.gemspec
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{redline}
         | 
| 8 | 
            -
              s.version = "0. | 
| 8 | 
            +
              s.version = "0.3.0"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["James Daniels"]
         | 
| 12 | 
            -
              s.date = %q{2010- | 
| 12 | 
            +
              s.date = %q{2010-03-06}
         | 
| 13 13 | 
             
              s.description = %q{Syncs your AR models with Braintree (Payment Gateway) and offers a lightweight reoccurring billing script}
         | 
| 14 14 | 
             
              s.email = %q{james@marginleft.com}
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
| @@ -45,7 +45,7 @@ Gem::Specification.new do |s| | |
| 45 45 | 
             
              s.homepage = %q{http://github.com/jamesdaniels/redline}
         | 
| 46 46 | 
             
              s.rdoc_options = ["--charset=UTF-8"]
         | 
| 47 47 | 
             
              s.require_paths = ["lib"]
         | 
| 48 | 
            -
              s.rubygems_version = %q{1.3. | 
| 48 | 
            +
              s.rubygems_version = %q{1.3.6}
         | 
| 49 49 | 
             
              s.summary = %q{Syncs your AR models with Braintree (Payment Gateway) and offers a lightweight reoccurring billing script}
         | 
| 50 50 | 
             
              s.test_files = [
         | 
| 51 51 | 
             
                "spec/billing_spec.rb",
         | 
    
        data/spec/customer_spec.rb
    CHANGED
    
    | @@ -17,7 +17,8 @@ describe User do | |
| 17 17 | 
             
            	end
         | 
| 18 18 |  | 
| 19 19 | 
             
            	it "should have a empty braintree_customer" do
         | 
| 20 | 
            -
            		User. | 
| 20 | 
            +
            		User.braintree_customer_attribute_map.should eql({})
         | 
| 21 | 
            +
            		User.braintree_customer_custom_fields.should eql([])
         | 
| 21 22 | 
             
            	end
         | 
| 22 23 |  | 
| 23 24 | 
             
              it "should inherit the instance methods" do
         | 
| @@ -25,7 +26,7 @@ describe User do | |
| 25 26 | 
             
            		(User.instance_methods & expected_methods).sort.should eql(expected_methods.sort)
         | 
| 26 27 | 
             
            	end
         | 
| 27 28 | 
             
            	it "should have proper braintree attributes" do
         | 
| 28 | 
            -
            		valid_user.braintree_customer_attributes.should eql({:first_name=>"James", :last_name=>"Daniels", :email=>"james@marginleft.com"})
         | 
| 29 | 
            +
            		valid_user.braintree_customer_attributes.should eql({:first_name=>"James", :last_name=>"Daniels", :email=>"james@marginleft.com", :custom_fields=>{}})
         | 
| 29 30 | 
             
            	end
         | 
| 30 31 | 
             
            	it "should fire Braintree::Customer.create!" do
         | 
| 31 32 | 
             
            		Braintree::Customer.should_receive('create!').with(valid_user.braintree_customer_attributes).and_return(mock_customer)
         | 
| @@ -61,7 +62,8 @@ end | |
| 61 62 | 
             
            describe ComplexUser do
         | 
| 62 63 |  | 
| 63 64 | 
             
            	it "should have a empty braintree_customer" do
         | 
| 64 | 
            -
            		ComplexUser. | 
| 65 | 
            +
            		ComplexUser.braintree_customer_attribute_map.should eql({:first_name=>:firstname, :last_name=>:lastname})
         | 
| 66 | 
            +
            		ComplexUser.braintree_customer_custom_fields.should eql([:unused_attribute])
         | 
| 65 67 | 
             
            	end
         | 
| 66 68 | 
             
            	it "should have proper braintree attributes" do
         | 
| 67 69 | 
             
            		Braintree::Customer.stub!('_create_signature').and_return([:first_name, :last_name, :email])
         | 
| @@ -70,7 +72,25 @@ describe ComplexUser do | |
| 70 72 | 
             
            			:lastname => 'Daniels', 
         | 
| 71 73 | 
             
            			:email => 'james@marginleft.com', 
         | 
| 72 74 | 
             
            			:unused_attribute => 'unused'
         | 
| 73 | 
            -
            		).braintree_customer_attributes.should eql({:first_name=>"James", :last_name=>"Daniels", :email=>"james@marginleft.com"})
         | 
| 75 | 
            +
            		).braintree_customer_attributes.should eql({:first_name=>"James", :last_name=>"Daniels", :email=>"james@marginleft.com", :custom_fields=>{:unused_attribute=>"unused"}})
         | 
| 74 76 | 
             
            	end
         | 
| 75 77 |  | 
| 78 | 
            +
            end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            describe UserWithoutTrial do
         | 
| 81 | 
            +
            	
         | 
| 82 | 
            +
            	it "should have a empty braintree_customer" do
         | 
| 83 | 
            +
            		UserWithoutTrial.braintree_customer_attribute_map.should eql({:first_name=>:firstname, :something=>:firstname, :last_name=>:lastname})
         | 
| 84 | 
            +
            		UserWithoutTrial.braintree_customer_custom_fields.should eql([:something])
         | 
| 85 | 
            +
            	end
         | 
| 86 | 
            +
            	it "should have proper braintree attributes" do
         | 
| 87 | 
            +
            		Braintree::Customer.stub!('_create_signature').and_return([:first_name, :last_name, :email])
         | 
| 88 | 
            +
            		UserWithoutTrial.new(
         | 
| 89 | 
            +
            			:firstname => 'James', 
         | 
| 90 | 
            +
            			:lastname => 'Daniels', 
         | 
| 91 | 
            +
            			:email => 'james@marginleft.com', 
         | 
| 92 | 
            +
            			:unused_attribute => 'unused'
         | 
| 93 | 
            +
            		).braintree_customer_attributes.should eql({:first_name=>"James", :custom_fields=>{:something=>"James"}, :last_name=>"Daniels", :email=>"james@marginleft.com"})
         | 
| 94 | 
            +
            	end
         | 
| 95 | 
            +
            	
         | 
| 76 96 | 
             
            end
         | 
    
        data/spec/db/models.rb
    CHANGED
    
    | @@ -13,7 +13,8 @@ end | |
| 13 13 | 
             
            class ComplexUser < ActiveRecord::Base
         | 
| 14 14 |  | 
| 15 15 | 
             
            	has_a_braintree_customer do
         | 
| 16 | 
            -
            		attribute_map : | 
| 16 | 
            +
            		attribute_map :first_name => :firstname, :last_name => :lastname
         | 
| 17 | 
            +
            		custom_fields :unused_attribute
         | 
| 17 18 | 
             
            	end
         | 
| 18 19 |  | 
| 19 20 | 
             
            	has_a_subscription do
         | 
| @@ -30,7 +31,8 @@ end | |
| 30 31 | 
             
            class UserWithoutTrial < ActiveRecord::Base
         | 
| 31 32 |  | 
| 32 33 | 
             
            	has_a_braintree_customer do
         | 
| 33 | 
            -
            		attribute_map : | 
| 34 | 
            +
            		attribute_map :first_name => :firstname, :last_name => :lastname, :something => :firstname
         | 
| 35 | 
            +
            		custom_fields :something
         | 
| 34 36 | 
             
            	end
         | 
| 35 37 |  | 
| 36 38 | 
             
            	has_a_subscription do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,12 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: redline
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
               | 
| 4 | 
            +
              prerelease: false
         | 
| 5 | 
            +
              segments: 
         | 
| 6 | 
            +
              - 0
         | 
| 7 | 
            +
              - 3
         | 
| 8 | 
            +
              - 0
         | 
| 9 | 
            +
              version: 0.3.0
         | 
| 5 10 | 
             
            platform: ruby
         | 
| 6 11 | 
             
            authors: 
         | 
| 7 12 | 
             
            - James Daniels
         | 
| @@ -9,49 +14,59 @@ autorequire: | |
| 9 14 | 
             
            bindir: bin
         | 
| 10 15 | 
             
            cert_chain: []
         | 
| 11 16 |  | 
| 12 | 
            -
            date: 2010- | 
| 17 | 
            +
            date: 2010-03-06 00:00:00 -05:00
         | 
| 13 18 | 
             
            default_executable: 
         | 
| 14 19 | 
             
            dependencies: 
         | 
| 15 20 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 16 21 | 
             
              name: rspec
         | 
| 17 | 
            -
               | 
| 18 | 
            -
               | 
| 19 | 
            -
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 22 | 
            +
              prerelease: false
         | 
| 23 | 
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 20 24 | 
             
                requirements: 
         | 
| 21 25 | 
             
                - - ">="
         | 
| 22 26 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 27 | 
            +
                    segments: 
         | 
| 28 | 
            +
                    - 1
         | 
| 29 | 
            +
                    - 2
         | 
| 30 | 
            +
                    - 9
         | 
| 23 31 | 
             
                    version: 1.2.9
         | 
| 24 | 
            -
             | 
| 32 | 
            +
              type: :development
         | 
| 33 | 
            +
              version_requirements: *id001
         | 
| 25 34 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 26 35 | 
             
              name: braintree
         | 
| 27 | 
            -
               | 
| 28 | 
            -
               | 
| 29 | 
            -
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 36 | 
            +
              prerelease: false
         | 
| 37 | 
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 30 38 | 
             
                requirements: 
         | 
| 31 39 | 
             
                - - ">="
         | 
| 32 40 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 41 | 
            +
                    segments: 
         | 
| 42 | 
            +
                    - 0
         | 
| 33 43 | 
             
                    version: "0"
         | 
| 34 | 
            -
             | 
| 44 | 
            +
              type: :development
         | 
| 45 | 
            +
              version_requirements: *id002
         | 
| 35 46 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 36 47 | 
             
              name: activerecord
         | 
| 37 | 
            -
               | 
| 38 | 
            -
               | 
| 39 | 
            -
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 48 | 
            +
              prerelease: false
         | 
| 49 | 
            +
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 40 50 | 
             
                requirements: 
         | 
| 41 51 | 
             
                - - ">="
         | 
| 42 52 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 53 | 
            +
                    segments: 
         | 
| 54 | 
            +
                    - 0
         | 
| 43 55 | 
             
                    version: "0"
         | 
| 44 | 
            -
             | 
| 56 | 
            +
              type: :development
         | 
| 57 | 
            +
              version_requirements: *id003
         | 
| 45 58 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 46 59 | 
             
              name: activesupport
         | 
| 47 | 
            -
               | 
| 48 | 
            -
               | 
| 49 | 
            -
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 60 | 
            +
              prerelease: false
         | 
| 61 | 
            +
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 50 62 | 
             
                requirements: 
         | 
| 51 63 | 
             
                - - ">="
         | 
| 52 64 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 65 | 
            +
                    segments: 
         | 
| 66 | 
            +
                    - 0
         | 
| 53 67 | 
             
                    version: "0"
         | 
| 54 | 
            -
             | 
| 68 | 
            +
              type: :development
         | 
| 69 | 
            +
              version_requirements: *id004
         | 
| 55 70 | 
             
            description: Syncs your AR models with Braintree (Payment Gateway) and offers a lightweight reoccurring billing script
         | 
| 56 71 | 
             
            email: james@marginleft.com
         | 
| 57 72 | 
             
            executables: []
         | 
| @@ -99,18 +114,20 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 99 114 | 
             
              requirements: 
         | 
| 100 115 | 
             
              - - ">="
         | 
| 101 116 | 
             
                - !ruby/object:Gem::Version 
         | 
| 117 | 
            +
                  segments: 
         | 
| 118 | 
            +
                  - 0
         | 
| 102 119 | 
             
                  version: "0"
         | 
| 103 | 
            -
              version: 
         | 
| 104 120 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 105 121 | 
             
              requirements: 
         | 
| 106 122 | 
             
              - - ">="
         | 
| 107 123 | 
             
                - !ruby/object:Gem::Version 
         | 
| 124 | 
            +
                  segments: 
         | 
| 125 | 
            +
                  - 0
         | 
| 108 126 | 
             
                  version: "0"
         | 
| 109 | 
            -
              version: 
         | 
| 110 127 | 
             
            requirements: []
         | 
| 111 128 |  | 
| 112 129 | 
             
            rubyforge_project: 
         | 
| 113 | 
            -
            rubygems_version: 1.3. | 
| 130 | 
            +
            rubygems_version: 1.3.6
         | 
| 114 131 | 
             
            signing_key: 
         | 
| 115 132 | 
             
            specification_version: 3
         | 
| 116 133 | 
             
            summary: Syncs your AR models with Braintree (Payment Gateway) and offers a lightweight reoccurring billing script
         |