stripe-rails 1.2.2 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e4c623892c4bdfc60f16d8835a62c2e6f948f3e01be9831e453abd5d237b30fe
4
- data.tar.gz: 88531135d52fc3a941949c335de18d0dc6731316eb4fd58a34d8d6ee34637078
3
+ metadata.gz: 4a48f7cd53408976274d19e00765d59c76aa0e4ae69e7accaf4b0e58de6737db
4
+ data.tar.gz: 0cdb70b8481b375c043ed622082376da4342712ed1a389170eccbc944a668713
5
5
  SHA512:
6
- metadata.gz: 2f82e72f5d0c3179c3af7c6fabd10213eb75c0bd7cacd5b80db5ad8e1b4e96ae33749777b30ef35d20c5f58ba466d242025ce35d1fd1b2baf8e68d80a510804e
7
- data.tar.gz: dba57aec52d0ebfab2cfe72d5e369ec8e45110ab9758546121a21f340b0db20894bf09ffedee10af030182f9f6e1f0e36be875dd77104bb6f3a2301fd89aa394
6
+ metadata.gz: fe441c8ddb0f65fea0b8ae401609c8dc9ea3f24b8426168fc2b93f830fa895911e2f1649ef570d73b48f6f73dd80eb6b3fbd68f687561d5fd613424c97e558a9
7
+ data.tar.gz: e8451147cfcb761affc302a442da37ad0311ce09201a515d4c29205724463e301d9c63e5998df2af7481d9c38e33955fd24654837b88e7fda7a53e2878eebade
@@ -0,0 +1,4 @@
1
+ template: |
2
+ ## What's Changed
3
+
4
+ $CHANGES
@@ -1,10 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.5.0
4
- - 2.4.3
5
- - 2.3.6
6
- - 2.2.9
7
- - 2.1.10
3
+ - 2.5.1
4
+ - 2.4.4
5
+ - 2.3.7
6
+ addons:
7
+ chrome: stable
8
8
  env:
9
9
  global:
10
10
  - GIT_COMMITTED_AT=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then git log -1 --pretty=format:%ct;
@@ -22,13 +22,6 @@ script:
22
22
  gemfile:
23
23
  - Gemfile
24
24
  - gemfiles/rails4.gemfile
25
- - gemfiles/rails5.gemfile
26
- matrix:
27
- exclude:
28
- - rvm: 2.1.10
29
- gemfile: Gemfile
30
- - rvm: 2.1.10
31
- gemfile: gemfiles/rails5.gemfile
32
25
  notifications:
33
26
  slack:
34
27
  secure: csciM073msTrOOdVYVXdAsrx2sR3Y1BKL0VvlSsYxBJawDa8BFNl6Fw8Uz1V2n4OfnkMvMCME4I3EXsCb4Kl5omnK+7ibeCzzzkCR5VwUs5/vLY7awUfCiihSCqg5ULAp2T1whQJUl5HY9Ot62sujIUX/FUhPzdbCqaKQ7cVkUo=
@@ -1,3 +1,9 @@
1
+ ## 1.3.0 (2018-07-23)
2
+
3
+ * do not create new product when product id is provided (#115) - Thanks to @renchap for reporting this
4
+ * updates travis to latest rubies (#112) - Note that after this change we will only run tests on Ruby 2.5, 2.4 and 2.3
5
+
6
+
1
7
  ## 1.2.2 (2018-04-16)
2
8
 
3
9
  * adds callback form `customer.source.expiring`. Thanks @Japestrale!
data/Gemfile CHANGED
@@ -3,23 +3,20 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in stripe-rails.gemspec
4
4
  gemspec
5
5
 
6
- gem "bundler", ">= 1.3.0"
7
- gem "rake"
8
- gem 'tzinfo'
9
- gem 'mocha'
10
- gem 'pry'
6
+ gem 'rake'
11
7
 
12
8
  group :development, :test do
13
9
  gem 'm'
14
10
  end
15
11
 
16
12
  group :test do
13
+ gem 'mocha'
17
14
  gem 'simplecov', require: false
18
- # NOTE: tracking master temporarily until they
19
- # release https://github.com/rebelidealist/stripe-ruby-mock/pull/433
20
- gem 'stripe-ruby-mock', github: 'rebelidealist/stripe-ruby-mock'
21
- gem 'poltergeist' # required for system tests
22
- gem 'phantomjs' # ditto
23
- gem 'puma' # ditto
15
+ gem 'stripe-ruby-mock'
24
16
  gem 'webmock'
17
+ # Required for system tests
18
+ gem 'capybara'
19
+ gem 'chromedriver-helper'
20
+ gem 'puma'
21
+ gem 'selenium-webdriver'
25
22
  end
data/README.md CHANGED
@@ -145,6 +145,14 @@ Stripe.plan :gold do |plan|
145
145
  plan.amount = 999 # $9.99
146
146
  plan.interval = 'month'
147
147
  end
148
+
149
+ Stripe.plan :bronze do |plan|
150
+ # Use an existing product id to prevent a new plan from
151
+ # getting created
152
+ plan.product_id = 'prod_XXXXXXXXXXXXXX'
153
+ plan.amount = 999 # $9.99
154
+ plan.interval = 'month'
155
+ end
148
156
  ```
149
157
 
150
158
  This will define constants for these plans in the Stripe::Plans module so that you
@@ -1,20 +1,19 @@
1
1
  source :rubygems
2
2
 
3
- gem 'rails', '~> 4'
3
+ gem 'rails', '~> 4.2'
4
4
 
5
- gem "bundler", ">= 1.3.0"
6
- gem "rake"
7
- gem 'tzinfo'
8
- gem 'mocha'
9
- gem 'pry'
5
+ gem 'rake'
10
6
  gem 'responders', '~> 2.0' # to support Rails 4.2
11
7
  gem 'stripe'
12
- gem 'stripe-ruby-mock', '~> 2.4'
13
8
 
14
9
  group :test do
10
+ gem 'mocha'
15
11
  gem 'simplecov', require: false
16
- gem 'poltergeist'
17
- gem 'phantomjs', :require => 'phantomjs/poltergeist'
18
- gem 'puma'
12
+ gem 'stripe-ruby-mock'
19
13
  gem 'webmock'
14
+ # Required for system tests
15
+ gem 'capybara'
16
+ gem 'chromedriver-helper'
17
+ gem 'puma'
18
+ gem 'selenium-webdriver'
20
19
  end
@@ -3,16 +3,26 @@ module Stripe
3
3
  include ConfigurationBuilder
4
4
 
5
5
  configuration_for :plan do
6
- attr_accessor :name, :amount, :interval, :interval_count, :trial_period_days,
7
- :currency, :metadata, :statement_descriptor
6
+ attr_accessor :name,
7
+ :amount,
8
+ :interval,
9
+ :interval_count,
10
+ :trial_period_days,
11
+ :currency,
12
+ :metadata,
13
+ :statement_descriptor,
14
+ :product_id
8
15
 
9
- validates_presence_of :id, :amount, :currency, :name
16
+ validates_presence_of :id, :amount, :currency
10
17
 
11
- validates_inclusion_of :interval, :in => %w(day week month year),
12
- :message => "'%{value}' is not one of 'day', 'week', 'month' or 'year'"
18
+ validates_inclusion_of :interval,
19
+ :in => %w(day week month year),
20
+ :message => "'%{value}' is not one of 'day', 'week', 'month' or 'year'"
13
21
 
14
22
  validates :statement_descriptor, :length => { :maximum => 22 }
15
23
 
24
+ validate :name_or_product_id
25
+
16
26
  def initialize(*args)
17
27
  super(*args)
18
28
  @currency = 'usd'
@@ -21,6 +31,9 @@ module Stripe
21
31
  end
22
32
 
23
33
  private
34
+ def name_or_product_id
35
+ errors.add(:base, 'must have a product_id or a name') unless (@product_id.present? ^ @name.present?)
36
+ end
24
37
 
25
38
  def create_options
26
39
  if api_version_after_switch_to_products_in_plans
@@ -44,10 +57,7 @@ module Stripe
44
57
  def default_create_options
45
58
  {
46
59
  :currency => @currency,
47
- product: {
48
- :name => @name,
49
- :statement_descriptor => @statement_descriptor,
50
- },
60
+ product: product_options,
51
61
  :amount => @amount,
52
62
  :interval => @interval,
53
63
  :interval_count => @interval_count,
@@ -56,6 +66,10 @@ module Stripe
56
66
  }
57
67
  end
58
68
 
69
+ def product_options
70
+ @product_id.presence || { :name => @name, :statement_descriptor => @statement_descriptor }
71
+ end
72
+
59
73
  def create_options_without_products
60
74
  {
61
75
  :currency => @currency,
@@ -1,5 +1,5 @@
1
1
  module Stripe
2
2
  module Rails
3
- VERSION = '1.2.2'
3
+ VERSION = '1.3.0'
4
4
  end
5
5
  end
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'building coupons' do
4
+ parallelize_me!
5
+
4
6
  before do
5
7
  Stripe::Coupons.configurations.clear
6
8
  end
@@ -1,3 +1,7 @@
1
1
  <%= stripe_javascript_tag (params[:version] || :v3) %>
2
2
 
3
- <p>This page tests the loading and initialization of Stripe JS</p>
3
+ <script>
4
+ if (typeof(Stripe) != 'undefined') {
5
+ document.write("<p>This page tests the loading and initialization of Stripe JS</p>");
6
+ }
7
+ </script>
@@ -10,6 +10,8 @@ require "stripe-rails"
10
10
 
11
11
  module Dummy
12
12
  class Application < Rails::Application
13
+ config.stripe.publishable_key = 'pk_test_XXXYYYZZZ'
14
+
13
15
  # Settings in config/environments/* take precedence over those specified here.
14
16
  # Application configuration should go into files in config/initializers
15
17
  # -- all .rb files in that directory are automatically loaded.
@@ -14,7 +14,7 @@ Dummy::Application.configure do
14
14
  config.action_controller.perform_caching = false
15
15
 
16
16
  # Don't care if the mailer can't send
17
- config.action_mailer.raise_delivery_errors = false
17
+ # config.action_mailer.raise_delivery_errors = false
18
18
 
19
19
  # Print deprecation notices to the Rails logger
20
20
  config.active_support.deprecation = :log
@@ -23,15 +23,15 @@ Dummy::Application.configure do
23
23
  config.action_dispatch.best_standards_support = :builtin
24
24
 
25
25
  # Raise exception on mass assignment protection for Active Record models
26
- config.active_record.mass_assignment_sanitizer = :strict
26
+ # config.active_record.mass_assignment_sanitizer = :strict
27
27
 
28
28
  # Log the query plan for queries taking more than this (works
29
29
  # with SQLite, MySQL, and PostgreSQL)
30
- config.active_record.auto_explain_threshold_in_seconds = 0.5
30
+ # config.active_record.auto_explain_threshold_in_seconds = 0.5
31
31
 
32
32
  # Do not compress assets
33
- config.assets.compress = false
33
+ # config.assets.compress = false
34
34
 
35
35
  # Expands the lines which load the assets
36
- config.assets.debug = true
36
+ # config.assets.debug = true
37
37
  end
@@ -1,6 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stripe::PingsController do
4
+ parallelize_me!
4
5
  include Rack::Test::Methods
5
6
 
6
7
  let(:app) { Rails.application }
@@ -14,9 +14,7 @@ describe 'building plans' do
14
14
  end
15
15
  end
16
16
 
17
- after do
18
- Stripe::Plans.send(:remove_const, :PRIMO)
19
- end
17
+ after { Stripe::Plans.send(:remove_const, :PRIMO) }
20
18
 
21
19
  it 'is accessible via id' do
22
20
  Stripe::Plans::PRIMO.wont_be_nil
@@ -103,6 +101,28 @@ describe 'building plans' do
103
101
  }.must_raise Stripe::InvalidConfigurationError
104
102
  end
105
103
 
104
+ describe 'name and product id validation' do
105
+ it 'should be valid when using just the product id' do
106
+ Stripe.plan :prodded do |plan|
107
+ plan.product_id = 'acme'
108
+ plan.amount = 999
109
+ plan.interval = 'month'
110
+ end
111
+ Stripe::Plans::PRODDED.wont_be_nil
112
+ end
113
+
114
+ it 'should be invalid when using both name and product id' do
115
+ lambda {
116
+ Stripe.plan :broken do |plan|
117
+ plan.name = 'Acme as a service'
118
+ plan.product_id = 'acme'
119
+ plan.amount = 999
120
+ plan.interval = 'month'
121
+ end
122
+ }.must_raise Stripe::InvalidConfigurationError
123
+ end
124
+ end
125
+
106
126
  describe 'uploading' do
107
127
  include FixtureLoader
108
128
 
@@ -166,6 +186,31 @@ describe 'building plans' do
166
186
  )
167
187
  Stripe::Plans::GOLD.put!
168
188
  end
189
+
190
+ describe 'when using a product id' do
191
+ before do
192
+ Stripe::Plans::GOLD.product_id = 'prod_XXXXXXXXXXXXXX'
193
+ Stripe::Plans::GOLD.name = nil
194
+ end
195
+ after do
196
+ Stripe::Plans::GOLD.product_id = nil
197
+ Stripe::Plans::GOLD.name = 'Solid Gold'
198
+ end
199
+
200
+ it 'creates the plan online with the product id' do
201
+ Stripe::Plan.expects(:create).with(
202
+ :id => :gold,
203
+ :currency => 'usd',
204
+ :product => 'prod_XXXXXXXXXXXXXX',
205
+ :amount => 699,
206
+ :interval => 'month',
207
+ :interval_count => 1,
208
+ :trial_period_days => 0,
209
+ :metadata => nil,
210
+ )
211
+ Stripe::Plans::GOLD.put!
212
+ end
213
+ end
169
214
  end
170
215
 
171
216
  describe 'when api_version is not set for api versions that support products' do
@@ -8,6 +8,8 @@ require 'minitest/autorun'
8
8
  require 'webmock/minitest'
9
9
  WebMock.disable_net_connect!(allow_localhost: true)
10
10
 
11
+ require 'selenium-webdriver'
12
+
11
13
  # Configure Rails Environment
12
14
  ENV["RAILS_ENV"] = "test"
13
15
  ENV['STRIPE_SECRET_KEY'] = 'XYZ'
@@ -28,4 +30,4 @@ end
28
30
  Stripe::Engine.testing = true
29
31
  require 'mocha/setup'
30
32
 
31
- require 'irb'
33
+ require 'irb'
@@ -1,11 +1,8 @@
1
1
  require File.expand_path("null_system_test_case", __dir__)
2
- require "capybara/poltergeist"
3
- require 'phantomjs/poltergeist'
4
2
 
5
3
  # For Rails 4 compat
6
4
  SystemTestCaseKlass = defined?(ActionDispatch::SystemTestCase) ? ActionDispatch::SystemTestCase : NullSystemTestCase
7
5
 
8
6
  class ApplicationSystemTestCase < SystemTestCaseKlass
9
- # Note: errors only show up with BOTH js_errors: true, inspector: true
10
- driven_by :poltergeist, options: { js_errors: true, inspector: true, phantomjs: Phantomjs.path }
7
+ driven_by :selenium_chrome_headless
11
8
  end
@@ -1,5 +1,5 @@
1
1
  class NullSystemTestCase
2
- def self.driven_by(_, _)
2
+ def self.driven_by(*_)
3
3
  end
4
4
 
5
5
  def self.setup
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stripe-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charles Lowell
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-04-16 00:00:00.000000000 Z
13
+ date: 2018-07-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -62,6 +62,7 @@ extensions: []
62
62
  extra_rdoc_files: []
63
63
  files:
64
64
  - ".codeclimate.yml"
65
+ - ".github/release-drafter.yml"
65
66
  - ".gitignore"
66
67
  - ".rubocop.yml"
67
68
  - ".travis.yml"
@@ -80,7 +81,6 @@ files:
80
81
  - app/views/stripe/_js.html.erb
81
82
  - config/routes.rb
82
83
  - gemfiles/rails4.gemfile
83
- - gemfiles/rails5.gemfile
84
84
  - lib/generators/stripe/install_generator.rb
85
85
  - lib/generators/templates/coupons.rb
86
86
  - lib/generators/templates/plans.rb
@@ -1,20 +0,0 @@
1
- source :rubygems
2
-
3
- gem 'rails', '~> 5'
4
-
5
- gem "bundler", ">= 1.3.0"
6
- gem "rake"
7
- gem 'tzinfo'
8
- gem 'mocha'
9
- gem 'pry'
10
- gem 'responders', '~> 2.0' # to support Rails 4.2
11
- gem 'stripe'
12
- gem 'stripe-ruby-mock', '~> 2.4'
13
-
14
- group :test do
15
- gem 'simplecov', require: false
16
- gem 'poltergeist'
17
- gem 'phantomjs', :require => 'phantomjs/poltergeist'
18
- gem 'puma'
19
- gem 'webmock'
20
- end