active_content 0.1.5 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81339ecd1014291cbeec5f9e4aa44f09fe5b62fa
4
- data.tar.gz: 26bc41b698ba4fa90dd625e29c9b19baa3567586
3
+ metadata.gz: 306cd17dcc26dec11f03cbb2962af633f19495a3
4
+ data.tar.gz: c3611f17322d2f19b4770f67452829af64ce03e9
5
5
  SHA512:
6
- metadata.gz: a1ab2114fea295f0896334dae25f483df959c52e8d2bde5162e21227fd62b5f12620762c133168860e7bf2c2c1657278f930d4378cc877e8a073453090ac6eb0
7
- data.tar.gz: dc6d428ce4719d6515e419166ba2bda756bae210e8d122cb5f0255f17efaa7541f13bebd808c4c4c7f5e85de441bffa651b78f70ce255576cd165fb9e501eb60
6
+ metadata.gz: dfce19e1777822256f60937738961432a9f6a142bfeaf1eb1d36bd98124359c660d2e66a4f834d8412f0fa8c60378d4e46c1f613b3006a8c28d689386fa913ae
7
+ data.tar.gz: ed7ec9961658fc85c4dea16d28061785e37ce91d0bfe2fb3f78fe1794e8d5e06860f93dd0896255953cc793a2c0887ddfeb9afac6715e724c23d67292a4d497f
@@ -12,34 +12,52 @@ module ActiveContent
12
12
  has_many name, options
13
13
 
14
14
  define_method :"#{name}_list" do
15
- self.send name
15
+ self.send(name).pluck(:name)
16
16
  end
17
17
 
18
- define_method :"#{name}_list=" do |names|
18
+ define_method :"#{name}_list=" do |*names|
19
19
  model = options[:class_name].classify.constantize
20
- names = Array(names).map do |n|
20
+ items = names.flatten.reject(&:blank?).map do |n|
21
21
  model.find_by_name(n) || model.new(name: n)
22
22
  end
23
23
 
24
- self.send :"#{name}=", names
24
+ self.send :"#{name}=", items
25
25
  end
26
26
 
27
27
  scope :"with_#{name}", -> (*ids) do
28
- joins(name).where(taxonomies: { id: ids })
28
+ params = ids.flatten
29
+ query = joins(:"#{name}")
30
+ query = query.where(taxonomies: { id: params }) if params.any?
31
+
32
+ query.distinct(true)
29
33
  end
30
34
 
31
35
  scope :"without_#{name}", -> (*ids) do
32
- joins(name).where.not(taxonomies: { id: ids })
36
+ joins(:"#{name}").where.not(taxonomies: { id: ids }).distinct(true)
33
37
  end
34
38
  end
35
39
 
36
40
  def has_taxonomized(name, options={})
37
41
  assoc_name = "#{name}".pluralize
38
42
  assoc_field = options[:through] || self.name.parameterize.underscore.pluralize
39
- assoc_type = (options[:class_name] || "#{name}".classify).constantize.base_class.name
43
+ assoc_class = (options[:class_name] || "#{name}".classify).constantize.base_class
44
+ assoc_table = assoc_class.table_name
45
+ assoc_type = assoc_class.name
40
46
  assoc_proc = -> { where taxonomizations: { field: assoc_field } }
41
47
 
42
48
  has_many :"#{assoc_name}", assoc_proc, through: :taxonomizations, source: :taxonomizable, source_type: "#{assoc_type}"
49
+
50
+ scope :"with_#{assoc_name}", -> (*ids) do
51
+ params = ids.flatten
52
+ query = joins(:"#{assoc_name}")
53
+ query = query.where(assoc_table => { id: params }) if params.any?
54
+
55
+ query.distinct(true)
56
+ end
57
+
58
+ scope :"without_#{assoc_name}", -> (*ids) do
59
+ joins(:"#{assoc_name}").where.not(assoc_table => { id: ids }).distinct(true)
60
+ end
43
61
  end
44
62
  end
45
63
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveContent
2
- VERSION = '0.1.5'
2
+ VERSION = '0.1.6'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_content
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Olibia Tsati
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-12-11 00:00:00.000000000 Z
12
+ date: 2017-12-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord