siphon 0.2.5 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 78d9af7e442c0c0c6d5efc53ef449858d6abb2da
4
- data.tar.gz: 9d6ee29efdf72049e898ad1ba25e9eeec96e59bf
2
+ SHA256:
3
+ metadata.gz: 92365b6395921c463098560d6454e58724e390e16bce4290b2023c3cebded30a
4
+ data.tar.gz: 6e039cc7825f96ce2d30719216f664534c9a300c8ab48cd4fcdae90cfa27d3f6
5
5
  SHA512:
6
- metadata.gz: c75a3109e9b143a322bda5fc7a0ed5030e7b9b169282854b4054156bc720fce34b46f18e0974770c69a755acc347bad9c42c559190240b596c1be4ae87cc9047
7
- data.tar.gz: 9a3e7f1b04d39f37c317ada78d2161a6733842a2f952d8ff01b74b80cab9a4ba0896b2777f2a2dc52d680e31dcef3e3b4dc17387172d1c8a75f1aa4b956601ae
6
+ metadata.gz: da28a7c8ff0099c029f7e7133a409f42928521d722d3c4322155829707d07f8ae43bc6458e92145fab8db341a60ee13bbe2a0fa1ad9250a8505a83ae43de6c44
7
+ data.tar.gz: e32f5534c2f9c620abf63d09caa0da275a2f4bf8ed34ff81e39e0aebddc7c6e09e4434db8b5b5a2fa5959f40c705cbf399cb198ad44a2f6bf04513a0c8c47ecb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## Siphon 0.3.0 (Sep 2018)
2
+
3
+ * Rails 5 compat: convert StrongParam to regular params
4
+ * Decouple Formobj#attributes from Form#obj#siphon_attributes
5
+ * include Siphon::Scope instead of Boilerplate (use latter for compat)
6
+ * Formobj.ransack takes type as well
7
+
1
8
  ## Siphon 0.2.4 (Mar 2016)
2
9
 
3
10
  * Fixed scopes with no argument still sending nil !
@@ -18,7 +25,7 @@
18
25
  * The ModelSearch can now respond_to `siphon_attributes`
19
26
  * Boilerplate provides all the stuff ModelSearch needs...
20
27
  * ...hence the generated ModelSearch is now minimal
21
- * Boilerplate also gives users a `ransack` macro to set ransack attributes
28
+ * Boilerplate also gives users a `ransack` macro to set ransack attributes
22
29
 
23
30
  ## Siphon 0.1.3
24
31
 
@@ -1,7 +1,7 @@
1
1
  # uncomment `q` lines for combining ransack with your scope search
2
2
  class <%= class_name %>Search
3
3
 
4
- include Siphon::Boilerplate
4
+ include Siphon::Scope
5
5
  siphonize <%= class_mate %>
6
6
 
7
7
  #
@@ -21,7 +21,7 @@ class <%= class_name %>Search
21
21
  @relation = relation
22
22
  end
23
23
 
24
- # Exmaple of Search Form handling order stuff (might not be the best place)
24
+ # Example of Search Form handling order stuff (might not be the best place)
25
25
  def self.order_by
26
26
  [['newest',"#{table_name}.created_at DESC"],
27
27
  ["oldest", "#{table_name}.created_at"],
@@ -34,4 +34,4 @@ class <%= class_name %>Search
34
34
  def order_by=( val )
35
35
  @order_by = val.blank? ? "#{table_name}.created_at DESC" : val
36
36
  end
37
- end
37
+ end
@@ -48,8 +48,7 @@ module Siphon
48
48
  # if the form object has #siphon_attributes favor that one
49
49
  # usefull to seperate ransack attributes from siphon ones
50
50
  def assign_scope_hashes(formobj)
51
- formobj.respond_to?(:siphon_attributes) ?
52
- formobj.siphon_attributes : formobj.attributes
51
+ formobj.respond_to?(:siphon_attributes) ? formobj.siphon_attributes : formobj.attributes
53
52
  end
54
53
  end
55
- end
54
+ end
@@ -78,4 +78,4 @@ module Siphon
78
78
  end
79
79
  end
80
80
  end
81
- end
81
+ end
data/lib/siphon/nil.rb CHANGED
@@ -9,4 +9,4 @@ module Siphon
9
9
  end
10
10
 
11
11
  end
12
- end
12
+ end
@@ -0,0 +1,101 @@
1
+ require "active_support/concern"
2
+
3
+ module Siphon
4
+ module Scope
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 :ransack_attributes # for the Ransack object
18
+ attr_reader :siphon_attributes # for the Siphon object
19
+ attr_reader :order_by # handles your order clause
20
+ end
21
+
22
+ module InstanceMethods
23
+ def initialize( params = {})
24
+ @params = convert_to_hash(params)
25
+ super @params
26
+
27
+ @ransack_attributes = attributes.slice(*self.class.ransack_set)
28
+ @siphon_attributes = attributes.slice(*self.class.siphon_set)
29
+
30
+ self.order_by = @params["order_by"]
31
+ end
32
+
33
+ def convert_to_hash(params)
34
+ if params.nil?
35
+ {}
36
+ elsif params.respond_to?(:permit!)
37
+ params.permit!
38
+ elsif params.respond_to?(:with_indifferent_access)
39
+ params.with_indifferent_access
40
+ else
41
+ params
42
+ end
43
+ end
44
+
45
+ def table_name
46
+ self.class.model.table_name
47
+ end
48
+
49
+ def ransack
50
+ @relation.search(ransack_attributes)
51
+ end
52
+
53
+ def merge(relation)
54
+ @relation = @relation.merge(relation)
55
+ self
56
+ end
57
+
58
+ def siphoned
59
+ Siphon::Base.new(@relation).scope( self )
60
+ end
61
+
62
+ # memoized or it'll break after attributes reconciled
63
+ def result
64
+ @result ||= siphoned.merge(ransack.result)
65
+ end
66
+
67
+ def preformat_date(value = nil)
68
+ value.is_a?(String) && value.present? ? Date.strptime(value, I18n.t('date.formats.long')) : value
69
+ end
70
+ end
71
+
72
+ class_methods do
73
+
74
+ def siphonize(model, model_name: nil, table_name: nil)
75
+ name = model_name || "#{model}Search"
76
+ self.model_name= ActiveModel::Name.new(self, nil, name)
77
+ self.table_name= model.table_name
78
+ @ransack_set ||= []
79
+ @siphon_set ||= []
80
+ end
81
+
82
+ def ransack_set
83
+ @ransack_set
84
+ end
85
+
86
+ def siphon_set
87
+ @siphon_set
88
+ end
89
+
90
+ def scope(attr, type = nil)
91
+ type.nil? ? attribute(attr) : attribute(attr, type)
92
+ @siphon_set << attr
93
+ end
94
+
95
+ def ransack(attr, type = nil)
96
+ type.nil? ? attribute(attr) : attribute(attr, type)
97
+ @ransack_set << attr
98
+ end
99
+ end
100
+ end
101
+ end
@@ -1,3 +1,3 @@
1
1
  module Siphon
2
- VERSION = "0.2.5"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/siphon.rb CHANGED
@@ -8,6 +8,7 @@ require "siphon/base"
8
8
  require "siphon/adapter"
9
9
  require "siphon/nil"
10
10
  require "siphon/boilerplate"
11
+ require "siphon/scope"
11
12
 
12
13
  module Siphon
13
14
  # Your code goes here...
@@ -20,4 +21,4 @@ end
20
21
 
21
22
  ActiveSupport.on_load :action_controller do
22
23
  include Siphon
23
- end
24
+ end
@@ -66,6 +66,4 @@ describe Siphon::Base do
66
66
  Siphon::Base.new(relation).admin(false).after(1).scope(formobj)
67
67
  end
68
68
  end
69
-
70
-
71
- end
69
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: siphon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.3.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: 2017-03-23 00:00:00.000000000 Z
11
+ date: 2018-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -136,6 +136,7 @@ files:
136
136
  - lib/siphon/base.rb
137
137
  - lib/siphon/boilerplate.rb
138
138
  - lib/siphon/nil.rb
139
+ - lib/siphon/scope.rb
139
140
  - lib/siphon/version.rb
140
141
  - siphon.gemspec
141
142
  - spec/class/active_relation.rb
@@ -166,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
167
  version: '0'
167
168
  requirements: []
168
169
  rubyforge_project:
169
- rubygems_version: 2.6.8
170
+ rubygems_version: 2.7.6
170
171
  signing_key:
171
172
  specification_version: 4
172
173
  summary: Siphon enables you to easily apply/combine/exclude your ActiveRecord scopes