supercharged 2.0.4 → 2.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5e8d7ac5853344d5679abd3e17acf7dc1b6279b6
4
+ data.tar.gz: 6960d5ece3a7b407c7b13ca86dd57715452b7bea
5
+ SHA512:
6
+ metadata.gz: 602af557001d93eb89e6e76412b6e1a1beea04be1a75f98850710471a3ec073e15805fbbf1587bfedde64532b1d87d0877fa1fb23a19c6fb11456b6eef571c80
7
+ data.tar.gz: ac0b75823e466d61dd7c05c399b6e3cb008f739491a2059443a0f6dd9f7265140fdcf315f686c9a4d1fe85d4a4e002a33ddbbe40152c752a3e7e8e2fd8ca060d
data/README.md CHANGED
@@ -36,6 +36,7 @@ Create config/initializers/supercharged.rb
36
36
 
37
37
  ```ruby
38
38
  ActiveMerchant::Billing::Base.integration_mode = Rails.env.production? ? :production : :test
39
+ ActiveMerchant::Billing::Base.mode = Rails.env.production? ? :production : :test
39
40
  ```
40
41
 
41
42
  Add
@@ -81,7 +82,8 @@ supercharged controllers: {charges: :charges, gateway_notifications: :gateway_no
81
82
  Create model in app/models/charge.rb and inherit from Supercharged::Charge::Base
82
83
 
83
84
  ```ruby
84
- class Charge < Supercharged::Charge::Base
85
+ class Charge < ActiveRecord::Base
86
+ include Supercharged::Charge::Base
85
87
  # your custom code here
86
88
 
87
89
  def approve(real_amount)
@@ -5,7 +5,7 @@ class @SuperchargedForm
5
5
 
6
6
  @amount_input = @form.find("[role='charge-amount']")
7
7
  @gateway_name_input = @form.find("[role='charge-gateway-name']")
8
- @id_input = if @form.find("[role='charge-id']").length then @form.find("[role='charge-id']") else @form.find("[value='<%= Supercharged::ChargesHelper::FAKE_ORDER_ID %>']")
8
+ @id_input = @form.find("[role='payment-form-order']")
9
9
 
10
10
  @form.submit =>
11
11
  valid = @startPayment()
@@ -39,7 +39,7 @@ class @SuperchargedForm
39
39
  async: false,
40
40
  data: {charge: charge_attributes},
41
41
  success: (response) ->
42
- options.success(response)
42
+ options.success(response.charge)
43
43
  error: (jqXHR, status, errorThrown)=>
44
44
  return unless jqXHR.status == 422
45
45
 
@@ -8,7 +8,7 @@ class Supercharged::ChargesController < ApplicationController
8
8
  charge.user = current_user
9
9
 
10
10
  if charge.save
11
- render json: charge.as_json(only: [:id])
11
+ render json: { charge: charge.as_json(only: [:id]) }
12
12
  else
13
13
  render json: { errors: charge.errors }, status: :unprocessable_entity
14
14
  end
@@ -9,10 +9,10 @@ class Supercharged::GatewayNotificationsController < ApplicationController
9
9
  @notification = GatewayNotification.create!(params: params, gateway: params[:gateway], raw_post: request.raw_post)
10
10
  @notification.logger = persistent_logger
11
11
 
12
- error = if !@notification.complete?
13
- "not_completed"
14
- elsif !@notification.acknowledge
12
+ error = if !@notification.acknowledge
15
13
  "acknowledge_failed"
14
+ elsif !@notification.complete?
15
+ "not_completed"
16
16
  elsif !@notification.charge
17
17
  "charge_not_found"
18
18
  end
@@ -23,7 +23,7 @@ class Supercharged::GatewayNotificationsController < ApplicationController
23
23
  charge = @notification.charge
24
24
 
25
25
  if charge && !charge.error?
26
- @notification.charge.failed!
26
+ @notification.charge.fail
27
27
  @notification.charge.update_attribute(:error, error)
28
28
  end
29
29
 
@@ -1,6 +1,5 @@
1
1
  module Supercharged::ChargesHelper
2
2
  # No order id while generating form. It will be added later via JS
3
- # JS finds order input by this fake id because id and name will be integration specific
4
3
  FAKE_ORDER_ID = "[payment_order_id]"
5
4
 
6
5
  def charge_form_for(service_name, options = {}, &block)
@@ -12,10 +11,11 @@ module Supercharged::ChargesHelper
12
11
  options = with_default_html_options(options)
13
12
 
14
13
  account = options.delete(:account)
15
- notify_url = gateways_result_url(service_name)
16
14
 
17
15
  payment_service_for(FAKE_ORDER_ID, account, options) do |service|
18
- service.notify_url notify_url
16
+ service.notify_url gateways_result_url(service_name)
17
+ service.return_url root_url
18
+ service.cancel_return_url new_charge_url
19
19
  block.call(service)
20
20
  end
21
21
  end
@@ -40,9 +40,7 @@ module Supercharged::ChargesHelper
40
40
  {
41
41
  role: "charge-amount",
42
42
  required: true,
43
- data: {
44
- min_value: Charge.min_amount
45
- }
43
+ min: Charge.new(user: current_user).min_amount
46
44
  }
47
45
  end
48
46
 
data/app/models/charge.rb CHANGED
@@ -1,2 +1,3 @@
1
- class Charge < Supercharged::Charge::Base
1
+ class Charge < ActiveRecord::Base
2
+ include Supercharged::Charge::Base
2
3
  end
@@ -12,7 +12,13 @@ class GatewayNotification < ActiveRecord::Base
12
12
  attr_accessor :raw_post, :logger
13
13
 
14
14
  def acknowledge
15
- adapter.acknowledge
15
+ res = adapter.acknowledge
16
+
17
+ if charge_id.nil? && adapter.item_id
18
+ update_column(:charge_id, adapter.item_id)
19
+ end
20
+
21
+ res
16
22
  end
17
23
 
18
24
  def complete?
@@ -28,12 +34,14 @@ class GatewayNotification < ActiveRecord::Base
28
34
  end
29
35
 
30
36
  def approve
37
+ raise EmptyChargeIdError unless charge_id
38
+
31
39
  logger.info "real amount = #{real_amount}"
32
40
  charge.approve(real_amount) unless charge.ok?
33
41
  end
34
42
 
35
43
  def real_amount
36
- params[service.mappings[:amount]]
44
+ adapter.gross
37
45
  end
38
46
 
39
47
  private
@@ -44,12 +52,9 @@ class GatewayNotification < ActiveRecord::Base
44
52
  raise "Unknown integration '#{gateway}'"
45
53
  end
46
54
 
47
- def service
48
- "ActiveMerchant::Billing::Integrations::#{gateway.classify}::Helper".classify.constantize
49
- end
50
-
51
55
  def set_charge_id
52
- self.charge_id = adapter.item_id || raise(EmptyChargeIdError)
56
+ self.charge_id ||= adapter.item_id
57
+ true
53
58
  end
54
59
 
55
60
  end
@@ -1,51 +1,52 @@
1
1
  module Supercharged
2
2
  module Charge
3
- class Base < ActiveRecord::Base
4
- include ActiveModel::ForbiddenAttributesProtection
3
+ module Base
4
+ extend ActiveSupport::Concern
5
5
 
6
- self.table_name = "charges"
7
- self.abstract_class = true
6
+ included do
7
+ self.table_name = "charges"
8
8
 
9
- belongs_to :user
10
- has_many :gateway_input_notifications
11
- has_many :gateway_responses
9
+ belongs_to :user
10
+ has_many :gateway_input_notifications
11
+ has_many :gateway_responses
12
12
 
13
- validates :amount, presence: true, numericality: {
14
- greater_than_or_equal_to: ->(model) {
15
- model.class.min_amount
13
+ validates :amount, presence: true, numericality: {
14
+ greater_than_or_equal_to: :min_amount
16
15
  }
17
- }
18
16
 
19
- scope :latest, order("created_at DESC")
20
- scope :by_gateway, ->(gateway_name) { where(gateway_name: gateway_name.to_s) }
17
+ scope :latest, ->{ order("created_at DESC") }
18
+ scope :by_gateway, ->(gateway_name) { where(gateway_name: gateway_name.to_s) }
21
19
 
22
- state_machine :state, initial: :new do
23
- # store_audit_trail
20
+ state_machine :state, initial: :new do
21
+ # store_audit_trail
24
22
 
25
- state :new
26
- state :rejected
27
- state :ok
28
- state :error
23
+ state :new
24
+ state :rejected
25
+ state :ok
26
+ state :error
29
27
 
30
- event :set_ok do
31
- transition [:new, :error, :pending] => :ok
32
- end
28
+ event :set_ok do
29
+ transition [:new, :error, :pending] => :ok
30
+ end
33
31
 
34
- event :failed do
35
- transition [:new, :pending] => :error
36
- end
32
+ event :set_failed do
33
+ transition [:new, :pending] => :error
34
+ end
37
35
 
38
- event :reject do
39
- transition [:new, :error, :pending] => :rejected
40
- end
36
+ event :reject do
37
+ transition [:new, :error, :pending] => :rejected
38
+ end
41
39
 
42
- event :set_pending do
43
- transition [:new, :error] => :pending
40
+ event :set_pending do
41
+ transition [:new, :error] => :pending
42
+ end
44
43
  end
45
44
  end
46
45
 
47
- def self.with_token(token)
48
- where(gateway_token: token).first
46
+ module ClassMethods
47
+ def with_token(token)
48
+ where(gateway_token: token).first
49
+ end
49
50
  end
50
51
 
51
52
  # require implicit amount from gateway, not from user
@@ -54,7 +55,12 @@ module Supercharged
54
55
  set_ok!
55
56
  end
56
57
 
57
- def self.min_amount
58
+ def fail
59
+ self.state_event = "set_failed"
60
+ save(validate: false)
61
+ end
62
+
63
+ def min_amount
58
64
  1
59
65
  end
60
66
 
data/config/routes.rb CHANGED
@@ -15,7 +15,7 @@ module ActionDispatch::Routing
15
15
  end
16
16
  end
17
17
 
18
- match "gateways/:gateway/result" => "#{controllers[:gateway_notifications]}#create", as: :gateways_result
18
+ post "gateways/:gateway/result" => "#{controllers[:gateway_notifications]}#create", as: :gateways_result
19
19
  end
20
20
 
21
21
  end
@@ -1,3 +1,3 @@
1
1
  module Supercharged
2
- VERSION = "2.0.4"
2
+ VERSION = "2.1.0"
3
3
  end
data/test/fake_app.rb CHANGED
@@ -10,6 +10,7 @@ app = Class.new(Rails::Application)
10
10
  app.config.secret_token = "3b7cd727ee24e8444053437c36cc66c4"
11
11
  app.config.session_store :cookie_store, :key => "_fakeapp_session"
12
12
  app.config.active_support.deprecation = :log
13
+ app.config.eager_load = false
13
14
  app.initialize!
14
15
 
15
16
  Rails.application.routes.draw do
@@ -2,14 +2,14 @@ require 'test_helper'
2
2
 
3
3
  describe Supercharged::ChargesController do
4
4
  describe "create action" do
5
- context "authorized" do
5
+ describe "authorized" do
6
6
  let(:fake_user) { User.create! }
7
7
 
8
8
  before do
9
9
  Supercharged::ChargesController.any_instance.stubs(:current_user).returns(fake_user)
10
10
  end
11
11
 
12
- context "correct conditions" do
12
+ describe "correct conditions" do
13
13
  it "response contains id in json" do
14
14
  post :create, charge: { amount: 100 }
15
15
 
@@ -20,7 +20,7 @@ describe Supercharged::ChargesController do
20
20
  end
21
21
  end
22
22
 
23
- context "bad conditions" do
23
+ describe "bad conditions" do
24
24
  it "response contains errors in json" do
25
25
  post :create, charge: { amount: 0 }
26
26
 
@@ -2,18 +2,18 @@ require 'test_helper'
2
2
 
3
3
  describe Supercharged::GatewayNotificationsController do
4
4
  describe "create" do
5
- let(:charge) { Charge.create!({user_id: 1, amount: 10}, without_protection: true) }
5
+ let(:charge) { Charge.create!(user_id: 1, amount: 10) }
6
6
 
7
- context "authorized" do
7
+ describe "authorized" do
8
8
  let(:fake_user) { stub(id: 1) }
9
9
 
10
10
  before do
11
11
  GatewayNotification.any_instance.stubs(:current_user).returns(fake_user)
12
12
  end
13
13
 
14
- context "correct conditions" do
14
+ describe "correct conditions" do
15
15
  it "works with good notification" do
16
- adapter = stub(item_id: 1, "complete?" => true, acknowledge: true, charge: charge)
16
+ adapter = stub(item_id: 1, "complete?" => true, acknowledge: true, charge: charge, gross: 100)
17
17
 
18
18
  GatewayNotification.any_instance.stubs(:adapter).returns(adapter)
19
19
 
@@ -26,7 +26,7 @@ describe Supercharged::GatewayNotificationsController do
26
26
  end
27
27
  end
28
28
 
29
- context "bad conditions" do
29
+ describe "bad conditions" do
30
30
  it "completed = false" do
31
31
  adapter = stub(item_id: 1, "complete?" => false, acknowledge: true, charge: charge)
32
32
 
@@ -38,7 +38,7 @@ describe Supercharged::GatewayNotificationsController do
38
38
  charge.state_name.must_equal :error
39
39
  charge.error.must_equal "not_completed"
40
40
 
41
- assert_response :bad_request
41
+ assert_response :found
42
42
  end
43
43
 
44
44
  it "acknowledge = false" do
@@ -52,12 +52,12 @@ describe Supercharged::GatewayNotificationsController do
52
52
  charge.state_name.must_equal :error
53
53
  charge.error.must_equal "acknowledge_failed"
54
54
 
55
- assert_response :bad_request
55
+ assert_response :found
56
56
  end
57
57
  end
58
58
  end
59
59
 
60
- context "without any payload params" do
60
+ describe "without any payload params" do
61
61
  it "returns bad_request" do
62
62
  post :create, gateway: "paypal"
63
63
 
@@ -2,7 +2,9 @@ require 'test_helper'
2
2
 
3
3
  class Supercharged::ChargesHelperTest < ActionView::TestCase
4
4
  def test_min_value
5
- field = charge_form_amount_field(sample_service, { min: 500 })
5
+ self.stubs(:current_user).returns(User.new)
6
+ Charge.any_instance.stubs(:min_amount).returns(500)
7
+ field = charge_form_amount_field(sample_service)
6
8
  field.must_include 'min="500"'
7
9
  end
8
10
 
@@ -21,7 +21,7 @@ describe Charge do
21
21
  end
22
22
 
23
23
  describe "states" do
24
- subject { Charge.create!({user_id: 1, amount: 10}, without_protection: true) }
24
+ subject { Charge.create!(user_id: 1, amount: 10) }
25
25
 
26
26
  describe "initial state" do
27
27
  it "initial state is new" do
@@ -4,18 +4,20 @@ describe GatewayNotification do
4
4
  describe "create" do
5
5
  it "raise EmptyChargeId if charge_id = nil" do
6
6
  ->{
7
- GatewayNotification.create!(gateway: "webmoney")
7
+ notification = GatewayNotification.create!(gateway: "webmoney")
8
+ notification.approve
8
9
  }.must_raise GatewayNotification::EmptyChargeIdError
9
10
  end
10
11
 
11
- it "charge id is inherited from adapter" do
12
+ it "populates params with result" do
12
13
  gateway_notification = GatewayNotification.new
13
14
 
14
15
  adapter = stub(item_id: 42)
15
16
  gateway_notification.stubs(:adapter).returns(adapter)
16
17
 
17
18
  gateway_notification.save!
19
+
18
20
  gateway_notification.charge_id.must_equal 42
19
21
  end
20
22
  end
21
- end
23
+ end
data/test/test_helper.rb CHANGED
@@ -3,7 +3,6 @@ ENV["RAILS_ENV"] = "test"
3
3
  require "minitest/autorun"
4
4
  require "minitest/spec"
5
5
  require "minitest/pride"
6
- require "minitest-spec-context"
7
6
  require "mocha/setup"
8
7
 
9
8
  require 'rails'
@@ -15,7 +14,6 @@ require "minitest/rails"
15
14
 
16
15
  require 'state_machine'
17
16
  require 'state_machine-audit_trail'
18
- require 'strong_parameters'
19
17
 
20
18
  require "supercharged"
21
19
  require "fake_app"
metadata CHANGED
@@ -1,174 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: supercharged
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
5
- prerelease:
4
+ version: 2.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - divineforest
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-11 00:00:00.000000000 Z
11
+ date: 2014-02-10 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: '3.1'
19
+ version: '4'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '3.1'
26
+ version: '4'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: state_machine
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: state_machine-audit_trail
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: activemerchant
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: strong_parameters
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :runtime
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
66
+ - - ">="
92
67
  - !ruby/object:Gem::Version
93
68
  version: '0'
94
69
  - !ruby/object:Gem::Dependency
95
70
  name: sqlite3
96
71
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
72
  requirements:
99
- - - ! '>='
73
+ - - ">="
100
74
  - !ruby/object:Gem::Version
101
75
  version: '0'
102
76
  type: :development
103
77
  prerelease: false
104
78
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
79
  requirements:
107
- - - ! '>='
80
+ - - ">="
108
81
  - !ruby/object:Gem::Version
109
82
  version: '0'
110
83
  - !ruby/object:Gem::Dependency
111
84
  name: minitest
112
85
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ~>
116
- - !ruby/object:Gem::Version
117
- version: '3.0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ~>
124
- - !ruby/object:Gem::Version
125
- version: '3.0'
126
- - !ruby/object:Gem::Dependency
127
- name: minitest-spec-context
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
86
  requirements:
131
- - - ! '>='
87
+ - - ">="
132
88
  - !ruby/object:Gem::Version
133
89
  version: '0'
134
90
  type: :development
135
91
  prerelease: false
136
92
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
93
  requirements:
139
- - - ! '>='
94
+ - - ">="
140
95
  - !ruby/object:Gem::Version
141
96
  version: '0'
142
97
  - !ruby/object:Gem::Dependency
143
98
  name: minitest-rails
144
99
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
100
  requirements:
147
- - - ! '>='
101
+ - - ">="
148
102
  - !ruby/object:Gem::Version
149
103
  version: '0'
150
104
  type: :development
151
105
  prerelease: false
152
106
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
107
  requirements:
155
- - - ! '>='
108
+ - - ">="
156
109
  - !ruby/object:Gem::Version
157
110
  version: '0'
158
111
  - !ruby/object:Gem::Dependency
159
112
  name: mocha
160
113
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
114
  requirements:
163
- - - ! '>='
115
+ - - ">="
164
116
  - !ruby/object:Gem::Version
165
117
  version: '0'
166
118
  type: :development
167
119
  prerelease: false
168
120
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
121
  requirements:
171
- - - ! '>='
122
+ - - ">="
172
123
  - !ruby/object:Gem::Version
173
124
  version: '0'
174
125
  description:
@@ -177,6 +128,9 @@ executables: []
177
128
  extensions: []
178
129
  extra_rdoc_files: []
179
130
  files:
131
+ - MIT-LICENSE
132
+ - README.md
133
+ - Rakefile
180
134
  - app/assets/javascripts/charge_form.js.coffee.erb
181
135
  - app/assets/javascripts/supercharged.js
182
136
  - app/controllers/supercharged/charges_controller.rb
@@ -192,13 +146,10 @@ files:
192
146
  - config/routes.rb
193
147
  - lib/generators/supercharged/migrations_generator.rb
194
148
  - lib/generators/supercharged/templates/install_migration.rb
149
+ - lib/supercharged.rb
195
150
  - lib/supercharged/activemerchant.rb
196
151
  - lib/supercharged/helpers.rb
197
152
  - lib/supercharged/version.rb
198
- - lib/supercharged.rb
199
- - MIT-LICENSE
200
- - Rakefile
201
- - README.md
202
153
  - test/fake_app.rb
203
154
  - test/supercharged/controllers/charges_controller_test.rb
204
155
  - test/supercharged/controllers/gateway_notifications_controller_test.rb
@@ -208,33 +159,26 @@ files:
208
159
  - test/test_helper.rb
209
160
  homepage:
210
161
  licenses: []
162
+ metadata: {}
211
163
  post_install_message:
212
164
  rdoc_options: []
213
165
  require_paths:
214
166
  - lib
215
167
  required_ruby_version: !ruby/object:Gem::Requirement
216
- none: false
217
168
  requirements:
218
- - - ! '>='
169
+ - - ">="
219
170
  - !ruby/object:Gem::Version
220
171
  version: '0'
221
- segments:
222
- - 0
223
- hash: -682491328917340782
224
172
  required_rubygems_version: !ruby/object:Gem::Requirement
225
- none: false
226
173
  requirements:
227
- - - ! '>='
174
+ - - ">="
228
175
  - !ruby/object:Gem::Version
229
176
  version: '0'
230
- segments:
231
- - 0
232
- hash: -682491328917340782
233
177
  requirements: []
234
178
  rubyforge_project:
235
- rubygems_version: 1.8.23
179
+ rubygems_version: 2.2.0
236
180
  signing_key:
237
- specification_version: 3
181
+ specification_version: 4
238
182
  summary: MVC solution for charges in rails
239
183
  test_files:
240
184
  - test/fake_app.rb