admin_it 1.0.5 → 1.0.6
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/README.md +5 -0
- data/app/views/admin_it/shared/_filters.html.slim +2 -2
- data/lib/admin_it/context/collection_context.rb +2 -17
- data/lib/admin_it/filters/filter.rb +81 -17
- data/lib/admin_it/filters/value_filter.rb +11 -13
- data/lib/admin_it/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3a63565c2793d51ed2992d7d4e01deeecc68543
|
4
|
+
data.tar.gz: 2fe03cded06fe4a4fedc76b2244f727a9dfaa876
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1cc3714caf30a63432ca69c6bed8ab1e6b01947918b6f7024daeb9a8951fbd026c1ec7ede09037b61386f0622e2971f0d1b2ae25a9c5532125bebb5169bc647b
|
7
|
+
data.tar.gz: ed25582af138eca0e80f23b1e2205880b4a74bc6ad830c74adf027ebfcf6eed05407e0180b14e2f15b074df284ba1362bf16b75f9c5f79d3f33ce8516431f4b9
|
data/README.md
CHANGED
@@ -28,6 +28,7 @@ bundle install
|
|
28
28
|
# Todo
|
29
29
|
|
30
30
|
* use_fields not working in root resource context
|
31
|
+
* human-readable date and time fields
|
31
32
|
* Test coverage
|
32
33
|
* Entities editing/creating
|
33
34
|
|
@@ -37,6 +38,10 @@ bundle install
|
|
37
38
|
|
38
39
|
# Changes
|
39
40
|
|
41
|
+
`1.0.6`
|
42
|
+
|
43
|
+
* fixed: [#1](/../../issues/1)
|
44
|
+
|
40
45
|
`1.0.5`
|
41
46
|
|
42
47
|
* font-awesome asset path fix
|
@@ -24,13 +24,13 @@
|
|
24
24
|
- if filter.values.include?(v[:value])
|
25
25
|
- a_class = 'label-success'
|
26
26
|
- href = url_for(for_context.url_params( \
|
27
|
-
filters: "
|
27
|
+
filters: "!#{filter.name}(-#{filter.value(v[:value])})", \
|
28
28
|
active_filter: filter.name \
|
29
29
|
))
|
30
30
|
- else
|
31
31
|
- a_class = 'label-info'
|
32
32
|
- href = url_for(for_context.url_params( \
|
33
|
-
filters: "
|
33
|
+
filters: "!#{filter.name}(+#{filter.value(v[:value])})", \
|
34
34
|
active_filter: filter.name \
|
35
35
|
))
|
36
36
|
a class="label #{a_class}" href==href
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'json'
|
2
|
+
require 'csv'
|
2
3
|
require File.join %w(extend_it symbolize)
|
3
4
|
|
4
5
|
using ExtendIt::Symbolize
|
@@ -128,23 +129,7 @@ module AdminIt
|
|
128
129
|
@filters ||= {}
|
129
130
|
value.strip!
|
130
131
|
@filters = {} if value.empty?
|
131
|
-
|
132
|
-
str.strip!
|
133
|
-
remove = str[0] == '-'
|
134
|
-
str = str[1..-1] if remove
|
135
|
-
m = Filter::REGEXP.match(str)
|
136
|
-
next if m.nil?
|
137
|
-
if remove
|
138
|
-
@filters.delete(m[:name].to_sym)
|
139
|
-
else
|
140
|
-
name = m[:name].to_sym
|
141
|
-
if @filters.key?(name)
|
142
|
-
@filters[name].change(m[:params])
|
143
|
-
else
|
144
|
-
@filters[name] = Filter.load(str, self.class.filters)
|
145
|
-
end
|
146
|
-
end
|
147
|
-
end
|
132
|
+
Filter.apply(value, @filters, self.class.filters)
|
148
133
|
else
|
149
134
|
@filters = {}
|
150
135
|
end
|
@@ -15,9 +15,30 @@ module AdminIt
|
|
15
15
|
include ExtendIt::Callbacks
|
16
16
|
extend ExtendIt::Asserts
|
17
17
|
|
18
|
-
REGEXP =
|
19
|
-
|
20
|
-
|
18
|
+
REGEXP = /
|
19
|
+
(?<=\A|[,;|])\s*
|
20
|
+
(?<full>
|
21
|
+
(?<action>[!+\-])?
|
22
|
+
(?<name>[a-zA-Z_][a-zA-Z0-9_]*)
|
23
|
+
(?:\((?<params>[^)]*)\))?
|
24
|
+
)
|
25
|
+
\s*(?=[,;|]|\z)
|
26
|
+
/x
|
27
|
+
|
28
|
+
ARGUMENT_REGEXP = /
|
29
|
+
(?<=\A|[,;|])\s*
|
30
|
+
(?:
|
31
|
+
(?:(?<action>[+\-])|(?:(?<option>[a-zA-Z_][a-zA-Z0-9_]*)\s*:\s*))?
|
32
|
+
(?<token>
|
33
|
+
(?:'(?:[^\\']|\\.)*')|
|
34
|
+
(?:"(?:[^\\"]|\\.)*")|
|
35
|
+
(?:[^,;|\s]+)
|
36
|
+
)
|
37
|
+
)
|
38
|
+
\s*(?=[,;|]|\z)
|
39
|
+
/x
|
40
|
+
|
41
|
+
define_callbacks :initialize, :save, :load
|
21
42
|
|
22
43
|
class << self
|
23
44
|
extend ExtendIt::Dsl
|
@@ -49,29 +70,38 @@ module AdminIt
|
|
49
70
|
create_class(name, _resource)
|
50
71
|
end
|
51
72
|
|
52
|
-
def self.load(str,
|
73
|
+
def self.load(str, filter_classes)
|
53
74
|
m = REGEXP.match(str)
|
54
|
-
return nil if m.nil?
|
75
|
+
return nil if m.nil? || m[:action] == '-'
|
55
76
|
name = m[:name].to_sym
|
56
|
-
filter_class =
|
77
|
+
filter_class = filter_classes.find { |f| f.filter_name == name }
|
57
78
|
return nil if filter_class.nil?
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
79
|
+
filter = filter_class.new
|
80
|
+
filter.load(m[:params])
|
81
|
+
filter
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.apply(str, filters, filter_classes)
|
85
|
+
list = str.scan(Filter::REGEXP)
|
86
|
+
filters.clear if list.all? { |_, act, _, _| act.nil? || act.empty? }
|
87
|
+
list.each do |full, action, name, params|
|
88
|
+
name = name.to_sym
|
89
|
+
if action == '-'
|
90
|
+
filters.delete(name)
|
91
|
+
elsif action == '!'
|
92
|
+
filters[name].load(params) if filters.key?(name)
|
65
93
|
else
|
66
|
-
|
94
|
+
filters[name] = Filter.load(full, filter_classes)
|
67
95
|
end
|
68
96
|
end
|
69
|
-
args << opts unless opts.empty?
|
70
|
-
filter_class.new(*args.compact)
|
71
97
|
end
|
72
98
|
|
73
99
|
class_attr_reader :display_name
|
74
100
|
|
101
|
+
def initialize
|
102
|
+
run_callbacks :initialize
|
103
|
+
end
|
104
|
+
|
75
105
|
def name
|
76
106
|
@name ||= self.class.filter_name
|
77
107
|
end
|
@@ -90,7 +120,13 @@ module AdminIt
|
|
90
120
|
result
|
91
121
|
end
|
92
122
|
|
93
|
-
def
|
123
|
+
def load(str)
|
124
|
+
return if str.nil?
|
125
|
+
args = parse_arguments(str)
|
126
|
+
unless args.empty?
|
127
|
+
opts = args.extract_options!
|
128
|
+
run_callbacks :load, arguments: { arguments: args, options: opts }
|
129
|
+
end
|
94
130
|
end
|
95
131
|
|
96
132
|
def apply(collection)
|
@@ -117,6 +153,34 @@ module AdminIt
|
|
117
153
|
TIME_REGEXP = /\A#{TIME}\z/
|
118
154
|
DATETIME_REGEXP = /\A#{DATE}(?:\s+|[\/.\-])#{TIME}\z/
|
119
155
|
|
156
|
+
def param_action(str)
|
157
|
+
case str
|
158
|
+
when '+' then :add
|
159
|
+
when '-' then :remove
|
160
|
+
else nil
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def parse_arguments(str)
|
165
|
+
opts = {}
|
166
|
+
args = []
|
167
|
+
parent = self.class.parents.find do |p|
|
168
|
+
p.const_defined?(:ARGUMENT_REGEXP)
|
169
|
+
end
|
170
|
+
unless parent.nil?
|
171
|
+
str.scan(parent.const_get(:ARGUMENT_REGEXP)) do |a, o, v|
|
172
|
+
if o.nil? || o.empty?
|
173
|
+
action = param_action(a)
|
174
|
+
action.nil? ? args << v : (opts[action] ||= []) << v
|
175
|
+
else
|
176
|
+
opts[o.to_sym] = v
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
args << opts unless opts.empty?
|
181
|
+
args
|
182
|
+
end
|
183
|
+
|
120
184
|
def parse_argument(arg)
|
121
185
|
return arg unless arg.is_a?(String)
|
122
186
|
arg.strip!
|
@@ -2,27 +2,25 @@ module AdminIt
|
|
2
2
|
class ValueFilter < FieldFilter
|
3
3
|
attr_reader :values
|
4
4
|
|
5
|
-
def initialize
|
6
|
-
@values =
|
5
|
+
def initialize
|
6
|
+
@values = []
|
7
7
|
end
|
8
8
|
|
9
9
|
before_save do |arguments: [], options: {}|
|
10
10
|
arguments.concat(@values.map { |v| create_argument(v) })
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@values << parse_argument(param)
|
13
|
+
after_load do |arguments: [], options: {}|
|
14
|
+
unless arguments.empty?
|
15
|
+
@values = arguments.map { |v| parse_argument(v) }.uniq
|
16
|
+
end
|
17
|
+
if options.key?(:add)
|
18
|
+
@values.concat(options[:add].map { |v| parse_argument(v) }).uniq!
|
19
|
+
elsif options.key?(:remove)
|
20
|
+
options[:remove].each do |remove|
|
21
|
+
@values.delete_if { |v| v == parse_argument(remove) }
|
23
22
|
end
|
24
23
|
end
|
25
|
-
@values.uniq!
|
26
24
|
end
|
27
25
|
|
28
26
|
def all_values(collection = nil, &block)
|
data/lib/admin_it/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: admin_it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Ovchinnikov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|