super_accessors 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/lib/super_accessors/datetime.rb +2 -2
- data/lib/super_accessors/store.rb +18 -25
- data/lib/super_accessors/version.rb +1 -1
- data/spec/datetime_split_spec.rb +23 -0
- data/spec/db/connection.rb +18 -0
- data/spec/db/factories.rb +25 -0
- data/spec/db/user.rb +7 -0
- data/spec/spec_helper.rb +13 -0
- data/spec/store_spec.rb +74 -0
- data/super_accessors.gemspec +5 -0
- metadata +86 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5fb8546719b54607970b73f9590262cd4f68ff9
|
4
|
+
data.tar.gz: 7ab6cb4532b58ebb7cbce27dc5f0f1d6edf37ebb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af50cdbc2662ebbc40cf5548ee1e0cdd5896b61bfb8c0a9c4b5cf0c13f31ba49589f6a33ead0ba30fa8256d7ffcbdff3647e8d0e7bfdd4e3714c37250c7aa854
|
7
|
+
data.tar.gz: 2a42b08528b46e0fd354dae2808465cd00de66604a40f2f75501781177e14cff3463af2c7161f671445b0a844dc627c152cdfaac24c6a41278aef466b5a688f9
|
data/.rspec
ADDED
@@ -19,8 +19,8 @@ module SuperAccessors
|
|
19
19
|
end
|
20
20
|
|
21
21
|
define_method("#{attr}_time=") do |time|
|
22
|
-
return unless time.present
|
23
|
-
time =
|
22
|
+
return unless time.present?
|
23
|
+
time = Time.parse(time.to_s)
|
24
24
|
self.send("#{attr}=", self.send(attr).change(hour: time.hour, min: time.min))
|
25
25
|
end
|
26
26
|
|
@@ -1,28 +1,20 @@
|
|
1
1
|
module SuperAccessors
|
2
2
|
module Store
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
end
|
3
|
+
# converter
|
4
|
+
def any_to_i(any)
|
5
|
+
any.to_i
|
7
6
|
end
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
# for boolean convert
|
18
|
-
def any_to_b(any)
|
19
|
-
str = any.to_s
|
20
|
-
return false if str.blank? || str =~ (/(false|f|no|n|0)$/i)
|
21
|
-
return true
|
22
|
-
end
|
7
|
+
# for string converter
|
8
|
+
def any_to_s(any)
|
9
|
+
any.to_s
|
10
|
+
end
|
11
|
+
# for boolean convert
|
12
|
+
def any_to_b(any)
|
13
|
+
str = any.to_s
|
14
|
+
return false if str.blank? || str =~ (/(false|no|0)$/i)
|
15
|
+
return true
|
23
16
|
end
|
24
17
|
|
25
|
-
private
|
26
18
|
# This function will instead of store function, now support string, boolean, integer
|
27
19
|
#
|
28
20
|
# Example 1:
|
@@ -42,7 +34,7 @@ module SuperAccessors
|
|
42
34
|
store store_name, option
|
43
35
|
# define the virtual attrs
|
44
36
|
column_with_datatype.each do |attr, type|
|
45
|
-
|
37
|
+
send("store_key_type_#{type.to_s}", store_name, attr)
|
46
38
|
end
|
47
39
|
# setting the checkboxs
|
48
40
|
if option[:checkboxes]
|
@@ -55,7 +47,7 @@ module SuperAccessors
|
|
55
47
|
define_method("#{store_name}_keys") do
|
56
48
|
list = [];
|
57
49
|
attrs.each do |attr|
|
58
|
-
if
|
50
|
+
if send(attr) == true
|
59
51
|
list.push(attr)
|
60
52
|
end
|
61
53
|
end
|
@@ -65,7 +57,7 @@ module SuperAccessors
|
|
65
57
|
@i18n_base_scope = [:activerecord, :options, self.class.name.underscore, store_name]
|
66
58
|
list = [];
|
67
59
|
attrs.each do |attr|
|
68
|
-
if
|
60
|
+
if send(attr) == true
|
69
61
|
list.push(I18n.t("#{attr}", scope: @i18n_base_scope, :default => attr.to_s.humanize))
|
70
62
|
end
|
71
63
|
end
|
@@ -77,10 +69,11 @@ module SuperAccessors
|
|
77
69
|
define_method("store_key_type_#{datatype}") do |store_name, attr|
|
78
70
|
define_method(attr) do
|
79
71
|
value = read_store_attribute(store_name, attr)
|
80
|
-
self.send("any_to_#{datatype}", value)
|
72
|
+
self.class.send("any_to_#{datatype}", value)
|
81
73
|
end
|
82
74
|
define_method("#{attr}=") do |value|
|
83
|
-
|
75
|
+
|
76
|
+
value = self.class.send("any_to_#{datatype}", value)
|
84
77
|
write_store_attribute(store_name, attr, value)
|
85
78
|
end
|
86
79
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "[Datetime Split] test" do
|
4
|
+
before :all do
|
5
|
+
@user = FactoryGirl.create(:user)
|
6
|
+
@user.confirm_datetime_date = "2013-10-1"
|
7
|
+
@user.confirm_datetime_time = "10:20"
|
8
|
+
end
|
9
|
+
|
10
|
+
context "Getter" do
|
11
|
+
it "confirm_datetime should be 2013/10/1 10:20" do
|
12
|
+
@user.confirm_datetime.to_date.should == Date.parse("2013/10/1 10:20")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "confirm_datetime_date should be same after convert" do
|
16
|
+
Date.parse(@user.confirm_datetime_date).should == Date.parse("2013/10/01")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "confirm_datetime_date_time should be same after convert" do
|
20
|
+
Time.parse(@user.confirm_datetime_time).should == Time.parse("10:20")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
ActiveRecord::Base.establish_connection(
|
2
|
+
:adapter => "mysql2",
|
3
|
+
:host => "localhost",
|
4
|
+
:username => "root",
|
5
|
+
:password => "",
|
6
|
+
:database => "super_accessors")
|
7
|
+
|
8
|
+
ActiveRecord::Schema.define do
|
9
|
+
if ActiveRecord::Base.connection.table_exists?(:users)
|
10
|
+
ActiveRecord::Base.connection.execute("DROP TABLE users")
|
11
|
+
end
|
12
|
+
create_table :users do |t|
|
13
|
+
t.column :roles, :text
|
14
|
+
t.column :contact_info, :text
|
15
|
+
t.datetime :confirm_datetime
|
16
|
+
t.datetime :last_login_datetime
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'factory_girl'
|
2
|
+
FactoryGirl.define do
|
3
|
+
factory :user do
|
4
|
+
name "Eddie"
|
5
|
+
zipcode "12345"
|
6
|
+
mobile "+886 5666533"
|
7
|
+
available "false"
|
8
|
+
|
9
|
+
admin "FALSE"
|
10
|
+
manager "0"
|
11
|
+
teacher "no"
|
12
|
+
worker "True"
|
13
|
+
factory :admin do
|
14
|
+
name "Vicky"
|
15
|
+
zipcode "293857"
|
16
|
+
mobile nil
|
17
|
+
available "NO"
|
18
|
+
|
19
|
+
admin "T"
|
20
|
+
manager "0"
|
21
|
+
teacher "yes"
|
22
|
+
worker "0"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/spec/db/user.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
class User < ActiveRecord::Base
|
2
|
+
store_define :contact_info, accessors: {name: :s, zipcode: :i, mobile: :s, available: :b}
|
3
|
+
store_define :roles, accessors: {admin: :b, manager: :b, teacher: :b, worker: :b}, checkboxes: true
|
4
|
+
|
5
|
+
split_date_time :confirm_datetime, default: lambda { Time.now }
|
6
|
+
split_date_hour_min :last_login_datetime, default: lambda { Time.now }
|
7
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'active_record'
|
4
|
+
require 'super_accessors'
|
5
|
+
require 'db/connection'
|
6
|
+
require 'db/factories'
|
7
|
+
require 'db/user'
|
8
|
+
|
9
|
+
User.create([{}])
|
10
|
+
|
11
|
+
RSpec.configure do |config|
|
12
|
+
# some (optional) config here
|
13
|
+
end
|
data/spec/store_spec.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "[Store] test" do
|
4
|
+
before :all do
|
5
|
+
@user = FactoryGirl.create(:user)
|
6
|
+
@admin = FactoryGirl.create(:admin)
|
7
|
+
end
|
8
|
+
|
9
|
+
context "data types test" do
|
10
|
+
it "Name should be String" do
|
11
|
+
@user.name.class.should == String
|
12
|
+
end
|
13
|
+
it "Zipcode should be Fixnum" do
|
14
|
+
@user.zipcode.class.should == Fixnum
|
15
|
+
end
|
16
|
+
it "Mobile should be String" do
|
17
|
+
@user.mobile.class.should == String
|
18
|
+
end
|
19
|
+
it "Available should be boolean" do
|
20
|
+
@user.available.class.should == FalseClass || @user.available.class.should == TrueClass
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "value test [1]" do
|
25
|
+
it "Available should be false" do
|
26
|
+
@user.available.should == false
|
27
|
+
end
|
28
|
+
it "Admin should be false" do
|
29
|
+
@user.admin.should == false
|
30
|
+
end
|
31
|
+
it "Manager should be false" do
|
32
|
+
@user.manager.should == false
|
33
|
+
end
|
34
|
+
it "Teacher should be false" do
|
35
|
+
@user.teacher.should == false
|
36
|
+
end
|
37
|
+
it "Worker should be true" do
|
38
|
+
@user.worker.should == true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "value test [2]" do
|
43
|
+
it "Available should be false" do
|
44
|
+
@admin.available.should == false
|
45
|
+
end
|
46
|
+
it "Admin should be true" do
|
47
|
+
@admin.admin.should == true
|
48
|
+
end
|
49
|
+
it "Manager should be false" do
|
50
|
+
@admin.manager.should == false
|
51
|
+
end
|
52
|
+
it "Teacher should be true" do
|
53
|
+
@admin.teacher.should == true
|
54
|
+
end
|
55
|
+
it "Worker should be false" do
|
56
|
+
@admin.worker.should == false
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "checkboxes test" do
|
61
|
+
it "roles key list should be [worker]" do
|
62
|
+
@user.roles_keys.should == [:worker]
|
63
|
+
end
|
64
|
+
it "roles options should be [Worker]" do
|
65
|
+
@user.roles_options.should == ["Worker"]
|
66
|
+
end
|
67
|
+
it "roles keys should be [:admin, :teacher]" do
|
68
|
+
@admin.roles_keys.should == [:admin, :teacher]
|
69
|
+
end
|
70
|
+
it "roles options should be [:admin, :teacher]" do
|
71
|
+
@admin.roles_options.should == ["Admin", "Teacher"]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
data/super_accessors.gemspec
CHANGED
@@ -20,4 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
spec.add_development_dependency "activerecord"
|
25
|
+
spec.add_development_dependency "mysql2"
|
26
|
+
spec.add_development_dependency "rails"
|
27
|
+
spec.add_development_dependency "factory_girl"
|
23
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: super_accessors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- eddie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,76 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activerecord
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mysql2
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rails
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: factory_girl
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
41
111
|
description: Make activerecord support split datetime attributes, store specific datatypes
|
42
112
|
(Integer, String, Boolean)
|
43
113
|
email:
|
@@ -47,6 +117,7 @@ extensions: []
|
|
47
117
|
extra_rdoc_files: []
|
48
118
|
files:
|
49
119
|
- .gitignore
|
120
|
+
- .rspec
|
50
121
|
- Gemfile
|
51
122
|
- LICENSE.txt
|
52
123
|
- README.md
|
@@ -55,6 +126,12 @@ files:
|
|
55
126
|
- lib/super_accessors/datetime.rb
|
56
127
|
- lib/super_accessors/store.rb
|
57
128
|
- lib/super_accessors/version.rb
|
129
|
+
- spec/datetime_split_spec.rb
|
130
|
+
- spec/db/connection.rb
|
131
|
+
- spec/db/factories.rb
|
132
|
+
- spec/db/user.rb
|
133
|
+
- spec/spec_helper.rb
|
134
|
+
- spec/store_spec.rb
|
58
135
|
- super_accessors.gemspec
|
59
136
|
homepage: https://github.com/afunction/super_accessors
|
60
137
|
licenses:
|
@@ -80,4 +157,10 @@ rubygems_version: 2.0.6
|
|
80
157
|
signing_key:
|
81
158
|
specification_version: 4
|
82
159
|
summary: activerecord datetime split, store specific datatype (Integer, String, Boolean)
|
83
|
-
test_files:
|
160
|
+
test_files:
|
161
|
+
- spec/datetime_split_spec.rb
|
162
|
+
- spec/db/connection.rb
|
163
|
+
- spec/db/factories.rb
|
164
|
+
- spec/db/user.rb
|
165
|
+
- spec/spec_helper.rb
|
166
|
+
- spec/store_spec.rb
|