extra_attributes 0.0.1 → 0.0.2

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/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