azahara_schema 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: 61ff56bbd9eaed8a0b8d15ec62d66ab8db5b9787
4
- data.tar.gz: 7e6e1b03f11c923226b13a35aa03627a0babe333
3
+ metadata.gz: 8fdc281f1678559822f32f72ae8dc63a8ae3cb0c
4
+ data.tar.gz: 94a238cae3c82df5573c651a81d9b5d0ea3e78f1
5
5
  SHA512:
6
- metadata.gz: cde121ff79ff55d690a52577d50bd602ab8e75008106c831dd3f850883dfa90fd650ff247532a34b8bb2f6a3cad46c333a96bb0a3eb564f645cd419c041e7e6c
7
- data.tar.gz: c3497a02dfe5b6aa4236341dc0021e84d926d59fc75dd3342298e61736be3ef3b4d23938dddbd9238ecbdc08bc9a7d9977415d84b25abf1bee3428d704108d07
6
+ metadata.gz: 0b5c33963f165442367dcb014f17b5d287094cda153da630815eae239bcf6fc166f40591339be34932d3dc4fba02154a876ed672ab9d78ba369f08f4727fda33
7
+ data.tar.gz: c3bb384bcde4c9a27881c86b39ca42ccc120b2f3d8b80b3470754e4f8bbaea8f82f01d8ddcd22b9790a1a54c79bea3cd651ba09b6b1b57e4667bbdf421afa838
@@ -50,6 +50,14 @@ module AzaharaSchema
50
50
  end
51
51
  end
52
52
 
53
+ def add_preload(scope)
54
+ if attribute.is_a?(AzaharaSchema::AssociationAttribute)
55
+ scope.preload(association.name => attribute.association.name)
56
+ else
57
+ scope.preload(association.name)
58
+ end
59
+ end
60
+
53
61
  def add_statement(scope, operator, values)
54
62
  super(add_join(scope), operator, values)
55
63
  end
@@ -58,5 +66,12 @@ module AzaharaSchema
58
66
  super(add_join(scope), order)
59
67
  end
60
68
 
69
+ def build_json_options!(options)
70
+ options[:include] ||= {}
71
+ options[:include][association.name.to_sym] ||= {}
72
+ attribute.build_json_options!(options[:include][association.name.to_sym])
73
+ options
74
+ end
75
+
61
76
  end
62
77
  end
@@ -52,6 +52,10 @@ module AzaharaSchema
52
52
  record.public_send(name)
53
53
  end
54
54
 
55
+ def add_preload(scope)
56
+ scope
57
+ end
58
+
55
59
  def add_statement(scope, operator, values)
56
60
  case operator
57
61
  when '='
@@ -69,5 +73,9 @@ module AzaharaSchema
69
73
  scope.order( arel_sort_field.public_send(order) )
70
74
  end
71
75
 
76
+ def build_json_options!(options)
77
+ options
78
+ end
79
+
72
80
  end
73
81
  end
@@ -2,12 +2,16 @@ module AzaharaSchema
2
2
  class Schema
3
3
 
4
4
  def self.schema_for(klass, *attributes)
5
- schema_klass = "#{klass.name}Schema".safe_constantize
6
- if schema_klass
7
- schema_klass.new(*attributes)
8
- else
9
- AzaharaSchema::Schema.new(klass, *attributes)
5
+ klasses = [klass]
6
+ while klass != klass.base_class
7
+ klass = klass.superclass
8
+ klasses << klass
9
+ end
10
+ klasses.each do |kls|
11
+ schema_klass = "#{kls.name}Schema".safe_constantize
12
+ return schema_klass.new(*attributes) if schema_klass
10
13
  end
14
+ AzaharaSchema::Schema.new(klass, *attributes)
11
15
  end
12
16
 
13
17
  def self.enabled_filters(*filter_names)
@@ -36,7 +40,7 @@ module AzaharaSchema
36
40
  end
37
41
 
38
42
  def columns
39
- @columns ||= available_attributes.select{|attribute| attribute.column? && column_names.include?(attribute.name) }
43
+ @columns ||= available_attributes_hash.slice(*column_names).values
40
44
  end
41
45
 
42
46
  def filters
@@ -103,6 +107,10 @@ module AzaharaSchema
103
107
  @available_attributes
104
108
  end
105
109
 
110
+ def available_attributes_hash
111
+ available_attributes.inject({}){|obj, aa| obj[aa.name] = aa; obj }
112
+ end
113
+
106
114
  def available_columns
107
115
  @available_columns ||= available_attributes.select{|att| att.column? }
108
116
  end
@@ -148,6 +156,9 @@ module AzaharaSchema
148
156
 
149
157
  def entities
150
158
  scope = model.respond_to?(:visible) ? model.visible : model.all
159
+ columns.each do |col|
160
+ scope = col.add_preload(scope)
161
+ end
151
162
  filters.each do |name, attrs|
152
163
  scope = available_filters[name].add_statement(scope, attrs[:o], attrs[:v])
153
164
  end
@@ -158,6 +169,15 @@ module AzaharaSchema
158
169
  scope
159
170
  end
160
171
 
172
+ def build_json_options!(options={})
173
+ columns.each{|col| col.build_json_options!(options) }
174
+ options
175
+ end
176
+
177
+ def as_json(options={})
178
+ entities.as_json(build_json_options!(options))
179
+ end
180
+
161
181
 
162
182
  #serialization
163
183
  def from_params(params)
@@ -1,3 +1,3 @@
1
1
  module AzaharaSchema
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: azahara_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ondřej Ezr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-06 00:00:00.000000000 Z
11
+ date: 2017-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -95,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  version: '0'
96
96
  requirements: []
97
97
  rubyforge_project:
98
- rubygems_version: 2.5.2
98
+ rubygems_version: 2.6.13
99
99
  signing_key:
100
100
  specification_version: 4
101
101
  summary: Gem to support developement of rails application with schema over an entity