ltree_hierarchy 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ddf71fca7fa2fce2c558501cbb85eea76a98b2a8
4
- data.tar.gz: 2b94b34ba4601dabaff8b0499615a9e9b9250118
3
+ metadata.gz: c0585962140ffc7543e0575b23b594e45a6fa3fe
4
+ data.tar.gz: a56c281183b6e21796066fa59e391a4d95b4f874
5
5
  SHA512:
6
- metadata.gz: 14442c8f23722c9eb7019e93f15d64307114323b2eb57ba0dcb4193b62db142ff251a98b8c38c97994f9b3a9a5a8128770ef3a0a53d9b16b5786189044700c25
7
- data.tar.gz: b9efa3414d82f84d940fb889c675819b7812a51cdffcff4da91945c2724f739fbb1af181cb456495a9f22bf5394bdc747750c67700dab437ec40a4865d46e9a1
6
+ metadata.gz: 550602c092d26f7655ffaf3f657496c44f75d5684263b80729a39a9a9de5030687bcaeab097f0ba7d2db0707bf5c66107de987ac92d338d6e6e154b2c0424b8a
7
+ data.tar.gz: d18adbfe3ef8cca05cda4a4a9138dcec0f40522faee33f805ed17e0234d1cd44af55aff7ef1996b0492e41dac49d9b1fb8f09db82f0df6b32d33bdff5ac188cf
@@ -0,0 +1,7 @@
1
+ ## 0.0.7
2
+
3
+ * fix `#leaves` method
4
+
5
+ ## 0.0.6
6
+
7
+ * no changes history
@@ -1,34 +1,43 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ltree_hierarchy (0.0.5)
4
+ ltree_hierarchy (0.0.6)
5
5
  activerecord (>= 3.1.0)
6
6
  pg
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activemodel (4.1.6)
12
- activesupport (= 4.1.6)
11
+ activemodel (4.2.1)
12
+ activesupport (= 4.2.1)
13
13
  builder (~> 3.1)
14
- activerecord (4.1.6)
15
- activemodel (= 4.1.6)
16
- activesupport (= 4.1.6)
17
- arel (~> 5.0.0)
18
- activesupport (4.1.6)
19
- i18n (~> 0.6, >= 0.6.9)
14
+ activerecord (4.2.1)
15
+ activemodel (= 4.2.1)
16
+ activesupport (= 4.2.1)
17
+ arel (~> 6.0)
18
+ activesupport (4.2.1)
19
+ i18n (~> 0.7)
20
20
  json (~> 1.7, >= 1.7.7)
21
21
  minitest (~> 5.1)
22
- thread_safe (~> 0.1)
22
+ thread_safe (~> 0.3, >= 0.3.4)
23
23
  tzinfo (~> 1.1)
24
- arel (5.0.1.20140414130214)
24
+ arel (6.0.0)
25
25
  builder (3.2.2)
26
+ coderay (1.1.0)
26
27
  i18n (0.7.0)
27
28
  json (1.8.2)
28
- minitest (5.5.1)
29
- pg (0.17.1)
29
+ method_source (0.8.2)
30
+ minitest (5.6.1)
31
+ pg (0.18.2)
32
+ pry (0.10.1)
33
+ coderay (~> 1.1.0)
34
+ method_source (~> 0.8.1)
35
+ slop (~> 3.4)
36
+ pry-nav (0.2.4)
37
+ pry (>= 0.9.10, < 0.11.0)
30
38
  rake (10.4.2)
31
- thread_safe (0.3.4)
39
+ slop (3.6.0)
40
+ thread_safe (0.3.5)
32
41
  tzinfo (1.2.2)
33
42
  thread_safe (~> 0.1)
34
43
 
@@ -37,4 +46,7 @@ PLATFORMS
37
46
 
38
47
  DEPENDENCIES
39
48
  ltree_hierarchy!
49
+ minitest
50
+ pry
51
+ pry-nav
40
52
  rake
data/Rakefile CHANGED
@@ -1,12 +1,12 @@
1
- require 'rake'
2
- require 'rake/testtask'
1
+ require "rake"
2
+ require "rake/testtask"
3
3
 
4
- desc 'Default: run unit tests.'
5
- task :default => :test
4
+ desc "Default: run unit tests."
5
+ task default: :test
6
6
 
7
- desc 'Test the ltree_hierarchy plugin.'
7
+ desc "Test the ltree_hierarchy plugin."
8
8
  Rake::TestTask.new(:test) do |t|
9
- t.libs << 'lib'
10
- t.pattern = 'test/**/*_test.rb'
9
+ t.libs << "lib"
10
+ t.pattern = "test/**/*_test.rb"
11
11
  t.verbose = true
12
12
  end
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require "ltree_hierarchy"
@@ -2,49 +2,51 @@ module Ltree
2
2
  module Hierarchy
3
3
  def has_ltree_hierarchy(options = {})
4
4
  options = {
5
- :fragment => :id,
6
- :parent_fragment => :parent_id,
7
- :path => :path
5
+ fragment: :id,
6
+ parent_fragment: :parent_id,
7
+ path: :path
8
8
  }.merge(options)
9
9
 
10
10
  options.assert_valid_keys(:fragment, :parent_fragment, :path)
11
11
 
12
12
  cattr_accessor :ltree_fragment_column, :ltree_parent_fragment_column, :ltree_path_column
13
13
 
14
- self.ltree_fragment_column = options[:fragment]
14
+ self.ltree_fragment_column = options[:fragment]
15
15
  self.ltree_parent_fragment_column = options[:parent_fragment]
16
- self.ltree_path_column = options[:path]
16
+ self.ltree_path_column = options[:path]
17
17
 
18
- belongs_to :parent, :class_name => self.name, :foreign_key => self.ltree_parent_fragment_column
18
+ belongs_to :parent, class_name: name, foreign_key: ltree_parent_fragment_column
19
19
 
20
- validate :prevent_circular_paths, :if => :ltree_parent_fragment_changed?
20
+ validate :prevent_circular_paths, if: :ltree_parent_fragment_changed?
21
21
 
22
- after_create :commit_path
23
- before_update :assign_path, :cascade_path_change, :if => :ltree_parent_fragment_changed?
22
+ after_create :commit_path
23
+ before_update :assign_path, :cascade_path_change, if: :ltree_parent_fragment_changed?
24
24
 
25
25
  include InstanceMethods
26
26
  end
27
27
 
28
28
  def roots
29
- where(self.ltree_parent_fragment_column => nil)
29
+ where(ltree_parent_fragment_column => nil)
30
30
  end
31
31
 
32
32
  def at_depth(depth)
33
- where(["nlevel(#{ltree_path_column}) = ?", depth])
33
+ where(["NLEVEL(#{ltree_path_column}) = ?", depth])
34
34
  end
35
35
 
36
36
  def leaves
37
- subquery = select("DISTINCT #{ltree_parent_fragment_column}")
37
+ subquery = where("#{ltree_parent_fragment_column} IS NOT NULL")
38
+ .select("DISTINCT #{ltree_parent_fragment_column}")
39
+
38
40
  where("#{ltree_fragment_column} NOT IN(#{subquery.to_sql})")
39
41
  end
40
42
 
41
43
  def lowest_common_ancestor_paths(paths)
42
44
  sql = if paths.respond_to?(:to_sql)
43
- "SELECT lca(array(#{paths.to_sql}))"
45
+ "SELECT LCA(ARRAY(#{paths.to_sql}))"
44
46
  else
45
47
  return [] if paths.empty?
46
48
  safe_paths = paths.map { |p| "#{connection.quote(p)}::ltree" }
47
- "SELECT lca(ARRAY[#{safe_paths.join(', ')}])"
49
+ "SELECT LCA(ARRAY[#{safe_paths.join(", ")}])"
48
50
  end
49
51
  connection.select_values(sql)
50
52
  end
@@ -63,7 +65,7 @@ module Ltree
63
65
  end
64
66
 
65
67
  def ltree_fragment
66
- send(self.ltree_fragment_column)
68
+ send(ltree_fragment_column)
67
69
  end
68
70
 
69
71
  def ltree_parent_fragment_column
@@ -91,7 +93,7 @@ module Ltree
91
93
  end
92
94
 
93
95
  def prevent_circular_paths
94
- if parent && parent.ltree_path.split('.').include?(ltree_fragment.to_s)
96
+ if parent && parent.ltree_path.split(".").include?(ltree_fragment.to_s)
95
97
  errors.add(ltree_parent_fragment_column, :invalid)
96
98
  end
97
99
  end
@@ -118,14 +120,14 @@ module Ltree
118
120
  # SET path = NEW.path || subpath(path, nlevel(OLD.path))
119
121
  # WHERE path <@ OLD.path AND id != NEW.id;
120
122
  ltree_scope.where(
121
- ["#{ltree_path_column} <@ :old_path AND #{ltree_fragment_column} != :id", :old_path => ltree_path_was, :id => ltree_fragment]
123
+ ["#{ltree_path_column} <@ :old_path AND #{ltree_fragment_column} != :id", old_path: ltree_path_was, id: ltree_fragment]
122
124
  ).update_all(
123
- ["#{ltree_path_column} = :new_path || subpath(#{ltree_path_column}, nlevel(:old_path))", :new_path => ltree_path, :old_path => ltree_path_was]
125
+ ["#{ltree_path_column} = :new_path || subpath(#{ltree_path_column}, nlevel(:old_path))", new_path: ltree_path, old_path: ltree_path_was]
124
126
  )
125
127
  end
126
128
 
127
129
  def root?
128
- if self.ltree_parent_fragment
130
+ if ltree_parent_fragment
129
131
  false
130
132
  else
131
133
  parent.nil?
@@ -136,18 +138,18 @@ module Ltree
136
138
  !children.exists?
137
139
  end
138
140
 
139
- def depth # 1-based, for compatibility with ltree's nlevel().
141
+ def depth # 1-based, for compatibility with ltree's NLEVEL().
140
142
  if root?
141
143
  1
142
144
  elsif ltree_path
143
- ltree_path.split('.').length
145
+ ltree_path.split(".").length
144
146
  elsif parent
145
147
  parent.depth + 1
146
148
  end
147
149
  end
148
150
 
149
151
  def root
150
- ltree_scope.where("#{ltree_path_column} = subpath(?, 0, 1)", ltree_path).first
152
+ ltree_scope.where("#{ltree_path_column} = SUBPATH(?, 0, 1)", ltree_path).first
151
153
  end
152
154
 
153
155
  def ancestors
@@ -160,7 +162,10 @@ module Ltree
160
162
  alias :and_ancestors :self_and_ancestors
161
163
 
162
164
  def siblings
163
- ltree_scope.where("#{ltree_parent_fragment_column} = ? AND #{ltree_fragment_column} != ?", ltree_parent_fragment, ltree_fragment)
165
+ ltree_scope.where(
166
+ "#{ltree_parent_fragment_column} = ? AND #{ltree_fragment_column} != ?",
167
+ ltree_parent_fragment, ltree_fragment
168
+ )
164
169
  end
165
170
 
166
171
  def self_and_siblings
@@ -182,7 +187,7 @@ module Ltree
182
187
  end
183
188
 
184
189
  def self_and_children
185
- ltree_scope.where("#{ltree_fragment_column} = :id OR #{ltree_parent_fragment_column} = :id", :id => ltree_fragment)
190
+ ltree_scope.where("#{ltree_fragment_column} = :id OR #{ltree_parent_fragment_column} = :id", id: ltree_fragment)
186
191
  end
187
192
  alias :and_children :self_and_children
188
193
 
@@ -1,5 +1,5 @@
1
1
  module Ltree
2
2
  module Hierarchy
3
- VERSION = "0.0.6"
3
+ VERSION = "0.0.7"
4
4
  end
5
5
  end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ltree_hierarchy/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ltree_hierarchy"
7
+ s.version = Ltree::Hierarchy::VERSION
8
+ s.authors = ["Rob Worley", "Leadformance"]
9
+ s.email = ["dev@leadformance.com"]
10
+ s.homepage = "https://github.com/Leadformance/ltree_hierarchy"
11
+ s.summary = "Organize ActiveRecord models into a tree using PostgreSQL's ltree datatype"
12
+ s.description = "Organizes ActiveRecord models into a tree/hierarchy using a materialized path implementation based around PostgreSQL's ltree datatype. ltree's operators ensure that queries are fast and easily understood."
13
+
14
+ s.rubyforge_project = "ltree_hierarchy"
15
+
16
+ s.files = Dir["{lib/**/*,[A-Z]*}"]
17
+ s.platform = Gem::Platform::RUBY
18
+ s.license = "MIT"
19
+ s.require_paths = ["lib"]
20
+
21
+ if RUBY_PLATFORM == "java"
22
+ s.add_dependency "activerecord-jdbcpostgresql-adapter"
23
+ else
24
+ s.add_dependency "pg"
25
+ end
26
+
27
+ s.add_dependency "activerecord", ">= 3.1.0"
28
+
29
+ s.add_development_dependency "minitest"
30
+ s.add_development_dependency "rake"
31
+ end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ltree_hierarchy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Worley
8
+ - Leadformance
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-05-26 00:00:00.000000000 Z
12
+ date: 2015-05-29 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: pg
@@ -70,20 +71,23 @@ description: Organizes ActiveRecord models into a tree/hierarchy using a materia
70
71
  path implementation based around PostgreSQL's ltree datatype. ltree's operators
71
72
  ensure that queries are fast and easily understood.
72
73
  email:
73
- - robert.worley@gmail.com
74
+ - dev@leadformance.com
74
75
  executables: []
75
76
  extensions: []
76
77
  extra_rdoc_files: []
77
78
  files:
79
+ - CHANGELOG.md
78
80
  - Gemfile
79
81
  - Gemfile.lock
80
82
  - MIT-LICENSE
81
83
  - README.md
82
84
  - Rakefile
85
+ - init.rb
83
86
  - lib/ltree_hierarchy.rb
84
87
  - lib/ltree_hierarchy/hierarchy.rb
85
88
  - lib/ltree_hierarchy/version.rb
86
- homepage: https://github.com/robworley/ltree_hierarchy
89
+ - ltree_hierarchy.gemspec
90
+ homepage: https://github.com/Leadformance/ltree_hierarchy
87
91
  licenses:
88
92
  - MIT
89
93
  metadata: {}
@@ -103,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
107
  version: '0'
104
108
  requirements: []
105
109
  rubyforge_project: ltree_hierarchy
106
- rubygems_version: 2.4.7
110
+ rubygems_version: 2.4.5
107
111
  signing_key:
108
112
  specification_version: 4
109
113
  summary: Organize ActiveRecord models into a tree using PostgreSQL's ltree datatype