extra_attributes 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -19,6 +19,13 @@ by Manic <http://tech.manic.tw>
19
19
  ....
20
20
  end
21
21
 
22
+ ### Configure extra\_attributes in you config/application.rb
23
+
24
+ require File.expand_path('../boot', __FILE__)
25
+
26
+ require 'rails/all'
27
+ require 'extra_attribute' # Add this line to enable
28
+
22
29
  ### Configure extra\_attributes in your model
23
30
 
24
31
  class Person < ActiveRecord::Base
@@ -1,17 +1,22 @@
1
1
  module ExtraAttribute
2
2
  module ClassMethods
3
3
  def extra_attributes(column, attribute_arrays)
4
- @@column = column.to_s
4
+ @extra_attributes_column = column.to_s
5
+
6
+ class_eval %(
7
+ class << self; attr_accessor :extra_attributes_column end
8
+ )
9
+
5
10
  attribute_arrays.each do |attr|
6
11
  define_method "#{attr}" do
7
- extra_data ||= JSON.parse(attributes[@@column] ? attributes[@@column] : '{}')
12
+ extra_data ||= JSON.parse(attributes[self.class.extra_attributes_column] ? attributes[self.class.extra_attributes_column] : '{}')
8
13
  return extra_data[attr.to_s].present? ? extra_data[attr.to_s] : nil
9
14
  end
10
15
 
11
16
  define_method "#{attr}=" do |val|
12
- extra_data ||= JSON.parse(attributes[@@column] ? attributes[@@column] : '{}')
17
+ extra_data ||= JSON.parse(attributes[self.class.extra_attributes_column] ? attributes[self.class.extra_attributes_column] : '{}')
13
18
  extra_data[attr.to_s] = val
14
- self.send("#{@@column}=", extra_data.to_json)
19
+ self.send("#{self.class.extra_attributes_column}=", extra_data.to_json)
15
20
  end
16
21
  end
17
22
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module ExtraAttribute
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/spec/db/schema.rb CHANGED
@@ -8,6 +8,13 @@ ActiveRecord::Schema.define do
8
8
  t.datetime 'updated_at'
9
9
  end
10
10
 
11
+ create_table 'men', :force => true do |t|
12
+ t.string 'age'
13
+ t.text 'properties'
14
+ t.datetime 'created_at'
15
+ t.datetime 'updated_at'
16
+ end
17
+
11
18
  create_table 'children', :force => true do |t|
12
19
  t.string 'name'
13
20
  t.belongs_to :person
@@ -56,4 +56,43 @@ describe ExtraAttribute do
56
56
  end
57
57
  end
58
58
  end
59
+
60
+ describe "A custom attribute with another name" do
61
+ describe "John is a Man" do
62
+ before( :each ) do
63
+ @man = Man.new
64
+ end
65
+ it "who knows his name" do
66
+ @man.name = 'John'
67
+ @man.name.should eql('John')
68
+ end
69
+
70
+ it "who can change his name" do
71
+ @man.name = 'John'
72
+ @man.name = 'Joe'
73
+ @man.name.should eql('Joe')
74
+ end
75
+ end
76
+
77
+ describe "John is a Man whose name is changed" do
78
+ before( :each ) do
79
+ @man = Man.create(:name => "John")
80
+ end
81
+
82
+ it "who changes his name but not save." do
83
+ @man.name = 'Koh'
84
+ @man.name.should eql('Koh')
85
+ @man.reload
86
+ @man.name.should eql('John')
87
+ end
88
+
89
+ it "who changes his name and saved." do
90
+ @man.name = 'Koh'
91
+ @man.name.should eql('Koh')
92
+ @man.save
93
+ @man.reload
94
+ @man.name.should eql('Koh')
95
+ end
96
+ end
97
+ end
59
98
  end
data/spec/spec_helper.rb CHANGED
@@ -17,6 +17,7 @@ load('db/schema.rb')
17
17
  $:.push File.expand_path("../lib", __FILE__)
18
18
  require 'support/person'
19
19
  require 'support/child'
20
+ require 'support/man'
20
21
 
21
22
  RSpec.configure do |config|
22
23
  config.mock_with :rspec
metadata CHANGED
@@ -1,104 +1,107 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: extra_attributes
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Manic
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-08-14 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2013-04-24 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: activerecord
16
- requirement: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
25
+ requirements:
19
26
  - - ~>
20
- - !ruby/object:Gem::Version
21
- version: '3.1'
27
+ - !ruby/object:Gem::Version
28
+ hash: 5
29
+ segments:
30
+ - 3
31
+ - 1
32
+ version: "3.1"
22
33
  type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: ruby-debug
23
37
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '3.1'
30
- - !ruby/object:Gem::Dependency
31
- name: ruby-debug19
32
- requirement: !ruby/object:Gem::Requirement
38
+ requirement: &id002 !ruby/object:Gem::Requirement
33
39
  none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
38
47
  type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
47
50
  name: sqlite3
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 1.3.3
54
- type: :development
55
51
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
52
+ requirement: &id003 !ruby/object:Gem::Requirement
57
53
  none: false
58
- requirements:
54
+ requirements:
59
55
  - - ~>
60
- - !ruby/object:Gem::Version
56
+ - !ruby/object:Gem::Version
57
+ hash: 29
58
+ segments:
59
+ - 1
60
+ - 3
61
+ - 3
61
62
  version: 1.3.3
62
- - !ruby/object:Gem::Dependency
63
- name: rake
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: '0'
70
63
  type: :development
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: rake
71
67
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: rspec
80
- requirement: !ruby/object:Gem::Requirement
68
+ requirement: &id004 !ruby/object:Gem::Requirement
81
69
  none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: 2.6.0
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
86
77
  type: :development
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: rspec
87
81
  prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
82
+ requirement: &id005 !ruby/object:Gem::Requirement
89
83
  none: false
90
- requirements:
84
+ requirements:
91
85
  - - ~>
92
- - !ruby/object:Gem::Version
86
+ - !ruby/object:Gem::Version
87
+ hash: 23
88
+ segments:
89
+ - 2
90
+ - 6
91
+ - 0
93
92
  version: 2.6.0
93
+ type: :development
94
+ version_requirements: *id005
94
95
  description: A simple alternative to acts_as_eav_model. Use JSON to store extra attrubutes.
95
- email:
96
+ email:
96
97
  - maniclf@gmail.com
97
98
  executables: []
99
+
98
100
  extensions: []
99
- extra_rdoc_files:
101
+
102
+ extra_rdoc_files:
100
103
  - README.md
101
- files:
104
+ files:
102
105
  - .gitignore
103
106
  - .rvmrc
104
107
  - Gemfile
@@ -116,29 +119,38 @@ files:
116
119
  - spec/support/person.rb
117
120
  homepage: http://github.com/manic/extra_attributes
118
121
  licenses: []
122
+
119
123
  post_install_message:
120
124
  rdoc_options: []
121
- require_paths:
125
+
126
+ require_paths:
122
127
  - lib
123
- required_ruby_version: !ruby/object:Gem::Requirement
128
+ required_ruby_version: !ruby/object:Gem::Requirement
124
129
  none: false
125
- requirements:
126
- - - ! '>='
127
- - !ruby/object:Gem::Version
128
- version: '0'
129
- required_rubygems_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ hash: 3
134
+ segments:
135
+ - 0
136
+ version: "0"
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
138
  none: false
131
- requirements:
132
- - - ! '>='
133
- - !ruby/object:Gem::Version
134
- version: '0'
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ hash: 3
143
+ segments:
144
+ - 0
145
+ version: "0"
135
146
  requirements: []
147
+
136
148
  rubyforge_project:
137
- rubygems_version: 1.8.24
149
+ rubygems_version: 1.8.10
138
150
  signing_key:
139
151
  specification_version: 3
140
152
  summary: A simple alternative to acts_as_eav_model.
141
- test_files:
153
+ test_files:
142
154
  - spec/db/schema.rb
143
155
  - spec/lib/extra_attribute_spec.rb
144
156
  - spec/spec_helper.rb