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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/json_sti.rb +81 -2
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45ca9be19ec7461034cb8364a5c113c1cb8ac46d3b68e0a7c69de976d0be72a3
4
- data.tar.gz: 0a210ab819d03d9cdc7f616feb7040121a48960b188b9a07a42dd5fb39ab6115
3
+ metadata.gz: 319641335350e77309eff235ae18303ba23e9b070c970e1ee2b4be720738f074
4
+ data.tar.gz: a036eb392df3c055cd8bd0d5ec393388fbaeec059bb351790fb91d0a981eb49f
5
5
  SHA512:
6
- metadata.gz: 41dc2a55f09fe64e1d9f92b0b143337251e24d1169a8f4ad5ce0e9faae84b65cf9cfed4d877816127a1164365c0f2e930208bd0471ab20c582c8d9301f64d643
7
- data.tar.gz: 70702db7f7700efe0a77b4ccf41cabec6fc36436f29c5bbe0dfc6049cef05c0bebf2943570038cf46975332c303b65763458719b04c4527f23a971cf5807f32a
6
+ metadata.gz: 89462fc1261e0edebc90081b6fff6389b22afeb167728169c40fe0c77dcd55979ab12f0e702e600d02a113f7258850700b720c1262fe54f544286472ad425902
7
+ data.tar.gz: 8ed7f497df0c3f6b90fc3cad86f577a591385c9514f959678694f27485487b8df5d91fd8abc5a6c86248ccbae59d95e39aabaa5cef37a37e70e1559f5eba8ae3
@@ -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 :jwhere, lambda { |hash| where("module_data @> ?", hash.to_json) }
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
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_sti
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Max