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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +78 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +30 -11
- data/Makefile +10 -0
- data/README.md +61 -8
- data/lib/patch_ruby.rb +2 -0
- data/lib/patch_ruby/models/allocation.rb +25 -0
- data/lib/patch_ruby/models/create_mass_estimate_request.rb +48 -4
- data/lib/patch_ruby/models/create_order_request.rb +75 -7
- data/lib/patch_ruby/models/create_preference_request.rb +7 -0
- data/lib/patch_ruby/models/error_response.rb +9 -0
- data/lib/patch_ruby/models/estimate.rb +29 -1
- data/lib/patch_ruby/models/estimate_list_response.rb +9 -0
- data/lib/patch_ruby/models/estimate_response.rb +9 -0
- data/lib/patch_ruby/models/meta_index_object.rb +11 -0
- data/lib/patch_ruby/models/order.rb +105 -4
- data/lib/patch_ruby/models/order_list_response.rb +9 -0
- data/lib/patch_ruby/models/order_response.rb +9 -0
- data/lib/patch_ruby/models/photo.rb +233 -0
- data/lib/patch_ruby/models/preference.rb +25 -0
- data/lib/patch_ruby/models/preference_list_response.rb +9 -0
- data/lib/patch_ruby/models/preference_response.rb +9 -0
- data/lib/patch_ruby/models/project.rb +141 -25
- data/lib/patch_ruby/models/project_list_response.rb +9 -0
- data/lib/patch_ruby/models/project_response.rb +9 -0
- data/lib/patch_ruby/models/standard.rb +254 -0
- data/lib/patch_ruby/version.rb +1 -1
- data/spec/api/estimates_api_spec.rb +6 -7
- data/spec/api/orders_api_spec.rb +10 -11
- data/spec/api/preferences_api_spec.rb +8 -9
- data/spec/api/projects_api_spec.rb +4 -5
- data/spec/constants.rb +3 -0
- data/spec/factories/allocations.rb +7 -0
- data/spec/factories/create_mass_estimate_requests.rb +6 -0
- data/spec/factories/create_order_requests.rb +8 -0
- data/spec/factories/create_preference_requests.rb +5 -0
- data/spec/factories/error_responses.rb +7 -0
- data/spec/factories/estimate_list_responses.rb +8 -0
- data/spec/factories/estimate_responses.rb +7 -0
- data/spec/factories/estimates.rb +8 -0
- data/spec/factories/meta_index_objects.rb +6 -0
- data/spec/factories/order_list_responses.rb +8 -0
- data/spec/factories/order_responses.rb +7 -0
- data/spec/factories/orders.rb +12 -0
- data/spec/factories/preference_list_responses.rb +8 -0
- data/spec/factories/preference_responses.rb +7 -0
- data/spec/factories/preferences.rb +7 -0
- data/spec/factories/project_list_responses.rb +8 -0
- data/spec/factories/project_responses.rb +7 -0
- data/spec/factories/projects.rb +15 -0
- data/spec/integration/estimates_spec.rb +4 -3
- data/spec/integration/orders_spec.rb +60 -1
- data/spec/integration/preferences_spec.rb +1 -1
- data/spec/integration/projects_spec.rb +19 -1
- data/spec/models/allocation_spec.rb +8 -2
- data/spec/models/create_mass_estimate_request_spec.rb +7 -2
- data/spec/models/create_order_request_spec.rb +7 -2
- data/spec/models/create_preference_request_spec.rb +8 -2
- data/spec/models/error_response_spec.rb +7 -2
- data/spec/models/estimate_list_response_spec.rb +7 -2
- data/spec/models/estimate_response_spec.rb +7 -2
- data/spec/models/estimate_spec.rb +8 -2
- data/spec/models/meta_index_object_spec.rb +7 -2
- data/spec/models/order_list_response_spec.rb +7 -2
- data/spec/models/order_response_spec.rb +7 -2
- data/spec/models/order_spec.rb +18 -2
- data/spec/models/preference_list_response_spec.rb +7 -2
- data/spec/models/preference_response_spec.rb +7 -2
- data/spec/models/preference_spec.rb +7 -2
- data/spec/models/project_list_response_spec.rb +7 -2
- data/spec/models/project_response_spec.rb +7 -2
- data/spec/models/project_spec.rb +21 -2
- data/spec/spec_helper.rb +11 -0
- data/spec/support/shared/generated_classes.rb +13 -0
- metadata +61 -17
data/spec/constants.rb
ADDED
@@ -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,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
|
-
|
3
|
-
# Configure the Patch gem
|
2
|
+
before do
|
4
3
|
Patch.configure do |config|
|
5
|
-
config.access_token = ENV['
|
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['
|
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,6 +1,6 @@
|
|
1
1
|
RSpec.describe 'Projects Integration' do
|
2
2
|
Patch.configure do |config|
|
3
|
-
config.access_token = ENV['
|
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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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
|