dao-gateway 1.0.1 → 1.1.0

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: a3f078a10c3cddff50d05b3643838315da7a90b7
4
- data.tar.gz: 44a2f48864b7345a0c1a7148a356b2437aa22c72
3
+ metadata.gz: 2561db58543af87984ac12f2de82a5925351be2c
4
+ data.tar.gz: 1f9d890df5bb78085aeafe7be5f6747657083b9b
5
5
  SHA512:
6
- metadata.gz: 4cfd8d73b7eadd0031cc03089063b78195bc6e65c0467eb075d02a1624d5d32d32e4bfb26533d16ece2839c7619923be8bccda4a209b1fc4ebeb4e972c680683
7
- data.tar.gz: 88504f06a17eda7d6b4b7b2b12109d5cc495c3c349d999426087ad1942748a01ee0a37d81fca3f0a2c01acb82cb1e4505cc5710a007539bd8ff2f0c36075b63b
6
+ metadata.gz: 0fe09fbf6b7a737bd59918b5f6977ab69e98bdd82c0682bf86fd452996865b1f6a160631e8e132ad6a7bab4638aed41f3376f887ebabe48787443b3abca73301
7
+ data.tar.gz: ba6430ab5845b86a0fe10f64fa079071e56c701be6f4a1480a2eb7894d25cc3ff05869c53576767d954d8e988f4bca3fad95ad8f4875a9444b51dd61f12e250a
data/README.md CHANGED
@@ -23,7 +23,6 @@ Or install it yourself as:
23
23
 
24
24
  $ gem install dao-gateway
25
25
 
26
-
27
26
  ## Development
28
27
 
29
28
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -38,4 +37,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/dao-rb
38
37
  ## License
39
38
 
40
39
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
41
-
data/lib/dao/gateway.rb CHANGED
@@ -3,6 +3,10 @@ require 'dao/gateway/version'
3
3
  require 'dao/gateway/record_not_found'
4
4
  require 'dao/gateway/transaction_not_supported'
5
5
  require 'dao/gateway/invalid_record'
6
+ require 'dao/gateway/processor'
7
+ require 'dao/gateway/entity_processor'
8
+ require 'dao/gateway/block_processor'
9
+ require 'dao/gateway/pipe'
6
10
 
7
11
  require 'dao/gateway/scope_transformer'
8
12
  require 'dao/gateway/base'
@@ -0,0 +1,26 @@
1
+ module Dao
2
+ module Gateway
3
+ class BlockProcessor < Processor
4
+ def initialize(continuable = true, &block)
5
+ @continuable = continuable
6
+ @processor = block
7
+ end
8
+
9
+ def process(*args)
10
+ @processor.call(*args, self)
11
+ end
12
+
13
+ def continuable?
14
+ @continuable
15
+ end
16
+
17
+ def continuable!
18
+ @continuable = true
19
+ end
20
+
21
+ def stop!
22
+ @continuable = false
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module Dao
2
+ module Gateway
3
+ class EntityProcessor < Processor
4
+ def initialize(entity_class)
5
+ @entity_class = entity_class
6
+ end
7
+
8
+ def process(attributes, associations, *)
9
+ @entity_class.new(attributes).tap do |entity|
10
+ entity.initialized_with = associations
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,71 @@
1
+ module Dao
2
+ module Gateway
3
+ class Pipe
4
+ include Enumerable
5
+
6
+ def initialize(data, processors, associations)
7
+ @data = data
8
+ @processors = processors
9
+ @associations = associations
10
+ @data_processed = false
11
+ end
12
+
13
+ def postprocess(processor)
14
+ @processors << processor
15
+ end
16
+
17
+ def preprocess(processor)
18
+ insert_processor_at(0, processor)
19
+ end
20
+
21
+ def insert_processor_at(index, processor)
22
+ @processors.insert(index, processor)
23
+ end
24
+
25
+ def preprocess_before(processor_type, processor)
26
+ index = @processors.index { |el| el.instance_of? processor_type }
27
+ insert_processor_at(index, processor)
28
+ end
29
+
30
+ def processed?
31
+ @data_processed
32
+ end
33
+
34
+ def each(&block)
35
+ if processed?
36
+ @data.each(&block)
37
+ else
38
+ process_data(&block)
39
+ end
40
+ end
41
+
42
+ def fork
43
+ raise 'Data was already processed' if processed?
44
+ fork!
45
+ end
46
+
47
+ def fork!
48
+ self.class.new(@data.dup, @processors.dup, @associations)
49
+ end
50
+
51
+ private
52
+
53
+ def process_data(&block)
54
+ @data_processed = true
55
+
56
+ @data.each_with_index do |raw_element, index|
57
+ entity = raw_element
58
+
59
+ @processors.all? do |processor|
60
+ entity = processor.process(entity, @associations, raw_element)
61
+ processor.continuable?
62
+ end
63
+
64
+ @data[index] = entity
65
+
66
+ block.call(entity)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,13 @@
1
+ module Dao
2
+ module Gateway
3
+ class Processor
4
+ def process(attributes, _associations, _raw_record)
5
+ attributes
6
+ end
7
+
8
+ def continuable?
9
+ true
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,12 +1,13 @@
1
1
  module Dao
2
2
  module Gateway
3
3
  class ScopeTransformer
4
- attr_reader :entity
5
4
  attr_accessor :associations
6
5
 
7
6
  def initialize(entity)
8
- @entity = entity
9
7
  @associations = []
8
+ @processors = [Dao::Gateway::EntityProcessor.new(entity)]
9
+
10
+ add_processors
10
11
  end
11
12
 
12
13
  def many(relation)
@@ -27,13 +28,12 @@ module Dao
27
28
 
28
29
  protected
29
30
 
30
- def transform(relation, &block)
31
- relation.collect do |attributes|
32
- attributes = block.call(attributes) if block_given?
33
- @entity.new(attributes).tap do |entity|
34
- entity.initialized_with = associations
35
- end
36
- end
31
+ def transform(relation)
32
+ Pipe.new(relation, @processors, @associations)
33
+ end
34
+
35
+ def add_processors
36
+
37
37
  end
38
38
  end
39
39
  end
@@ -1,5 +1,5 @@
1
1
  module Dao
2
2
  module Gateway
3
- VERSION = '1.0.1'
3
+ VERSION = '1.1.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dao-gateway
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - llxff
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-07-14 00:00:00.000000000 Z
12
+ date: 2016-07-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -100,7 +100,11 @@ files:
100
100
  - dao-gateway.gemspec
101
101
  - lib/dao/gateway.rb
102
102
  - lib/dao/gateway/base.rb
103
+ - lib/dao/gateway/block_processor.rb
104
+ - lib/dao/gateway/entity_processor.rb
103
105
  - lib/dao/gateway/invalid_record.rb
106
+ - lib/dao/gateway/pipe.rb
107
+ - lib/dao/gateway/processor.rb
104
108
  - lib/dao/gateway/record_not_found.rb
105
109
  - lib/dao/gateway/scope_transformer.rb
106
110
  - lib/dao/gateway/transaction_not_supported.rb