ltree_hierarchy 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MTUwOWNjYTQ3NTM5YmQ3NzA0ZGE4MmMwMzczNjQzMTM1N2RiMGY1OQ==
5
- data.tar.gz: !binary |-
6
- MzQwZGU1ZWIwZGY5MzNjM2I5OGQ1MTRkZDE4NmFjZWMxYmJiYjEzYw==
2
+ SHA1:
3
+ metadata.gz: ddf71fca7fa2fce2c558501cbb85eea76a98b2a8
4
+ data.tar.gz: 2b94b34ba4601dabaff8b0499615a9e9b9250118
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NDBiNjg4MTFkNDg3Nzk3ZGQzY2ZkZjY4YjJmYTE2ZmNiYTAyZTJhZDIxMjFk
10
- MDMyZGM4ZWMwYWMyYmY4NDRkNjY4Yjc3N2RlMTMzOGU2Yjk0N2IyNDhlZDA2
11
- ZDE3NTBiMGNjZTU5YWM4MTQ5ZjM5YjY3YWVlYWIyMjZjYWNiMTY=
12
- data.tar.gz: !binary |-
13
- ZWY1YTg3MWY4NTM4NzJhNzQzZmExNWQ5MmVlNGNmMmQ4MzlhNDY1ZWZiOGY4
14
- OGRhYWJhMjU5MDg5N2JjYWViYWFkNjI3NjM5NDYxZjhlZmY1NzI2ZmFiM2I2
15
- NGFlOTMwODRiOTYxOGVlZTFjYjNkYzJlOGQ1Y2JjZDMzOWFjODQ=
6
+ metadata.gz: 14442c8f23722c9eb7019e93f15d64307114323b2eb57ba0dcb4193b62db142ff251a98b8c38c97994f9b3a9a5a8128770ef3a0a53d9b16b5786189044700c25
7
+ data.tar.gz: b9efa3414d82f84d940fb889c675819b7812a51cdffcff4da91945c2724f739fbb1af181cb456495a9f22bf5394bdc747750c67700dab437ec40a4865d46e9a1
data/Gemfile.lock CHANGED
@@ -1,39 +1,36 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ltree_hierarchy (0.0.4)
4
+ ltree_hierarchy (0.0.5)
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.0.0)
12
- activesupport (= 4.0.0)
13
- builder (~> 3.1.0)
14
- activerecord (4.0.0)
15
- activemodel (= 4.0.0)
16
- activerecord-deprecated_finders (~> 1.0.2)
17
- activesupport (= 4.0.0)
18
- arel (~> 4.0.0)
19
- activerecord-deprecated_finders (1.0.3)
20
- activesupport (4.0.0)
21
- i18n (~> 0.6, >= 0.6.4)
22
- minitest (~> 4.2)
23
- multi_json (~> 1.3)
11
+ activemodel (4.1.6)
12
+ activesupport (= 4.1.6)
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)
20
+ json (~> 1.7, >= 1.7.7)
21
+ minitest (~> 5.1)
22
+ thread_safe (~> 0.1)
23
+ tzinfo (~> 1.1)
24
+ arel (5.0.1.20140414130214)
25
+ builder (3.2.2)
26
+ i18n (0.7.0)
27
+ json (1.8.2)
28
+ minitest (5.5.1)
29
+ pg (0.17.1)
30
+ rake (10.4.2)
31
+ thread_safe (0.3.4)
32
+ tzinfo (1.2.2)
24
33
  thread_safe (~> 0.1)
25
- tzinfo (~> 0.3.37)
26
- arel (4.0.0)
27
- atomic (1.1.14)
28
- builder (3.1.4)
29
- i18n (0.6.5)
30
- minitest (4.7.5)
31
- multi_json (1.8.0)
32
- pg (0.17.0)
33
- rake (10.1.0)
34
- thread_safe (0.1.3)
35
- atomic
36
- tzinfo (0.3.37)
37
34
 
38
35
  PLATFORMS
39
36
  ruby
data/README.md CHANGED
@@ -1,54 +1,85 @@
1
- # ltree_hierarchy
1
+ # Ltree Hierarchy
2
2
 
3
3
  A simplistic gem that allows ActiveRecord models to be organized in a tree or hierarchy. It uses a materialized path implementation based around PostgreSQL's [ltree](http://www.postgresql.org/docs/current/static/ltree.html) data type, associated functions and operators.
4
4
 
5
- [![Build Status](https://api.travis-ci.org/robworley/ltree_hierarchy.png)](https://travis-ci.org/robworley/ltree_hierarchy)
6
-
7
5
  ## Why might you want to use it?
8
6
 
9
7
  - You want to be able to construct optimized hierarchical queries with ease, both from Ruby AND raw SQL.
10
8
  - You want to be able to compose complex arel expressions from pre-defined building blocks.
11
9
  - You prefer PostgreSQL over other relational DBs.
12
10
 
13
- ## Getting started
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ gem 'ltree_hierarchy'
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Add ltree extension to PostgreSQL:
22
+
23
+ $ psql -U postgres -d my_database
24
+ -> CREATE EXTENSION IF NOT EXISTS ltree;
25
+
26
+ Update your table:
14
27
 
15
- Follow these steps to apply to any ActiveRecord model:
28
+ ``` ruby
29
+ class AddLtreeToLocations < ActiveRecord::Migration
30
+ def self.up
31
+ add_column :locations, :parent_id, :integer
32
+ add_column :locations, :path, :ltree
16
33
 
17
- 1. Install
18
- - Add to Gemfile: **gem 'ltree_hierarchy', :git => 'git://github.com/robworley/ltree_hierarchy.git'**
19
- - Install required gems: **bundle install**
20
- 2. Add parent_id (integer) and path (ltree) columns to your table.
21
- 3. Add ltree hierarchy to your model
22
- - Add to app/models/[model].rb: has_ltree_hierarchy
34
+ add_index :locations, :parent_id
35
+ end
23
36
 
24
- ## Organizing records into a tree
37
+ def self.down
38
+ remove_index :locations, :parent_id
39
+ remove_column :locations, :parent_id
40
+ remove_column :locations, :path
41
+ end
42
+ end
43
+ ```
25
44
 
26
- Set the parent association or parent_id:
45
+ Run migrations:
27
46
 
28
- Node.create! :name => 'New York', :parent => Node.create!(:name => 'USA')
47
+ $ bundle exec rake db:migrate
29
48
 
30
- ## Navigating the tree
49
+ ## Usage
31
50
 
32
- The usual basic tree stuff. Use the following methods on any model instance:
51
+ ``` ruby
52
+ class Location < ActiveRecord::Base
53
+ has_ltree_hierarchy
54
+ end
33
55
 
34
- - parent
35
- - ancestors
36
- - self_and_ancestors
37
- - siblings
38
- - self_and_siblings
39
- - children
40
- - self_and_children
41
- - descendents
42
- - self_and_descendents
43
- - leaves
56
+ root = Location.create!(name: 'UK')
57
+ child = Location.create!(name: 'London', parent: root)
58
+ subchild = Location.create!(name: 'Hackney', parent: child)
44
59
 
45
- Useful class methods:
60
+ root.parent # => nil
61
+ child.parent # => root
62
+ root.children # => [child]
63
+ root.children.first.children.first # => subchild
64
+ subchild.root # => root
65
+ ```
46
66
 
47
- - roots
48
- - leaves
49
- - at_depth(n)
50
- - lowest_common_ancestors(scope)
67
+ - `.roots`
68
+ - `.leaves`
69
+ - `.at_depth(n)`
70
+ - `.lowest_common_ancestors(scope)`
71
+ - `#parent`
72
+ - `#ancestors`
73
+ - `#self_and_ancestors`
74
+ - `#siblings`
75
+ - `#self_and_siblings`
76
+ - `#children`
77
+ - `#self_and_children`
78
+ - `#descendents`
79
+ - `#self_and_descendents`
80
+ - `#leaves`
51
81
 
52
82
  ## TODO
53
83
 
54
- - Better error message for circular references. Don't neglect i18n.
84
+ - [ ] Better error message for circular references.
85
+ - [ ] Don't neglect i18n.
@@ -133,7 +133,7 @@ module Ltree
133
133
  end
134
134
 
135
135
  def leaf?
136
- !children.any?
136
+ !children.exists?
137
137
  end
138
138
 
139
139
  def depth # 1-based, for compatibility with ltree's nlevel().
@@ -146,6 +146,10 @@ module Ltree
146
146
  end
147
147
  end
148
148
 
149
+ def root
150
+ ltree_scope.where("#{ltree_path_column} = subpath(?, 0, 1)", ltree_path).first
151
+ end
152
+
149
153
  def ancestors
150
154
  ltree_scope.where("#{ltree_path_column} @> ? AND #{ltree_fragment_column} != ?", ltree_path, ltree_fragment)
151
155
  end
@@ -1,5 +1,5 @@
1
1
  module Ltree
2
2
  module Hierarchy
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,55 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ltree_hierarchy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Worley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-04 00:00:00.000000000 Z
11
+ date: 2015-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
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: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 3.1.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: 3.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ! '>='
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ! '>='
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  description: Organizes ActiveRecord models into a tree/hierarchy using a materialized
@@ -61,14 +75,14 @@ executables: []
61
75
  extensions: []
62
76
  extra_rdoc_files: []
63
77
  files:
64
- - lib/ltree_hierarchy/hierarchy.rb
65
- - lib/ltree_hierarchy/version.rb
66
- - lib/ltree_hierarchy.rb
67
78
  - Gemfile
68
79
  - Gemfile.lock
69
80
  - MIT-LICENSE
70
- - Rakefile
71
81
  - README.md
82
+ - Rakefile
83
+ - lib/ltree_hierarchy.rb
84
+ - lib/ltree_hierarchy/hierarchy.rb
85
+ - lib/ltree_hierarchy/version.rb
72
86
  homepage: https://github.com/robworley/ltree_hierarchy
73
87
  licenses:
74
88
  - MIT
@@ -79,17 +93,17 @@ require_paths:
79
93
  - lib
80
94
  required_ruby_version: !ruby/object:Gem::Requirement
81
95
  requirements:
82
- - - ! '>='
96
+ - - ">="
83
97
  - !ruby/object:Gem::Version
84
98
  version: '0'
85
99
  required_rubygems_version: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ! '>='
101
+ - - ">="
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
104
  requirements: []
91
105
  rubyforge_project: ltree_hierarchy
92
- rubygems_version: 2.1.5
106
+ rubygems_version: 2.4.7
93
107
  signing_key:
94
108
  specification_version: 4
95
109
  summary: Organize ActiveRecord models into a tree using PostgreSQL's ltree datatype