activeset 0.6.5 → 0.7.0
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/.gitignore +1 -0
- data/.rubocop.yml +0 -6
- data/CHANGELOG +5 -0
- data/README.md +58 -6
- data/activeset.gemspec +8 -8
- data/bin/console +14 -0
- data/lib/.DS_Store +0 -0
- data/lib/active_set.rb +28 -21
- data/lib/active_set/{instruction.rb → attribute_instruction.rb} +12 -8
- data/lib/active_set/column_instruction.rb +44 -0
- data/lib/active_set/exporting/operation.rb +66 -0
- data/lib/active_set/filtering/operation.rb +190 -0
- data/lib/active_set/paginating/operation.rb +102 -0
- data/lib/active_set/sorting/operation.rb +144 -0
- data/lib/helpers/throws.rb +2 -2
- data/lib/helpers/transform_to_sortable_numeric.rb +36 -0
- data/lib/patches/core_ext/hash/flatten_keys.rb +43 -14
- metadata +55 -39
- data/lib/active_set/.DS_Store +0 -0
- data/lib/active_set/adapter_activerecord.rb +0 -58
- data/lib/active_set/adapter_base.rb +0 -14
- data/lib/active_set/instructions.rb +0 -42
- data/lib/active_set/processor_base.rb +0 -28
- data/lib/active_set/processor_filter.rb +0 -21
- data/lib/active_set/processor_filter/active_record_adapter.rb +0 -50
- data/lib/active_set/processor_filter/enumerable_adapter.rb +0 -21
- data/lib/active_set/processor_paginate.rb +0 -35
- data/lib/active_set/processor_paginate/active_record_adapter.rb +0 -37
- data/lib/active_set/processor_paginate/enumerable_adapter.rb +0 -39
- data/lib/active_set/processor_sort.rb +0 -19
- data/lib/active_set/processor_sort/active_record_adapter.rb +0 -27
- data/lib/active_set/processor_sort/active_record_operation.rb +0 -55
- data/lib/active_set/processor_sort/enumerable_adapter.rb +0 -58
- data/lib/active_set/processor_transform.rb +0 -30
- data/lib/active_set/processor_transform/csv_adapter.rb +0 -77
- data/lib/active_set/version.rb +0 -5
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActiveSet
|
4
|
+
module Paginating
|
5
|
+
class Operation
|
6
|
+
def initialize(set, instructions_hash)
|
7
|
+
@set = set
|
8
|
+
@instructions_hash = instructions_hash
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute
|
12
|
+
[ActiveRecordStrategy, EnumerableStrategy].each do |strategy|
|
13
|
+
maybe_set_or_false = strategy.new(@set, operation_instructions).execute
|
14
|
+
break(maybe_set_or_false) if maybe_set_or_false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def operation_instructions
|
19
|
+
@instructions_hash.symbolize_keys.tap do |h|
|
20
|
+
h[:page] = page_operation_instruction(h[:page])
|
21
|
+
h[:size] = size_operation_instruction(h[:size])
|
22
|
+
h[:count] = count_operation_instruction(@set)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def page_operation_instruction(initial)
|
29
|
+
return 1 unless initial
|
30
|
+
return 1 if initial.to_i <= 0
|
31
|
+
|
32
|
+
initial.to_i
|
33
|
+
end
|
34
|
+
|
35
|
+
def size_operation_instruction(initial)
|
36
|
+
return 25 unless initial
|
37
|
+
return 25 if initial.to_i <= 0
|
38
|
+
|
39
|
+
initial.to_i
|
40
|
+
end
|
41
|
+
|
42
|
+
def count_operation_instruction(set)
|
43
|
+
# https://work.stevegrossi.com/2015/04/25/how-to-count-with-activerecord/
|
44
|
+
maybe_integer_or_hash = set.size
|
45
|
+
return maybe_integer_or_hash.count if maybe_integer_or_hash.is_a?(Hash)
|
46
|
+
|
47
|
+
maybe_integer_or_hash
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class EnumerableStrategy
|
52
|
+
def initialize(set, operation_instructions)
|
53
|
+
@set = set
|
54
|
+
@operation_instructions = operation_instructions
|
55
|
+
end
|
56
|
+
|
57
|
+
def execute
|
58
|
+
return [] if @set.count <= @operation_instructions[:size] &&
|
59
|
+
@operation_instructions[:page] > 1
|
60
|
+
|
61
|
+
@set[page_start..page_end] || []
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def page_start
|
67
|
+
return 0 if @operation_instructions[:page] == 1
|
68
|
+
|
69
|
+
@operation_instructions[:size] * (@operation_instructions[:page] - 1)
|
70
|
+
end
|
71
|
+
|
72
|
+
def page_end
|
73
|
+
return page_start if @operation_instructions[:size] == 1
|
74
|
+
|
75
|
+
page_start + @operation_instructions[:size] - 1
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class ActiveRecordStrategy
|
80
|
+
def initialize(set, operation_instructions)
|
81
|
+
@set = set
|
82
|
+
@operation_instructions = operation_instructions
|
83
|
+
end
|
84
|
+
|
85
|
+
def execute
|
86
|
+
return false unless @set.respond_to? :to_sql
|
87
|
+
return @set.none if @set.length <= @operation_instructions[:size] &&
|
88
|
+
@operation_instructions[:page] > 1
|
89
|
+
|
90
|
+
@set.limit(@operation_instructions[:size]).offset(page_offset)
|
91
|
+
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def page_offset
|
96
|
+
return 0 if @operation_instructions[:page] == 1
|
97
|
+
|
98
|
+
@operation_instructions[:size] * (@operation_instructions[:page] - 1)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../attribute_instruction'
|
4
|
+
require_relative '../../helpers/transform_to_sortable_numeric'
|
5
|
+
|
6
|
+
class ActiveSet
|
7
|
+
module Sorting
|
8
|
+
class Operation
|
9
|
+
def initialize(set, instructions_hash)
|
10
|
+
@set = set
|
11
|
+
@instructions_hash = instructions_hash
|
12
|
+
end
|
13
|
+
|
14
|
+
def execute
|
15
|
+
attribute_instructions = @instructions_hash
|
16
|
+
.flatten_keys
|
17
|
+
.map { |k, v| AttributeInstruction.new(k, v) }
|
18
|
+
|
19
|
+
activerecord_strategy = ActiveRecordStrategy.new(@set, attribute_instructions)
|
20
|
+
if activerecord_strategy.executable_instructions == attribute_instructions
|
21
|
+
activerecord_sorted_set = activerecord_strategy.execute
|
22
|
+
end
|
23
|
+
|
24
|
+
return activerecord_sorted_set if attribute_instructions.all?(&:processed?)
|
25
|
+
|
26
|
+
EnumerableStrategy.new(@set, attribute_instructions).execute
|
27
|
+
end
|
28
|
+
|
29
|
+
def operation_instructions
|
30
|
+
@instructions_hash.symbolize_keys
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class EnumerableStrategy
|
35
|
+
def initialize(set, attribute_instructions)
|
36
|
+
@set = set
|
37
|
+
@attribute_instructions = attribute_instructions
|
38
|
+
end
|
39
|
+
|
40
|
+
def execute
|
41
|
+
# http://brandon.dimcheff.com/2009/11/18/rubys-sort-vs-sort-by/
|
42
|
+
@set.sort_by do |item|
|
43
|
+
@attribute_instructions.map do |instruction|
|
44
|
+
sortable_numeric_for(instruction, item) * direction_multiplier(instruction.value)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def sortable_numeric_for(instruction, item)
|
50
|
+
value = instruction.value_for(item: item)
|
51
|
+
if value.is_a?(String) || value.is_a?(Symbol)
|
52
|
+
value = if case_insensitive?(instruction, value)
|
53
|
+
value.to_s.downcase
|
54
|
+
else
|
55
|
+
value.to_s
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
transform_to_sortable_numeric(value)
|
60
|
+
end
|
61
|
+
|
62
|
+
def case_insensitive?(instruction, _value)
|
63
|
+
instruction.operator.to_s.casecmp('i').zero?
|
64
|
+
end
|
65
|
+
|
66
|
+
def direction_multiplier(direction)
|
67
|
+
return -1 if direction.to_s.downcase.start_with? 'desc'
|
68
|
+
|
69
|
+
1
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class ActiveRecordStrategy
|
74
|
+
def initialize(set, attribute_instructions)
|
75
|
+
@set = set
|
76
|
+
@attribute_instructions = attribute_instructions
|
77
|
+
end
|
78
|
+
|
79
|
+
def execute
|
80
|
+
return false unless @set.respond_to? :to_sql
|
81
|
+
|
82
|
+
executable_instructions.reduce(set_with_eager_loaded_associations) do |set, attribute_instruction|
|
83
|
+
statement = set.merge(order_operation_for(attribute_instruction))
|
84
|
+
|
85
|
+
return false if throws?(ActiveRecord::StatementInvalid) { statement.load }
|
86
|
+
|
87
|
+
attribute_instruction.processed = true
|
88
|
+
statement
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def executable_instructions
|
93
|
+
return {} unless @set.respond_to? :to_sql
|
94
|
+
|
95
|
+
@attribute_instructions.select do |attribute_instruction|
|
96
|
+
attribute_model = attribute_model_for(attribute_instruction)
|
97
|
+
next false unless attribute_model
|
98
|
+
next false unless attribute_model.respond_to?(:attribute_names)
|
99
|
+
next false unless attribute_model.attribute_names.include?(attribute_instruction.attribute)
|
100
|
+
|
101
|
+
true
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
private
|
106
|
+
|
107
|
+
def set_with_eager_loaded_associations
|
108
|
+
associations_hash = @attribute_instructions.reduce({}) { |h, i| h.merge(i.associations_hash) }
|
109
|
+
@set.eager_load(associations_hash)
|
110
|
+
end
|
111
|
+
|
112
|
+
def order_operation_for(attribute_instruction)
|
113
|
+
attribute_model = attribute_model_for(attribute_instruction)
|
114
|
+
|
115
|
+
arel_column = Arel::Table.new(attribute_model.table_name)[attribute_instruction.attribute]
|
116
|
+
arel_column = case_insensitive?(attribute_instruction) ? arel_column.lower : arel_column
|
117
|
+
|
118
|
+
arel_direction = direction_operator(attribute_instruction.value)
|
119
|
+
|
120
|
+
attribute_model.order(arel_column.send(arel_direction))
|
121
|
+
end
|
122
|
+
|
123
|
+
def attribute_model_for(attribute_instruction)
|
124
|
+
return @set.klass if attribute_instruction.associations_array.empty?
|
125
|
+
|
126
|
+
attribute_instruction
|
127
|
+
.associations_array
|
128
|
+
.reduce(@set) do |obj, assoc|
|
129
|
+
obj.reflections[assoc.to_s]&.klass
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def case_insensitive?(attribute_instruction)
|
134
|
+
attribute_instruction.operator.to_s.casecmp('i').zero?
|
135
|
+
end
|
136
|
+
|
137
|
+
def direction_operator(direction)
|
138
|
+
return :desc if direction.to_s.downcase.start_with? 'desc'
|
139
|
+
|
140
|
+
:asc
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
data/lib/helpers/throws.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Returns a Numeric for `value` that respects sort-order
|
4
|
+
# can be used in Enumerable#sort_by
|
5
|
+
#
|
6
|
+
# transform_to_sortable_numeric(1)
|
7
|
+
# => 1
|
8
|
+
# transform_to_sortable_numeric('aB09ü')
|
9
|
+
# => (24266512014313/250000000000)
|
10
|
+
# transform_to_sortable_numeric(true)
|
11
|
+
# => 1
|
12
|
+
# transform_to_sortable_numeric(Date.new(2000, 12, 25))
|
13
|
+
# => 977720400000
|
14
|
+
|
15
|
+
def transform_to_sortable_numeric(value)
|
16
|
+
return value if value.is_a?(Numeric)
|
17
|
+
return 1 if value == true
|
18
|
+
return 0 if value == false
|
19
|
+
|
20
|
+
if value.is_a?(String) || value.is_a?(Symbol)
|
21
|
+
return value
|
22
|
+
.to_s # 'aB09ü'
|
23
|
+
.split('') # ["a", "B", "0", "9", "ü"]
|
24
|
+
.map { |char| char.ord.to_s.rjust(3, '0') } # ["097", "066", "048", "057", "252"]
|
25
|
+
.insert(1, '.') # ["097", ".", "066", "048", "057", "252"]
|
26
|
+
.reduce(&:concat) # "097.066048057252"
|
27
|
+
.to_r # (24266512014313/250000000000)
|
28
|
+
end
|
29
|
+
|
30
|
+
# https://stackoverflow.com/a/30604935/2884386
|
31
|
+
return (value.to_time.to_f * 1000).round if value.respond_to?(:to_time)
|
32
|
+
|
33
|
+
# :nocov:
|
34
|
+
value
|
35
|
+
# :nocov:
|
36
|
+
end
|
@@ -3,30 +3,59 @@
|
|
3
3
|
require 'active_support/core_ext/array/wrap'
|
4
4
|
|
5
5
|
class Hash
|
6
|
-
# Returns a flat hash where all nested keys are collapsed into
|
6
|
+
# Returns a flat hash where all nested keys are collapsed into an array of keys.
|
7
7
|
#
|
8
8
|
# hash = { person: { name: { first: 'Rob' }, age: '28' } }
|
9
|
-
# hash.
|
10
|
-
#
|
11
|
-
|
9
|
+
# hash.flatten_keys_to_array
|
10
|
+
# => {[:person, :name, :first] => "Rob", [:person, :age]=>"28" }
|
11
|
+
# hash
|
12
|
+
# => { person: { name: { first: 'Rob' }, age: '28' } }
|
13
|
+
def flatten_keys_to_array
|
12
14
|
_flatten_keys(self)
|
13
15
|
end
|
16
|
+
alias flatten_keys flatten_keys_to_array
|
14
17
|
|
15
|
-
#
|
16
|
-
# Returns +nil+ if no changes were made, otherwise returns the hash.
|
18
|
+
# Returns a flat hash where all nested keys are collapsed into a dot-separated string of keys.
|
17
19
|
#
|
18
20
|
# hash = { person: { name: { first: 'Rob' }, age: '28' } }
|
19
|
-
# hash.
|
20
|
-
#
|
21
|
-
|
22
|
-
|
21
|
+
# hash.flatten_keys_to_dotpath
|
22
|
+
# => { 'person.name.first' => "Rob", [:person, :age]=>"28" }
|
23
|
+
# hash
|
24
|
+
# => { person: { name: { first: 'Rob' }, age: '28' } }
|
25
|
+
def flatten_keys_to_dotpath
|
26
|
+
_flatten_keys(self, ->(*keys) { keys.join('.') })
|
27
|
+
end
|
28
|
+
|
29
|
+
# Returns a flat hash where all nested keys are collapsed into a dast-separated string of keys.
|
30
|
+
#
|
31
|
+
# hash = { person: { name: { first: 'Rob' }, age: '28' } }
|
32
|
+
# hash.flatten_keys_to_html_attribute
|
33
|
+
# => { 'person-name-first' => "Rob", [:person, :age]=>"28" }
|
34
|
+
# hash
|
35
|
+
# => { person: { name: { first: 'Rob' }, age: '28' } }
|
36
|
+
def flatten_keys_to_html_attribute
|
37
|
+
_flatten_keys(self, ->(*keys) { keys.join('-') })
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns a flat hash where all nested keys are collapsed into a string of keys fitting the Rails request param pattern.
|
41
|
+
#
|
42
|
+
# hash = { person: { name: { first: 'Rob' }, age: '28' } }
|
43
|
+
# hash.flatten_keys_to_rails_param
|
44
|
+
# => { 'person[name][first]' => "Rob", [:person, :age]=>"28" }
|
45
|
+
# hash
|
46
|
+
# => { person: { name: { first: 'Rob' }, age: '28' } }
|
47
|
+
def flatten_keys_to_rails_param
|
48
|
+
_flatten_keys(self, ->(*keys) { keys.map(&:to_s).reduce { |memo, key| memo + "[#{key}]" } })
|
23
49
|
end
|
24
50
|
|
25
51
|
private
|
26
52
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
53
|
+
# refactored little from https://stackoverflow.com/a/23861946/2884386
|
54
|
+
def _flatten_keys(input, keypath_gen = ->(*keys) { keys }, keys = [], output = {})
|
55
|
+
return output.merge!(keypath_gen.call(*keys) => input) unless input.is_a? Hash
|
56
|
+
|
57
|
+
input.each { |k, v| _flatten_keys(v, keypath_gen, keys + Array(k), output) }
|
58
|
+
|
59
|
+
output
|
31
60
|
end
|
32
61
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeset
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Margheim
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -39,89 +39,117 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.15'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: combustion
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.7.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.7.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: database_cleaner
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 1.6.1
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 1.6.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: factory_bot
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 4.8.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 4.8.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: faker
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 1.8.4
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 1.8.4
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rails
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: 5.1.0
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: 5.1.0
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
117
|
+
version: '10.0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
124
|
+
version: '10.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '3.0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
125
153
|
- !ruby/object:Gem::Dependency
|
126
154
|
name: simplecov
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -173,26 +201,14 @@ files:
|
|
173
201
|
- config.ru
|
174
202
|
- lib/.DS_Store
|
175
203
|
- lib/active_set.rb
|
176
|
-
- lib/active_set
|
177
|
-
- lib/active_set/
|
178
|
-
- lib/active_set/
|
179
|
-
- lib/active_set/
|
180
|
-
- lib/active_set/
|
181
|
-
- lib/active_set/
|
182
|
-
- lib/active_set/processor_filter.rb
|
183
|
-
- lib/active_set/processor_filter/active_record_adapter.rb
|
184
|
-
- lib/active_set/processor_filter/enumerable_adapter.rb
|
185
|
-
- lib/active_set/processor_paginate.rb
|
186
|
-
- lib/active_set/processor_paginate/active_record_adapter.rb
|
187
|
-
- lib/active_set/processor_paginate/enumerable_adapter.rb
|
188
|
-
- lib/active_set/processor_sort.rb
|
189
|
-
- lib/active_set/processor_sort/active_record_adapter.rb
|
190
|
-
- lib/active_set/processor_sort/active_record_operation.rb
|
191
|
-
- lib/active_set/processor_sort/enumerable_adapter.rb
|
192
|
-
- lib/active_set/processor_transform.rb
|
193
|
-
- lib/active_set/processor_transform/csv_adapter.rb
|
194
|
-
- lib/active_set/version.rb
|
204
|
+
- lib/active_set/attribute_instruction.rb
|
205
|
+
- lib/active_set/column_instruction.rb
|
206
|
+
- lib/active_set/exporting/operation.rb
|
207
|
+
- lib/active_set/filtering/operation.rb
|
208
|
+
- lib/active_set/paginating/operation.rb
|
209
|
+
- lib/active_set/sorting/operation.rb
|
195
210
|
- lib/helpers/throws.rb
|
211
|
+
- lib/helpers/transform_to_sortable_numeric.rb
|
196
212
|
- lib/patches/core_ext/hash/flatten_keys.rb
|
197
213
|
homepage: https://github.com/fractaledmind/activeset
|
198
214
|
licenses:
|