myjohndeere 0.1.4 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62aa42cf8f9b2465187da59e3c5c908290b85d92
4
- data.tar.gz: 79b6420cd8026137f4d4d3d81d2af302559f64ea
3
+ metadata.gz: 0600e03c73fe1849281e0eaa4da74c376f4e9e31
4
+ data.tar.gz: 35ef8400afccb26a497be17bed63fd9c20365a78
5
5
  SHA512:
6
- metadata.gz: 3d8c541c780ba8ddf37f9e1304b6ed79e350b7a9d687b1effa0cd1602a77c33bbda50fea8b8e00b5467252ecf639da1a59b62c9ce8eb4d7f757b67aa28cb0a7f
7
- data.tar.gz: 5e41c50eb56e2536731e8f7e881e9943a709e1ebc6f62854bbe221357229dc741006bd928e07d67d2d2fd00df2fb73648acb41ce35e03ccbf2d5fcf90b6e8bf5
6
+ metadata.gz: df107d11f531cdf8fa5c8fc6be1ab8d47177c9a4d9545db6fe3afe75a2c5282d5847ce1dd209ae77b6301e285024f771cef59bd9553fc7553aa53244473e137a
7
+ data.tar.gz: 5628ca820a9388f451afc569d5fe46795f904b3c962ae4c1adbc1bce85f599342b8860e47e1709f1dcfadf17865db37c4d6d978f7d32a6f8b979f53d4dbd6ee2
@@ -11,7 +11,8 @@ module MyJohnDeere
11
11
  boundaries = json_object["boundaries"]
12
12
  if boundaries && boundaries.length > 0 then
13
13
  # If we embed, then we'll need to pass our id
14
- self.boundary = Boundary.new(boundaries[0], access_token, self.id)
14
+ possible_boundaries = boundaries.map { |b_json| Boundary.new(b_json, access_token, self.id) }
15
+ self.boundary = find_first_active_boundary(possible_boundaries)
15
16
  end
16
17
  end
17
18
 
@@ -23,7 +24,8 @@ module MyJohnDeere
23
24
 
24
25
  def boundary
25
26
  if self.boundary_unset? then
26
- @boundary = Boundary.retrieve(self.access_token, field_id: self.id, organization_id: self.organization_id)
27
+ boundaries = Boundary.list(self.access_token, field_id: self.id, organization_id: self.organization_id)
28
+ @boundary = find_first_active_boundary(boundaries.data)
27
29
  end
28
30
  return @boundary
29
31
  end
@@ -31,5 +33,17 @@ module MyJohnDeere
31
33
  def boundary=(val)
32
34
  @boundary = val
33
35
  end
36
+
37
+ private
38
+ def find_first_active_boundary(possible_boundaries)
39
+ active_boundaries = possible_boundaries.select { |b| b.active && !b.deleted }
40
+ if active_boundaries.count > 1 then
41
+ raise MyJohnDeereError.new("There was more than one boundary in the field, this is currently unexpected")
42
+ elsif active_boundaries.count == 1 then
43
+ return active_boundaries.first
44
+ else
45
+ return possible_boundaries.first
46
+ end
47
+ end
34
48
  end
35
49
  end
@@ -1,7 +1,7 @@
1
1
  module MyJohnDeere
2
2
  class ListObject < Requestable
3
3
  OPTION_ATTRIBUTES = [:count, :start, :etag]
4
- attr_reader :data, :listable, :total, :options, :last_response_code
4
+ attr_reader :data, :listable, :total, :options, :last_response_code, :base_resources
5
5
  include Enumerable
6
6
 
7
7
  OPTION_ATTRIBUTES.each do |attribute|
@@ -13,8 +13,9 @@ module MyJohnDeere
13
13
  end
14
14
  end
15
15
 
16
- def initialize(listable, access_token, json_data, last_response_code,
16
+ def initialize(listable, access_token, json_data, last_response_code, base_resources,
17
17
  options: {})
18
+ @base_resources = base_resources
18
19
  @last_response_code = last_response_code
19
20
  @options = options
20
21
  # Confirm object is listable?
@@ -40,11 +41,13 @@ module MyJohnDeere
40
41
  end
41
42
 
42
43
  def next_page!()
43
- return if !self.has_more?()
44
- new_list = @listable.list(self.access_token,
44
+ list_options = base_resources.merge({
45
45
  count: self.count,
46
46
  start: self.start + self.count,
47
- etag: self.etag)
47
+ etag: self.etag
48
+ })
49
+ return if !self.has_more?()
50
+ new_list = @listable.list(self.access_token, list_options)
48
51
  new_list.instance_variables.each do |iv|
49
52
  self.instance_variable_set(iv, new_list.instance_variable_get(iv))
50
53
  end
@@ -10,11 +10,11 @@ module MyJohnDeere
10
10
  end
11
11
 
12
12
  def has_access_to_boundaries?
13
- self.links.any? {|i| i["rel"] == "boundaries"}
13
+ self.has_access_to?("boundaries")
14
14
  end
15
15
 
16
16
  def has_access_to_fields?
17
- self.links.any? {|i| i["rel"] == "fields"}
17
+ self.has_access_to?("fields")
18
18
  end
19
19
 
20
20
  def fields
@@ -11,6 +11,10 @@ module MyJohnDeere
11
11
  end
12
12
  end
13
13
 
14
+ def has_access_to?(rel_link_name)
15
+ self.links.any? {|i| i["rel"] == rel_link_name}
16
+ end
17
+
14
18
  def extract_link_with_rel_from_list(rel_target, regex_to_capture_item)
15
19
  link = self.links.detect { |l| l["rel"] == rel_target }
16
20
  if link then
@@ -21,7 +21,8 @@ module MyJohnDeere
21
21
  options[:body][sbp] = options[sbp]
22
22
  end
23
23
 
24
- response = access_token.execute_request(:get, build_resource_base_path!(self.list_resource_path, options),
24
+ path, base_resources = build_resource_base_path!(self.list_resource_path, options)
25
+ response = access_token.execute_request(:get, path,
25
26
  options
26
27
  )
27
28
  return ListObject.new(
@@ -29,6 +30,7 @@ module MyJohnDeere
29
30
  access_token,
30
31
  response.data,
31
32
  response.code,
33
+ base_resources,
32
34
  options: options.merge(
33
35
  etag: response.http_headers[MyJohnDeere::ETAG_HEADER_KEY]
34
36
  )
@@ -37,8 +39,9 @@ module MyJohnDeere
37
39
 
38
40
  def retrieve(access_token, id, options={})
39
41
  validate_access_token(access_token)
42
+ path, = build_resource_base_path!(self.retrieve_resource_path, options)
40
43
  response = access_token.execute_request(:get,
41
- "#{build_resource_base_path!(self.retrieve_resource_path, options)}/#{id}",
44
+ "#{path}/#{id}",
42
45
  options)
43
46
 
44
47
  return new(response.data, access_token)
@@ -60,7 +63,7 @@ module MyJohnDeere
60
63
  end
61
64
  MyJohnDeere.logger.info("Building resource path: #{resource_path}, with ids: #{base_resources}")
62
65
  begin
63
- return resource_path % base_resources
66
+ return resource_path % base_resources, base_resources
64
67
  rescue KeyError
65
68
  raise ArgumentError.new("You must specify #{expected_definitions.join(", ")} as part of this request path")
66
69
  end
@@ -71,8 +74,9 @@ module MyJohnDeere
71
74
  end
72
75
 
73
76
  def send_create(access_token, body, path_builder_options = {})
77
+ path, = build_resource_base_path!(self.list_resource_path, path_builder_options)
74
78
  response = access_token.execute_request(:post,
75
- build_resource_base_path!(self.list_resource_path, path_builder_options),
79
+ path,
76
80
  body: body
77
81
  )
78
82
  #{"Content-Type"=>"text/plain", "X-Deere-Handling-Server"=>"ldxtc3", "X-Frame-Options"=>"SAMEORIGIN", "Location"=>"https://sandboxapi.deere.com/platform/mapLayers/e2711205-c5df-445e-aad5-81eaf9090e6c", "X-Deere-Elapsed-Ms"=>"162", "Vary"=>"Accept-Encoding", "Expires"=>"Thu, 14 Sep 2017 15:52:24 GMT", "Cache-Control"=>"max-age=0, no-cache", "Pragma"=>"no-cache", "Date"=>"Thu, 14 Sep 2017 15:52:24 GMT", "Transfer-Encoding"=>"chunked", "Connection"=>"close, Transfer-Encoding"}
@@ -1,3 +1,3 @@
1
1
  module MyJohnDeere
2
- VERSION = '0.1.4'
2
+ VERSION = '0.1.5'
3
3
  end
data/spec/fixtures.json CHANGED
@@ -467,6 +467,518 @@
467
467
  }
468
468
  ]
469
469
  },
470
+ "field_with_multiple_active_boundaries" : {
471
+ "@type":"Field",
472
+ "name":"AndersonFarms",
473
+ "boundaries":[
474
+ {
475
+ "@type":"Boundary",
476
+ "name":"a",
477
+ "modifiedTime":"2017-08-04T21:45:51.469Z",
478
+ "area":{
479
+ "@type":"MeasurementAsDouble",
480
+ "valueAsDouble":15.892707870809991,
481
+ "unit":"ha"
482
+ },
483
+ "multipolygons":[
484
+ {
485
+ "@type":"Polygon",
486
+ "rings":[
487
+ {
488
+ "@type":"Ring",
489
+ "points":[
490
+ {
491
+ "@type":"Point",
492
+ "lat":40.095079098,
493
+ "lon":-105.032172203
494
+ },
495
+ {
496
+ "@type":"Point",
497
+ "lat":40.095111927,
498
+ "lon":-105.023052692
499
+ },
500
+ {
501
+ "@type":"Point",
502
+ "lat":40.096425084,
503
+ "lon":-105.023825169
504
+ },
505
+ {
506
+ "@type":"Point",
507
+ "lat":40.096802611,
508
+ "lon":-105.024554729
509
+ },
510
+ {
511
+ "@type":"Point",
512
+ "lat":40.096457912,
513
+ "lon":-105.025134087
514
+ },
515
+ {
516
+ "@type":"Point",
517
+ "lat":40.097245793,
518
+ "lon":-105.029489994
519
+ },
520
+ {
521
+ "@type":"Point",
522
+ "lat":40.097492004,
523
+ "lon":-105.030562878
524
+ },
525
+ {
526
+ "@type":"Point",
527
+ "lat":40.097787456,
528
+ "lon":-105.031678677
529
+ },
530
+ {
531
+ "@type":"Point",
532
+ "lat":40.097771042,
533
+ "lon":-105.032193661
534
+ },
535
+ {
536
+ "@type":"Point",
537
+ "lat":40.095079098,
538
+ "lon":-105.032172203
539
+ }
540
+ ],
541
+ "type":"exterior",
542
+ "passable":true
543
+ }
544
+ ]
545
+ }
546
+ ],
547
+ "extent":{
548
+ "@type":"Extent",
549
+ "topLeft":{
550
+ "@type":"Point",
551
+ "lat":40.097787456,
552
+ "lon":-105.032193661
553
+ },
554
+ "bottomRight":{
555
+ "@type":"Point",
556
+ "lat":40.095079098,
557
+ "lon":-105.023052692
558
+ }
559
+ },
560
+ "id":"f4828b25-2a92-12a4-bf3e-a107c39ecb84",
561
+ "links":[
562
+ {
563
+ "@type":"Link",
564
+ "rel":"self",
565
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/boundaries/f4828b25-2a92-4f2d-bf3e-a107c39ecb84"
566
+ },
567
+ {
568
+ "@type":"Link",
569
+ "rel":"owningOrganization",
570
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234"
571
+ }
572
+ ],
573
+ "active":true
574
+ },
575
+ {
576
+ "@type":"Boundary",
577
+ "name":"b",
578
+ "modifiedTime":"2017-08-04T21:45:51.469Z",
579
+ "area":{
580
+ "@type":"MeasurementAsDouble",
581
+ "valueAsDouble":15.892707870809991,
582
+ "unit":"ha"
583
+ },
584
+ "multipolygons":[
585
+ {
586
+ "@type":"Polygon",
587
+ "rings":[
588
+ {
589
+ "@type":"Ring",
590
+ "points":[
591
+ {
592
+ "@type":"Point",
593
+ "lat":40.095079098,
594
+ "lon":-105.032172203
595
+ },
596
+ {
597
+ "@type":"Point",
598
+ "lat":40.095111927,
599
+ "lon":-105.023052692
600
+ },
601
+ {
602
+ "@type":"Point",
603
+ "lat":40.096425084,
604
+ "lon":-105.023825169
605
+ },
606
+ {
607
+ "@type":"Point",
608
+ "lat":40.096802611,
609
+ "lon":-105.024554729
610
+ },
611
+ {
612
+ "@type":"Point",
613
+ "lat":40.096457912,
614
+ "lon":-105.025134087
615
+ },
616
+ {
617
+ "@type":"Point",
618
+ "lat":40.097245793,
619
+ "lon":-105.029489994
620
+ },
621
+ {
622
+ "@type":"Point",
623
+ "lat":40.097492004,
624
+ "lon":-105.030562878
625
+ },
626
+ {
627
+ "@type":"Point",
628
+ "lat":40.097787456,
629
+ "lon":-105.031678677
630
+ },
631
+ {
632
+ "@type":"Point",
633
+ "lat":40.097771042,
634
+ "lon":-105.032193661
635
+ },
636
+ {
637
+ "@type":"Point",
638
+ "lat":40.095079098,
639
+ "lon":-105.032172203
640
+ }
641
+ ],
642
+ "type":"exterior",
643
+ "passable":true
644
+ }
645
+ ]
646
+ }
647
+ ],
648
+ "extent":{
649
+ "@type":"Extent",
650
+ "topLeft":{
651
+ "@type":"Point",
652
+ "lat":40.097787456,
653
+ "lon":-105.032193661
654
+ },
655
+ "bottomRight":{
656
+ "@type":"Point",
657
+ "lat":40.095079098,
658
+ "lon":-105.023052692
659
+ }
660
+ },
661
+ "id":"f4828b25-2a92-12a4-bf3e-a107c39ecb85",
662
+ "links":[
663
+ {
664
+ "@type":"Link",
665
+ "rel":"self",
666
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/boundaries/f4828b25-2a92-4f2d-bf3e-a107c39ecb84"
667
+ },
668
+ {
669
+ "@type":"Link",
670
+ "rel":"owningOrganization",
671
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234"
672
+ }
673
+ ],
674
+ "active":true
675
+ }
676
+ ],
677
+ "id":"2516aa2c-2c0d-4dae-ba63-5c64fd172d01",
678
+ "links":[
679
+ {
680
+ "@type":"Link",
681
+ "rel":"self",
682
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01"
683
+ },
684
+ {
685
+ "@type":"Link",
686
+ "rel":"clients",
687
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/clients"
688
+ },
689
+ {
690
+ "@type":"Link",
691
+ "rel":"notes",
692
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/notes"
693
+ },
694
+ {
695
+ "@type":"Link",
696
+ "rel":"farms",
697
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/farms"
698
+ },
699
+ {
700
+ "@type":"Link",
701
+ "rel":"owningOrganization",
702
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234"
703
+ },
704
+ {
705
+ "@type":"Link",
706
+ "rel":"simplifiedBoundaries",
707
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/boundaries?simple=true"
708
+ },
709
+ {
710
+ "@type":"Link",
711
+ "rel":"addBoundary",
712
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/boundaries"
713
+ },
714
+ {
715
+ "@type":"Link",
716
+ "rel":"activeBoundary",
717
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/boundaries/f4828b25-2a92-4f2d-bf3e-a107c39ecb84"
718
+ },
719
+ {
720
+ "@type":"Link",
721
+ "rel":"fieldOperation",
722
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/fieldOperations"
723
+ }
724
+ ]
725
+ },
726
+ "field_with_multiple_boundaries" : {
727
+ "@type":"Field",
728
+ "name":"AndersonFarms",
729
+ "boundaries":[
730
+ {
731
+ "@type":"Boundary",
732
+ "name":"a",
733
+ "modifiedTime":"2017-08-04T21:45:51.469Z",
734
+ "area":{
735
+ "@type":"MeasurementAsDouble",
736
+ "valueAsDouble":15.892707870809991,
737
+ "unit":"ha"
738
+ },
739
+ "multipolygons":[
740
+ {
741
+ "@type":"Polygon",
742
+ "rings":[
743
+ {
744
+ "@type":"Ring",
745
+ "points":[
746
+ {
747
+ "@type":"Point",
748
+ "lat":40.095079098,
749
+ "lon":-105.032172203
750
+ },
751
+ {
752
+ "@type":"Point",
753
+ "lat":40.095111927,
754
+ "lon":-105.023052692
755
+ },
756
+ {
757
+ "@type":"Point",
758
+ "lat":40.096425084,
759
+ "lon":-105.023825169
760
+ },
761
+ {
762
+ "@type":"Point",
763
+ "lat":40.096802611,
764
+ "lon":-105.024554729
765
+ },
766
+ {
767
+ "@type":"Point",
768
+ "lat":40.096457912,
769
+ "lon":-105.025134087
770
+ },
771
+ {
772
+ "@type":"Point",
773
+ "lat":40.097245793,
774
+ "lon":-105.029489994
775
+ },
776
+ {
777
+ "@type":"Point",
778
+ "lat":40.097492004,
779
+ "lon":-105.030562878
780
+ },
781
+ {
782
+ "@type":"Point",
783
+ "lat":40.097787456,
784
+ "lon":-105.031678677
785
+ },
786
+ {
787
+ "@type":"Point",
788
+ "lat":40.097771042,
789
+ "lon":-105.032193661
790
+ },
791
+ {
792
+ "@type":"Point",
793
+ "lat":40.095079098,
794
+ "lon":-105.032172203
795
+ }
796
+ ],
797
+ "type":"exterior",
798
+ "passable":true
799
+ }
800
+ ]
801
+ }
802
+ ],
803
+ "extent":{
804
+ "@type":"Extent",
805
+ "topLeft":{
806
+ "@type":"Point",
807
+ "lat":40.097787456,
808
+ "lon":-105.032193661
809
+ },
810
+ "bottomRight":{
811
+ "@type":"Point",
812
+ "lat":40.095079098,
813
+ "lon":-105.023052692
814
+ }
815
+ },
816
+ "id":"f4828b25-2a92-12a4-bf3e-a107c39ecb84",
817
+ "links":[
818
+ {
819
+ "@type":"Link",
820
+ "rel":"self",
821
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/boundaries/f4828b25-2a92-4f2d-bf3e-a107c39ecb84"
822
+ },
823
+ {
824
+ "@type":"Link",
825
+ "rel":"owningOrganization",
826
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234"
827
+ }
828
+ ],
829
+ "active":false
830
+ },
831
+ {
832
+ "@type":"Boundary",
833
+ "name":"b",
834
+ "modifiedTime":"2017-08-04T21:45:51.469Z",
835
+ "area":{
836
+ "@type":"MeasurementAsDouble",
837
+ "valueAsDouble":15.892707870809991,
838
+ "unit":"ha"
839
+ },
840
+ "multipolygons":[
841
+ {
842
+ "@type":"Polygon",
843
+ "rings":[
844
+ {
845
+ "@type":"Ring",
846
+ "points":[
847
+ {
848
+ "@type":"Point",
849
+ "lat":40.095079098,
850
+ "lon":-105.032172203
851
+ },
852
+ {
853
+ "@type":"Point",
854
+ "lat":40.095111927,
855
+ "lon":-105.023052692
856
+ },
857
+ {
858
+ "@type":"Point",
859
+ "lat":40.096425084,
860
+ "lon":-105.023825169
861
+ },
862
+ {
863
+ "@type":"Point",
864
+ "lat":40.096802611,
865
+ "lon":-105.024554729
866
+ },
867
+ {
868
+ "@type":"Point",
869
+ "lat":40.096457912,
870
+ "lon":-105.025134087
871
+ },
872
+ {
873
+ "@type":"Point",
874
+ "lat":40.097245793,
875
+ "lon":-105.029489994
876
+ },
877
+ {
878
+ "@type":"Point",
879
+ "lat":40.097492004,
880
+ "lon":-105.030562878
881
+ },
882
+ {
883
+ "@type":"Point",
884
+ "lat":40.097787456,
885
+ "lon":-105.031678677
886
+ },
887
+ {
888
+ "@type":"Point",
889
+ "lat":40.097771042,
890
+ "lon":-105.032193661
891
+ },
892
+ {
893
+ "@type":"Point",
894
+ "lat":40.095079098,
895
+ "lon":-105.032172203
896
+ }
897
+ ],
898
+ "type":"exterior",
899
+ "passable":true
900
+ }
901
+ ]
902
+ }
903
+ ],
904
+ "extent":{
905
+ "@type":"Extent",
906
+ "topLeft":{
907
+ "@type":"Point",
908
+ "lat":40.097787456,
909
+ "lon":-105.032193661
910
+ },
911
+ "bottomRight":{
912
+ "@type":"Point",
913
+ "lat":40.095079098,
914
+ "lon":-105.023052692
915
+ }
916
+ },
917
+ "id":"f4828b25-2a92-12a4-bf3e-a107c39ecb85",
918
+ "links":[
919
+ {
920
+ "@type":"Link",
921
+ "rel":"self",
922
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/boundaries/f4828b25-2a92-4f2d-bf3e-a107c39ecb84"
923
+ },
924
+ {
925
+ "@type":"Link",
926
+ "rel":"owningOrganization",
927
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234"
928
+ }
929
+ ],
930
+ "active":true
931
+ }
932
+ ],
933
+ "id":"2516aa2c-2c0d-4dae-ba63-5c64fd172d01",
934
+ "links":[
935
+ {
936
+ "@type":"Link",
937
+ "rel":"self",
938
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01"
939
+ },
940
+ {
941
+ "@type":"Link",
942
+ "rel":"clients",
943
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/clients"
944
+ },
945
+ {
946
+ "@type":"Link",
947
+ "rel":"notes",
948
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/notes"
949
+ },
950
+ {
951
+ "@type":"Link",
952
+ "rel":"farms",
953
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/farms"
954
+ },
955
+ {
956
+ "@type":"Link",
957
+ "rel":"owningOrganization",
958
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234"
959
+ },
960
+ {
961
+ "@type":"Link",
962
+ "rel":"simplifiedBoundaries",
963
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/boundaries?simple=true"
964
+ },
965
+ {
966
+ "@type":"Link",
967
+ "rel":"addBoundary",
968
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/boundaries"
969
+ },
970
+ {
971
+ "@type":"Link",
972
+ "rel":"activeBoundary",
973
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/boundaries/f4828b25-2a92-4f2d-bf3e-a107c39ecb84"
974
+ },
975
+ {
976
+ "@type":"Link",
977
+ "rel":"fieldOperation",
978
+ "uri":"https://sandboxapi.deere.com/platform/organizations/1234/fields/2516aa2c-2c0d-4dae-ba63-5c64fd172d01/fieldOperations"
979
+ }
980
+ ]
981
+ },
470
982
  "field_with_embedded_boundary" : {
471
983
  "@type":"Field",
472
984
  "name":"AndersonFarms",
@@ -802,7 +1314,7 @@
802
1314
  "uri": "https://sandboxapi.deere.com/platform/organizations/1234/fields"
803
1315
  }
804
1316
  ],
805
- "total": 1,
1317
+ "total": 2,
806
1318
  "values": [
807
1319
  {
808
1320
  "name": "Nautilus",
data/test/test_field.rb CHANGED
@@ -42,13 +42,47 @@ class TestField < Minitest::Test
42
42
  assert !field.boundary_unset?
43
43
  end
44
44
 
45
+ def test_retrieval_with_multiple_boundaries
46
+ fixture = API_FIXTURES["field_with_multiple_boundaries"]
47
+
48
+ stub_request(:get, /\/organizations\/#{ORGANIZATION_FIXTURE["id"]}\/fields\/#{fixture["id"]}/).
49
+ with(query: {embed: "boundaries"}).
50
+ to_return(status: 200, body: fixture.to_json)
51
+
52
+ field = MyJohnDeere::Field.retrieve(default_access_token,
53
+ fixture["id"], organization_id: ORGANIZATION_FIXTURE["id"],
54
+ body: {embed: "boundaries"})
55
+
56
+ assert_equal fixture["boundaries"][1]["id"], field.boundary.id
57
+ end
58
+
59
+ def test_retrieval_with_multiple_active_boundaries
60
+ fixture = API_FIXTURES["field_with_multiple_active_boundaries"]
61
+
62
+ stub_request(:get, /\/organizations\/#{ORGANIZATION_FIXTURE["id"]}\/fields\/#{fixture["id"]}/).
63
+ with(query: {embed: "boundaries"}).
64
+ to_return(status: 200, body: fixture.to_json)
65
+
66
+ assert_raises MyJohnDeere::MyJohnDeereError, "At the moment I don't have a use case where this would happen" do
67
+ field = MyJohnDeere::Field.retrieve(default_access_token,
68
+ fixture["id"], organization_id: ORGANIZATION_FIXTURE["id"],
69
+ body: {embed: "boundaries"})
70
+ end
71
+ end
72
+
45
73
  def test_list()
46
74
  stub_request(:get, /organizations\/#{ORGANIZATION_FIXTURE["id"]}\/fields/).
47
75
  to_return(status: 200, body: FIXTURE_FOR_LIST.to_json)
48
76
 
49
- fields = MyJohnDeere::Field.list(default_access_token, count: 1, organization_id: ORGANIZATION_FIXTURE["id"])
77
+ fields = MyJohnDeere::Field.list(default_access_token,
78
+ count: 1, organization_id: ORGANIZATION_FIXTURE["id"])
50
79
 
51
80
  assert_equal 1, fields.data.length
81
+ assert fields.has_more?
52
82
  assert_equal MyJohnDeere::Field, fields.data[0].class
83
+
84
+ fields.next_page!
85
+
86
+ assert_equal 1, fields.data
53
87
  end
54
88
  end
@@ -6,7 +6,8 @@ class TestListObject < Minitest::Test
6
6
  list = MyJohnDeere::ListObject.new(MyJohnDeere::Organization,
7
7
  default_access_token,
8
8
  {"values" => data},
9
- 200)
9
+ 200,
10
+ {})
10
11
 
11
12
  list.each_with_index do |x, i|
12
13
  assert_equal data[i]["id"], x.id
@@ -21,14 +22,14 @@ class TestListObject < Minitest::Test
21
22
  default_access_token, {
22
23
  "total" => expected_total,
23
24
  "values" => Array.new(1, API_FIXTURES["organization"])
24
- }, options: {start: 0})
25
+ }, {}, options: {start: 0})
25
26
  assert list.has_more?
26
27
 
27
28
  list.start = expected_total
28
29
  assert !list.has_more?
29
30
 
30
31
  list = MyJohnDeere::ListObject.new(MyJohnDeere::Organization,
31
- default_access_token, {"values" =>[]}, options: {start: 0})
32
+ default_access_token, {"values" =>[]}, {}, options: {start: 0})
32
33
  assert !list.has_more?, "The data is equal to the total"
33
34
  end
34
35
 
@@ -50,7 +51,7 @@ class TestListObject < Minitest::Test
50
51
  test_json = API_FIXTURES["organizations"]
51
52
  existing_data = Array.new(test_json["total"]-1, test_json["values"][0])
52
53
  list = MyJohnDeere::ListObject.new(MyJohnDeere::Organization, default_access_token,
53
- {"values" => existing_data}, 200, options: {
54
+ {"values" => existing_data}, 200, {}, options: {
54
55
  start: 0, count: existing_data.length, etag: ""})
55
56
  assert list.using_etag?
56
57
  assert !list.has_more?
@@ -68,7 +69,7 @@ class TestListObject < Minitest::Test
68
69
  test_json = API_FIXTURES["organizations"]
69
70
  existing_data = (1..(test_json["total"]-1)).to_a
70
71
  list = MyJohnDeere::ListObject.new(MyJohnDeere::Organization, default_access_token,
71
- test_json, 200, options: {start: 0,
72
+ test_json, 200, {}, options: {start: 0,
72
73
  count: existing_data.length})
73
74
  assert list.has_more?
74
75
  assert !list.using_etag?
@@ -12,4 +12,15 @@ class TestAccessToken < Minitest::Test
12
12
  MyJohnDeere::Requestable.new({}, "something")
13
13
  end
14
14
  end
15
+
16
+ def test_has_access_to
17
+ r = MyJohnDeere::Requestable.new({"links" => [
18
+ {
19
+ "rel" => "addresses",
20
+ "uri" => "https://sandboxapi.deere.com/platform/organizations/1234/addresses"
21
+ }]})
22
+
23
+ assert r.has_access_to?("addresses")
24
+ assert !r.has_access_to?("something_else")
25
+ end
15
26
  end
@@ -51,11 +51,15 @@ class TestRestMethods < Minitest::Test
51
51
 
52
52
  def test_build_resource_base_path
53
53
  resource_path = "blah"
54
- assert_equal "blah", MyJohnDeere::Organization.build_resource_base_path!("blah", {})
54
+ path, base_resources = MyJohnDeere::Organization.build_resource_base_path!("blah", {})
55
+ assert_equal "blah", path
56
+ assert_nil base_resources
55
57
  resource_path = "blah%{x_id}"
56
58
  options = {x: 5, x_id: 1}
57
- assert_equal "blah1", MyJohnDeere::Organization.build_resource_base_path!(resource_path, options)
59
+ path, base_resources = MyJohnDeere::Organization.build_resource_base_path!(resource_path, options)
60
+ assert_equal "blah1", path
58
61
  assert_equal({x: 5}, options)
62
+ assert_equal({x_id: 1}, base_resources)
59
63
 
60
64
  assert_raises ArgumentError do
61
65
  MyJohnDeere::Organization.build_resource_base_path!(resource_path, {})
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: myjohndeere
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Susmarski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-29 00:00:00.000000000 Z
11
+ date: 2018-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth
@@ -104,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  version: '0'
105
105
  requirements: []
106
106
  rubyforge_project:
107
- rubygems_version: 2.0.14.1
107
+ rubygems_version: 2.6.13
108
108
  signing_key:
109
109
  specification_version: 4
110
110
  summary: Ruby bindings for the MyJohnDeere API