chinese_regions_rails 0.1.0 → 1.0.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
2
  SHA1:
3
- metadata.gz: 3e933b807fcedf6ee8230a031d6be1f1bb979da7
4
- data.tar.gz: 825ad0828019ce5afa37dfed3d6f2cfbc75f4f0a
3
+ metadata.gz: 188854b0a371acfad97c2d8df7fbe21d36b76bfd
4
+ data.tar.gz: 2dd67aa17a6a79e74967448b0721953b7b9a0a35
5
5
  SHA512:
6
- metadata.gz: 79cdf218d01ac23951200d769465f04f8ba99adbf2b64b3c2fef45acb76b9ee394426dee43f79fcc0f51b637cf90276a8936e12b1872cccfa930f6987a8bd363
7
- data.tar.gz: 562fef857c263117954c6f7c1b281456455a68610c56809b0a755de8690e1371b57f88f3407326857bd37b2d0ccf11122cb16349e176a514ad45a746a3636632
6
+ metadata.gz: 5f376ad65d7bc3d4ce3c176270523a96db196a8f921e554167cc489f51787dbea963d32f91c158235cd1666957eafa797c364ebc41c1b42788663a7394636f6f
7
+ data.tar.gz: 78c0c16f824babd5c5de679b7f51e27e3abdc975aa670bf9b95e840ac7e550ba91c200fe39f8e7710cf46cdf9e3b45d24c2daa4c43f8acd03e6a43b8416a9941
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  数据来源 https://github.com/xixilive/chinese_regions_db 。
5
5
  支持 active_record 和 mongoid 。
6
6
 
7
- ## 使用
7
+ ## 安装
8
8
 
9
9
  Gemfile
10
10
 
@@ -12,7 +12,7 @@ Gemfile
12
12
  gem 'chinese_regions_rails'
13
13
  ```
14
14
 
15
- generate `Region` model
15
+ Copy migrations
16
16
 
17
17
  ```
18
18
  rails g chinese_regions:install
@@ -25,13 +25,80 @@ rake db:migrate
25
25
  rake db:seed:regions
26
26
  ```
27
27
 
28
- ## Region 包含的属性
28
+ ## 使用
29
+
30
+ 直接使用 Region model
31
+
32
+ ```ruby
33
+ class User < ActiveRecord::Base
34
+ belongs_to :city, class_name: "ChineseRegions::Region"
35
+ end
36
+ ```
37
+
38
+ #### 使用 [city-picker](https://github.com/tshi0912/city-picker) 作为表单输入
39
+
40
+ application.css 添加下面代码
41
+ ```
42
+ *= require city-picker
43
+ ```
44
+
45
+ application.js 中在 jQuery 后面引入文件
46
+ ```
47
+ //= require city-picker.data
48
+ //= require city-picker
49
+ //= require chinese-regions
50
+ ```
51
+
52
+ 表单里可以使用 `city_picker_tag(method, value, options)` 和 `city_picker(method, options)`, 这两个标签只是简单的封装,options 可以传入任何东西, 比如 city-picer 的 level 和 simple 选项可以通过 data 传入 `data: { level: :city, simple: true }`。
53
+ ```erb
54
+ <%= form_tag do %>
55
+ <div style="position: relative;">
56
+ # Region model
57
+ <%= city_picker_tag :city_id, @user.city %>
58
+ # Regoin id
59
+ <%= city_picker_tag :city_id, "610101", data: { level: :city } %>
60
+ </div>
61
+ <% end %>
29
62
 
30
- * code
31
- * parent_code
63
+ <% form_for @user do |f| %>
64
+ <div style="position: relative;">
65
+ <%= f.city_pciker :city_id %>
66
+ </div>
67
+ <% end %>
68
+ ```
69
+
70
+ ## Region model
71
+
72
+ ```ruby
73
+ class ChineseRegions::Region < ActiveRecord
74
+ belogns_to :parent # 上级 region
75
+ has_many :children # 下级 region
76
+ end
77
+ ```
78
+
79
+ model 包含的属性
80
+ * id
81
+ * parent_id
32
82
  * level
33
83
  * name
34
84
  * alias
35
85
  * pinyin
36
86
  * abbr
37
87
  * zip
88
+
89
+ ### Change log
90
+
91
+ * v1.0.0
92
+
93
+ **Break Change**
94
+
95
+ * 直接使用 engine 里的 ChineseRegions::Region model,而不是添加 model 到用户项目
96
+ * 引入 city-picker
97
+
98
+ * v0.1.*
99
+
100
+ 修改 Sqlite3 数据源到 json
101
+
102
+ * v0.0.*
103
+
104
+ 生成 Region model 到用户项目
@@ -3,5 +3,5 @@ require "chinese_regions_rails/json_data_source"
3
3
  require "chinese_regions_rails/db" if defined? SQLite3
4
4
 
5
5
  module ChineseRegionsRails
6
- require "chinese_regions_rails/railtie" if defined?(Rails)
6
+ require "chinese_regions_rails/engine" if defined?(Rails)
7
7
  end
@@ -0,0 +1,17 @@
1
+ require "rails"
2
+ require "chinese_regions_rails/helper"
3
+
4
+ module ChineseRegions
5
+
6
+ class Engine < Rails::Engine
7
+ isolate_namespace ChineseRegions
8
+
9
+ initializer "chinese_regions_rails.helper_and_builder" do
10
+ ActiveSupport.on_load :action_view do
11
+ include ChineseRegionsRails::Helper
12
+ ActionView::Helpers::FormBuilder.send(:include, ChineseRegionsRails::Builder)
13
+ end
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,79 @@
1
+ require 'securerandom'
2
+
3
+ module ChineseRegionsRails
4
+ module Helper
5
+ def city_picker_tag(name, value = nil, options = {})
6
+ HelperUtil.setup_options(options)
7
+
8
+ _raw_label = HelperUtil.raw_label(value)
9
+ _raw_value = HelperUtil.raw_value(value)
10
+
11
+
12
+ output = ActiveSupport::SafeBuffer.new
13
+ output << text_field_tag(nil, _raw_label, options)
14
+ output << hidden_field_tag(name, _raw_value, {
15
+ data: { "city-picker-value-for" => options[:data][:id] }
16
+ })
17
+ end
18
+ end
19
+
20
+ module Builder
21
+ def city_picker(method, options = {})
22
+ HelperUtil.setup_options(options)
23
+
24
+ options[:name] = nil
25
+
26
+ value = retrive_value(method)
27
+ _raw_label = HelperUtil.raw_label(value)
28
+ _raw_value = HelperUtil.raw_value(value)
29
+
30
+ options[:value] = _raw_label
31
+
32
+ output = ActiveSupport::SafeBuffer.new
33
+ output << text_field(nil, options)
34
+ output << hidden_field(method, {
35
+ value: _raw_value,
36
+ data: { "city-picker-value-for" => options[:data][:id] }
37
+ })
38
+ end
39
+
40
+ private
41
+ def retrive_value(method)
42
+ object = self.instance_variable_get("@object")
43
+ object.public_send(method) if object
44
+ end
45
+ end
46
+
47
+ module HelperUtil
48
+ def self.setup_options(options)
49
+ input_identifer = SecureRandom.hex(8)
50
+ if data = options[:data]
51
+ data.merge!(toggle: "city-picker", id: input_identifer)
52
+ else
53
+ data = {toggle: "city-picker", id: input_identifer}
54
+ options[:data] = data
55
+ end
56
+ options.merge!(readonly: true)
57
+ end
58
+
59
+ def self.raw_label(value)
60
+ return unless value
61
+
62
+ if value.is_a?(ChineseRegions::Region)
63
+ value.full_name("/")
64
+ else
65
+ ChineseRegions::Region.find_by(id: value).full_name("/")
66
+ end
67
+ end
68
+
69
+ def self.raw_value(value)
70
+ return unless value
71
+
72
+ if value.is_a?(ChineseRegions::Region)
73
+ value.id
74
+ else
75
+ value
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,3 +1,3 @@
1
1
  module ChineseRegionsRails
2
- VERSION = '0.1.0'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -3,12 +3,10 @@ require "rails/generators"
3
3
  module ChineseRegions
4
4
  class InstallGenerator < Rails::Generators::Base
5
5
 
6
- desc "Generate region model. Default model name is 'Region'"
7
-
6
+ desc "Generate region model migration."
8
7
  def install
9
- class_name = "region"
10
- generate "model", "#{class_name} code:string parent_code:string name:string alias:string pinyin:string abbr:string zip:string level:integer"
8
+ rake 'railties:install:migrations'
11
9
  end
12
10
 
13
11
  end
14
- end
12
+ end
Binary file
@@ -20813,7 +20813,7 @@
20813
20813
  "code": "450000",
20814
20814
  "parent_code": null,
20815
20815
  "name": "广西壮族自治区",
20816
- "alias": "广西壮族",
20816
+ "alias": "广西",
20817
20817
  "pinyin": "GuangXiZhuangZu",
20818
20818
  "abbr": "GXZZ",
20819
20819
  "zip": "530000",
@@ -27924,7 +27924,7 @@
27924
27924
  "parent_code": null,
27925
27925
  "name": "陕西省",
27926
27926
  "alias": "陕西",
27927
- "pinyin": "ShanXi",
27927
+ "pinyin": "ShaanXi",
27928
27928
  "abbr": "SX",
27929
27929
  "zip": "710000",
27930
27930
  "level": 1
@@ -30553,7 +30553,7 @@
30553
30553
  "code": "640000",
30554
30554
  "parent_code": null,
30555
30555
  "name": "宁夏回族自治区",
30556
- "alias": "宁夏回族",
30556
+ "alias": "宁夏",
30557
30557
  "pinyin": "NingXiaHuiZu",
30558
30558
  "abbr": "NXHZ",
30559
30559
  "zip": "750000",
@@ -30833,7 +30833,7 @@
30833
30833
  "code": "650000",
30834
30834
  "parent_code": null,
30835
30835
  "name": "新疆维吾尔自治区",
30836
- "alias": "新疆维吾尔",
30836
+ "alias": "新疆",
30837
30837
  "pinyin": "XinJiangWeiWuEr",
30838
30838
  "abbr": "XJWWE",
30839
30839
  "zip": "830000",
@@ -33189,4 +33189,4 @@
33189
33189
  "zip": "833418",
33190
33190
  "level": 3
33191
33191
  }
33192
- ]
33192
+ ]
@@ -1,8 +1,5 @@
1
- # default model regions
2
1
  # rake db:seed:regions
3
2
 
4
- # TODO: rake db:seed:regions xxx_regions
5
- # custom model to xxx_regions
6
3
  require 'active_support/core_ext/string/inflections'
7
4
  require "chinese_regions_rails"
8
5
 
@@ -13,12 +10,12 @@ namespace :db do
13
10
 
14
11
  desc "seed regions data to db"
15
12
  task regions: :environment do
16
- args ||= {}
17
- args[:model_class] = 'region'
18
- region_class = args[:model_class].classify.constantize
13
+ region_class = ChineseRegions::Region
19
14
 
20
15
  ChineseRegionsRails::JsonDataSource.query_regions do |region_param|
21
- region_class.create(region_param)
16
+ region_param["id"] = region_param.delete("code")
17
+ region_param["parent_id"] = region_param.delete("parent_code")
18
+ region_class.create!(region_param)
22
19
  end
23
20
 
24
21
  puts "insert regions"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chinese_regions_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Basten Gao
@@ -24,7 +24,7 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.2'
27
- description: "中国省市区县数据库,包含 行政编码,邮政编码,地区拼音和简拼。 数据来源 https://github.com/xixilive/chinese_regions_db"
27
+ description: 中国省市区县数据库,包含 行政编码,邮政编码,地区拼音和简拼。 数据来源 https://github.com/xixilive/chinese_regions_db
28
28
  email: bastengao@gmail.com
29
29
  executables: []
30
30
  extensions: []
@@ -35,8 +35,9 @@ files:
35
35
  - Rakefile
36
36
  - lib/chinese_regions_rails.rb
37
37
  - lib/chinese_regions_rails/db.rb
38
+ - lib/chinese_regions_rails/engine.rb
39
+ - lib/chinese_regions_rails/helper.rb
38
40
  - lib/chinese_regions_rails/json_data_source.rb
39
- - lib/chinese_regions_rails/railtie.rb
40
41
  - lib/chinese_regions_rails/version.rb
41
42
  - lib/dump_json.rb
42
43
  - lib/generators/chinese_regions/install_generator.rb
@@ -66,12 +67,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
67
  version: 1.8.11
67
68
  requirements: []
68
69
  rubyforge_project:
69
- rubygems_version: 2.4.8
70
+ rubygems_version: 2.6.11
70
71
  signing_key:
71
72
  specification_version: 4
72
- summary: "中国省市区县数据库"
73
+ summary: 中国省市区县数据库
73
74
  test_files:
74
75
  - spec/chinese_regions_rails/db_spec.rb
75
76
  - spec/chinese_regions_rails/json_data_source_spec.rb
76
77
  - spec/helper.rb
77
- has_rdoc:
@@ -1,12 +0,0 @@
1
- require "rails"
2
-
3
- module ChineseRegionsRails
4
-
5
- class Railtie < Rails::Railtie
6
- rake_tasks do
7
- # 加载 /lib/tasks/***.rake 文件
8
- Dir[File.join(File.dirname(__FILE__), '../tasks/*.rake')].each { |f| load f }
9
- end
10
- end
11
-
12
- end