auto_add_name 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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/auto_add_name.rb +37 -0
  3. metadata +44 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1cd0ccb0159cf7218e8b3b356494bda7deb42a38
4
+ data.tar.gz: 3bc8be14d065d2fda0bf6bcd0845b1affcef454e
5
+ SHA512:
6
+ metadata.gz: 5a42343164d1a5f5794de5387ece1dd39b84f12c2215fafb67b26ff626a5392771509a264d3cf56ae16780039387ab78fbabb69d73f2aeb369070431568ee327
7
+ data.tar.gz: 4901fac0dbcc1f30e806e2bf3b806df039ac5203b294bd8343f6f206ade240454ed56b17f7588cb3383ee03fe1ccc389039ad0055f58a4d776260151f448905d
@@ -0,0 +1,37 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module AutoAddName #:nodoc:
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def auto_add_name(*args)
7
+ class_eval <<-EOV
8
+ cattr_accessor :aan_args
9
+ self.aan_args = args
10
+ before_validation :update_ass_name
11
+ EOV
12
+ end
13
+ end
14
+
15
+ def update_ass_name
16
+ self.aan_args.each do |arg|
17
+ # :cgfs => {key: :code, ass_method: :pcc_names}
18
+ if arg.is_a?(Hash)
19
+ arg.each do |ass, h|
20
+ aan_key = h[:key] || :id
21
+ aan_ass = ass
22
+ aan_ass_method = h[:method] || :name
23
+ aan_name = h[:name] || "#{aan_ass}_name"
24
+ aan_foreign_key = h[:foreign_key] || "#{aan_ass}_#{aan_key}"
25
+ send("#{aan_name}=", send(aan_ass).try(aan_ass_method)) if send(aan_name).blank? || send("#{aan_foreign_key}_changed?")
26
+ end
27
+ else
28
+ aan_key = :id
29
+ aan_ass = arg
30
+ aan_ass_method = :name
31
+ send("#{aan_ass}_name=", send(aan_ass).try(aan_ass_method)) if send("#{aan_ass}_name").blank? || send("#{aan_ass}_#{aan_key}_changed?")
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ ActiveRecord::Base.send(:include, AutoAddName)
metadata ADDED
@@ -0,0 +1,44 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: auto_add_name
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jacob Zhou
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-11-28 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: auto_add_name
14
+ email: jacobz@yeah.net
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/auto_add_name.rb
20
+ homepage: http://rubygems.org/gems/auto_add_name
21
+ licenses: []
22
+ metadata: {}
23
+ post_install_message:
24
+ rdoc_options: []
25
+ require_paths:
26
+ - lib
27
+ required_ruby_version: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ required_rubygems_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ requirements: []
38
+ rubyforge_project:
39
+ rubygems_version: 2.2.2
40
+ signing_key:
41
+ specification_version: 4
42
+ summary: auto_add_name
43
+ test_files: []
44
+ has_rdoc: