named_accessors 1.0 → 1.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/CHANGELOG.md +5 -1
- data/README.md +10 -0
- data/lib/named_accessors/named_accessor.rb +4 -2
- data/lib/named_accessors/utilities.rb +10 -0
- data/lib/named_accessors/version.rb +1 -1
- data/spec/named_accessors/named_accessor_module_spec.rb +42 -0
- data/spec/named_accessors/named_accessors_spec.rb +40 -23
- metadata +12 -6
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -4,6 +4,12 @@ You ever wanted to create attr_accessor with specified name? Now You can!
|
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
|
+
```ruby
|
8
|
+
gem 'named_accessors'
|
9
|
+
```
|
10
|
+
|
11
|
+
or
|
12
|
+
|
7
13
|
```ruby
|
8
14
|
gem 'named_accessors', git: 'git@github.com:zlw/named_accessors.git'
|
9
15
|
```
|
@@ -23,6 +29,10 @@ class Post
|
|
23
29
|
named_accessor :title, as: :fancy_title
|
24
30
|
named_writer :content, as: :post_content
|
25
31
|
named_reader :created_at, as: :when_was_it_created?
|
32
|
+
|
33
|
+
named_accessor :foo, reader: :foobar, writer: :foobaz
|
34
|
+
named_accessor :foo, as: :bar, reader: :foobar
|
35
|
+
named_accessor :foo, as: :bar, writer: :foobar
|
26
36
|
end
|
27
37
|
|
28
38
|
post = Post.new('Lorem ispum')
|
@@ -1,8 +1,10 @@
|
|
1
1
|
module NamedAccessors
|
2
2
|
module NamedAccessor
|
3
3
|
def named_accessor(name, options={})
|
4
|
-
|
5
|
-
|
4
|
+
reader, writer = extract_accessor_options(options)
|
5
|
+
|
6
|
+
named_reader(name, reader)
|
7
|
+
named_writer(name, writer)
|
6
8
|
end
|
7
9
|
end
|
8
10
|
end
|
@@ -16,5 +16,15 @@ module NamedAccessors
|
|
16
16
|
def instance_variable_name(name)
|
17
17
|
:"@#{name}"
|
18
18
|
end
|
19
|
+
|
20
|
+
def extract_accessor_options(options)
|
21
|
+
[extract_option(options, :reader), extract_option(options, :writer)]
|
22
|
+
end
|
23
|
+
|
24
|
+
def extract_option(options, type)
|
25
|
+
option = options.fetch(type, nil)
|
26
|
+
|
27
|
+
option ? options.merge(as: option) : options
|
28
|
+
end
|
19
29
|
end
|
20
30
|
end
|
@@ -31,4 +31,46 @@ describe Object do
|
|
31
31
|
klass.send(:instance_variable_name, :foobar).should == :'@foobar'
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
context '#extract_option' do
|
36
|
+
it 'should return changed `as` option to reader' do
|
37
|
+
klass.send(:extract_option, {as: :foo, reader: :foobar}, :reader)[:as].should == :foobar
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should return not changed `as` options if reader is not given' do
|
41
|
+
klass.send(:extract_option, {as: :foo}, :reader)[:as].should == :foo
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should return changed `as` option to writer' do
|
45
|
+
klass.send(:extract_option, {as: :foo, writer: :foobar}, :writer)[:as].should == :foobar
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should return not changed `as` option if writer is not given' do
|
49
|
+
klass.send(:extract_option, {as: :foo}, :writer)[:as].should == :foo
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context '#extract_accessor_options' do
|
54
|
+
it 'should return array of option hashes' do
|
55
|
+
klass.send(:extract_accessor_options, {as: :foo}).should == [{as: :foo}, {as: :foo}]
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should return array of option hashes with changed reader' do
|
59
|
+
options = klass.send(:extract_accessor_options, {as: :foo, reader: :foobar})
|
60
|
+
|
61
|
+
reader, writer = options
|
62
|
+
|
63
|
+
reader[:as].should == :foobar
|
64
|
+
writer[:as].should == :foo
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should return array of option hashes with changed writer' do
|
68
|
+
options = klass.send(:extract_accessor_options, {as: :foo, writer: :foobar})
|
69
|
+
|
70
|
+
reader, writer = options
|
71
|
+
|
72
|
+
reader[:as].should == :foo
|
73
|
+
writer[:as].should == :foobar
|
74
|
+
end
|
75
|
+
end
|
34
76
|
end
|
@@ -1,44 +1,61 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
class Post
|
4
|
-
def initialize(title)
|
5
|
-
@title, @content, @created_at = title, '', 'Today'
|
6
|
-
end
|
7
|
-
|
8
|
-
named_accessor :title, as: :fancy_title
|
9
|
-
named_writer :content, as: :post_content
|
10
|
-
named_reader :created_at, as: :when_was_it_created?
|
11
|
-
end
|
12
|
-
|
13
3
|
describe Object do
|
14
4
|
let(:post) { Post.new('foobar') }
|
5
|
+
let(:klass) { Object }
|
15
6
|
|
16
|
-
context
|
17
|
-
it
|
18
|
-
|
7
|
+
context '#named_reader' do
|
8
|
+
it 'should respond to getter method with specified name' do
|
9
|
+
klass.named_reader(:created_at, as: :when_was_it_created?)
|
10
|
+
klass.should respond_to :when_was_it_created?
|
19
11
|
end
|
20
12
|
|
21
13
|
it 'should return value of instance variable' do
|
22
|
-
|
14
|
+
klass.instance_variable_set(:'@created_at', 'Today')
|
15
|
+
klass.when_was_it_created?.should == 'Today'
|
23
16
|
end
|
24
17
|
end
|
25
18
|
|
26
|
-
context '#
|
19
|
+
context '#named_writed' do
|
27
20
|
it 'should respond to setter method with specified name' do
|
28
|
-
|
21
|
+
klass.named_writer(:content, as: :post_content)
|
22
|
+
klass.should respond_to :post_content=
|
29
23
|
end
|
30
24
|
|
31
|
-
it
|
32
|
-
|
33
|
-
|
34
|
-
post.instance_variable_get(:"@content").should == content
|
25
|
+
it 'should set value to instance method' do
|
26
|
+
klass.post_content = 'Lorem ipsum'
|
27
|
+
klass.instance_variable_get(:'@content').should == 'Lorem ipsum'
|
35
28
|
end
|
36
29
|
end
|
37
30
|
|
38
31
|
context '#named_accessor' do
|
39
|
-
it
|
40
|
-
|
41
|
-
|
32
|
+
it 'should respond to both reader and writer' do
|
33
|
+
klass.named_accessor :title, as: :fancy_title
|
34
|
+
klass.should respond_to :fancy_title, :fancy_title=
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should respond to changed writer name' do
|
38
|
+
klass.named_accessor :foo, as: :foobar, writer: :bar
|
39
|
+
klass.should respond_to :foobar
|
40
|
+
klass.should respond_to :bar=
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should respond to changed reader name' do
|
44
|
+
klass.named_accessor :foo, as: :foobaz, reader: :baz
|
45
|
+
klass.should respond_to :foobaz=
|
46
|
+
klass.should respond_to :baz
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should respond to changed both reader and writer' do
|
50
|
+
klass.named_accessor :foo, as: :dummy, reader: :one, writer: :two
|
51
|
+
klass.should respond_to :one
|
52
|
+
klass.should respond_to :two=
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'shoud respond to changed both reader and writer when `as` option is not given' do
|
56
|
+
klass.named_accessor :foo, reader: :reader, writer: :writer
|
57
|
+
klass.should respond_to :reader
|
58
|
+
klass.should respond_to :writer=
|
42
59
|
end
|
43
60
|
end
|
44
61
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: named_accessors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.1'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70118597470420 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70118597470420
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70118597469940 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70118597469940
|
36
36
|
description: Create attr_accessor (attr_reader/attr_writer) with specified name
|
37
37
|
email:
|
38
38
|
- zlw.zalewski@gmail.com
|
@@ -67,12 +67,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
67
67
|
- - ! '>='
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
hash: -3223851256822058182
|
70
73
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
74
|
none: false
|
72
75
|
requirements:
|
73
76
|
- - ! '>='
|
74
77
|
- !ruby/object:Gem::Version
|
75
78
|
version: '0'
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
hash: -3223851256822058182
|
76
82
|
requirements: []
|
77
83
|
rubyforge_project: named_accessors
|
78
84
|
rubygems_version: 1.8.15
|