artirix_data_models 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e693f7a79fd0435a53c7315a66a0a87fddc00756
4
- data.tar.gz: 1e2209be29d0228f38187d74079570b5d8326af6
3
+ metadata.gz: 5f5c9b67e6750f823690f34a19b2a147c496b682
4
+ data.tar.gz: 1c5e038ae44746f7c24ed28716bdd02ebe88160b
5
5
  SHA512:
6
- metadata.gz: c51a77d2635bdbf0a2c32fb1a89caa6c63dc31d5e6980d388092287f7f31a5682b60c5f7e55636bfc8eee40c69372b7e7afb12a257c8a855bfe2827003149486
7
- data.tar.gz: 29814e119cfe07b7b26390d7bf1132b0ed9f6b749d035303816b1c58b9b14aecf0a00226bdf06da2a40a249aa90af5598d346020327df1f1cde00e4c412d7f61
6
+ metadata.gz: c664f3ec187ed056d575d25ac933c901e78abdac5b7987500bfa44405959b37ff0cb36b01b998a6f899294f66830afc0e851b51e03e420c44025a68b59cd5258
7
+ data.tar.gz: 587cadda688164919abc0d7a27791c82549f6b878d59d876c349f067b16ec24305d24c41b8965a50cf1958b4ea3b66bf9d83476ff28a32f7e491332d434ab700
data/README.md CHANGED
@@ -268,6 +268,12 @@ end
268
268
 
269
269
  ## Changes
270
270
 
271
+ ### 0.13.0
272
+ - `DAO`: fake responses lazy loaded
273
+ - `DAO`: response adaptor methods of basic dao moved to a module, included in `BasicDAO` and as part of the module `DAO`. Also added `response_adaptor_for_identity`, which returns the same.
274
+ - `Model`: added `new_full_mode` method, that will build a new model and mark it as full mode
275
+
276
+
271
277
  ### 0.12.0
272
278
  - `attribute` call now can accept a hash of options as the last argument. This options include: `skip` (what to skip), `writer_visibility` and `reader_visibility`.
273
279
 
@@ -17,10 +17,15 @@ module ArtirixDataModels
17
17
  :forced_fake_disabled?,
18
18
  :empty_collection,
19
19
  :empty_collection_for,
20
- :model_adaptor_factory
20
+ :perform_get,
21
+ :perform_post,
22
+ :perform_put,
23
+ :perform_delete,
21
24
  ]
22
25
 
23
26
  included do
27
+ include ArtirixDataModels::DAOConcerns::WithResponseAdaptors
28
+
24
29
  attr_reader :basic_model_dao
25
30
  delegate *DELEGATED_METHODS, to: :basic_model_dao
26
31
  end
@@ -0,0 +1,41 @@
1
+ module ArtirixDataModels
2
+ module DAOConcerns
3
+ module WithResponseAdaptors
4
+
5
+ def model_adaptor_factory
6
+ ArtirixDataModels::GatewayResponseAdaptors::ModelAdaptor
7
+ end
8
+
9
+ def response_adaptor_for_reload(model_to_reload)
10
+ model_adaptor_factory.with_block do |data_hash|
11
+ model_to_reload.reload_with data_hash
12
+ end
13
+ end
14
+
15
+ def response_adaptor_for_identity
16
+ model_adaptor_factory.identity
17
+ end
18
+
19
+ def response_adaptor_for_single(effective_model_class = model_class)
20
+ model_adaptor_factory.single effective_model_class
21
+ end
22
+
23
+ def response_adaptor_for_some(effective_model_class = model_class)
24
+ model_adaptor_factory.some effective_model_class
25
+ end
26
+
27
+ def response_adaptor_for_collection(from, size, collection_element_model_class = model_class)
28
+ model_adaptor_factory.collection collection_element_model_class, from, size
29
+ end
30
+
31
+ def response_adaptor_for_block(&block)
32
+ model_adaptor_factory.with_block &block
33
+ end
34
+
35
+ def response_adaptor_for_callable(callable)
36
+ model_adaptor_factory.with_callable callable
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -1,4 +1,6 @@
1
1
  class ArtirixDataModels::BasicModelDAO
2
+ include ArtirixDataModels::DAOConcerns::WithResponseAdaptors
3
+
2
4
  attr_reader :model_name, :model_class, :paths_factory, :fake_mode_factory, :gateway_factory, :loaded_gateway
3
5
 
4
6
  def initialize(model_name:, model_class:, paths_factory:, gateway:, fake_mode_factory:, gateway_factory:)
@@ -10,25 +12,15 @@ class ArtirixDataModels::BasicModelDAO
10
12
  @fake_mode_factory = fake_mode_factory
11
13
  end
12
14
 
13
- def preloaded_gateway
14
- loaded_gateway.presence || gateway_factory.call
15
- end
16
-
17
- alias_method :gateway, :preloaded_gateway
18
-
19
- def partial_mode_fields
20
- if fake?
21
- fake_mode_factory.partial_mode_fields
22
- else
23
- ArtirixDataModels::DAORegistry.model_fields.partial_mode_fields_for model_name
24
- end
25
- end
15
+ ###########
16
+ # ACTIONS #
17
+ ###########
26
18
 
27
19
  def get_full(model_pk, model_to_reload:, response_adaptor: nil, cache_adaptor: nil, **extra_options)
28
20
  path = paths_factory.get_full model_pk
29
21
  response_adaptor ||= response_adaptor_for_reload(model_to_reload)
30
22
 
31
- _get path, response_adaptor: response_adaptor, fake_response: fake_get_full_response(model_pk, model_to_reload), cache_adaptor: cache_adaptor, **extra_options
23
+ perform_get path, response_adaptor: response_adaptor, fake_response: fake_get_full_response(model_pk, model_to_reload), cache_adaptor: cache_adaptor, **extra_options
32
24
 
33
25
  model_to_reload.mark_full_mode
34
26
  model_to_reload
@@ -44,18 +36,60 @@ class ArtirixDataModels::BasicModelDAO
44
36
  path = paths_factory.get model_pk
45
37
  response_adaptor ||= response_adaptor_for_single
46
38
 
47
- _get(path, response_adaptor: response_adaptor, fake_response: fake_get_response(model_pk), cache_adaptor: cache_adaptor, **extra_options)
39
+ perform_get(path, response_adaptor: response_adaptor, fake_response: fake_get_response(model_pk), cache_adaptor: cache_adaptor, **extra_options)
48
40
  end
49
41
 
50
42
  def get_some(model_pks, cache_adaptor: nil, response_adaptor: nil, **extra_options)
51
43
  path = paths_factory.get_some(model_pks)
52
44
  response_adaptor ||= response_adaptor_for_some
53
45
 
54
- _get(path, response_adaptor: response_adaptor, fake_response: fake_get_some_response(model_pks), cache_adaptor: cache_adaptor, **extra_options)
46
+ perform_get(path, response_adaptor: response_adaptor, fake_response: fake_get_some_response(model_pks), cache_adaptor: cache_adaptor, **extra_options)
55
47
  rescue ArtirixDataModels::DataGateway::NotFound
56
48
  []
57
49
  end
58
50
 
51
+ ###########
52
+ # GATEWAY #
53
+ ###########
54
+
55
+ def preloaded_gateway
56
+ loaded_gateway.presence || gateway_factory.call
57
+ end
58
+
59
+ alias_method :gateway, :preloaded_gateway
60
+
61
+ def partial_mode_fields
62
+ if fake?
63
+ fake_mode_factory.partial_mode_fields
64
+ else
65
+ ArtirixDataModels::DAORegistry.model_fields.partial_mode_fields_for model_name
66
+ end
67
+ end
68
+
69
+ def raise_no_gateway
70
+ msg = 'no gateway passed to request, no gateway configured on creation'
71
+ if gateway_factory.present?
72
+ msg = "#{msg}, and no gateway returned by the factory"
73
+ else
74
+ msg = "#{msg}, and no gateway factory configured on creation"
75
+ end
76
+
77
+ raise NoGatewayConfiguredError, msg
78
+ end
79
+
80
+ class NoGatewayConfiguredError < StandardError
81
+ end
82
+
83
+ #############
84
+ # FAKE MODE #
85
+ #############
86
+
87
+ def fake?
88
+ return true if forced_fake_enabled?
89
+ return false if forced_fake_disabled?
90
+ fake_mode_factory.enabled?
91
+ end
92
+
59
93
  def force_fake_enabled
60
94
  @_forced_fake_enabled = true
61
95
  end
@@ -80,35 +114,17 @@ class ArtirixDataModels::BasicModelDAO
80
114
 
81
115
  def fake_get_response(model_pk)
82
116
  return nil unless fake?
83
- fake_mode_factory.get model_pk
117
+ -> { fake_mode_factory.get model_pk }
84
118
  end
85
119
 
86
120
  def fake_get_some_response(model_pks)
87
121
  return nil unless fake?
88
- fake_mode_factory.get_some model_pks
122
+ -> { fake_mode_factory.get_some model_pks }
89
123
  end
90
124
 
91
125
  def fake_get_full_response(model_pk, model_to_reload = nil)
92
126
  return nil unless fake?
93
- fake_mode_factory.get_full model_pk, model_to_reload
94
- end
95
-
96
- def response_adaptor_for_reload(model_to_reload)
97
- model_adaptor_factory.with_block do |data_hash|
98
- model_to_reload.reload_with data_hash
99
- end
100
- end
101
-
102
- def response_adaptor_for_single
103
- model_adaptor_factory.single model_class
104
- end
105
-
106
- def response_adaptor_for_some(element_model_class = model_class)
107
- model_adaptor_factory.some element_model_class
108
- end
109
-
110
- def response_adaptor_for_collection(from, size, collection_element_model_class = model_class)
111
- model_adaptor_factory.collection collection_element_model_class, from, size
127
+ -> { fake_mode_factory.get_full model_pk, model_to_reload }
112
128
  end
113
129
 
114
130
  def empty_collection(from, size)
@@ -119,52 +135,39 @@ class ArtirixDataModels::BasicModelDAO
119
135
  ArtirixDataModels::EsCollection.empty model_class, from: from, size: size
120
136
  end
121
137
 
122
- def model_adaptor_factory
123
- ArtirixDataModels::GatewayResponseAdaptors::ModelAdaptor
124
- end
138
+ #################
139
+ # PERFORM CALLS #
140
+ #################
125
141
 
126
- def _get(path, response_adaptor: nil, body: nil, fake_response: nil, cache_adaptor: nil, gateway: nil)
142
+ def perform_get(path, response_adaptor: nil, body: nil, fake_response: nil, cache_adaptor: nil, gateway: nil)
127
143
  g = gateway.presence || preloaded_gateway
128
144
  raise_no_gateway unless g.present?
129
145
  g.get path, response_adaptor: response_adaptor, body: body, fake: fake?, fake_response: fake_response, cache_adaptor: cache_adaptor
130
146
  end
131
147
 
132
- def _post(path, response_adaptor: nil, body: nil, fake_response: nil, cache_adaptor: nil, gateway: nil)
148
+
149
+ def perform_post(path, response_adaptor: nil, body: nil, fake_response: nil, cache_adaptor: nil, gateway: nil)
133
150
  g = gateway.presence || preloaded_gateway
134
151
  raise_no_gateway unless g.present?
135
152
  g.post path, response_adaptor: response_adaptor, body: body, fake: fake?, fake_response: fake_response, cache_adaptor: cache_adaptor
136
153
  end
137
154
 
138
- def _put(path, response_adaptor: nil, body: nil, fake_response: nil, cache_adaptor: nil, gateway: nil)
155
+ def perform_put(path, response_adaptor: nil, body: nil, fake_response: nil, cache_adaptor: nil, gateway: nil)
139
156
  g = gateway.presence || preloaded_gateway
140
157
  raise_no_gateway unless g.present?
141
158
  g.put path, response_adaptor: response_adaptor, body: body, fake: fake?, fake_response: fake_response, cache_adaptor: cache_adaptor
142
159
  end
143
160
 
144
- def _delete(path, response_adaptor: nil, body: nil, fake_response: nil, cache_adaptor: nil, gateway: nil)
161
+ def perform_delete(path, response_adaptor: nil, body: nil, fake_response: nil, cache_adaptor: nil, gateway: nil)
145
162
  g = gateway.presence || preloaded_gateway
146
163
  raise_no_gateway unless g.present?
147
164
  g.delete path, response_adaptor: response_adaptor, body: body, fake: fake?, fake_response: fake_response, cache_adaptor: cache_adaptor
148
165
  end
149
166
 
150
- def fake?
151
- return true if forced_fake_enabled?
152
- return false if forced_fake_disabled?
153
- fake_mode_factory.enabled?
154
- end
155
-
156
- def raise_no_gateway
157
- msg = 'no gateway passed to request, no gateway configured on creation'
158
- if gateway_factory.present?
159
- msg = "#{msg}, and no gateway returned by the factory"
160
- else
161
- msg = "#{msg}, and no gateway factory configured on creation"
162
- end
163
-
164
- raise NoGatewayConfiguredError, msg
165
- end
166
-
167
- class NoGatewayConfiguredError < StandardError
168
- end
167
+ # old names
168
+ alias_method :_get, :perform_get
169
+ alias_method :_post, :perform_post
170
+ alias_method :_put, :perform_put
171
+ alias_method :_delete, :perform_delete
169
172
 
170
173
  end
@@ -40,6 +40,10 @@ module ArtirixDataModels::GatewayResponseAdaptors
40
40
 
41
41
  private_class_method :new
42
42
 
43
+ def self.identity
44
+ new ->(data_hash) { data_hash }
45
+ end
46
+
43
47
  def self.single(model_class)
44
48
  new ->(data_hash) { model_class.new data_hash }
45
49
  end
@@ -421,6 +421,10 @@ module ArtirixDataModels
421
421
  end
422
422
 
423
423
  module ClassMethods
424
+ def new_full_mode(*args, &block)
425
+ new(*args, &block).tap { |x| x.mark_full_mode }
426
+ end
427
+
424
428
  def always_in_partial_mode(attribute)
425
429
  attribute_config.always_in_partial_mode(attribute)
426
430
  end
@@ -1,3 +1,3 @@
1
1
  module ArtirixDataModels
2
- VERSION = '0.12.0'
2
+ VERSION = '0.13.0'
3
3
  end
@@ -28,6 +28,7 @@ require 'artirix_data_models/cached_action_adaptor'
28
28
  require 'artirix_data_models/cached_action_adaptor/get'
29
29
  require 'artirix_data_models/cached_action_adaptor/get_full'
30
30
  require 'artirix_data_models/cached_action_adaptor/get_some'
31
+ require 'artirix_data_models/dao_concerns/with_response_adaptors'
31
32
  require 'artirix_data_models/dao'
32
33
  require 'artirix_data_models/daos/model_fields_dao'
33
34
  require 'artirix_data_models/daos/basic_model_dao'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: artirix_data_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo Turiño
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-24 00:00:00.000000000 Z
11
+ date: 2016-02-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -250,6 +250,7 @@ files:
250
250
  - lib/artirix_data_models/cached_action_adaptor/get_full.rb
251
251
  - lib/artirix_data_models/cached_action_adaptor/get_some.rb
252
252
  - lib/artirix_data_models/dao.rb
253
+ - lib/artirix_data_models/dao_concerns/with_response_adaptors.rb
253
254
  - lib/artirix_data_models/dao_registry.rb
254
255
  - lib/artirix_data_models/daos/basic_model_dao.rb
255
256
  - lib/artirix_data_models/daos/model_fields_dao.rb