navigation_light 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +83 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/config/navigation_light_manifest.js +2 -0
  6. data/app/assets/javascripts/navigation_light/application.js +15 -0
  7. data/app/assets/stylesheets/navigation_light/application.css +15 -0
  8. data/app/controllers/navigation_light/application_controller.rb +5 -0
  9. data/app/helpers/navigation_light/application_helper.rb +4 -0
  10. data/app/jobs/navigation_light/application_job.rb +4 -0
  11. data/app/mailers/navigation_light/application_mailer.rb +6 -0
  12. data/app/models/navigation_light/application_record.rb +69 -0
  13. data/app/models/navigation_light/count.rb +39 -0
  14. data/app/models/navigation_light/label.rb +27 -0
  15. data/app/models/navigation_light/middle_label.rb +10 -0
  16. data/app/models/navigation_light/on_load.rb +16 -0
  17. data/app/models/navigation_light/relation_label.rb +13 -0
  18. data/app/models/navigation_light/relation_uuid.rb +54 -0
  19. data/app/models/navigation_light/time.rb +78 -0
  20. data/app/models/navigation_light/uuid.rb +47 -0
  21. data/app/views/layouts/navigation_light/application.html.erb +16 -0
  22. data/config/routes.rb +2 -0
  23. data/db/migrate/20200210090159_create_navigation_light_uuids.rb +19 -0
  24. data/db/migrate/20200211025417_create_navigation_light_labels.rb +41 -0
  25. data/db/migrate/20200213161530_create_navigation_light_times.rb +37 -0
  26. data/db/migrate/seed.rb +28 -0
  27. data/lib/navigation_light.rb +5 -0
  28. data/lib/navigation_light/engine.rb +14 -0
  29. data/lib/navigation_light/version.rb +3 -0
  30. data/lib/tasks/navigation_light_tasks.rake +4 -0
  31. metadata +143 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 78a67fb74ad6324faa2c522a203ef79ff7395ae2ee008a2b53f254ebf3aa8025
4
+ data.tar.gz: 82c40f7884122c8b13469176a4b04556642526ea17b85a49584cccc7ac11f994
5
+ SHA512:
6
+ metadata.gz: b6e96de9bdb751f41d8e6b6ab739664690977e521c5f497643c58b8d4931c9418f72778109ff899899eef451b31326cbd9ba8564f68b641dc30c2dbe30f0cb85
7
+ data.tar.gz: a8bd91cb6a4528875385f844fa70bbbb67d640aec2c6f07cba259bd2cfcc3c34ba4439a5dd8ac899ffcddc3a963d74b6244fd2b3962edf910460021ba02c0668
@@ -0,0 +1,20 @@
1
+ Copyright 2020 ff4c00
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,83 @@
1
+ <!-- TOC -->
2
+
3
+ - [说明](#说明)
4
+ - [用途](#用途)
5
+ - [返回值](#返回值)
6
+ - [示例](#示例)
7
+ - [源码地址](#源码地址)
8
+ - [接驳](#接驳)
9
+ - [使用](#使用)
10
+ - [Uuid](#uuid)
11
+ - [Lable](#lable)
12
+ - [Count](#count)
13
+ - [Time](#time)
14
+ - [License](#license)
15
+ - [多多指教](#多多指教)
16
+
17
+ <!-- /TOC -->
18
+
19
+ # 说明
20
+
21
+ ## 用途
22
+
23
+ > 航行灯用作指示飞机的方位.<br>本项目应用于为应用系统中数据记录提供定位服务.
24
+
25
+ 定位服务包括:
26
+
27
+ 0. 精确定位, 即通过索引值从整个数据库中查询出涉及的具体数据记录.
28
+ 0. 标签定位, 通过为数据添加标签使得可根据标签定位范围内数据.
29
+ 0. 频率定位, 通过对数据进行时间及标签关联,进行个性化统计.
30
+ 0. 时间定位, 对目标数据进行 分/时/天/月/季度/年 时间索引,属于标签定位的细分领域.
31
+
32
+ ## 返回值
33
+
34
+ 全局采用统一标准返回值格式(BJ-FHB-2020-0111):
35
+
36
+ [布尔值<sup>[1]</sup>,&emsp;'文字说明'<sup>[2]</sup>,&emsp;{error_message: '异常描述', error_path: '异常发生信息', other:{}}<sup>[3]</sup>]
37
+
38
+ <hr>
39
+
40
+ 1: 用于标记程序执行结果是否符合程序预期
41
+
42
+ 2: 可供直接显示的结果提示信息(不包含系统敏感信息)
43
+
44
+ 3: 非必需, 用于程序发生异常时,提供异常详细信息
45
+
46
+ ### 示例
47
+
48
+ ```ruby
49
+ [true, '操作成功']
50
+
51
+ [false, '操作失败', {error_message: '异常描述', error_path: '异常发生信息', other:{}}]
52
+ ```
53
+
54
+
55
+ ## 源码地址
56
+
57
+ [GitLab | NavigationLight]((https://gitlab.com/ff4c00/hijack/-/blob/master/BackEnd/Ruby/Article/C919/NavigationLight.md))
58
+
59
+ # 接驳
60
+
61
+ # 使用
62
+
63
+ ## Uuid
64
+
65
+ > 为数据生成全局唯一的uuid.
66
+
67
+ ```ruby
68
+ relation_navigation_light :uuid
69
+ ```
70
+
71
+ ## Lable
72
+
73
+ ## Count
74
+
75
+ ## Time
76
+
77
+ ## License
78
+
79
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
80
+
81
+ # 多多指教
82
+
83
+ * <a href="mailto:ff4c00@gmail.com">个人联系邮箱</a>
@@ -0,0 +1,32 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'NavigationLight'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
18
+ load 'rails/tasks/engine.rake'
19
+
20
+ load 'rails/tasks/statistics.rake'
21
+
22
+ require 'bundler/gem_tasks'
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'test'
28
+ t.pattern = 'test/**/*_test.rb'
29
+ t.verbose = false
30
+ end
31
+
32
+ task default: :test
@@ -0,0 +1,2 @@
1
+ //= link_directory ../javascripts/navigation_light .js
2
+ //= link_directory ../stylesheets/navigation_light .css
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require rails-ujs
14
+ //= require activestorage
15
+ //= require_tree .
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,5 @@
1
+ module NavigationLight
2
+ class ApplicationController < ActionController::Base
3
+ protect_from_forgery with: :exception
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ module NavigationLight
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module NavigationLight
2
+ class ApplicationJob < ActiveJob::Base
3
+ end
4
+ end
@@ -0,0 +1,6 @@
1
+ module NavigationLight
2
+ class ApplicationMailer < ActionMailer::Base
3
+ default from: 'from@example.com'
4
+ layout 'mailer'
5
+ end
6
+ end
@@ -0,0 +1,69 @@
1
+ module NavigationLight
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+
5
+ def ejection(type: 'back_result')
6
+ case type
7
+ when 'back_result', 'normal'
8
+ # send(type.to_sym, yield)
9
+ send(type.to_sym) do
10
+ yield
11
+ end
12
+ else
13
+ raise '参数(type), 赋值异常'
14
+ end
15
+ end
16
+
17
+ # def self.inherited(child_class)
18
+
19
+ # child_class.class_eval do |klass|
20
+ # # def klass.ejection
21
+ # # puts 'fine'
22
+ # # puts "#{self}"
23
+ # # end
24
+ # # def klass.ejection(*args, &block)
25
+ # # self.new.ejection(*args, &block)
26
+ # # end
27
+
28
+ # # def klass.ejection(type: 'back_result')
29
+ # # # self.new.ejection(type: type) do
30
+ # # # # yield
31
+ # # # p "#{super}"
32
+ # # # end
33
+ # # end
34
+
35
+ # # class << self
36
+ # # def ejection
37
+ # # p 'as'
38
+ # # end
39
+ # # end
40
+
41
+ # # define_method :ejection do
42
+ # # puts self
43
+ # # end
44
+
45
+ # end
46
+ # end
47
+
48
+ private
49
+ def back_result
50
+ begin
51
+ return (res = [false, '系统错误', '调用方法请提供相应代码块']) unless block_given?
52
+ res = yield
53
+ rescue
54
+ res = [false, '系统运行时异常', {error_message: $!, error_path: $@}]
55
+ ensure
56
+ return res
57
+ end
58
+ end
59
+
60
+ def normal
61
+ begin
62
+ yield
63
+ rescue => e
64
+ raise e
65
+ end
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,39 @@
1
+ module NavigationLight
2
+ module Count < ApplicationRecord
3
+ def self.included(target)
4
+ target.class_eval do
5
+ has_many :times, as: :timeable, :dependent => :destroy
6
+
7
+ count = NavigationLight::Label.find_by(code: 'NavigationLight::Count')
8
+ count && count.children.where.not(code: nil).uniq.each do |label|
9
+
10
+ define_method("add_#{label.code}".to_sym) do |*args, &block|
11
+ time = Time.new
12
+ time.labels << label
13
+ self.times << time
14
+ end
15
+
16
+ define_method("summary_#{label.code}s".to_sym) do |*args, &block|
17
+ times = self.times.included(:labels).where("navigation_light_labels.code in ?", label.code)
18
+
19
+ Time::ABOUT_TIME_COLUMNS.each do |column|
20
+ define_method(column.to_sym) do |*args, &block|
21
+ times.where(column => args[0]).counts
22
+ end
23
+ end
24
+
25
+ Time::ABOUT_TIME_COLUMNS.each do |column|
26
+ define_method("summary_#{label.code}s_#{column}".to_sym) do |*args, &block|
27
+ column(*args, &block)
28
+ end
29
+ end
30
+
31
+ times.counts
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,27 @@
1
+ module NavigationLight
2
+ class Label < ApplicationRecord
3
+
4
+ relation_navigation_light :uuid
5
+
6
+ before_save :validate_columns
7
+
8
+ has_ancestry
9
+ has_ancestry :cache_depth => true
10
+
11
+ acts_as_paranoid
12
+
13
+ private
14
+
15
+ def validate_columns
16
+ validate_name
17
+ end
18
+
19
+ def validate_name
20
+ # 判断是否为空
21
+ unless self.name.present?
22
+ self.errors[:name] << '标签名称不能为空'
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ module NavigationLight
2
+ class MiddleLabel < ApplicationRecord
3
+
4
+ relation_navigation_light :uuid
5
+
6
+ belongs_to :middlabel, :polymorphic => true
7
+ belongs_to :label
8
+
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ module NavigationLight
2
+ module OnLoad
3
+
4
+ def relation_navigation_light(*models)
5
+ models.each do |model|
6
+ raise "model名称错误, #{model} 不在允许加载model范围内." unless [:uuid, :label].include?(model.to_sym)
7
+ end
8
+
9
+ models.each do |model|
10
+ include "NavigationLight::Relation#{model.capitalize}".constantize
11
+ end
12
+ end
13
+
14
+ end
15
+ end
16
+
@@ -0,0 +1,13 @@
1
+ module NavigationLight
2
+ module RelationLabel
3
+
4
+ def self.included(target)
5
+ target.class_eval do
6
+ has_many :middlabels, as: :middlabel, class_name: 'MiddleLabel'
7
+ has_many :labels, through: :middlabels
8
+ end
9
+ end
10
+
11
+ end
12
+ end
13
+
@@ -0,0 +1,54 @@
1
+ module NavigationLight
2
+ module RelationUuid
3
+
4
+ def self.included(target)
5
+ target.class_eval do
6
+
7
+ has_one :uuid_, as: :uuidable, :dependent => :destroy
8
+
9
+ before_save :generate_columns
10
+ before_save :validate_columns
11
+
12
+ def uuid
13
+ unless self.uuid_
14
+ generate_uuid_
15
+ end
16
+
17
+ unless self.uuid_.uuid
18
+ self.uuid_.send(:generate_uuid)
19
+ end
20
+
21
+ self.uuid_.uuid
22
+ end
23
+
24
+ private
25
+
26
+ def generate_columns
27
+ generate_uuid_
28
+ end
29
+
30
+ def validate_columns
31
+ validate_uuid_
32
+ end
33
+
34
+ def generate_uuid_
35
+ self.uuid_ = Uuid.new unless self.uuid_
36
+ end
37
+
38
+ def validate_uuid_
39
+ # 判断是否为空
40
+ unless self.uuid_.present?
41
+ self.errors[:uuid_] << 'uuid_尚未生成'
42
+ end
43
+
44
+ unless self.uuid.present?
45
+ self.errors[:uuid] << 'uuid尚未生成'
46
+ end
47
+ end
48
+
49
+
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,78 @@
1
+ module NavigationLight
2
+ class Time < ApplicationRecord
3
+
4
+ belongs_to :timeable, :polymorphic => true
5
+
6
+ relation_navigation_light :uuid, :label
7
+
8
+ before_save :generate_columns
9
+
10
+ ABOUT_TIME_COLUMNS = [:minute, :hour, :day, :week, :month, :quarter, :year]
11
+
12
+ private
13
+ def generate_columns
14
+ tmp = {}
15
+ ABOUT_TIME_COLUMNS.each do |column|
16
+ next if self.send(column).present?
17
+ tmp.merge!({column => Time.send("index_#{column}")})
18
+ end
19
+ self.attributes = self.attributes.merge!(tmp.stringify_keys)
20
+ end
21
+
22
+ class << self
23
+
24
+ def index_minute(time: ::Time.now)
25
+ time.strftime('%M').to_i
26
+ end
27
+
28
+ def index_hour(time: ::Time.now)
29
+ time.strftime('%H').to_i
30
+ end
31
+
32
+ def index_day(time: ::Time.now)
33
+ time.strftime('%Y%m%d').to_i
34
+ end
35
+
36
+ def index_month(time: ::Time.now)
37
+ time.strftime('%Y%m').to_i
38
+ end
39
+
40
+ def index_week(time: ::Time.now)
41
+ year = time.strftime('%Y').to_i
42
+ week = time.strftime('%W').to_i
43
+ num = Date.commercial( year.to_i, 52, 1 ).strftime('%W')
44
+ if num.to_i == 52
45
+ if week == 0
46
+ return ((year-1).to_s << "52").to_i
47
+ elsif week == 53
48
+ return ((year+1).to_s << "01").to_i
49
+ else
50
+ return time.strftime('%Y%W').to_i
51
+ end
52
+ else
53
+ if week + 1 == 53
54
+ return ((year+1).to_s << "01").to_i
55
+ else
56
+ return time.strftime('%Y%W').to_i + 1
57
+ end
58
+ end
59
+ end
60
+
61
+ def index_quarter(time: ::Time.now)
62
+ quarter = case time.strftime('%m').to_i
63
+ when 1,2,3 then 1
64
+ when 4,5,6 then 2
65
+ when 7,8,9 then 3
66
+ when 10,11,12 then 4
67
+ end
68
+ return (time.strftime('%Y') << "0" << quarter.to_s).to_i
69
+ end
70
+
71
+ def index_year(time: ::Time.now)
72
+ time.strftime('%Y').to_i
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,47 @@
1
+ module NavigationLight
2
+ class Uuid < ApplicationRecord
3
+ # uuid 不需要假删除 甚至不能删除
4
+
5
+ belongs_to :uuidable, :polymorphic => true
6
+
7
+ # 多个 before_save 会按照从上往下顺序执行
8
+ before_save :generate_columns
9
+ before_save :validate_columns
10
+
11
+ private
12
+
13
+ def generate_columns
14
+ ejection(type: 'normal') do
15
+ generate_uuid
16
+ end
17
+ end
18
+
19
+ def validate_columns
20
+ validate_uuid
21
+ end
22
+
23
+ def validate_uuid
24
+ # 判断是否为空
25
+ unless self.uuid.present?
26
+ self.errors[:uuid] << '唯一标识不能为空'
27
+ end
28
+
29
+ # 判断是否重复
30
+ end
31
+
32
+ def generate_uuid
33
+ flag = !(self.uuid.present?)
34
+ uuid = self.uuid
35
+
36
+ (flag = Uuid.where.not(id: self.id).exists?(uuid: uuid)) unless flag
37
+
38
+ while flag
39
+ uuid = SecureRandom.uuid
40
+ flag = Uuid.exists?(uuid: uuid)
41
+ end
42
+
43
+ self.uuid = uuid
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,16 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Navigation light</title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <%= stylesheet_link_tag "navigation_light/application", media: "all" %>
9
+ <%= javascript_include_tag "navigation_light/application" %>
10
+ </head>
11
+ <body>
12
+
13
+ <%= yield %>
14
+
15
+ </body>
16
+ </html>
@@ -0,0 +1,2 @@
1
+ NavigationLight::Engine.routes.draw do
2
+ end
@@ -0,0 +1,19 @@
1
+ class CreateNavigationLightUuids < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :navigation_light_uuids do |t|
4
+ t.string :uuid, null: false, unique: true
5
+ t.index :uuid, unique: true
6
+
7
+ t.integer :uuidable_id, null: false
8
+ t.index :uuidable_id
9
+
10
+ t.string :uuidable_type, null: false
11
+ t.index :uuidable_type
12
+
13
+ t.datetime :deleted_at
14
+ t.index :deleted_at
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,41 @@
1
+ class CreateNavigationLightLabels < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :navigation_light_labels do |t|
4
+ t.string :name, null: false, unique: true, comment: '标签名称'
5
+ t.index :name, unique: true
6
+
7
+ t.string :synopsis, comment: '简介'
8
+
9
+ t.string :code, comment: '编码', null: false, unique: true
10
+ t.index [:code, :ancestry], unique: true
11
+
12
+ t.datetime :deleted_at
13
+ t.index :deleted_at
14
+
15
+ # 树状结构相关
16
+ t.string :ancestry
17
+ t.index [:ancestry]
18
+ t.integer :ancestry_depth, default: 404
19
+ t.index :ancestry_depth
20
+
21
+ t.timestamps
22
+ end
23
+
24
+ create_table :navigation_light_middle_labels do |t|
25
+ t.integer :middlabel_id, null: false
26
+ t.index :middlabel_id
27
+
28
+ t.string :middlabel_type, null: false
29
+ t.index :middlabel_type
30
+
31
+ t.integer :label_id, null: false
32
+ t.index :label_id
33
+
34
+ t.datetime :deleted_at
35
+ t.index :deleted_at
36
+
37
+ t.timestamps
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,37 @@
1
+ class CreateNavigationLightTimes < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :navigation_light_times do |t|
4
+ t.integer :minute, null: false
5
+ t.index :minute
6
+
7
+ t.integer :hour, null: false
8
+ t.index :hour
9
+
10
+ t.integer :day, null: false
11
+ t.index :day
12
+
13
+ t.integer :week, null: false
14
+ t.index :week
15
+
16
+ t.integer :month, null: false
17
+ t.index :month
18
+
19
+ t.integer :quarter, null: false
20
+ t.index :quarter
21
+
22
+ t.integer :year, null: false
23
+ t.index :year
24
+
25
+ t.integer :timeable_id, null: false
26
+ t.index :timeable_id
27
+
28
+ t.string :timeable_type, null: false
29
+ t.index :timeable_type
30
+
31
+ t.datetime :deleted_at
32
+ t.index :deleted_at
33
+
34
+ t.timestamps
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,28 @@
1
+ def initialize_label_data
2
+ @object = NavigationLight::Label.find_or_initialize_by(code: 'Object')
3
+ @object.update(name: 'Object', synopsis: 'Object')
4
+
5
+ def initialize_model_data
6
+ @model = @object.children.find_or_initialize_by(code: 'Model')
7
+ @model.update(name: '表结构', synopsis: '数据库表结构使用标签')
8
+
9
+ def initialize_count_data
10
+ @count = @model.children.find_or_initialize_by(code: 'NavigationLight::Count')
11
+ @count.update(name: '统计', synopsis: '有关统计专用标签合集')
12
+
13
+ [
14
+ {name: '使用次数', synopsis: '数据的使用次数', code: 'used_count'},
15
+ {name: '查看次数', synopsis: '数据的查看次数', code: 'view_count'}
16
+ ].each do |hash|
17
+ data = @count.children.find_or_initialize_by(code: hash[:code])
18
+ data.update(hash)
19
+ end
20
+ end
21
+
22
+ initialize_count_data
23
+ end
24
+
25
+ initialize_model_data
26
+ end
27
+
28
+ initialize_label_data
@@ -0,0 +1,5 @@
1
+ require "navigation_light/engine"
2
+
3
+ module NavigationLight
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,14 @@
1
+ module NavigationLight
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace NavigationLight
4
+
5
+ require 'ancestry'
6
+ require 'paranoia'
7
+ require 'pry-byebug'
8
+
9
+ end
10
+ end
11
+
12
+ ActiveSupport.on_load :active_record do
13
+ send :extend, NavigationLight::OnLoad
14
+ end
@@ -0,0 +1,3 @@
1
+ module NavigationLight
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :navigation_light do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: navigation_light
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - ff4c00
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.2.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 5.2.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: ancestry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.0.7
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.0.7
41
+ - !ruby/object:Gem::Dependency
42
+ name: paranoia
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.4.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.4.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: mysql2
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.5.3
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.5.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.8.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.8.0
83
+ description: 本项目应用于为应用系统中数据记录提供定位服务
84
+ email:
85
+ - ff4c00@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - MIT-LICENSE
91
+ - README.md
92
+ - Rakefile
93
+ - app/assets/config/navigation_light_manifest.js
94
+ - app/assets/javascripts/navigation_light/application.js
95
+ - app/assets/stylesheets/navigation_light/application.css
96
+ - app/controllers/navigation_light/application_controller.rb
97
+ - app/helpers/navigation_light/application_helper.rb
98
+ - app/jobs/navigation_light/application_job.rb
99
+ - app/mailers/navigation_light/application_mailer.rb
100
+ - app/models/navigation_light/application_record.rb
101
+ - app/models/navigation_light/count.rb
102
+ - app/models/navigation_light/label.rb
103
+ - app/models/navigation_light/middle_label.rb
104
+ - app/models/navigation_light/on_load.rb
105
+ - app/models/navigation_light/relation_label.rb
106
+ - app/models/navigation_light/relation_uuid.rb
107
+ - app/models/navigation_light/time.rb
108
+ - app/models/navigation_light/uuid.rb
109
+ - app/views/layouts/navigation_light/application.html.erb
110
+ - config/routes.rb
111
+ - db/migrate/20200210090159_create_navigation_light_uuids.rb
112
+ - db/migrate/20200211025417_create_navigation_light_labels.rb
113
+ - db/migrate/20200213161530_create_navigation_light_times.rb
114
+ - db/migrate/seed.rb
115
+ - lib/navigation_light.rb
116
+ - lib/navigation_light/engine.rb
117
+ - lib/navigation_light/version.rb
118
+ - lib/tasks/navigation_light_tasks.rake
119
+ homepage: https://gitlab.com/ff4c00/navigation_light
120
+ licenses:
121
+ - MIT
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubyforge_project:
139
+ rubygems_version: 2.7.8
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: ''
143
+ test_files: []