artirix_data_models 1.0.0.beta1 → 1.0.0.beta2

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: b24c8e95bc1bd45a7df4207da2d02673adb6f721
4
- data.tar.gz: 7bbe651de9dcdeb677687ad0839c10a2b1b45d14
3
+ metadata.gz: 7b789a4325708b34bd7ebfdc7745857c0b15c274
4
+ data.tar.gz: a0b4df2ed3b9a82761ad7b7474d2456c7c1ec622
5
5
  SHA512:
6
- metadata.gz: 2065f4af7b36c022d2160d899ed4535b8cefe5764f3eabc282a48750d5b0616c1f16ee72d786c53d0c5cb8be226fbba7aeca6c1615f194057279a73384f74a4c
7
- data.tar.gz: 213acba354ebaca8c02116674c08aa9b6db758c78f705250f67ddac5dc8c99765f9dd9a9d96cc9cf8059d94482e90c90867c0516abb2b4ad2492b38fe7aa5eee
6
+ metadata.gz: b3067423501cef36002fc3c46a8d1bca73541ed2cfd92acb068b704472dca356d2c771f3e4434a554983dbe86f0b2956bcf181cf4d0554b8294c778572c1c6e4
7
+ data.tar.gz: d82ad3c5b183de485ddd6c3d85b749fe03abb5b5ba3dbd9c8c3ed9c3ad1918338fca8d08eb6e22efa000d8ac1fdd1ac4885fb9357d4dd48f393e7d40f8bcd242
data/.travis.yml CHANGED
@@ -1,6 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.0
3
+ - 2.3.3
4
+ - 2.4.0
5
+
4
6
  before_install: gem install bundler -v 1.11.2
5
7
 
6
8
  addons:
data/README.md CHANGED
@@ -15,11 +15,6 @@ Its goal is to provide a set of Read Only model objects that receive their data
15
15
 
16
16
  It's designed to work assuming JSON APIs and ElasticSearch responses.
17
17
 
18
- # TODO:
19
- - usage doc
20
- - change Cache to use [artirix_cache_service](https://github.com/artirix/artirix_cache_service)
21
-
22
-
23
18
  note: for making a model compatible with [ActiveModelSerializers](https://github.com/rails-api/active_model_serializers), use [artirix_data_models-ams](https://github.com/artirix/artirix_data_models-ams/)
24
19
 
25
20
  ## Usage
@@ -321,11 +316,73 @@ end
321
316
 
322
317
  1. Documentation
323
318
  2. clean `basic_dao` (probably not backwards compatible, so we'll do it in a new major release)
324
- 3. use [artirix_cache_service](https://github.com/artirix/artirix_cache_service) instead of this implementation (might be not backwards compatible. If so: new major release)
319
+ 3. config flags to modify the composition of Model (ie: include/exclude partial mode behaviour, default attributes...)
325
320
 
321
+ ## Changes
326
322
 
323
+ ### 1.0.0.beta2
327
324
 
328
- ## Changes
325
+ - Partial Mode: the default mode status is inherited from the parent class. If you have
326
+
327
+ ```ruby
328
+ class A
329
+ include ArtirixDataModels::Model
330
+ self.mark_full_mode_by_default
331
+ end
332
+
333
+ class B < A
334
+ end
335
+
336
+ class C
337
+ include ArtirixDataModels::Model
338
+ end
339
+
340
+ A.default_full_mode? # => true
341
+ B.default_full_mode? # => true (it would be false before this version)
342
+ C.default_full_mode? # => false
343
+ ```
344
+
345
+ - Default Mode: you can override the default mode (if not overridden it will be `:partial`)
346
+ ```ruby
347
+
348
+ # make it full mode by default
349
+ config.x.artirix_data_models.default_mode = :full
350
+ ```
351
+
352
+
353
+ - Default Attributes: you can override the list of default attributes
354
+ ```ruby
355
+
356
+ # add no default attributes
357
+ config.x.artirix_data_models.default_attributes = []
358
+
359
+ # only _timestamp
360
+ config.x.artirix_data_models.default_attributes = [:_timestamp]
361
+
362
+ # if nothing is specified in the config, the default attributes are:
363
+ [
364
+ :_timestamp,
365
+ :_score,
366
+ :_type,
367
+ :_index,
368
+ :_id,
369
+ ]
370
+ ```
371
+
372
+ - Default Attributes always in Partial Mode: you can override the list of attributes always in partial mode
373
+ ```ruby
374
+
375
+ # add no default attributes
376
+ config.x.artirix_data_models.attributes_always_in_partial_mode = []
377
+
378
+ # _timestamp and _score
379
+ config.x.artirix_data_models.attributes_always_in_partial_mode = [:_timestamp, :_score]
380
+
381
+ # if nothing is specified in the config, the default attributes are:
382
+ [
383
+ :_timestamp,
384
+ ]
385
+ ```
329
386
 
330
387
  ### Breaking Changes!!: version 1.0.0.beta1
331
388
 
@@ -391,7 +448,7 @@ added message support for DataGateway exceptions
391
448
 
392
449
  ### 0.22.0
393
450
 
394
- added support for aggregations that look like
451
+ added support for aggregations that look like
395
452
  ```json
396
453
  {
397
454
  "aggregations": {
@@ -421,8 +478,8 @@ which will be added as an aggregation like:
421
478
 
422
479
  ```ruby
423
480
  es_collection.aggregations.first.name # => :published_states
424
- es_collection.aggregations.first.buckets
425
- # => [
481
+ es_collection.aggregations.first.buckets
482
+ # => [
426
483
  # {name: 'live_soon', count: 0},
427
484
  # {name: 'draft', count: 3},
428
485
  # {name: 'expired', count: 0},
@@ -432,13 +489,13 @@ es_collection.aggregations.first.buckets
432
489
 
433
490
  ### 0.21.1
434
491
 
435
- Fix bug in `Inspectable`, on Arrays.
492
+ Fix bug in `Inspectable`, on Arrays.
436
493
 
437
494
  ### 0.21.0
438
495
 
439
- Changed cache to use `ArtirixCacheService` (gem `artirix_cache_service`).
496
+ Changed cache to use `ArtirixCacheService` (gem `artirix_cache_service`).
440
497
 
441
- Deprecated the use of method_missing on cache in favour of the `.key` method:
498
+ Deprecated the use of method_missing on cache in favour of the `.key` method:
442
499
 
443
500
  ```ruby
444
501
  # this is deprecated
@@ -460,7 +517,7 @@ ArtirixDataModels::CacheService.first_options 'some', 'other', return_if_missing
460
517
 
461
518
 
462
519
  ### 0.20.0
463
- Added `ensure_relative` boolean option to the creation of a `DataGateway` (disable by default). With it enabled, it will ensure that any given `path` is relative by removing the leading `/`. This is necessary if the Gateway should call a nested endpoint and not just a host.
520
+ Added `ensure_relative` boolean option to the creation of a `DataGateway` (disable by default). With it enabled, it will ensure that any given `path` is relative by removing the leading `/`. This is necessary if the Gateway should call a nested endpoint and not just a host.
464
521
 
465
522
  Example: If we have `"http://example.org/api/"` as connection's URL, and path `"/people/1"`, with this:
466
523
 
@@ -481,7 +538,7 @@ Added `configuration_loader` and support for `Rails.configuration.x.artirix_data
481
538
  `DataGateway` connection loader now moved to `DataGateway::ConnectionLoader`, with 3 public methods:
482
539
  - `default_connection` which will give us the connection based on config in `data_gateway` group in `SimpleConfig.for(:site)`
483
540
  - `connection_by_config_key(config_key)` which will give us the connection based on config in the given group key in `SimpleConfig.for(:site)`
484
- - `connection(config: {}, url: nil, login: nil, password: nil, bearer_token: nil, token_hash: nil)`: It will use the elements from the given config if they are not present on the params.
541
+ - `connection(config: {}, url: nil, login: nil, password: nil, bearer_token: nil, token_hash: nil)`: It will use the elements from the given config if they are not present on the params.
485
542
 
486
543
  ### 0.17.0
487
544
 
@@ -519,7 +576,7 @@ updating dependencies: KeywordInit (to support passing nil)
519
576
  - `Gateway` `perform` and `connect` now accept the extra arguments as keyword arguments:
520
577
 
521
578
  ```ruby
522
- gateway.perform :get, path: '/this/is/required' body: nil, json_body: true, timeout: 10
579
+ gateway.perform :get, path: '/this/is/required' body: nil, json_body: true, timeout: 10
523
580
  ```
524
581
 
525
582
  The internals are adapted but if a client app was mocking Gateway's `perform` directly, this could be a breaking change.
@@ -539,7 +596,7 @@ end
539
596
 
540
597
  ### 0.14.1
541
598
  - Exceptions now with `data_hash` and ability to be raised with message, options, or both.
542
- - Cache Adaptors now store the data hash of the NotFound exception, and a new one is built and raised when reading a cached NotFound.
599
+ - Cache Adaptors now store the data hash of the NotFound exception, and a new one is built and raised when reading a cached NotFound.
543
600
 
544
601
  ```ruby
545
602
  raise ArtirixDataModels::DataGateway::NotFound, 'blah blah'
@@ -555,7 +612,7 @@ raise ArtirixDataModels::DataGateway::NotFound.new('Something', path: 'x')
555
612
  ```ruby
556
613
  class MyModel
557
614
  include ArtirixDataModels::Model
558
-
615
+
559
616
  mark_full_mode_by_default
560
617
  end
561
618
 
@@ -589,7 +646,7 @@ x.full_mode? # => true
589
646
  - Gateways:
590
647
  -- added `gateway_factory` besides `gateway` as a creation argument for a DAO and BasicModelDAO. Now, when using a gateway in BasicModelDAO, it will use the given gateway if present, or it will call `gateway_factory.call` and use it. It won't save the result of the gateway factory, so the factory will be called every time a gateway is used.
591
648
  -- `BasicModelDAO` methods can receive a `gateway` option to be used instead of the normal gateway for the particular request. Used in `_get`, `_post`, `_put` and `_delete` methods. If no override is passed, then it will use the preloaded gateway (using either `gateway` or `gateway_factory` creation arguments, see above).
592
- -- `DAO` creation accepts an option `ignore_default_gateway` (`false` by default). If it is false, and no `gateway` or `gateway_factory` is passed, the gateway used will be `DAORegistry.gateway` (same as before). This allows to create DAOs without any gateway configured, making it necessary to instantiate it and pass it to `BasicModelDAO` on each request.
649
+ -- `DAO` creation accepts an option `ignore_default_gateway` (`false` by default). If it is false, and no `gateway` or `gateway_factory` is passed, the gateway used will be `DAORegistry.gateway` (same as before). This allows to create DAOs without any gateway configured, making it necessary to instantiate it and pass it to `BasicModelDAO` on each request.
593
650
 
594
651
  - Response Adaptors
595
652
  -- `DAO`'s `get_full` method now can pass to `BasicModelDAO` a `response_adaptor` option. `BasicModelDAO` will use `BasicModelDAO`'s `response_adaptor_for_reload` if no response adaptor is passed.
@@ -610,9 +667,9 @@ x.full_mode? # => true
610
667
  - Fake Responses now can be a callable object (if it responds to `call` it will invoke it)
611
668
  - refactor in `ArtirixDataModels::DataGateway` to add more info into the exceptions
612
669
  - `ArtirixDataModels::DataGateway::Error` and subclasses have now `path`, `method`, `response_status`, `response_body` (when applicable) and also `json_response_body` method which will try to parse `response_body` as if it were json (nil if it is not present or if it is not a valid json)
613
- - `ArtirixDataModels::DataGateway::Error` subclasses now for specific response status:
670
+ - `ArtirixDataModels::DataGateway::Error` subclasses now for specific response status:
614
671
  -- `NotFound`
615
- -- `NotAcceptable`
672
+ -- `NotAcceptable`
616
673
  -- `UnprocessableEntity`
617
674
  -- `Unauthorized`
618
675
  -- `Forbidden`
@@ -654,7 +711,7 @@ Yanked because of the gateway mock helpers were missing an option, which made th
654
711
  - added `MetricAggregation`. Normal `AggregationBuilder` will build an aggregation with that class if instead of `buckets` it finds `value` in the JSON.
655
712
  - normalize raw aggregations now does not ignore metric aggregations (see above)
656
713
  - added `calculate_filtered(filtered_values)` to aggregations (noop in Metric aggregations). In a bucket aggregation, will mark with `filtered?` each bucket (aka Aggregation Value) if the `bucket.name` is present in the given `filtered_values`.
657
- - added to `Aggregation` the methods:
714
+ - added to `Aggregation` the methods:
658
715
  -- `filtered_buckets` that will return only buckets marked as `filtered?`
659
716
  -- `unfiltered_buckets` that will return only buckets not marked as `filtered?`
660
717
  -- `filtered_first_buckets` that will concatenate `filtered_buckets` and `unfiltered_buckets`
@@ -663,7 +720,7 @@ Yanked because of the gateway mock helpers were missing an option, which made th
663
720
 
664
721
  ### ~0.7.0~ (YANKED)
665
722
 
666
- Yanked because of bug on Aggregations. Released 0.7.1 with the fix. Changeset moved too to 0.7.1
723
+ Yanked because of bug on Aggregations. Released 0.7.1 with the fix. Changeset moved too to 0.7.1
667
724
 
668
725
  ### 0.6.7
669
726
 
@@ -675,7 +732,7 @@ Yanked because of bug on Aggregations. Released 0.7.1 with the fix. Changeset mo
675
732
 
676
733
  ### 0.6.5
677
734
 
678
- - Specify `activemodel` as a dependency and require it in the lib
735
+ - Specify `activemodel` as a dependency and require it in the lib
679
736
  - `EsCollection` delegates `[]`, `first`, `last`, `take` and `drop` to the results.
680
737
 
681
738
 
@@ -719,4 +776,3 @@ Yanked because of breaking change introduction: removal of `Aggregation.from_jso
719
776
 
720
777
  - opening gem as is to the public.
721
778
  - still a lot of TODOs in the documentation
722
-
@@ -224,8 +224,8 @@ module ArtirixDataModels
224
224
  return nil if skip_option.include?(:reader) || skip_option.include?(:getter)
225
225
 
226
226
  variable_name = "@#{attribute}"
227
- dir_get_name = Attributes.direct_getter_method_name(attribute)
228
- reader = attribute.to_s
227
+ dir_get_name = Attributes.direct_getter_method_name(attribute)
228
+ reader = attribute.to_s
229
229
 
230
230
  define_method dir_get_name do
231
231
  instance_variable_get variable_name
@@ -268,14 +268,34 @@ module ArtirixDataModels
268
268
  module WithDefaultAttributes
269
269
  extend ActiveSupport::Concern
270
270
 
271
+ DEFAULT_ATTRIBUTES = [
272
+ :_timestamp,
273
+ :_score,
274
+ :_type,
275
+ :_index,
276
+ :_id,
277
+ ].freeze
278
+
279
+ ATTRIBUTES_ALWAYS_IN_PARTIAL_MODE = [
280
+ :_timestamp,
281
+ ].freeze
282
+
271
283
  included do
272
- attribute :_timestamp
273
- always_in_partial_mode(:_timestamp) if respond_to?(:always_in_partial_mode)
284
+ WithDefaultAttributes.default_attribute_names.each do |at|
285
+ attribute at
286
+ end
287
+
288
+ WithDefaultAttributes.default_attributes_always_in_partial_mode.each do |at|
289
+ always_in_partial_mode(at) if respond_to?(:always_in_partial_mode)
290
+ end
291
+ end
292
+
293
+ def self.default_attribute_names
294
+ Array(ArtirixDataModels.configuration.try(:default_attributes) || DEFAULT_ATTRIBUTES)
295
+ end
274
296
 
275
- attribute :_score
276
- attribute :_type
277
- attribute :_index
278
- attribute :_id
297
+ def self.default_attributes_always_in_partial_mode
298
+ Array(ArtirixDataModels.configuration.try(:attributes_always_in_partial_mode) || ATTRIBUTES_ALWAYS_IN_PARTIAL_MODE)
279
299
  end
280
300
  end
281
301
  end
@@ -364,7 +384,7 @@ module ArtirixDataModels
364
384
  extend ActiveSupport::Concern
365
385
 
366
386
  EMPTY_TIMESTAMP = 'no_time'.freeze
367
- SEPARATOR = '/'.freeze
387
+ SEPARATOR = '/'.freeze
368
388
 
369
389
  def cache_key
370
390
  # we do not want to force a reload for loading the cache key, it can lead to an infinite loop
@@ -468,28 +488,42 @@ module ArtirixDataModels
468
488
  end
469
489
 
470
490
  def default_full_mode?
471
- !!attribute_config.default_full_mode
491
+ attribute_config.default_mode == :full
472
492
  end
473
493
 
474
494
  def mark_full_mode_by_default
475
- attribute_config.default_full_mode = true
495
+ attribute_config.default_mode = :full
476
496
  end
477
497
 
478
498
  def mark_partial_mode_by_default
479
- attribute_config.default_full_mode = false
499
+ attribute_config.default_mode = :partial
500
+ end
501
+
502
+ def restore_default_mode
503
+ attribute_config.default_mode = nil
480
504
  end
481
505
  end
482
506
  end
483
507
 
484
508
  class AttributeConfig
485
509
  attr_reader :attribute_list, :always_in_partial_mode_list
486
- attr_accessor :parent_attribute_config, :default_full_mode
510
+ attr_accessor :parent_attribute_config
511
+ attr_writer :default_mode
487
512
 
488
513
  def initialize
489
- @attribute_list = Set.new
514
+ @attribute_list = Set.new
490
515
  @always_in_partial_mode_list = Set.new
491
- @parent_attribute_config = nil
492
- @default_full_mode = false
516
+ @parent_attribute_config = nil
517
+ @default_mode = nil
518
+ end
519
+
520
+ def default_mode
521
+ return @default_mode unless @default_mode.nil?
522
+ parent_attribute_config.try(:default_mode) || initial_default_mode
523
+ end
524
+
525
+ def initial_default_mode
526
+ ArtirixDataModels.configuration.try(:default_mode) || :partial
493
527
  end
494
528
 
495
529
  def attributes
@@ -1,3 +1,3 @@
1
1
  module ArtirixDataModels
2
- VERSION = '1.0.0.beta1'
2
+ VERSION = '1.0.0.beta2'
3
3
  end
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: 1.0.0.beta1
4
+ version: 1.0.0.beta2
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-12-01 00:00:00.000000000 Z
11
+ date: 2017-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport