patch_ruby 1.0.0 → 1.2.5

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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +78 -0
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +30 -11
  5. data/Makefile +10 -0
  6. data/README.md +61 -8
  7. data/lib/patch_ruby.rb +2 -0
  8. data/lib/patch_ruby/models/allocation.rb +25 -0
  9. data/lib/patch_ruby/models/create_mass_estimate_request.rb +48 -4
  10. data/lib/patch_ruby/models/create_order_request.rb +75 -7
  11. data/lib/patch_ruby/models/create_preference_request.rb +7 -0
  12. data/lib/patch_ruby/models/error_response.rb +9 -0
  13. data/lib/patch_ruby/models/estimate.rb +29 -1
  14. data/lib/patch_ruby/models/estimate_list_response.rb +9 -0
  15. data/lib/patch_ruby/models/estimate_response.rb +9 -0
  16. data/lib/patch_ruby/models/meta_index_object.rb +11 -0
  17. data/lib/patch_ruby/models/order.rb +105 -4
  18. data/lib/patch_ruby/models/order_list_response.rb +9 -0
  19. data/lib/patch_ruby/models/order_response.rb +9 -0
  20. data/lib/patch_ruby/models/photo.rb +233 -0
  21. data/lib/patch_ruby/models/preference.rb +25 -0
  22. data/lib/patch_ruby/models/preference_list_response.rb +9 -0
  23. data/lib/patch_ruby/models/preference_response.rb +9 -0
  24. data/lib/patch_ruby/models/project.rb +141 -25
  25. data/lib/patch_ruby/models/project_list_response.rb +9 -0
  26. data/lib/patch_ruby/models/project_response.rb +9 -0
  27. data/lib/patch_ruby/models/standard.rb +254 -0
  28. data/lib/patch_ruby/version.rb +1 -1
  29. data/spec/api/estimates_api_spec.rb +6 -7
  30. data/spec/api/orders_api_spec.rb +10 -11
  31. data/spec/api/preferences_api_spec.rb +8 -9
  32. data/spec/api/projects_api_spec.rb +4 -5
  33. data/spec/constants.rb +3 -0
  34. data/spec/factories/allocations.rb +7 -0
  35. data/spec/factories/create_mass_estimate_requests.rb +6 -0
  36. data/spec/factories/create_order_requests.rb +8 -0
  37. data/spec/factories/create_preference_requests.rb +5 -0
  38. data/spec/factories/error_responses.rb +7 -0
  39. data/spec/factories/estimate_list_responses.rb +8 -0
  40. data/spec/factories/estimate_responses.rb +7 -0
  41. data/spec/factories/estimates.rb +8 -0
  42. data/spec/factories/meta_index_objects.rb +6 -0
  43. data/spec/factories/order_list_responses.rb +8 -0
  44. data/spec/factories/order_responses.rb +7 -0
  45. data/spec/factories/orders.rb +12 -0
  46. data/spec/factories/preference_list_responses.rb +8 -0
  47. data/spec/factories/preference_responses.rb +7 -0
  48. data/spec/factories/preferences.rb +7 -0
  49. data/spec/factories/project_list_responses.rb +8 -0
  50. data/spec/factories/project_responses.rb +7 -0
  51. data/spec/factories/projects.rb +15 -0
  52. data/spec/integration/estimates_spec.rb +4 -3
  53. data/spec/integration/orders_spec.rb +60 -1
  54. data/spec/integration/preferences_spec.rb +1 -1
  55. data/spec/integration/projects_spec.rb +19 -1
  56. data/spec/models/allocation_spec.rb +8 -2
  57. data/spec/models/create_mass_estimate_request_spec.rb +7 -2
  58. data/spec/models/create_order_request_spec.rb +7 -2
  59. data/spec/models/create_preference_request_spec.rb +8 -2
  60. data/spec/models/error_response_spec.rb +7 -2
  61. data/spec/models/estimate_list_response_spec.rb +7 -2
  62. data/spec/models/estimate_response_spec.rb +7 -2
  63. data/spec/models/estimate_spec.rb +8 -2
  64. data/spec/models/meta_index_object_spec.rb +7 -2
  65. data/spec/models/order_list_response_spec.rb +7 -2
  66. data/spec/models/order_response_spec.rb +7 -2
  67. data/spec/models/order_spec.rb +18 -2
  68. data/spec/models/preference_list_response_spec.rb +7 -2
  69. data/spec/models/preference_response_spec.rb +7 -2
  70. data/spec/models/preference_spec.rb +7 -2
  71. data/spec/models/project_list_response_spec.rb +7 -2
  72. data/spec/models/project_response_spec.rb +7 -2
  73. data/spec/models/project_spec.rb +21 -2
  74. data/spec/spec_helper.rb +11 -0
  75. data/spec/support/shared/generated_classes.rb +13 -0
  76. metadata +61 -17
@@ -0,0 +1,3 @@
1
+ module Constants
2
+ BIOMASS_TEST_PROJECT_ID = "pro_test_c3a9feba769fc7a8806377266ca9ff6a"
3
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :allocation, class: Patch::Allocation do
3
+ sequence(:id) { |n| n }
4
+ production { false }
5
+ mass_g { 100 }
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :create_mass_estimate_request, class: Patch::CreateMassEstimateRequest do
3
+ sequence(:project_id) { |n| n }
4
+ mass_g { 100 }
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :create_order_request, class: Patch::CreateOrderRequest do
3
+ sequence(:project_id) { |n| n }
4
+ mass_g { 100 }
5
+ total_price_cents_usd { 100 }
6
+ metadata { {} }
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ FactoryBot.define do
2
+ factory :create_preference_request, class: Patch::CreatePreferenceRequest do
3
+ sequence(:project_id) { |n| n }
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :error_response, class: Patch::ErrorResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :estimate_list_response, class: Patch::EstimateListResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ meta { {} }
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :estimate_response, class: Patch::EstimateResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :estimate, class: Patch::Estimate do
3
+ sequence(:id) { |n| n }
4
+ association :order
5
+ production { false }
6
+ type { "mass" }
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :meta_index_object, class: Patch::MetaIndexObject do
3
+ sequence(:next_page) { |n| n + 1 }
4
+ sequence(:prev_page) { |n| n - 1 }
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :order_list_response, class: Patch::OrderListResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ meta { {} }
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :order_response, class: Patch::OrderResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ FactoryBot.define do
2
+ factory :order, class: Patch::Order do
3
+ sequence(:id) { |n| n }
4
+ mass_g { 1_000 }
5
+ production { false }
6
+ state { "draft" }
7
+ allocation_state { "pending" }
8
+ price_cents_usd { 500 }
9
+ patch_fee_cents_usd { 5 }
10
+ metadata { {} }
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :preference_list_response, class: Patch::PreferenceListResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ meta { {} }
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :preference_response, class: Patch::PreferenceResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :preference, class: Patch::Preference do
3
+ sequence(:id) { |n| n }
4
+ association :project
5
+ allocation_percentage { 1 }
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :project_list_response, class: Patch::ProjectListResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ meta { {} }
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :project_response, class: Patch::ProjectResponse do
3
+ success { true }
4
+ error { {} }
5
+ data { {} }
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ FactoryBot.define do
2
+ factory :project, class: Patch::Project do
3
+ sequence(:id) { |n| n }
4
+ production { false }
5
+ name { "New Project" }
6
+ description { "New Descirption" }
7
+ type { "biomass" }
8
+ country { "DK" }
9
+ developer { "Danish Developer" }
10
+ photos { [] }
11
+ average_price_per_tonne_cents_usd { 120 }
12
+ remaining_mass_g { 1_000 }
13
+ standard { 'european_biochar_certificate' }
14
+ end
15
+ end
@@ -1,10 +1,11 @@
1
1
  RSpec.describe 'Estimates Integration' do
2
- it 'supports create, retrieve and list' do
3
- # Configure the Patch gem
2
+ before do
4
3
  Patch.configure do |config|
5
- config.access_token = ENV['PATCH_RUBY_API_KEY']
4
+ config.access_token = ENV['SANDBOX_API_KEY']
6
5
  end
6
+ end
7
7
 
8
+ it 'supports create, retrieve and list' do
8
9
  create_estimate_response = Patch::Estimate.create_mass_estimate(mass_g: 100)
9
10
  estimate_id = create_estimate_response.data.id
10
11
 
@@ -1,7 +1,7 @@
1
1
  RSpec.describe 'Orders Integration' do
2
2
  before do
3
3
  Patch.configure do |config|
4
- config.access_token = ENV['PATCH_RUBY_API_KEY']
4
+ config.access_token = ENV['SANDBOX_API_KEY']
5
5
  end
6
6
  end
7
7
 
@@ -25,6 +25,65 @@ RSpec.describe 'Orders Integration' do
25
25
  expect(orders.length).not_to be_zero
26
26
  end
27
27
 
28
+ it 'supports create with a project-id' do
29
+ retrieve_project_response = Patch::Project.retrieve_project(
30
+ Constants::BIOMASS_TEST_PROJECT_ID
31
+ )
32
+
33
+ project_id = retrieve_project_response.data.id
34
+ average_price_per_tonne_cents_usd = retrieve_project_response.data.average_price_per_tonne_cents_usd
35
+
36
+ order_mass_g = 100_000
37
+ tonne_per_gram = 1_000_000
38
+
39
+ expected_price = (average_price_per_tonne_cents_usd.to_f / tonne_per_gram) * order_mass_g
40
+
41
+ create_order_response = Patch::Order.create_order(mass_g: order_mass_g, project_id: project_id)
42
+
43
+ expect(create_order_response.success).to eq true
44
+ expect(create_order_response.data.id).not_to be_nil
45
+ expect(create_order_response.data.mass_g).to eq(order_mass_g)
46
+ expect(create_order_response.data.price_cents_usd.to_i).to eq(expected_price)
47
+ expect(create_order_response.data.patch_fee_cents_usd).not_to be_empty
48
+ end
49
+
50
+ it 'supports create with a total price' do
51
+ retrieve_project_response = Patch::Project.retrieve_project(
52
+ Constants::BIOMASS_TEST_PROJECT_ID
53
+ )
54
+
55
+ project_id = retrieve_project_response.data.id
56
+ total_price_cents_usd = 5_00
57
+
58
+ create_order_response = Patch::Order.create_order(
59
+ total_price_cents_usd: total_price_cents_usd,
60
+ project_id: project_id
61
+ )
62
+
63
+ expect(create_order_response.success).to eq true
64
+
65
+ order = create_order_response.data
66
+
67
+ expect(order.id).not_to be_nil
68
+ expect(order.mass_g).to eq(5_00_000)
69
+ expect(order.price_cents_usd.to_i).to eq(500)
70
+ expect(order.patch_fee_cents_usd).not_to be_empty
71
+ expect(
72
+ order.price_cents_usd.to_i + order.patch_fee_cents_usd.to_i
73
+ ).to eq(total_price_cents_usd)
74
+ end
75
+
76
+ it 'supports create with metadata' do
77
+ metadata = { user: 'john doe' }
78
+
79
+ create_order_response = Patch::Order.create_order(mass_g: 100, metadata: metadata)
80
+
81
+ expect(create_order_response.success).to eq true
82
+ expect(create_order_response.data.id).not_to be_nil
83
+ expect(create_order_response.data.mass_g).to eq(100)
84
+ expect(create_order_response.data.metadata).to eq(metadata)
85
+ end
86
+
28
87
  it 'supports place and cancel for orders created via an estimate' do
29
88
  create_estimate_to_place_response = Patch::Estimate.create_mass_estimate(mass_g: 100)
30
89
  order_to_place_id = create_estimate_to_place_response.data.order.id
@@ -1,7 +1,7 @@
1
1
  RSpec.describe 'Preferences Integration' do
2
2
  before do
3
3
  Patch.configure do |config|
4
- config.access_token = ENV['PATCH_RUBY_API_KEY']
4
+ config.access_token = ENV['SANDBOX_API_KEY']
5
5
  end
6
6
  end
7
7
 
@@ -1,6 +1,6 @@
1
1
  RSpec.describe 'Projects Integration' do
2
2
  Patch.configure do |config|
3
- config.access_token = ENV['PATCH_RUBY_API_KEY']
3
+ config.access_token = ENV['SANDBOX_API_KEY']
4
4
  end
5
5
 
6
6
  it 'supports retrieve and list' do
@@ -21,4 +21,22 @@ RSpec.describe 'Projects Integration' do
21
21
  retrieve_project_response = Patch::Project.retrieve_project(project_id)
22
22
  expect(retrieve_project_response.data.id).to eq project_id
23
23
  end
24
+
25
+ describe 'returned fields' do
26
+ before do
27
+ @project = Patch::Project.retrieve_projects(page: 1).data.first
28
+ end
29
+
30
+ it 'returns photos' do
31
+ expect(@project.photos).to be_an_instance_of(Array)
32
+ end
33
+
34
+ it 'returns average_price_per_tonne_cents_usd' do
35
+ expect(@project.average_price_per_tonne_cents_usd).to be_an_instance_of(Integer)
36
+ end
37
+
38
+ it 'returns remaining_mass_g' do
39
+ expect(@project.remaining_mass_g).to be_an_instance_of(Integer)
40
+ end
41
+ end
24
42
  end
@@ -20,18 +20,25 @@ require 'date'
20
20
  describe 'Allocation' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::Allocation.new
23
+ @instance = build(:allocation)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { id: @instance.id, mass_g: @instance.mass_g, production: @instance.production } }
33
+ let(:nullable_properties) { Set.new }
34
+ end
35
+
30
36
  describe 'test an instance of Allocation' do
31
37
  it 'should create an instance of Allocation' do
32
38
  expect(@instance).to be_instance_of(Patch::Allocation)
33
39
  end
34
40
  end
41
+
35
42
  describe 'test attribute "id"' do
36
43
  it 'should work' do
37
44
  # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
@@ -49,5 +56,4 @@ describe 'Allocation' do
49
56
  # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
50
57
  end
51
58
  end
52
-
53
59
  end
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'CreateMassEstimateRequest' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::CreateMassEstimateRequest.new
23
+ @instance = build(:create_mass_estimate_request)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { project_id: @instance.project_id, mass_g: @instance.mass_g } }
33
+ let(:nullable_properties) { Set.new }
34
+ end
35
+
30
36
  describe 'test an instance of CreateMassEstimateRequest' do
31
37
  it 'should create an instance of CreateMassEstimateRequest' do
32
38
  expect(@instance).to be_instance_of(Patch::CreateMassEstimateRequest)
@@ -37,5 +43,4 @@ describe 'CreateMassEstimateRequest' do
37
43
  # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
38
44
  end
39
45
  end
40
-
41
46
  end
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'CreateOrderRequest' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::CreateOrderRequest.new
23
+ @instance = build(:create_order_request)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { project_id: @instance.project_id, mass_g: @instance.mass_g, total_price_cents_usd: @instance.total_price_cents_usd, metadata: @instance.metadata } }
33
+ let(:nullable_properties) { Set.new }
34
+ end
35
+
30
36
  describe 'test an instance of CreateOrderRequest' do
31
37
  it 'should create an instance of CreateOrderRequest' do
32
38
  expect(@instance).to be_instance_of(Patch::CreateOrderRequest)
@@ -37,5 +43,4 @@ describe 'CreateOrderRequest' do
37
43
  # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
38
44
  end
39
45
  end
40
-
41
46
  end
@@ -20,22 +20,28 @@ require 'date'
20
20
  describe 'CreatePreferenceRequest' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::CreatePreferenceRequest.new
23
+ @instance = build(:create_preference_request)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { project_id: @instance.project_id } }
33
+ let(:nullable_properties) { Set.new }
34
+ end
35
+
30
36
  describe 'test an instance of CreatePreferenceRequest' do
31
37
  it 'should create an instance of CreatePreferenceRequest' do
32
38
  expect(@instance).to be_instance_of(Patch::CreatePreferenceRequest)
33
39
  end
34
40
  end
41
+
35
42
  describe 'test attribute "project_id"' do
36
43
  it 'should work' do
37
44
  # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
38
45
  end
39
46
  end
40
-
41
47
  end
@@ -20,13 +20,19 @@ require 'date'
20
20
  describe 'ErrorResponse' do
21
21
  before do
22
22
  # run before each test
23
- @instance = Patch::ErrorResponse.new
23
+ @instance = build(:error_response)
24
24
  end
25
25
 
26
26
  after do
27
27
  # run after each test
28
28
  end
29
29
 
30
+ it_behaves_like "a generated class" do
31
+ let(:instance) { @instance }
32
+ let(:instance_hash) { { success: @instance.success, error: @instance.error, data: @instance.data } }
33
+ let(:nullable_properties) { Set.new(["data"]) }
34
+ end
35
+
30
36
  describe 'test an instance of ErrorResponse' do
31
37
  it 'should create an instance of ErrorResponse' do
32
38
  expect(@instance).to be_instance_of(Patch::ErrorResponse)
@@ -49,5 +55,4 @@ describe 'ErrorResponse' do
49
55
  # assertion here. ref: https://www.relishapp.com/rspec/rspec-expectations/docs/built-in-matchers
50
56
  end
51
57
  end
52
-
53
58
  end