pinas 0.1.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.
@@ -0,0 +1,157 @@
1
+ require 'awesome_nested_set'
2
+ require 'geocoder/models/active_record'
3
+
4
+ module Pinas
5
+ class Location < ActiveRecord::Base
6
+ extend ::Geocoder::Model::ActiveRecord
7
+
8
+ self.table_name = "locations"
9
+
10
+ acts_as_nested_set
11
+
12
+ belongs_to :parent, :class_name => self.to_s
13
+
14
+ geocoded_by :for_geocoding
15
+
16
+ after_validation :geocode
17
+
18
+ LEVEL =
19
+ {
20
+ 'national' => 0,
21
+ 'region' => 1,
22
+ 'province' => 2,
23
+ 'town' => 3,
24
+ 'barangay' => 4
25
+ }
26
+
27
+ scope :regions, -> { where(location_type: 'region') }
28
+ scope :provinces, -> { where(location_type: 'province') }
29
+ scope :towns, -> { where(location_type: 'town') }
30
+ scope :barangays, -> { where(location_type: 'barangay') }
31
+
32
+ def provinces
33
+ descendants.where(location_type: 'province')
34
+ end
35
+
36
+ def towns
37
+ descendants.where(location_type: 'town')
38
+ end
39
+
40
+ def barangays
41
+ descendants.where(location_type: 'barangay')
42
+ end
43
+
44
+ def for_geocoding
45
+ "#{formatted_display || name}, Philippines"
46
+ end
47
+
48
+ def coordinates
49
+ if location_type=='barangay' # erratic coordinates on barangays, lets use town
50
+ { lat: parent.latitude.to_f, lon: parent.longitude.to_f }
51
+ else
52
+ { lat: latitude.to_f, lon: longitude.to_f }
53
+ end
54
+ end
55
+
56
+ def NCR?
57
+ region.code == '130000000'
58
+ end
59
+
60
+ def formatted_display
61
+ reload if persisted?
62
+ case location_type
63
+ when 'barangay'
64
+ display = "#{name}, #{parent.formatted_display}"
65
+ when 'town'
66
+ display = NCR?? "#{name}, NCR": "#{name}, #{province.name}"
67
+ when 'province'
68
+ display = province.name
69
+ end
70
+ display.try(:titleize)
71
+ end
72
+
73
+ def town
74
+ @town ||= get_type('town')
75
+ end
76
+
77
+ def region
78
+ @region ||= get_type('region')
79
+ end
80
+
81
+ def province
82
+ @province ||= get_type('province')
83
+ end
84
+
85
+ def barangay
86
+ @barangay ||= get_type('barangay')
87
+ end
88
+
89
+ def country
90
+ @country ||= 'Philippines'
91
+ end
92
+
93
+ def up_level
94
+ LEVEL.rassoc(LEVEL[location_type] - 1).try(:[], 0)
95
+ end
96
+
97
+ def down_level
98
+ LEVEL.rassoc(LEVEL[location_type] + 1).try(:[], 0)
99
+ end
100
+
101
+ def related_location_id_maps
102
+ Hash[ *LEVEL.keys.map { |type| [type, get_ids(type)] }.flatten ]
103
+ end
104
+
105
+ def ancestors
106
+ @ancestors ||= try do
107
+ output = []
108
+ level_diff = get_level_diff('national', self.location_type)
109
+ if level_diff > 0
110
+ ancestor = self.parent
111
+ level_diff.times do
112
+ break if ancestor.nil?
113
+ output << ancestor
114
+ ancestor = ancestor.parent
115
+ end
116
+ end
117
+ output
118
+ end
119
+ end
120
+
121
+ private
122
+ def get_ids(type)
123
+ level_diff = get_level_diff(type, self.location_type)
124
+ if level_diff >= 0
125
+ get_type(type).id
126
+ else
127
+ get_child_ids(level_diff)
128
+ end
129
+ end
130
+
131
+ def get_name(type)
132
+ get_type(type).try(:name)
133
+ end
134
+
135
+ def get_type(type)
136
+ level_diff = get_level_diff(type, self.location_type)
137
+ case
138
+ when level_diff > 0
139
+ ancestors[level_diff-1]
140
+ when level_diff == 0
141
+ self
142
+ else nil
143
+ end
144
+ end
145
+
146
+ def get_child_ids(level_diff)
147
+ if level_diff == -1
148
+
149
+ end
150
+ end
151
+
152
+ def get_level_diff(type, self_type)
153
+ LEVEL[self_type] - LEVEL[type]
154
+ end
155
+
156
+ end
157
+ end
@@ -0,0 +1,9 @@
1
+ module Pinas
2
+ class Railtie < Rails::Railtie
3
+
4
+ rake_tasks do
5
+ load "tasks/pinas_tasks.rake"
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Pinas
2
+ VERSION = "0.1.0"
3
+ end
data/lib/pinas.rb ADDED
@@ -0,0 +1,7 @@
1
+ require "pinas/version"
2
+
3
+ module Pinas
4
+ autoload :Location, "pinas/location"
5
+ end
6
+
7
+ require 'pinas/railtie' if defined?(Rails)
@@ -0,0 +1,10 @@
1
+ namespace :pinas do
2
+ desc "Load Philippines locations, includes Region, provinces, towns and barangays"
3
+ task :load_data => :environment do
4
+ ActiveRecord::Base.connection.execute("TRUNCATE locations")
5
+ sql = File.read(File.expand_path("../../pinas/data/locations.sql", __FILE__))
6
+ sql.split(';').each do |sql_statement|
7
+ ActiveRecord::Base.connection.execute(sql_statement) unless sql_statement.blank?
8
+ end
9
+ end
10
+ end
data/pinas.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'pinas/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "pinas"
8
+ spec.version = Pinas::VERSION.dup
9
+ spec.platform = Gem::Platform::RUBY
10
+ spec.authors = ["Allan Andal"]
11
+ spec.email = ["allan.andal@gmail.com"]
12
+ spec.summary = %q{Provide Philippines locations.}
13
+ spec.description = %q{}
14
+ spec.homepage = "https://github.com/pangkalizer/pinas"
15
+ spec.license = "MIT"
16
+ spec.rubyforge_project = "pinas"
17
+
18
+ spec.files = `git ls-files`.split($/)
19
+ spec.executables = spec.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.required_ruby_version = ">= 1.9.2"
24
+ spec.add_dependency "railties", ">= 3.2.6", "< 5"
25
+ spec.add_dependency "geocoder", "~> 1.2"
26
+ spec.add_dependency "awesome_nested_set", "~> 3.0"
27
+
28
+ spec.add_development_dependency "bundler", "~> 1.6"
29
+ spec.add_development_dependency "rake"
30
+ spec.add_development_dependency "rspec"
31
+ spec.add_development_dependency "yaml_db", "~> 0.3.0"
32
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe Pinas do
4
+ describe 'Location' do
5
+ end
6
+ end
File without changes
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pinas
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Allan Andal
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 3.2.6
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.6
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5'
33
+ - !ruby/object:Gem::Dependency
34
+ name: geocoder
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.2'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.2'
47
+ - !ruby/object:Gem::Dependency
48
+ name: awesome_nested_set
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: bundler
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.6'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.6'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rake
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rspec
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: yaml_db
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 0.3.0
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 0.3.0
117
+ description: ''
118
+ email:
119
+ - allan.andal@gmail.com
120
+ executables: []
121
+ extensions: []
122
+ extra_rdoc_files: []
123
+ files:
124
+ - ".gitignore"
125
+ - ".rspec"
126
+ - Gemfile
127
+ - LICENSE.txt
128
+ - README.md
129
+ - Rakefile
130
+ - lib/generators/pinas/install_generator.rb
131
+ - lib/generators/templates/README
132
+ - lib/generators/templates/migration.rb
133
+ - lib/pinas.rb
134
+ - lib/pinas/data/locations.sql
135
+ - lib/pinas/location.rb
136
+ - lib/pinas/railtie.rb
137
+ - lib/pinas/version.rb
138
+ - lib/tasks/pinas_tasks.rake
139
+ - pinas.gemspec
140
+ - spec/pinas_spec.rb
141
+ - spec/spec_helper.rb
142
+ homepage: https://github.com/pangkalizer/pinas
143
+ licenses:
144
+ - MIT
145
+ metadata: {}
146
+ post_install_message:
147
+ rdoc_options: []
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: 1.9.2
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ requirements: []
161
+ rubyforge_project: pinas
162
+ rubygems_version: 2.2.2
163
+ signing_key:
164
+ specification_version: 4
165
+ summary: Provide Philippines locations.
166
+ test_files:
167
+ - spec/pinas_spec.rb
168
+ - spec/spec_helper.rb