acts_as_splittable 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 50058ee03ea54fe96784f78b9fab607da4f9dcde
4
+ data.tar.gz: d04d4414b76cbb3d404f84529387ad02fc555595
5
+ SHA512:
6
+ metadata.gz: 8e348b339fc458891a206818484dc6c7cb0492360da9f41e50f5e0e5f62e901829d4f75936624f64cae2437c6fc49f3a749aba6475ead80abb0cece633a698e3
7
+ data.tar.gz: 8356fac51d37d0ca44394aefca88fd8531124963457e709a6c3c42a249d983cee746f965037cff5408787f538c0eca75ea864d3db0c92ece8dc14fc6dcb41677
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .bundle/
2
+ log/*.log
3
+ pkg/
4
+ spec/dummy
5
+ spec/database.yml
6
+ Gemfile.lock
7
+ *.sqlite3
8
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Declare your gem's dependencies in acts_as_splittable.gemspec.
4
+ # Bundler will treat runtime dependencies like base dependencies, and
5
+ # development dependencies will be added by default to the :development group.
6
+ gemspec
7
+
8
+ # Declare any dependencies that are still in development here instead of in
9
+ # your gemspec. These might include edge Rails or gems from your path or
10
+ # Git. Remember to move these dependencies to your gemspec before releasing
11
+ # your gem to rubygems.org.
12
+
13
+ # To use debugger
14
+ # gem 'debugger'
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 tatat
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,128 @@
1
+ ActsAsSplittable
2
+ ====================
3
+
4
+ Create virtual attributes.
5
+
6
+
7
+ Usage
8
+ --------------------
9
+
10
+
11
+ ```ruby
12
+ class Splittable < ActiveRecord::Base
13
+
14
+ acts_as_splittable
15
+
16
+ splittable :email, split: ['@', 2], partials: [:email_local, :email_domain], on_join: Proc.new{|partials| partials.join('@') }
17
+ splittable :postal_code, pattern: /\A(?<postal_code1>[0-9]{3})(?<postal_code2>[0-9]{4})\Z/
18
+ splittable :phone_number, partials: [:phone_number1, :phone_number2, :phone_number3], on_split: :split_phone_number, on_join: :join_phone_number
19
+
20
+ validates :email_local, format: { with: /\A[a-zA-Z0-9_.-]+\Z/ }
21
+ validates :email_domain, format: { with: /\A(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}\Z/ }
22
+ validates :postal_code1, format: { with: /\A[0-9]{3}\Z/ }
23
+ validates :postal_code2, format: { with: /\A[0-9]{4}\Z/ }
24
+ validates :phone_number1, format: { with: /\A[0-9]{3}\Z/ }
25
+ validates :phone_number2, format: { with: /\A[0-9]{4}\Z/ }
26
+ validates :phone_number3, format: { with: /\A[0-9]{4}\Z/ }
27
+
28
+ protected
29
+
30
+ def split_phone_number(value)
31
+ return if value.nil?
32
+ [value[0, 3], value[3, 4], value[7, 4]]
33
+ end
34
+
35
+ def join_phone_number(values)
36
+ values.join
37
+ end
38
+ end
39
+ ```
40
+
41
+ then
42
+
43
+ ```ruby
44
+ splittable = Splittable.create!(
45
+ email_local: 'splittable',
46
+ email_domain: 'example.com',
47
+ postal_code1: '012',
48
+ postal_code2: '3456',
49
+ phone_number1: '012',
50
+ phone_number2: '3456',
51
+ phone_number3: '7890',
52
+ )
53
+
54
+ p splittable.email #=> "splittable@example.com"
55
+ p splittable.postal_code #=> "0123456"
56
+ p splittable.phone_number #=> "01234567890"
57
+ ```
58
+
59
+ or
60
+
61
+ ```ruby
62
+ splittable = Splittable.new
63
+ splittable.email_local = 'splittable'
64
+ splittable.email_domain = 'example.com'
65
+ splittable.postal_code1 = '012'
66
+ splittable.postal_code2 = '3456'
67
+ splittable.phone_number1 = '012'
68
+ splittable.phone_number2 = '3456'
69
+ splittable.phone_number3 = '7890'
70
+
71
+ splittable.save!
72
+ ```
73
+
74
+ ### Manualy
75
+
76
+ ```ruby
77
+ class Splittable < ActiveRecord::Base
78
+
79
+ # callbacks are
80
+ # after_initialize { new_record? or split_column_values! }
81
+ # before_save { join_column_values! }
82
+ acts_as_splittable callbacks: false
83
+
84
+ splittable :email, pattern: /\A(?<email_local>[^@]+)@(?<email_domain>[^@]+)\Z/, on_join: Proc.new{|values| values.join('@') }
85
+
86
+ validates :email, presence: true
87
+ end
88
+ ```
89
+
90
+ then
91
+
92
+ ```ruby
93
+ splittable = Splittable.new(
94
+ email_local: 'splittable',
95
+ email_domain: 'example.com',
96
+ )
97
+
98
+ p splittable.email #=> nil
99
+ p splittable.valid? #=> false
100
+
101
+ splittable.join_column_values!
102
+
103
+ p splittable.email #=> "splittable@example.com"
104
+ p splittable.valid? #=> true
105
+ ```
106
+
107
+ and
108
+
109
+ ```ruby
110
+ splittable = Splittable.find(splittable_id)
111
+
112
+ p splittable.email_local #=> nil
113
+ p splittable.email_domain #=> nil
114
+
115
+ splittable.split_column_values!
116
+
117
+ p splittable.email_local #=> 'splittable'
118
+ p splittable.email_domain #=> 'example.com'
119
+ ```
120
+
121
+ Contributing
122
+ --------------------
123
+
124
+ 1. Fork it
125
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
126
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
127
+ 4. Push to the branch (`git push origin my-new-feature`)
128
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,27 @@
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 = 'ActsAsSplittable'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ require 'bundler/gem_tasks'
18
+ require 'rspec/core/rake_task'
19
+
20
+ RSpec::Core::RakeTask.new(:spec) do |t|
21
+ t.rspec_opts = ['-c', '-fs']
22
+ end
23
+
24
+ task :default => :spec
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
@@ -0,0 +1,23 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ # Maintain your gem's version:
4
+ require "acts_as_splittable/version"
5
+
6
+ # Describe your gem and declare its dependencies:
7
+ Gem::Specification.new do |s|
8
+ s.name = "acts_as_splittable"
9
+ s.version = ActsAsSplittable::VERSION
10
+ s.authors = ["tatat"]
11
+ s.email = ["ioiioioloo@gmail.com"]
12
+ s.homepage = "https://github.com/tatat/acts_as_splittable"
13
+ s.summary = "Create virtual attributes."
14
+ s.description = "Create virtual attributes."
15
+
16
+ s.files = `git ls-files`.split($/)
17
+
18
+ s.add_dependency 'rails', ['>= 3', '< 5']
19
+
20
+ s.add_development_dependency "sqlite3"
21
+ s.add_development_dependency "rspec"
22
+ s.add_development_dependency "rspec-rails"
23
+ end
@@ -0,0 +1,3 @@
1
+ module ActsAsSplittable
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,95 @@
1
+ require 'active_record'
2
+
3
+ module ActsAsSplittable
4
+
5
+ def acts_as_splittable(options = {})
6
+ options.reverse_merge!(
7
+ callbacks: true,
8
+ )
9
+
10
+ extend ClassMethods
11
+ include InstanceMethods
12
+
13
+ if options[:callbacks]
14
+ after_initialize { new_record? or split_column_values! }
15
+ before_save { join_column_values! }
16
+ end
17
+ end
18
+
19
+ module ClassMethods
20
+ SPLITTABLE_DEFAULT_JOIN_PROCESS = Proc.new{|values| values.join }
21
+
22
+ def splittable_columns
23
+ @splittable_columns ||= {}
24
+ end
25
+
26
+ def splittable(column, options)
27
+ column = column.to_sym
28
+ partials = (options[:partials] || options[:pattern].names).map(&:to_sym)
29
+ splittable_columns[column] = [options[:split], options[:pattern], partials, options[:on_split], options[:on_join] || SPLITTABLE_DEFAULT_JOIN_PROCESS]
30
+
31
+ partials.each do |partial|
32
+ define_method partial do
33
+ splittable_partials[partial]
34
+ end
35
+
36
+ define_method :"#{partial}=" do |value|
37
+ splittable_partials[partial] = value
38
+ end
39
+ end
40
+ end
41
+
42
+ def inherited(child)
43
+ super
44
+ child.splittable_columns.merge! splittable_columns.dup
45
+ end
46
+ end
47
+
48
+ module InstanceMethods
49
+ def split_column_values!(column = nil)
50
+ if column.nil?
51
+ self.class.splittable_columns.each_key{|key| send __method__, key }
52
+ else
53
+ column = column.to_sym
54
+ split, pattern, partials, on_split, on_join = self.class.splittable_columns[column]
55
+ value = send(column)
56
+
57
+ values = if on_split
58
+ on_split.is_a?(Symbol) ? send(on_split, value) : on_split.(value)
59
+ elsif value
60
+ if split
61
+ value.to_s.split *(split.is_a?(Array) ? split : [split])
62
+ else
63
+ matches = value.to_s.match(pattern)
64
+ matches[1..(matches.length - 1)]
65
+ end
66
+ end || []
67
+
68
+ partials.each_with_index do |partial, index|
69
+ send :"#{partial}=", values[index]
70
+ end
71
+ end
72
+
73
+ self
74
+ end
75
+
76
+ def join_column_values!(column = nil)
77
+ if column.nil?
78
+ self.class.splittable_columns.each_key{|key| send __method__, key }
79
+ else
80
+ split, pattern, partials, on_split, on_join = self.class.splittable_columns[column.to_sym]
81
+ partials = partials.map{|partial| send(partial) }
82
+
83
+ send :"#{column}=", on_join.is_a?(Symbol) ? send(on_join, partials) : on_join.(partials)
84
+ end
85
+
86
+ self
87
+ end
88
+
89
+ def splittable_partials
90
+ @splittable_partials ||= {}
91
+ end
92
+ end
93
+ end
94
+
95
+ ActiveRecord::Base.extend ActsAsSplittable
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :acts_as_splittable do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,3 @@
1
+ sqlite3:
2
+ adapter: sqlite3
3
+ database: acts_as_splittable.sqlite3
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe SplittableWithValidation do
4
+
5
+ before :each do
6
+ @splittable = SplittableWithValidation.new
7
+ end
8
+
9
+ it 'should be valid' do
10
+ @splittable.email_local = 'splittable'
11
+ @splittable.email_domain = 'example.com'
12
+
13
+ @splittable.should be_valid
14
+ end
15
+
16
+ it 'should be invalid' do
17
+ @splittable.email_local = 'splitt@ble'
18
+ @splittable.email_domain = 'example.com'
19
+
20
+ @splittable.should_not be_valid
21
+ end
22
+
23
+ end
24
+
25
+ describe SplittableWithValidationForOriginalColumn do
26
+
27
+ describe '#split_column_values!' do
28
+ before :each do
29
+ @splittable = SplittableWithValidationForOriginalColumn.create!(email: 'splittable@example.com')
30
+ end
31
+
32
+ it 'should be nil' do
33
+ @splittable.email_local.should be_nil
34
+ @splittable.email_domain.should be_nil
35
+ end
36
+
37
+ it 'should not be nil' do
38
+ @splittable.split_column_values!
39
+ @splittable.email_local.should_not be_nil
40
+ @splittable.email_domain.should_not be_nil
41
+ end
42
+ end
43
+
44
+ describe '#valid?' do
45
+ before :each do
46
+ @splittable = SplittableWithValidationForOriginalColumn.new
47
+ end
48
+
49
+ it 'should be valid' do
50
+ @splittable.email_local = 'splittable'
51
+ @splittable.email_domain = 'example.com'
52
+
53
+ @splittable.join_column_values!.should be_valid
54
+ end
55
+
56
+ it 'should be invalid' do
57
+ @splittable.email_local = 'splitt@ble'
58
+ @splittable.email_domain = 'example.com'
59
+
60
+ @splittable.join_column_values!.should_not be_valid
61
+ end
62
+ end
63
+
64
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ [Splittable, SplittableInherited, SplittableInheritedInherited].each do |klass|
4
+ describe klass do
5
+
6
+ before :each do
7
+ @splittable1 = klass.new(name: "#{klass.name} 1")
8
+ @splittable1.email_local = 'splittable'
9
+ @splittable1.email_domain = 'example.com'
10
+ @splittable1.postal_code1 = '012'
11
+ @splittable1.postal_code2 = '3456'
12
+ @splittable1.phone_number1 = '012'
13
+ @splittable1.phone_number2 = '3456'
14
+ @splittable1.phone_number3 = '7890'
15
+ @splittable1.save!
16
+
17
+ @splittable2 = klass.create!(
18
+ name: "#{klass.name} 2",
19
+ email_local: 'splittable',
20
+ email_domain: 'example.com',
21
+ postal_code1: '012',
22
+ postal_code2: '3456',
23
+ phone_number1: '012',
24
+ phone_number2: '3456',
25
+ phone_number3: '7890',
26
+ )
27
+
28
+ @splittables = [@splittable1, @splittable2]
29
+ end
30
+
31
+ it 'should assign attributes' do
32
+ @splittables.each do |record|
33
+ record.assign_attributes(postal_code1: '987', postal_code2: '6543')
34
+
35
+ record.postal_code1.should == '987'
36
+ record.postal_code2.should == '6543'
37
+ end
38
+ end
39
+
40
+ it 'should join partials before save' do
41
+ @splittables.each do |record|
42
+ record.email.should == 'splittable@example.com'
43
+ record.postal_code.should == '0123456'
44
+ record.phone_number.should == '01234567890'
45
+ end
46
+ end
47
+
48
+ it 'should split columns after initialize' do
49
+ @splittables.each do |record|
50
+ splittable = Splittable.find(record.id)
51
+
52
+ splittable.email_local.should == 'splittable'
53
+ splittable.email_domain.should == 'example.com'
54
+ splittable.postal_code1.should == '012'
55
+ splittable.postal_code2.should == '3456'
56
+ splittable.phone_number1.should == '012'
57
+ splittable.phone_number2.should == '3456'
58
+ splittable.phone_number3.should == '7890'
59
+ end
60
+ end
61
+
62
+ end
63
+ end
data/spec/models.rb ADDED
@@ -0,0 +1,46 @@
1
+ EMAIL_SPLIT_PATTERN = /\A(?<email_local>[^@]+)@(?<email_domain>[^@]+)\Z/
2
+ EMAIL_JOIN_PROCESS = Proc.new{|values| values.join('@') }
3
+
4
+ class Splittable < ActiveRecord::Base
5
+
6
+ acts_as_splittable
7
+
8
+ splittable :email, split: ['@', 2], partials: [:email_local, :email_domain], on_join: EMAIL_JOIN_PROCESS
9
+ splittable :postal_code, pattern: /\A(?<postal_code1>[0-9]{3})(?<postal_code2>[0-9]{4})\Z/
10
+ splittable :phone_number, partials: [:phone_number1, :phone_number2, :phone_number3], on_split: :split_phone_number, on_join: :join_phone_number
11
+
12
+ protected
13
+
14
+ def split_phone_number(value)
15
+ return if value.nil?
16
+ [value[0, 3], value[3, 4], value[7, 4]]
17
+ end
18
+
19
+ def join_phone_number(values)
20
+ values.join
21
+ end
22
+ end
23
+
24
+ class SplittableInherited < Splittable; end
25
+ class SplittableInheritedInherited < SplittableInherited; end
26
+
27
+ class SplittableWithValidation < ActiveRecord::Base
28
+ self.table_name = 'splittables'
29
+
30
+ acts_as_splittable
31
+
32
+ splittable :email, pattern: EMAIL_SPLIT_PATTERN, on_join: EMAIL_JOIN_PROCESS
33
+
34
+ validates :email_local, format: { with: /\A[a-zA-Z0-9_.-]+\Z/ }
35
+ validates :email_domain, format: { with: /\A(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}\Z/ }
36
+ end
37
+
38
+ class SplittableWithValidationForOriginalColumn < ActiveRecord::Base
39
+ self.table_name = 'splittables'
40
+
41
+ acts_as_splittable callbacks: false
42
+
43
+ splittable :email, pattern: EMAIL_SPLIT_PATTERN, on_join: EMAIL_JOIN_PROCESS
44
+
45
+ validates :email, format: { with: /\A[a-zA-Z0-9_.-]+@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}\Z/ }
46
+ end
data/spec/schema.rb ADDED
@@ -0,0 +1,12 @@
1
+ ActiveRecord::Schema.define version: 0 do
2
+
3
+ create_table "splittables", force: true do |t|
4
+ t.string "name"
5
+ t.string "email"
6
+ t.string "postal_code"
7
+ t.string "phone_number"
8
+ t.datetime "created_at"
9
+ t.datetime "updated_at"
10
+ end
11
+
12
+ end
@@ -0,0 +1,37 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ require 'active_support/testing/assertions'
9
+ require File.expand_path('../../lib/acts_as_splittable', __FILE__)
10
+
11
+ ENV['RAILS_ENV'] ||= 'test'
12
+
13
+ db_name = ENV['DB'] || 'sqlite3'
14
+ database_yml = File.expand_path('../database.yml', __FILE__)
15
+
16
+ raise "Please create #{database_yml} first to configure your database. Take a look at: #{database_yml}.sample" unless File.exists?(database_yml)
17
+
18
+ ActiveRecord::Base.configurations = YAML.load_file(database_yml)
19
+ ActiveRecord::Base.establish_connection(db_name)
20
+ ActiveRecord::Base.connection
21
+
22
+ load File.dirname(__FILE__) + '/schema.rb'
23
+ load File.dirname(__FILE__) + '/models.rb'
24
+
25
+ RSpec.configure do |config|
26
+ config.treat_symbols_as_metadata_keys_with_true_values = true
27
+ config.run_all_when_everything_filtered = true
28
+ config.filter_run :focus
29
+
30
+ # Run specs in random order to surface order dependencies. If you find an
31
+ # order dependency and want to debug it, you can fix the order by providing
32
+ # the seed, which is printed after each run.
33
+ # --seed 1234
34
+ config.order = 'random'
35
+
36
+ config.include ActiveSupport::Testing::Assertions
37
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acts_as_splittable
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - tatat
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-06-13 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: '3'
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: '5'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '3'
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: '5'
33
+ - !ruby/object:Gem::Dependency
34
+ name: sqlite3
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec-rails
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ description: Create virtual attributes.
76
+ email:
77
+ - ioiioioloo@gmail.com
78
+ executables: []
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - .gitignore
83
+ - .rspec
84
+ - Gemfile
85
+ - MIT-LICENSE
86
+ - README.md
87
+ - Rakefile
88
+ - acts_as_splittable.gemspec
89
+ - lib/acts_as_splittable.rb
90
+ - lib/acts_as_splittable/version.rb
91
+ - lib/tasks/acts_as_splittable_tasks.rake
92
+ - spec/database.yml.sample
93
+ - spec/models.rb
94
+ - spec/models/aplittable_with_validation_spec.rb
95
+ - spec/models/splittable_spec.rb
96
+ - spec/schema.rb
97
+ - spec/spec_helper.rb
98
+ homepage: https://github.com/tatat/acts_as_splittable
99
+ licenses: []
100
+ metadata: {}
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 2.0.0
118
+ signing_key:
119
+ specification_version: 4
120
+ summary: Create virtual attributes.
121
+ test_files: []