json_sti 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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