@@ -18,13 +18,7 @@ class << self
18
18
19
19
attr_accessor :resource_name , :id_field , :create_contract , :search_contract
20
20
21
- def find ( id )
22
- check_vars
23
- res = get_request ( path : "/#{ resource_name } /#{ id } " )
24
- return Success ( new ( res . parse ) ) if res . status . success?
25
-
26
- Failure ( res . parse )
27
- end
21
+ def find ( id ) = with_req resp : get_request ( path : "/#{ resource_name } /#{ id } " )
28
22
29
23
def all
30
24
check_vars
@@ -76,9 +70,30 @@ def create_contract_new
76
70
end
77
71
78
72
def search_contract_new = ( search_contract || DefaultSearchContract ) . new
73
+
74
+ def handler ( parsed , status ) = ( status . success? ? Success ( new ( parsed ) ) : Failure ( parsed ) )
75
+ def with_req ( resp :, self_caller : nil ) = using_resp ( resp :, self_caller :, &method ( :handler ) )
76
+
77
+ def using_resp ( resp :, self_caller : nil , &block )
78
+ check_vars
79
+ parsed = resp . parse . transform_keys ( &:to_sym )
80
+ self_caller &.reload
81
+
82
+ block . call ( parsed , resp . status )
83
+ end
84
+ end
85
+
86
+ def reload
87
+ self . class . find ( _id ) do |res |
88
+ next unless res . status . success?
89
+
90
+ res . parse . each_pair do |k , v |
91
+ self [ k ] = v
92
+ end
93
+ self
94
+ end
79
95
end
80
96
81
- def reload = self . class . find ( _id )
82
97
# table[self.class.id_field]
83
98
def persisted? = !_id . nil?
84
99
def _id = public_send ( self . class . id_field )
0 commit comments