active_house 0.2.0 → 0.2.1

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: d444148c72cbef93a8a193e8c73079791e77ecc4
4
- data.tar.gz: 9fbcef6e31a2627dbc822dddc64d72b1dcb1a3ec
3
+ metadata.gz: e8604e8b710205124b594cb7f226fbc04f444875
4
+ data.tar.gz: 4130c550f2386afe4cd26953e219fadbff652b98
5
5
  SHA512:
6
- metadata.gz: 92e3a2d335222804ef4f09ce2ed8037ffee60b496d6a3d70e1dabfeb86fa87242900a91b72f538c227eb30c9a4241e4707ef92fa5bfd95d9455a835b409bd660
7
- data.tar.gz: 1e744dc7fa583e5d1861bf8561b4a7165f3624369af37110f05b493825dff5b5d9778c4ab0b5468838647875960e9b70705d57548af4d93db8d68bc59bd20c14
6
+ metadata.gz: fe1797a3645326c8cd9e8e0ab90e570b4d4e00722fd2aad537706a474391d7702e3d8c3846b428f493c738da63b929c3227e6cd0a1a70c23c46983de4184b617
7
+ data.tar.gz: f699b40bfcda2ea589d047cb3624261bb1bde8024f5e0a047b4221d4a56513befa7e22a85a64c74da33aaeced0151d5e0670d0e1341aa1ae398ca60d3f6f371a
@@ -0,0 +1,33 @@
1
+ module ActiveHouse
2
+ module ArrayJoinable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ private
7
+
8
+ def build_array_join_query_part
9
+ unless @array_joins.empty?
10
+ "ARRAY JOIN #{@array_joins.join(', ')}"
11
+ end
12
+ end
13
+ end
14
+
15
+ def initialize(*)
16
+ @array_joins = []
17
+ super
18
+ end
19
+
20
+ def array_join(*fields)
21
+ raise ArgumentError, 'wrong number of arguments' if fields.empty?
22
+ formatted_fields = fields.map do |field|
23
+ if field.is_a?(Symbol) && model_class._attribute_opts.key?(field)
24
+ opts = model_class._attribute_opts.fetch(field)
25
+ opts.key?(:select) ? "#{opts[:select]} AS #{field}" : field.to_s
26
+ else
27
+ field.to_s
28
+ end
29
+ end
30
+ chain_query array_joins: (@array_joins + formatted_fields).uniq
31
+ end
32
+ end
33
+ end
@@ -6,6 +6,7 @@ require_relative 'groupable'
6
6
  require_relative 'limitable'
7
7
  require_relative 'havingable'
8
8
  require_relative 'unionable'
9
+ require_relative 'array_joinable'
9
10
  require 'active_support/concern'
10
11
 
11
12
  module ActiveHouse
@@ -20,6 +21,7 @@ module ActiveHouse
20
21
  include ActiveHouse::Havingable
21
22
  include ActiveHouse::Limitable
22
23
  include ActiveHouse::Unionable
24
+ include ActiveHouse::ArrayJoinable
23
25
 
24
26
  included do
25
27
  protected
@@ -39,6 +41,7 @@ module ActiveHouse
39
41
  [
40
42
  build_select_query_part,
41
43
  build_from_query_part,
44
+ build_array_join_query_part,
42
45
  build_where_query_part,
43
46
  build_group_by_query_part,
44
47
  build_having_query_part,
@@ -100,10 +103,13 @@ module ActiveHouse
100
103
  limit: :limit,
101
104
  having: :having,
102
105
  union: :unions,
103
- from: :subquery
106
+ from: :subquery,
107
+ array_join: :array_joins
104
108
  }
105
109
  end
106
110
 
111
+ # key - instance variable name that which store values
112
+ # value - default value for the variable
107
113
  def chain_defaults
108
114
  {
109
115
  fields: [],
@@ -114,6 +120,7 @@ module ActiveHouse
114
120
  having: [],
115
121
  union: {},
116
122
  subquery: nil,
123
+ array_joins: []
117
124
  }
118
125
  end
119
126
 
@@ -22,13 +22,18 @@ module ActiveHouse
22
22
  !@collection.nil?
23
23
  end
24
24
 
25
+ def to_hashes
26
+ connection.select_rows(to_query.squish)
27
+ end
28
+
29
+ private
30
+
25
31
  def collection
26
32
  @collection ||= fetch_collection
27
33
  end
28
34
 
29
35
  def fetch_collection
30
- result = connection.select_rows(to_query.squish)
31
- result.map { |row| model_class.load!(row) }
36
+ to_hash.map { |row| model_class.load!(row) }
32
37
  end
33
38
  end
34
39
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveHouse
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.2.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_house
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Talakevich
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-03 00:00:00.000000000 Z
11
+ date: 2018-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -113,6 +113,7 @@ files:
113
113
  - bin/console
114
114
  - bin/setup
115
115
  - lib/active_house.rb
116
+ - lib/active_house/array_joinable.rb
116
117
  - lib/active_house/chainable.rb
117
118
  - lib/active_house/collectable.rb
118
119
  - lib/active_house/configuration.rb