json_sti 0.1.1 → 0.1.2
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 +4 -4
- data/lib/json_sti.rb +81 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 319641335350e77309eff235ae18303ba23e9b070c970e1ee2b4be720738f074
|
4
|
+
data.tar.gz: a036eb392df3c055cd8bd0d5ec393388fbaeec059bb351790fb91d0a981eb49f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 89462fc1261e0edebc90081b6fff6389b22afeb167728169c40fe0c77dcd55979ab12f0e702e600d02a113f7258850700b720c1262fe54f544286472ad425902
|
7
|
+
data.tar.gz: 8ed7f497df0c3f6b90fc3cad86f577a591385c9514f959678694f27485487b8df5d91fd8abc5a6c86248ccbae59d95e39aabaa5cef37a37e70e1559f5eba8ae3
|
data/lib/json_sti.rb
CHANGED
@@ -63,8 +63,18 @@ module JsonSti
|
|
63
63
|
schema: lambda { self.class::SCHEMA }
|
64
64
|
}
|
65
65
|
|
66
|
+
# handles bug in ransackable where 1 is converted to true
|
67
|
+
def self.clean_val_aa(val)
|
68
|
+
val.is_a?(TrueClass) ? 1 : val
|
69
|
+
end
|
70
|
+
|
66
71
|
# a helper similar to ARs `where` only for json fields
|
67
|
-
scope :
|
72
|
+
scope :j_where, lambda { |hash| where("module_data @> ?", hash.to_json) }
|
73
|
+
scope :j_like_key, lambda { |key, value| where("module_data ->> :key LIKE :value",key: key, value: "%#{value}%") }
|
74
|
+
scope :j_gt, lambda { |prop, val| where("module_data ->> '#{prop}' > ?", "#{clean_val_aa(val).to_f}") }
|
75
|
+
scope :j_lt, lambda { |prop, val| where("module_data ->> '#{prop}' < ?", "#{clean_val_aa(val).to_f}" ) }
|
76
|
+
scope :j_gte, lambda { |prop, val| where("module_data ->> '#{prop}' >= ?", "#{clean_val_aa(val).to_f}") }
|
77
|
+
scope :j_lte, lambda { |prop, val| where("module_data ->> '#{prop}' <= ?", "#{clean_val_aa(val).to_f}" ) }
|
68
78
|
|
69
79
|
def initialize(params)
|
70
80
|
super
|
@@ -79,7 +89,6 @@ module JsonSti
|
|
79
89
|
end
|
80
90
|
end
|
81
91
|
end
|
82
|
-
|
83
92
|
end
|
84
93
|
end
|
85
94
|
|
@@ -101,6 +110,76 @@ module JsonSti
|
|
101
110
|
|
102
111
|
initialize_attr_getters(json_attrs.keys)
|
103
112
|
initialize_attr_setters(json_attrs.keys)
|
113
|
+
|
114
|
+
#creates methods required for ransackables searches in active admin
|
115
|
+
class << self
|
116
|
+
self.class_variable_get(:@@json_attrs).each do |prop, type|
|
117
|
+
if type["type"].include?("string")
|
118
|
+
define_method "#{prop}_equals" do |value|
|
119
|
+
self.j_where(Hash[prop, value])
|
120
|
+
end
|
121
|
+
|
122
|
+
define_method "#{prop}_contains" do |value|
|
123
|
+
self.j_like_key(prop, value)
|
124
|
+
end
|
125
|
+
elsif type["type"].include?("integer")
|
126
|
+
define_method "#{prop}_equals" do |value|
|
127
|
+
self.j_where(Hash[prop, value.to_i])
|
128
|
+
end
|
129
|
+
|
130
|
+
define_method "#{prop}_greater_than" do |value|
|
131
|
+
self.j_gt(prop, value)
|
132
|
+
end
|
133
|
+
|
134
|
+
define_method "#{prop}_less_than" do |value|
|
135
|
+
self.j_lt(prop, value)
|
136
|
+
end
|
137
|
+
elsif type["type"].include?("number")
|
138
|
+
define_method "#{prop}_equals" do |value|
|
139
|
+
self.j_where(Hash[prop, clean_val_aa(value).to_f])
|
140
|
+
end
|
141
|
+
|
142
|
+
define_method "#{prop}_greater_than" do |value|
|
143
|
+
self.j_gt(prop, value)
|
144
|
+
end
|
145
|
+
|
146
|
+
define_method "#{prop}_less_than" do |value|
|
147
|
+
self.j_lt(prop, value)
|
148
|
+
end
|
149
|
+
elsif type["type"].include?("boolean")
|
150
|
+
# todo figure this out in for select, eq for checkboxes or viceversa
|
151
|
+
# define_method "#{prop}_in" do |*value|
|
152
|
+
# self.j_where(Hash[prop, value])
|
153
|
+
# end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
define_method "ransackable_scopes" do |_auth_object = nil|
|
158
|
+
scopes = []
|
159
|
+
|
160
|
+
ransackable_string_query_types = %i(equals contains)
|
161
|
+
self.class_variable_get(:@@json_attrs).each do |prop, type|
|
162
|
+
if type["type"].include?("string")
|
163
|
+
ransackable_string_query_types.each do |ransackable_query_type|
|
164
|
+
scopes.push "#{prop}_#{ransackable_query_type}"
|
165
|
+
end
|
166
|
+
elsif type["type"].include?("integer")
|
167
|
+
scopes.push "#{prop}_equals"
|
168
|
+
scopes.push "#{prop}_greater_than"
|
169
|
+
scopes.push "#{prop}_less_than"
|
170
|
+
elsif type["type"].include?("number")
|
171
|
+
scopes.push "#{prop}_equals"
|
172
|
+
scopes.push "#{prop}_greater_than"
|
173
|
+
scopes.push "#{prop}_less_than"
|
174
|
+
elsif type["type"].include?("boolean")
|
175
|
+
# todo figure this out in for select, eq for checkboxes or viceversa
|
176
|
+
# scopes.push "#{prop}_in"
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
scopes
|
181
|
+
end
|
182
|
+
end
|
104
183
|
end
|
105
184
|
end
|
106
185
|
|