auto_add_name 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: