easy_contact 0.0.1

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.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
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.
data/README.md ADDED
@@ -0,0 +1,121 @@
1
+ ## EasyContact
2
+
3
+ This is a very simple contact system for Rails. Because it is so simple, you should fork and modify it for your own purpose.
4
+
5
+ This gem is used in my other projects, thus, it will be kept updated, albeit slowly.
6
+
7
+ ## Install
8
+
9
+ rails generate easy_contact:migration
10
+ rake db:migrate
11
+ rake db:test:prepare
12
+
13
+ ## Basic Usage
14
+
15
+ You need to define __acts_as_contactable__ in a contact model like this:
16
+
17
+ class User < ActiveRecord::Base
18
+ acts_as_contactable
19
+ end
20
+
21
+ You can manage contact information like this:
22
+
23
+ user.addresses
24
+ user.phones
25
+
26
+ ## Entry
27
+
28
+ Each information is stored in an entry, no matter it is an address or a phone number. EasyContact use STI to create classes of address and phone. An entry contains these fields:
29
+
30
+ type: string
31
+ label: string
32
+ content: text
33
+ extra: string
34
+ addition: string
35
+ country: string
36
+ locale: string
37
+ primary: boolean
38
+
39
+ All of them are in string format. The **type** defines this entry an address or a phone number. The use of other fields depend on the type.
40
+
41
+ **country** is used in address and phone type. It is set as 2-letter abbreviation of country like US, UK.
42
+
43
+ **locale** set the language of this entry. A person might have English and Chinese name.
44
+
45
+ **primary** specify the main entry of a type, for example, the main address of a person.
46
+
47
+ ### Name
48
+
49
+ It doesn't care the order of first and last name, or suffix and middle name. Just a string of the name this person use. Thus, it is your choice to put the name as 'John Doe' or 'Doe, John'.
50
+
51
+ Content: string of name
52
+ Label: 'fullname', 'nickname'
53
+ Extra: not in use
54
+ Addition: not in use
55
+
56
+ ### Address
57
+
58
+ It is in a free form for address. Think the address in the name card.
59
+
60
+ Content: string of address
61
+ Label: 'home', 'office'
62
+ Extra: not in use
63
+ Addition: not in use
64
+
65
+ ### Phone
66
+
67
+ It is in a free form of address. Thus, you can use 1-545-8342 or (545)8743. There is no need to put country code. The code can be derived from country field.
68
+
69
+ Content: string of phone number
70
+ Label: 'home', 'office'
71
+ Extra: not in use
72
+ Addition: not in use
73
+
74
+ ### Employment
75
+
76
+ It is in a free form of employment
77
+
78
+ Content: string of employer (company, organization)
79
+ Label: no predefined
80
+ Extra: title of this employment
81
+ Addition: year during this employment in free form, ex. 1998-2001.
82
+
83
+ ### Birthday
84
+
85
+ It is in seconds. Use __to_i__ to convert a date into seconds. Time zone is ignored. To avoid problem, always use UTC even if you are not born in UTC time zone.
86
+
87
+ Content: string in seconds
88
+ Label: no predefined
89
+ Extra: not in use
90
+ Addition: not in use
91
+
92
+ ### Email
93
+
94
+ It is in a free form of email
95
+
96
+ Content: string of email
97
+ Label: no predefined
98
+ Extra: not in use
99
+ Addition: not in use
100
+
101
+ ### Website
102
+
103
+ It is in a free form of website
104
+
105
+ Content: string of email
106
+ Label: no predefined
107
+ Extra: not in use
108
+ Addition: not in use
109
+
110
+ ### Instant Messenger
111
+
112
+ It is in a free form of website
113
+
114
+ Content: string of instant messenger ID
115
+ Label: 'google talk', 'skype', 'yahoo', 'msn', 'jabber'
116
+ Extra: not in use
117
+ Addition: not in use
118
+
119
+ ## License
120
+
121
+ MIT
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'EasyContact'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
@@ -0,0 +1,2 @@
1
+ class EasyContact::Address < EasyContact::Entry
2
+ end
@@ -0,0 +1,2 @@
1
+ class EasyContact::Email < EasyContact::Entry
2
+ end
@@ -0,0 +1,4 @@
1
+ class EasyContact::Entry < ActiveRecord::Base
2
+ belongs_to :contactable
3
+ attr_accessible :addition, :content, :country, :extra, :label, :locale, :primary, :type
4
+ end
@@ -0,0 +1,2 @@
1
+ class EasyContact::Name < EasyContact::Entry
2
+ end
@@ -0,0 +1,2 @@
1
+ class EasyContact::Phone < EasyContact::Entry
2
+ end
@@ -0,0 +1,2 @@
1
+ class EasyContact::Website < EasyContact::Entry
2
+ end
@@ -0,0 +1,8 @@
1
+ # For some reason, it does not work. Thus, it is put in lib/easy_contact.rb
2
+ =begin
3
+ module EasyContact
4
+ def self.table_name_prefix
5
+ 'easy_contact_'
6
+ end
7
+ end
8
+ =end
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ Rails.application.routes.draw do
2
+ end
@@ -0,0 +1,39 @@
1
+ module EasyContact
2
+ module Contactable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ has_many :entries, :dependent => :destroy,
7
+ :class_name => 'EasyContact::Entry',
8
+ :foreign_key => 'contactable_id'
9
+ has_many :names, :dependent => :destroy,
10
+ :class_name => 'EasyContact::Name',
11
+ :foreign_key => 'contactable_id'
12
+ has_many :addresses, :dependent => :destroy,
13
+ :class_name => 'EasyContact::Address',
14
+ :foreign_key => 'contactable_id'
15
+ has_many :phones, :dependent => :destroy,
16
+ :class_name => 'EasyContact::Phone',
17
+ :foreign_key => 'contactable_id'
18
+ has_many :emails, :dependent => :destroy,
19
+ :class_name => 'EasyContact::Email',
20
+ :foreign_key => 'contactable_id'
21
+ has_many :websites, :dependent => :destroy,
22
+ :class_name => 'EasyContact::Website',
23
+ :foreign_key => 'contactable_id'
24
+
25
+ accepts_nested_attributes_for :entries,
26
+ :names, :phones, :addresses, :emails, :websites,
27
+ :reject_if => :reject_entries,
28
+ :allow_destroy => true
29
+ end
30
+
31
+ module ClassMethods
32
+ end # end of class methods
33
+
34
+ def reject_entries(attributes)
35
+ attributes['content'].blank?
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,4 @@
1
+ module EasyContact
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module EasyContact
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,17 @@
1
+ require "easy_contact/engine"
2
+ require "easy_contact/contactable"
3
+
4
+ module EasyContact
5
+ def self.table_name_prefix
6
+ 'easy_contact_'
7
+ end
8
+ end
9
+
10
+ if defined?(ActiveRecord::Base)
11
+ class ActiveRecord::Base
12
+ def self.acts_as_contactable(options = {})
13
+ options.reverse_merge!({})
14
+ include EasyContact::Contactable
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+ require 'rails/generators/active_record'
4
+
5
+ module EasyContact
6
+ class MigrationGenerator < Rails::Generators::Base
7
+ include Rails::Generators::Migration
8
+
9
+ desc 'add easy contact'
10
+
11
+ source_root File.expand_path('../templates', __FILE__)
12
+
13
+ def self.next_migration_number(path)
14
+ ActiveRecord::Generators::Base.next_migration_number(path)
15
+ end
16
+
17
+ def create_migration_file
18
+ migration_template 'migration.rb', 'db/migrate/easy_contact_migration'
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ class EasyContactMigration < ActiveRecord::Migration
2
+ def change
3
+ create_table :easy_contact_entries do |t|
4
+ t.string :type
5
+ t.string :label
6
+ t.text :content
7
+ t.string :addition
8
+ t.string :extra
9
+ t.string :country
10
+ t.string :locale
11
+ t.boolean :primary
12
+ t.references :contactable
13
+
14
+ t.timestamps
15
+ end
16
+ add_index :easy_contact_entries, :contactable_id
17
+ end
18
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :easy_contact do
3
+ # # Task goes here
4
+ # end
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: easy_contact
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Yen-Ju Chen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain:
12
+ - !binary |-
13
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURNRENDQWhpZ0F3SUJB
14
+ Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREErTVJBd0RnWURWUVFEREFkNWFt
15
+ Tm8KWlc1NE1SVXdFd1lLQ1pJbWlaUHlMR1FCR1JZRloyMWhhV3d4RXpBUkJn
16
+ b0praWFKay9Jc1pBRVpGZ05qYjIwdwpIaGNOTVRNd01qQTNNREV5T0RJNFdo
17
+ Y05NVFF3TWpBM01ERXlPREk0V2pBK01SQXdEZ1lEVlFRRERBZDVhbU5vClpX
18
+ NTRNUlV3RXdZS0NaSW1pWlB5TEdRQkdSWUZaMjFoYVd3eEV6QVJCZ29Ka2lh
19
+ SmsvSXNaQUVaRmdOamIyMHcKZ2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJ
20
+ QkR3QXdnZ0VLQW9JQkFRRGZ6ZHRRbE55dzV5OTcwMXBScmRDTQpqVldHQU1K
21
+ N0R5YXQybWpEVkdoTXNIL2JlNGo4eW45N3BhNm15bUlRVXpRYVUxS1FDdzhW
22
+ K0ZkVjBoNHA3SE9wCnpqMy9tWEYxVWxjQkw1RXRJdHlkeTM2dmRhbkRIZGZH
23
+ YnpJWU1wbkpzR0E1Wk5EV3JCWFdMOWlRZmt1ck1lY3EKdi93NXI4MEtJYVpr
24
+ bDJ4TVc4am50MzNNWEhFQmpDQVNXZDF5Qk1semYxQU9yNzVkMGsyYllzU1Ur
25
+ R0V4eGV4WQpoUEZ6TE1STS9WSnhxaXRGYllubGdINXp5cUJPY0JtRzNIZDBW
26
+ YVJpMTM3WGpCRjRmZXJqMjFpWC9SVjROSU9aCkh6MlliVFZ6ODBOSk5IT3Ba
27
+ RGxTTkU0dm5JQU5wNWZubXdOa0FpM1BUTXhZWkM4OWpXREFCYnFFNzgzeFda
28
+ a1AKQWdNQkFBR2pPVEEzTUFrR0ExVWRFd1FDTUFBd0hRWURWUjBPQkJZRUZB
29
+ VXZaaTdmRXlTazQ5SFRFcmJmTUIySwpTNGlnTUFzR0ExVWREd1FFQXdJRXNE
30
+ QU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFnVWtpRmY3S1FiR3QxbFVxCmpR
31
+ aVY4bm9sMzArZFdTSVEwL2FUTk4xbGJnYUtYcTg2SnFwOUlJV2JROW9RTEh1
32
+ ZW1YcTBGeDdhYnJkSXFKQXcKUUM3VWxlWnR4UmZUOHBrM1RJRk9paW5HYlds
33
+ Ry9pSlM4NVB2MERXbkFUM2NsNzZNL3I0TStRSE91MzhWQU9KeQo2clVIV2lh
34
+ LzlJekFKWlo4UHRPUGkwSGtUd1pJdnBTNmpMRjZqZXEyd3IrUThuYVFaNlMv
35
+ Sm5hbEJlNm43ZExTCkxPRXAzV3dMYWZCWjlWdElRay92Z0IzUUp4b3I4WDRS
36
+ M0lBc1Z2QzJZa0d3SjA5cUZWM1dRV1daU1NYUkp5ajUKMER3VStLZlV0YTRI
37
+ V1JyK2psKzRrWWVpVUtnYW1kdjJwUTRWYUo4M1ZHQzNGSXBVazlUVUxDTTN2
38
+ NWlIYkRRdQpvWnNXQ1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
39
+ date: 2013-02-25 00:00:00.000000000 Z
40
+ dependencies:
41
+ - !ruby/object:Gem::Dependency
42
+ name: rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 3.2.11
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: 3.2.11
57
+ - !ruby/object:Gem::Dependency
58
+ name: sqlite3
59
+ requirement: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ description: A very simple contact system for Rails
74
+ email:
75
+ - yjchenx@gmail.com
76
+ executables: []
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - app/models/easy_contact/address.rb
81
+ - app/models/easy_contact/email.rb
82
+ - app/models/easy_contact/entry.rb
83
+ - app/models/easy_contact/name.rb
84
+ - app/models/easy_contact/phone.rb
85
+ - app/models/easy_contact/website.rb
86
+ - app/models/easy_contact.rb
87
+ - config/routes.rb
88
+ - lib/easy_contact/contactable.rb
89
+ - lib/easy_contact/engine.rb
90
+ - lib/easy_contact/version.rb
91
+ - lib/easy_contact.rb
92
+ - lib/generators/easy_contact/migration/migration_generator.rb
93
+ - lib/generators/easy_contact/migration/templates/migration.rb
94
+ - lib/tasks/easy_contact_tasks.rake
95
+ - MIT-LICENSE
96
+ - Rakefile
97
+ - README.md
98
+ homepage: https://github.com/yjchen/easy_contact
99
+ licenses: []
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ! '>='
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ requirements: []
117
+ rubyforge_project:
118
+ rubygems_version: 1.8.25
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: A very simple contact system for Rails
122
+ test_files: []
metadata.gz.sig ADDED
Binary file