shamu 0.0.21 → 0.0.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.ruby-version +1 -1
  4. data/Gemfile +3 -1
  5. data/Gemfile.lock +70 -69
  6. data/app/README +1 -0
  7. data/config/environment.rb +1 -0
  8. data/lib/shamu/attributes.rb +26 -0
  9. data/lib/shamu/attributes/equality.rb +10 -1
  10. data/lib/shamu/entities/entity.rb +11 -0
  11. data/lib/shamu/entities/list_scope.rb +3 -0
  12. data/lib/shamu/entities/list_scope/sorting.rb +6 -1
  13. data/lib/shamu/entities/list_scope/window_paging.rb +1 -1
  14. data/lib/shamu/entities/null_entity.rb +18 -12
  15. data/lib/shamu/entities/opaque_id.rb +9 -8
  16. data/lib/shamu/error.rb +24 -3
  17. data/lib/shamu/events/active_record/migration.rb +0 -2
  18. data/lib/shamu/events/active_record/service.rb +3 -1
  19. data/lib/shamu/events/events_service.rb +2 -2
  20. data/lib/shamu/events/in_memory/async_service.rb +4 -2
  21. data/lib/shamu/events/in_memory/service.rb +3 -1
  22. data/lib/shamu/features/features_service.rb +3 -1
  23. data/lib/shamu/features/support.rb +1 -1
  24. data/lib/shamu/json_api/rails/controller.rb +1 -1
  25. data/lib/shamu/locale/en.yml +14 -2
  26. data/lib/shamu/security/active_record_policy.rb +2 -1
  27. data/lib/shamu/security/error.rb +1 -1
  28. data/lib/shamu/security/policy.rb +14 -4
  29. data/lib/shamu/security/principal.rb +22 -2
  30. data/lib/shamu/security/roles.rb +4 -3
  31. data/lib/shamu/services.rb +3 -1
  32. data/lib/shamu/services/active_record.rb +2 -1
  33. data/lib/shamu/services/active_record_crud.rb +43 -19
  34. data/lib/shamu/services/lazy_association.rb +50 -18
  35. data/lib/shamu/services/observable_support.rb +73 -0
  36. data/lib/shamu/services/observed_request.rb +76 -0
  37. data/lib/shamu/services/request.rb +12 -0
  38. data/lib/shamu/services/request_support.rb +24 -2
  39. data/lib/shamu/services/result.rb +62 -1
  40. data/lib/shamu/services/service.rb +58 -33
  41. data/lib/shamu/sessions/cookie_store.rb +3 -1
  42. data/lib/shamu/sessions/session_store.rb +2 -2
  43. data/lib/shamu/version.rb +1 -1
  44. data/shamu.gemspec +1 -1
  45. data/spec/lib/shamu/entities/entity_lookup_service_spec.rb +1 -1
  46. data/spec/lib/shamu/entities/list_scope/sorting_spec.rb +1 -1
  47. data/spec/lib/shamu/entities/null_entity_spec.rb +6 -1
  48. data/spec/lib/shamu/entities/opaque_id_spec.rb +13 -6
  49. data/spec/lib/shamu/entities/static_repository_spec.rb +2 -2
  50. data/spec/lib/shamu/rails/entity_spec.rb +1 -1
  51. data/spec/lib/shamu/rails/features_spec.rb +1 -1
  52. data/spec/lib/shamu/security/principal_spec.rb +25 -0
  53. data/spec/lib/shamu/services/active_record_crud_spec.rb +39 -4
  54. data/spec/lib/shamu/services/lazy_association_spec.rb +19 -6
  55. data/spec/lib/shamu/services/observable_support_spec.rb +55 -0
  56. data/spec/lib/shamu/services/observed_request_spec.rb +46 -0
  57. data/spec/lib/shamu/services/request_support_spec.rb +54 -3
  58. data/spec/lib/shamu/services/service_spec.rb +16 -27
  59. metadata +15 -5
@@ -8,10 +8,10 @@ module ServiceSpec
8
8
  def process( params )
9
9
  with_request( params, Request::Change ) do |request|
10
10
  request_hook
11
- next error( :base, "nope" ) if request.level < 0
11
+ next request.error( :base, "nope" ) if request.level < 0
12
12
 
13
13
  record = OpenStruct.new( request.to_attributes )
14
- scorpion.fetch ServiceSpec::Entity, { record: record }, {}
14
+ scorpion.fetch ServiceSpec::Entity, record: record
15
15
  end
16
16
  end
17
17
 
@@ -24,10 +24,11 @@ module ServiceSpec
24
24
  public :cached_lookup
25
25
  public :lookup_association
26
26
  public :lazy_association
27
+ public :cache_for
27
28
 
28
29
  def build_entities( records )
29
30
  records.map do |record|
30
- scorpion.fetch ServiceSpec::Entity, { record: record }, {}
31
+ scorpion.fetch ServiceSpec::Entity, record: record
31
32
  end
32
33
  end
33
34
  end
@@ -121,7 +122,7 @@ describe Shamu::Services::Service do
121
122
 
122
123
  it "matches on id by default" do
123
124
  list = service.entity_lookup_list( records, [record.id], ServiceSpec::NullEntity ) do |records|
124
- records.map { |r| scorpion.fetch ServiceSpec::Entity, { record: r }, {} }
125
+ records.map { |r| scorpion.fetch ServiceSpec::Entity, record: r }
125
126
  end
126
127
 
127
128
  expect( list.first ).to be_present
@@ -129,7 +130,7 @@ describe Shamu::Services::Service do
129
130
 
130
131
  it "matches on id with string numbers" do
131
132
  list = service.entity_lookup_list( records, [record.id.to_s], ServiceSpec::NullEntity ) do |records|
132
- records.map { |r| scorpion.fetch ServiceSpec::Entity, { record: r }, {} }
133
+ records.map { |r| scorpion.fetch ServiceSpec::Entity, record: r }
133
134
  end
134
135
 
135
136
  expect( list.first ).to be_present
@@ -137,7 +138,7 @@ describe Shamu::Services::Service do
137
138
 
138
139
  it "matches on a custom field" do
139
140
  list = service.entity_lookup_list( records, [record.amount], ServiceSpec::NullEntity, match: :amount ) do |records| # rubocop:disable Metrics/LineLength
140
- records.map { |r| scorpion.fetch ServiceSpec::Entity, { record: r }, {} }
141
+ records.map { |r| scorpion.fetch ServiceSpec::Entity, record: r }
141
142
  end
142
143
 
143
144
  expect( list.first ).to be_present
@@ -146,7 +147,7 @@ describe Shamu::Services::Service do
146
147
  it "matches with a custom proc" do
147
148
  matcher = ->( record ) { record.amount }
148
149
  list = service.entity_lookup_list( records, [record.amount], ServiceSpec::NullEntity, match: matcher ) do |records| # rubocop:disable Metrics/LineLength
149
- records.map { |r| scorpion.fetch ServiceSpec::Entity, { record: r }, {} }
150
+ records.map { |r| scorpion.fetch ServiceSpec::Entity, record: r }
150
151
  end
151
152
 
152
153
  expect( list.first ).to be_present
@@ -269,50 +270,38 @@ describe Shamu::Services::Service do
269
270
  end
270
271
  end
271
272
 
273
+ let( :cache ) { service.cache_for( entity: service ) }
274
+
272
275
  it "returns nil if id is nil" do
273
- expect( service.lookup_association( nil, service ) ).to be_nil
276
+ expect( service.lookup_association( nil, service, cache ) ).to be_nil
274
277
  end
275
278
 
276
279
  it "yields to get all association links" do
277
280
  expect do |b|
278
- service.lookup_association( 1, service, &b )
281
+ service.lookup_association( 1, service, cache, &b )
279
282
  end.to yield_control
280
283
  end
281
284
 
282
285
  it "finds assocation from cache" do
283
- service.lookup_association( 1, service ) do
286
+ service.lookup_association( 1, service, cache ) do
284
287
  [ 1, 2 ]
285
288
  end
286
289
 
287
290
  expect do |b|
288
- service.lookup_association( 1, service, &b )
291
+ service.lookup_association( 1, service, cache, &b )
289
292
  end.not_to yield_control
290
293
  end
291
294
 
292
295
  it "returns the found entity with no records" do
293
- result = service.lookup_association( 1, service )
296
+ result = service.lookup_association( 1, service, cache )
294
297
  expect( result ).to be_a ServiceSpec::Entity
295
298
  end
296
299
 
297
300
  it "returns the found entity with bulk records" do
298
- result = service.lookup_association( 1, service ) do
301
+ result = service.lookup_association( 1, service, cache ) do
299
302
  [ 1, 2 ]
300
303
  end
301
304
  expect( result ).to be_a ServiceSpec::Entity
302
305
  end
303
306
  end
304
-
305
- describe "#lazy_association" do
306
- before( :each ) do
307
- allow( service ).to receive( :lookup ) do |*ids|
308
- ids.map { |id| ServiceSpec::Entity.null_entity.new( id: id ) }
309
- end
310
- end
311
-
312
- it "gets a lazy association" do
313
- expect( service.lazy_association( 1, service ) ).to be_a Shamu::Services::LazyAssociation
314
- end
315
-
316
-
317
- end
318
307
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shamu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.21
4
+ version: 0.0.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Alexander
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2017-12-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.6'
47
+ version: 1.0.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.6'
54
+ version: 1.0.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: multi_json
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -215,10 +215,12 @@ files:
215
215
  - LICENSE
216
216
  - README.md
217
217
  - Rakefile
218
+ - app/README
218
219
  - bin/rake
219
220
  - bin/rspec
220
221
  - circle.yml
221
222
  - config.ru
223
+ - config/environment.rb
222
224
  - lib/generators/shamu.rb
223
225
  - lib/generators/shamu/api_controller/api_controller_generator.rb
224
226
  - lib/generators/shamu/api_controller/templates/api_controller.rb
@@ -359,6 +361,8 @@ files:
359
361
  - lib/shamu/services/error.rb
360
362
  - lib/shamu/services/lazy_association.rb
361
363
  - lib/shamu/services/lazy_transform.rb
364
+ - lib/shamu/services/observable_support.rb
365
+ - lib/shamu/services/observed_request.rb
362
366
  - lib/shamu/services/request.rb
363
367
  - lib/shamu/services/request_support.rb
364
368
  - lib/shamu/services/result.rb
@@ -451,11 +455,14 @@ files:
451
455
  - spec/lib/shamu/security/policy_refinement_spec.rb
452
456
  - spec/lib/shamu/security/policy_rule_spec.rb
453
457
  - spec/lib/shamu/security/policy_spec.rb
458
+ - spec/lib/shamu/security/principal_spec.rb
454
459
  - spec/lib/shamu/security/roles_spec.rb
455
460
  - spec/lib/shamu/services/active_record_crud_spec.rb
456
461
  - spec/lib/shamu/services/active_record_spec.rb
457
462
  - spec/lib/shamu/services/lazy_association_spec.rb
458
463
  - spec/lib/shamu/services/lazy_transform_spec.rb
464
+ - spec/lib/shamu/services/observable_support_spec.rb
465
+ - spec/lib/shamu/services/observed_request_spec.rb
459
466
  - spec/lib/shamu/services/request_spec.rb
460
467
  - spec/lib/shamu/services/request_support_spec.rb
461
468
  - spec/lib/shamu/services/result_spec.rb
@@ -488,7 +495,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
488
495
  version: '0'
489
496
  requirements: []
490
497
  rubyforge_project:
491
- rubygems_version: 2.6.10
498
+ rubygems_version: 2.6.12
492
499
  signing_key:
493
500
  specification_version: 4
494
501
  summary: Have a whale of a good time adding Service Oriented Architecture to your
@@ -574,11 +581,14 @@ test_files:
574
581
  - spec/lib/shamu/security/policy_refinement_spec.rb
575
582
  - spec/lib/shamu/security/policy_rule_spec.rb
576
583
  - spec/lib/shamu/security/policy_spec.rb
584
+ - spec/lib/shamu/security/principal_spec.rb
577
585
  - spec/lib/shamu/security/roles_spec.rb
578
586
  - spec/lib/shamu/services/active_record_crud_spec.rb
579
587
  - spec/lib/shamu/services/active_record_spec.rb
580
588
  - spec/lib/shamu/services/lazy_association_spec.rb
581
589
  - spec/lib/shamu/services/lazy_transform_spec.rb
590
+ - spec/lib/shamu/services/observable_support_spec.rb
591
+ - spec/lib/shamu/services/observed_request_spec.rb
582
592
  - spec/lib/shamu/services/request_spec.rb
583
593
  - spec/lib/shamu/services/request_support_spec.rb
584
594
  - spec/lib/shamu/services/result_spec.rb