hadouken-json 0.0.3 → 0.0.4

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
  SHA256:
3
- metadata.gz: 62fef84a45118f2f47cbd64a3634580aac3a563a172badedc5cc546afd560e54
4
- data.tar.gz: a9350818a683f0b13f8ec0cdc1ed7b0f3c8d4d3932968713669f9382344977e8
3
+ metadata.gz: 5134ad4ac55b205d681920316af6eecf2c2daa787ed32fd6638ed67cafbc3790
4
+ data.tar.gz: e61fedaa590de97485d3db9d94a56ac734570734b370c5dd2ed17bae353bc8f3
5
5
  SHA512:
6
- metadata.gz: 915c7205d38b350c6120eac7cb4aaec445e79d70601143ec08fdbeb2866b56e3aa23bd27520273b84bb7f5a8c57ba1b08eee46596d030f1e0bca64fc134dcce8
7
- data.tar.gz: 20cd69fb5a7045761e111c630037caca265f89dba328e352895bf801079d0ce75789e61197458255f5526f9ee169d6ca484c105f28e8e9d76acf40306e2329a4
6
+ metadata.gz: 1b14b24f94168ec7f5b30aa6eec22d6253288f9a28dbea7657bcc3fc2d5faffbd4700d694234cd1eab5ce5ff7b42daa6abd874b4d7fc44e0f8ea6eb99bd88f08
7
+ data.tar.gz: fe6f9cd046066da882f19a39cd3edc64fab4c58ff724d60c56c4b57086ce73883b254e539255eea8acb575040d034adb969f29826650d00fb131990421752e6f
data/lib/hadouken/json.rb CHANGED
@@ -21,7 +21,8 @@ class Hadouken::Json
21
21
  main_class: (relation_for(options[:jsonb_field_from]) || relation).klass,
22
22
  scope: options[:for],
23
23
  schema: json_schema,
24
- decorator: (options[:decorate_with].is_a?(Hadouken::Decorator) ? options[:decorate_with] : nil)
24
+ decorator: (options[:decorate_with].is_a?(Hadouken::Decorator) ? options[:decorate_with] : nil),
25
+ where_condition: options[:where]
25
26
  )
26
27
  end
27
28
 
@@ -5,6 +5,7 @@ class Hadouken::SqlBuilder
5
5
  attribute :scope
6
6
  attribute :schema, Hash, default: {}
7
7
  attribute :decorator, Hadouken::Decorator
8
+ attribute :where_condition, Hash
8
9
 
9
10
  def self.call(*args)
10
11
  new(*args).call
@@ -16,6 +17,7 @@ class Hadouken::SqlBuilder
16
17
  @sql = ''
17
18
  @relation = build_relation
18
19
  apply_decorator if decorator&.valid?
20
+ apply_where_conditions
19
21
  @sql << @relation.select(*columns_to_select).to_sql.gsub(sample_id.to_s, primary_key)
20
22
 
21
23
  "SELECT COALESCE(json_agg(a), '[]'::JSON ) FROM (#{@sql}) a"
@@ -43,6 +45,13 @@ class Hadouken::SqlBuilder
43
45
  EOQ
44
46
  end
45
47
 
48
+ def apply_where_conditions
49
+ return unless where_condition.is_a?(Hash) && where_condition.any?
50
+
51
+ where_condition.deep_transform_keys! { |k| [unwound_jsonb_table_name,k.to_s].join('.') } if scope_is_jsonb_array?
52
+ @relation.where!(where_condition)
53
+ end
54
+
46
55
  def apply_decorator
47
56
  @sql << decorator.data_table_sql
48
57
  @relation.joins!(decorator.join_sql)
@@ -59,7 +68,7 @@ class Hadouken::SqlBuilder
59
68
  schema.extract!(*schema.select{ |_,v| v.is_a?(String) }.keys)
60
69
  .inject({}) do |h, (field, column)|
61
70
  col = (@relation&.klass&.column_names||[]).include?(column) ? [@relation.klass.table_name, column].join('.') : column
62
- scope_is_jsonb_array? ? h.merge(field => "#{unwound_jsonb_table_name}.#{column.split('::')[0]}") : h.merge(field => col)
71
+ scope_is_jsonb_array? ? h.merge(field => "#{unwound_jsonb_table_name}.#{column}") : h.merge(field => col)
63
72
  end
64
73
  end
65
74
 
@@ -116,12 +125,15 @@ class Hadouken::SqlBuilder
116
125
  end
117
126
 
118
127
  def unwound_jsonb_table_name
119
- @unwound_jsonb_table_name ||= ['array_from_', scope].join
128
+ ['records_from', scope].join('_')
129
+ end
130
+
131
+ def jsonb_type
132
+ [main_class.table_name, scope].join('_')
120
133
  end
121
134
 
122
135
  def unwound_jsonb_table
123
- table_structure = schema.values.map { |v| v.split('::').push('text')[0..1].join(' ') }.join(', ')
124
- "jsonb_to_recordset(#{main_class.table_name}.#{scope}) AS #{unwound_jsonb_table_name}(#{table_structure})"
136
+ "jsonb_populate_recordset(null::#{jsonb_type}, #{main_class.table_name}.#{scope}) AS #{unwound_jsonb_table_name}"
125
137
  end
126
138
 
127
139
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hadouken-json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Zaytsev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-10 00:00:00.000000000 Z
11
+ date: 2021-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus