siphon 0.1.3 → 0.2.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/.ruby-version +1 -1
- data/.travis.yml +1 -0
- data/CHANGELOG.md +9 -0
- data/lib/generators/templates/search.rb +16 -41
- data/lib/siphon/adapter.rb +11 -5
- data/lib/siphon/boilerplate.rb +84 -0
- data/lib/siphon/version.rb +1 -1
- data/lib/siphon.rb +2 -0
- metadata +26 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff59f1ee65f4df1a1dcd5a81d58f720516661b04
|
4
|
+
data.tar.gz: b8de584c9cc38381f08ff3728010465aab98ad61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 976bb2d950083963335c855b4b7848eb84689094245eafb76c23d0e61fc5ea201ed1ca0b5da71b66f04af1a792ec73938c23ca7c22eef02f707f056a0979338b
|
7
|
+
data.tar.gz: e4b25e4bbe4844db09024f2e61939583f89d6e1daee028162c24740a614972d255703891aacd43a0604f5f5688599362adcaa75e68eb5fe6b4fd93906ccd495d
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.3
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
## Siphon 0.2.0 (Dec 2015)
|
2
|
+
|
3
|
+
* The ModelSearch can now respond_to `siphon_attributes`
|
4
|
+
* Boilerplate provides all the stuff ModelSearch needs...
|
5
|
+
* ...hence the generated ModelSearch is now minimal
|
6
|
+
|
7
|
+
## Siphone 0.1.3
|
8
|
+
|
9
|
+
* handle time & dates arguments for scope from issue #2
|
@@ -1,59 +1,34 @@
|
|
1
1
|
# uncomment `q` lines for combining ransack with your scope search
|
2
2
|
class <%= class_name %>Search
|
3
3
|
|
4
|
-
include
|
5
|
-
|
4
|
+
include Siphon::Boilerplate
|
5
|
+
siphonize class_name
|
6
6
|
|
7
|
-
|
7
|
+
#
|
8
|
+
# Scope attributes
|
9
|
+
#
|
10
|
+
# attribute :tree_id, Integer
|
11
|
+
# attribute :is_public, Boolean
|
8
12
|
|
9
|
-
|
10
|
-
|
13
|
+
#
|
14
|
+
# ransack attributes
|
15
|
+
#
|
16
|
+
# ransack :category_id_eq
|
17
|
+
# ransack :title_cont
|
11
18
|
|
12
19
|
|
13
|
-
attr_reader :q # the nested ransack object
|
14
|
-
attr_reader :order_by # handles your order clause
|
15
|
-
|
16
|
-
def initialize(params = {})
|
17
|
-
@params = params || {}
|
18
|
-
super(params)
|
19
|
-
self.q= @params[:q]
|
20
|
-
self.order_by= @params[:order_by]
|
21
|
-
end
|
22
|
-
|
23
|
-
# Example of conditionally applying search terms.
|
24
|
-
# def done
|
25
|
-
# return false unless @params[:q]
|
26
|
-
# @params[:q][:state_eq].blank? ? @done : ""
|
27
|
-
# end
|
28
|
-
|
29
|
-
def result
|
30
|
-
<%= class_name %>.scoped.order(order_by).merge(q.result).merge(siphoned)
|
31
|
-
end
|
32
20
|
|
33
21
|
# Exmaple of Search Form handling order stuff (might not be the best place)
|
34
22
|
def self.order_by
|
35
|
-
[['newest',"#{
|
36
|
-
["oldest", "#{
|
37
|
-
["category", "#{
|
23
|
+
[['newest',"#{table_name}.created_at DESC"],
|
24
|
+
["oldest", "#{table_name}.created_at"],
|
25
|
+
["category", "#{table_name}.category_id, #{table_name}.id"]
|
38
26
|
# ["popularity", "sales_num DESC"]]
|
39
27
|
]
|
40
28
|
end
|
41
29
|
|
42
30
|
# Example of default ordering
|
43
31
|
def order_by=( val )
|
44
|
-
@order_by = val.blank? ? "#{
|
32
|
+
@order_by = val.blank? ? "#{table_name}.created_at DESC" : val
|
45
33
|
end
|
46
|
-
|
47
|
-
|
48
|
-
def q=(sub_form_hash = {})
|
49
|
-
@q = <%= class_name %>.search( sub_form_hash )
|
50
|
-
end
|
51
|
-
|
52
|
-
private
|
53
|
-
|
54
|
-
def siphoned
|
55
|
-
Siphon::Base.new(<%= class_name %>.scoped).scope( self )
|
56
|
-
end
|
57
|
-
|
58
|
-
|
59
34
|
end
|
data/lib/siphon/adapter.rb
CHANGED
@@ -12,8 +12,8 @@ module Siphon
|
|
12
12
|
def initialize(formobj)
|
13
13
|
@formobj = formobj
|
14
14
|
|
15
|
-
@scopes_hash = @formobj
|
16
|
-
@argless
|
15
|
+
@scopes_hash = assign_scope_hashes @formobj
|
16
|
+
@argless = argless_list @formobj
|
17
17
|
end
|
18
18
|
|
19
19
|
def call
|
@@ -22,9 +22,9 @@ module Siphon
|
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
25
|
+
# Do NOT APPLY SCOPE && reject them from scopes_hash
|
26
|
+
# 1. if scope is present in form but with no value (aka: an empty string)
|
27
|
+
# 2. if present in formobj but not in form (aka : a nil value)
|
28
28
|
def filterout_empty_string_and_nil
|
29
29
|
@scopes_hash.delete_if { |scope, arg| ["", nil].include? @formobj[scope] }
|
30
30
|
end
|
@@ -45,5 +45,11 @@ module Siphon
|
|
45
45
|
map(&:name)
|
46
46
|
end
|
47
47
|
|
48
|
+
# if the form object has #siphon_attributes favor that one
|
49
|
+
# usefull to seperate ransack attributes from siphon ones
|
50
|
+
def assign_scope_hashes(formobj)
|
51
|
+
formobj.respond_to?(:siphon_attributes) ?
|
52
|
+
formobj.siphon_attributes : formobj.attributes
|
53
|
+
end
|
48
54
|
end
|
49
55
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require "active_support/concern"
|
2
|
+
|
3
|
+
module Siphon
|
4
|
+
module Boilerplate
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
include ActiveModel::Model
|
9
|
+
include Virtus.model
|
10
|
+
include InstanceMethods
|
11
|
+
|
12
|
+
cattr_accessor :model
|
13
|
+
cattr_accessor :model_name
|
14
|
+
cattr_accessor :table_name
|
15
|
+
|
16
|
+
|
17
|
+
attr_reader :params_ransack # the ransack object
|
18
|
+
attr_reader :params_siphon # the ransack object
|
19
|
+
attr_reader :order_by # handles your order clause
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
module InstanceMethods
|
24
|
+
def initialize( params = {}, relation = nil )
|
25
|
+
@relation||= relation
|
26
|
+
@params = params || {}
|
27
|
+
|
28
|
+
@params_ransack= @params.slice(*self.class.ransack_set)
|
29
|
+
@params_siphon= @params.except(*self.class.ransack_set)
|
30
|
+
self.order_by= @params["order_by"]
|
31
|
+
|
32
|
+
super @params_siphon
|
33
|
+
end
|
34
|
+
|
35
|
+
def table_name
|
36
|
+
self.class.model.table_name
|
37
|
+
end
|
38
|
+
|
39
|
+
def ransack
|
40
|
+
@relation.search( params_ransack )
|
41
|
+
end
|
42
|
+
|
43
|
+
def merge(relation)
|
44
|
+
@relation = @relation.merge(relation)
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
def siphoned
|
49
|
+
Siphon::Base.new(@relation).scope( self )
|
50
|
+
end
|
51
|
+
|
52
|
+
# memoized or it'll break after attributes reconciled
|
53
|
+
def result
|
54
|
+
@result ||= begin
|
55
|
+
relation = @relation.order(order_by).
|
56
|
+
merge(ransack.result).
|
57
|
+
merge(siphoned)
|
58
|
+
# reconcile all params for the search form (?)
|
59
|
+
self.attributes= attributes.merge(params_ransack)
|
60
|
+
relation
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class_methods do
|
66
|
+
|
67
|
+
def siphonize(model, model_name: nil, table_name: nil)
|
68
|
+
name = model_name || "#{model}Search"
|
69
|
+
self.model_name= ActiveModel::Name.new(self, nil, name)
|
70
|
+
self.table_name= Asset.table_name
|
71
|
+
end
|
72
|
+
|
73
|
+
def ransack_set
|
74
|
+
@ransack_set.map(&:to_s)
|
75
|
+
end
|
76
|
+
|
77
|
+
def ransack( attr, type= nil )
|
78
|
+
@ransack_set ||= []
|
79
|
+
attribute attr
|
80
|
+
@ransack_set << attr
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/siphon/version.rb
CHANGED
data/lib/siphon.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
require "bundler/setup"
|
2
2
|
|
3
|
+
require "active_support"
|
3
4
|
require "active_support/core_ext"
|
4
5
|
|
5
6
|
require "siphon/version"
|
6
7
|
require "siphon/base"
|
7
8
|
require "siphon/adapter"
|
8
9
|
require "siphon/nil"
|
10
|
+
require "siphon/boilerplate"
|
9
11
|
|
10
12
|
module Siphon
|
11
13
|
# Your code goes here...
|
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: siphon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charles Sistovaris
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: virtus
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.3'
|
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
54
|
version: '1.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
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
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '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
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: pry
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
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
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: activemodel
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '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
110
|
version: '0'
|
111
111
|
description: Siphon enables you to easily apply/combine/exclude your ActiveRecord
|
@@ -116,11 +116,12 @@ executables: []
|
|
116
116
|
extensions: []
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
|
-
- .gitignore
|
120
|
-
- .pryrc
|
121
|
-
- .rspec
|
122
|
-
- .ruby-version
|
123
|
-
- .travis.yml
|
119
|
+
- ".gitignore"
|
120
|
+
- ".pryrc"
|
121
|
+
- ".rspec"
|
122
|
+
- ".ruby-version"
|
123
|
+
- ".travis.yml"
|
124
|
+
- CHANGELOG.md
|
124
125
|
- Gemfile
|
125
126
|
- LICENSE.txt
|
126
127
|
- README.md
|
@@ -131,6 +132,7 @@ files:
|
|
131
132
|
- lib/siphon.rb
|
132
133
|
- lib/siphon/adapter.rb
|
133
134
|
- lib/siphon/base.rb
|
135
|
+
- lib/siphon/boilerplate.rb
|
134
136
|
- lib/siphon/nil.rb
|
135
137
|
- lib/siphon/version.rb
|
136
138
|
- siphon.gemspec
|
@@ -152,17 +154,17 @@ require_paths:
|
|
152
154
|
- lib
|
153
155
|
required_ruby_version: !ruby/object:Gem::Requirement
|
154
156
|
requirements:
|
155
|
-
- -
|
157
|
+
- - ">="
|
156
158
|
- !ruby/object:Gem::Version
|
157
159
|
version: '0'
|
158
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
161
|
requirements:
|
160
|
-
- -
|
162
|
+
- - ">="
|
161
163
|
- !ruby/object:Gem::Version
|
162
164
|
version: '0'
|
163
165
|
requirements: []
|
164
166
|
rubyforge_project:
|
165
|
-
rubygems_version: 2.
|
167
|
+
rubygems_version: 2.4.5.1
|
166
168
|
signing_key:
|
167
169
|
specification_version: 4
|
168
170
|
summary: Siphon enables you to easily apply/combine/exclude your ActiveRecord scopes
|
@@ -176,4 +178,3 @@ test_files:
|
|
176
178
|
- spec/siphon/mapper_spec.rb
|
177
179
|
- spec/siphon_spec.rb
|
178
180
|
- spec/spec_helper.rb
|
179
|
-
has_rdoc:
|