accessor 1.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.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
@@ -0,0 +1,2 @@
1
+ - 1.9.2
2
+ - 1.9.3
@@ -0,0 +1,50 @@
1
+
2
+ 1.0.2 / 2012-01-17
3
+ ==================
4
+
5
+ * Fixing the listed version
6
+ * Detailing the gemspec
7
+ * Updating the readme with real details
8
+ * Merge branch 'release/1.0.0' into develop
9
+
10
+ 1.0.0 / 2012-01-16
11
+ ==================
12
+
13
+ * Delgating to attribute for writer and accessor
14
+ * Delegating for writer and accessor
15
+ * Raising on no names given, for accessor and writer
16
+ * Returning self for chaining
17
+ * Delegating to the class method
18
+ * Raising if no names given
19
+ * Going over each name given and creating an attribute
20
+ * Defining the method for the property and proc
21
+ * Raising if it doesnt match reader, writer, or accessor
22
+ * Returning the ivar value if no arg given
23
+ * Determining how to treat arg given
24
+ * Writing accessor proc generator
25
+ * Writing writer proc generator
26
+ * Writing logic on proc generation
27
+ * Checking if types are correct
28
+ * Dropping scaffold comment
29
+ * Extending the Object class with Accessor
30
+ * Defining the core attributes method and documentation
31
+ * Defining the instance accessor method and documentation
32
+ * Defining the accessor metamethod and documentation
33
+ * Defining the instance writer method and docs
34
+ * Defining the writer metamethod and docs
35
+ * Defining the instance reader method and docs
36
+ * Defining the reader metamethod and documentation
37
+ * Adding documentation on the possible API
38
+ * Creating a test for features in Accessor
39
+ * Comparing attr to Accessor via benchmark
40
+ * Adding a simple example of the API
41
+ * Adding in a Guardfile for continous testing
42
+ * Adding a dummy class for my tests
43
+ * Adding pride to my tests
44
+ * Fixing rocco problem with redcarpet version
45
+ * Adding the initial changelog
46
+
47
+ 0.0.1 / 2012-01-16
48
+ ==================
49
+
50
+ * Initial bundler scaffold
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in accessible.gemspec
4
+ gemspec
@@ -0,0 +1,26 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'bundler' do
5
+ watch('Gemfile')
6
+ # Uncomment next line if Gemfile contain `gemspec' command
7
+ watch(/^.+\.gemspec/)
8
+ end
9
+
10
+ guard 'minitest' do
11
+ # with Minitest::Unit
12
+ watch(%r|^test/test_(.*)\.rb|)
13
+ watch(%r|^lib/(.*)\.rb|) { |m| "test/test_#{m[1]}.rb" }
14
+ watch(%r|^test/helper\.rb|) { "test" }
15
+
16
+ # with Minitest::Spec
17
+ # watch(%r|^spec/(.*)_spec\.rb|)
18
+ # watch(%r|^lib/(.*)\.rb|) { |m| "spec/#{m[1]}_spec.rb" }
19
+ # watch(%r|^spec/spec_helper\.rb|) { "spec" }
20
+ end
21
+
22
+ guard 'rocco' do
23
+ watch(%r{^lib/.*\.rb$})
24
+ end
25
+
26
+ watch(%r|^benchmarks/(.*)\.rb$|) { |m| eval File.read "benchmarks/#{m[1]}.rb" }
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Kurtis Rainbolt-Greene
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,136 @@
1
+ accessor
2
+ ========
3
+
4
+ The accessor gem is for giving you easy syntax sugar for getters, setters, and accessors.
5
+
6
+
7
+ usage
8
+ -----
9
+
10
+ Sure, you can use `attr_accessor`, `attr_reader`, and `attr_writer` but the `attr` gang can't do this!:
11
+
12
+ - Chain together setters: `person.name("Kurtis").email("me+accessor@kurtisrainboltgreene.name").age(24)`
13
+ - Define new accessors, getters, and setters on instances: `person.accessor!(:secret_token)`
14
+ - Do both: `person.accessor(:api_token, :dashboard_token).api_token(generated_token).dashboard_token`
15
+
16
+ Here's an example:
17
+
18
+ ``` ruby
19
+ require 'accessor'
20
+
21
+ class Person
22
+ accessor :name, :email
23
+ writer :password
24
+ reader :encrypted_password
25
+
26
+ def encrypt_password!
27
+ @encrypted_password = Base64::strict_encode64(@password)
28
+ end
29
+
30
+ end
31
+
32
+ contact = Person.new
33
+ contact.name "Kurtis Rainbolt-Greene"
34
+ contact.email "me+accessor@kurtisrainboltgreene.name"
35
+ contact.email
36
+
37
+ contact.accessor!(:age).age 24
38
+ ```
39
+
40
+
41
+ installing
42
+ ----------
43
+
44
+ **Requirements**
45
+
46
+ 1. Ruby MRI 1.9+
47
+ 2. RubyGems 1.6+
48
+
49
+ Like any other gem, all you have to do is either use:
50
+
51
+ ``` bash
52
+ $ gem install accessor
53
+ ```
54
+
55
+ Or add it to your `Gemfile`:
56
+
57
+ ``` ruby
58
+ source :rubygems
59
+
60
+ gem "accessor", "1.0.2"
61
+ ```
62
+
63
+ That's all you have to do.
64
+
65
+ **Testing**
66
+
67
+ To make sure you did everything right do the following:
68
+
69
+ ``` ruby
70
+ ruby -e "p require 'accessor'"
71
+ true
72
+ ```
73
+
74
+
75
+ issues & documentation
76
+ ----------------------
77
+
78
+ * [Documentation](http://krainboltgreene.github.com/accessor/documentation)
79
+ * [Issues](https://github.com/krainboltgreene/accessor/issues)
80
+
81
+ We welcome any pull requests or commits that improve `accessor`.
82
+
83
+
84
+ changelog
85
+ ---------
86
+
87
+ - 1.0.2: Adding helpful README and gemspec details
88
+ - 1.0.0: Initial release
89
+
90
+
91
+ contributing
92
+ ------------
93
+
94
+ * **Fork** the repository
95
+ * **Clone the repository** locally, or **edit via Github**
96
+ * Create a **new branch** using the [Git Flow Standard](http://yakiloo.com/getting-started-git-flow/) conventions
97
+ * Commit **often** and **when important**
98
+ * **DO NOT CHANGE** ANY OF THESE (without making a new branch for *that* change):
99
+ * `*.gemspec`
100
+ * `Rakefile`
101
+ * `.rvmrc`
102
+ * `.gitignore`
103
+ * Any part of the git history
104
+ * **Write tests** specifically for the changes you've made, if no test exist
105
+ * **Push** your feature or hotfix branch to Github.
106
+ * Make a **Pull Request**
107
+
108
+
109
+ Credits
110
+ -------
111
+
112
+ - Myself!...So far.
113
+
114
+ License
115
+ -------
116
+
117
+ Copyright (c) 2012 Kurtis Rainbolt-Greene
118
+
119
+ Permission is hereby granted, free of charge, to any person obtaining
120
+ a copy of this software and associated documentation files (the
121
+ "Software"), to deal in the Software without restriction, including
122
+ without limitation the rights to use, copy, modify, merge, publish,
123
+ distribute, sublicense, and/or sell copies of the Software, and to
124
+ permit persons to whom the Software is furnished to do so, subject to
125
+ the following conditions:
126
+
127
+ The above copyright notice and this permission notice shall be
128
+ included in all copies or substantial portions of the Software.
129
+
130
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
131
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
132
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
133
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
134
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
135
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
136
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/accessor/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Kurtis Rainbolt-Greene"]
6
+ gem.email = ["kurtisrainboltgreene@gmail.com"]
7
+ gem.description = "A syntactically better accessor, setter, and getter metamethod generator"
8
+ gem.summary = %q{A syntactically better accessor, setter, and getter metamethod generator}
9
+ gem.homepage = "http://krainboltgreene.github.com/accessor"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "accessor"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Accessor::VERSION
17
+
18
+ gem.add_development_dependency 'rake', '~> 0.9'
19
+ gem.add_development_dependency 'rocco', '~> 0.8'
20
+ gem.add_development_dependency 'redcarpet', '~> 1.7'
21
+ gem.add_development_dependency 'awesome_print', '~> 1.0'
22
+ gem.add_development_dependency 'guard', '~> 0.10'
23
+ gem.add_development_dependency 'guard-minitest', '~> 0.4'
24
+ gem.add_development_dependency 'guard-rocco', '~> 0.0.3'
25
+ gem.add_development_dependency 'guard-bundler', '~> 0.1'
26
+ end
@@ -0,0 +1,42 @@
1
+ require 'benchmark'
2
+
3
+ accessor_time = Benchmark.realtime do
4
+ require 'accessor'
5
+ class Person
6
+ accessor :name, :email
7
+ writer :password
8
+ reader :encrypted_password
9
+
10
+ def encrypt_password!
11
+ @encrypted_password = Base64::strict_encode64(@password)
12
+ end
13
+
14
+ end
15
+
16
+ contact = Person.new
17
+ contact.name "Kurtis Rainbolt-Greene"
18
+ contact.email "me+accessor@kurtisrainboltgreene.name"
19
+ contact.email
20
+ end
21
+
22
+ attr_time = Benchmark.realtime do
23
+ class Person
24
+ attr_accessor :name, :email
25
+ attr_reader :password
26
+ attr_writer :encrypted_password
27
+
28
+ def encrypt_password!
29
+ @encrypted_password = Base64::strict_encode64(@password)
30
+ end
31
+
32
+ end
33
+
34
+ contact = Person.new
35
+ contact.name = "Kurtis Rainbolt-Greene"
36
+ contact.email = "me+accessor@kurtisrainboltgreene.name"
37
+ contact.email
38
+ end
39
+
40
+ puts "Benchmarks Accessor vs attr:"
41
+ puts " - Accessor: Time elapsed #{accessor_time * 1000}ms"
42
+ puts " - attr: Time elapsed #{attr_time * 1000}ms"
@@ -0,0 +1,20 @@
1
+ require 'accessor'
2
+
3
+ class Person
4
+ accessor :name, :email
5
+ writer :password
6
+ reader :encrypted_password
7
+
8
+ def encrypt_password!
9
+ @encrypted_password = Base64::strict_encode64(@password)
10
+ end
11
+
12
+ end
13
+
14
+ contact = Person.new
15
+ contact.name "Kurtis Rainbolt-Greene"
16
+ contact.email "me+accessor@kurtisrainboltgreene.name"
17
+ contact.email
18
+
19
+ contact.accessor!(:age).age 24
20
+ p contact
@@ -0,0 +1,131 @@
1
+ require "accessor/version"
2
+
3
+ # The Accessor library is for giving your setters, getters, and accessors
4
+ # a more suggary syntax:
5
+ #
6
+ #
7
+ # class Person
8
+ # accessor :name, :email
9
+ # writer :password
10
+ # reader :encrypted_password
11
+ #
12
+ # def encrypt_password!
13
+ # @encrypted_password = Base64::strict_encode64(@password)
14
+ # end
15
+ #
16
+ # end
17
+ #
18
+ # contact = Person.new
19
+ # contact.name "Kurtis Rainbolt-Greene"
20
+ # contact.email "me+accessor@kurtisrainboltgreene.name"
21
+ # contact.email
22
+ # # => "me+accessor@kurtisrainboltgreene.name"
23
+ # contact.password "ilovehorsesthateatglue"
24
+ # contact.password
25
+ # # => 0 for 1 arguments
26
+ # contact.encrypted_password "Test!"
27
+ # # => 1 for 0 arguments
28
+ # contact.encrypt_password!
29
+ # contact.encrypted_password
30
+ # # => "MTIzNDEyMzQ="
31
+ # contact.name("James Earl Jones").email("jejones@gmail.com")
32
+ # # => #<Person:0x3E034 @name="James Earl Jones" @email="jejones@gmail.com">
33
+ #
34
+ module Accessor
35
+ # The `reader` method is a metamethod, and it takes an `Array` of `Symbols`.
36
+ # It goes over each `Symbol` and calls the `attribute` method with the
37
+ # `Symbol` as an argument, creating a getter method.
38
+ def reader(*names)
39
+ names.each { |name| attribute name, :reader }
40
+ end
41
+
42
+ # The `reader!` method is a metamethod, and it takes the same arguments as `reader`.
43
+ # The difference between the two are that `reader!` is used to define getter methods
44
+ # for the class of an instance object.
45
+ def reader!(*names)
46
+ raise ArgumentError unless names.any?
47
+ self.class.reader(*names)
48
+ self
49
+ end
50
+
51
+
52
+ # The `writer` method is a metamethod, and it takes an `Array` of `Symbols`.
53
+ # It goes over each `Symbol` and calls the `attribute` method with the
54
+ # `Symbol` as an argument, creating a setter method.
55
+ def writer(*names)
56
+ names.each { |name| attribute name, :writer }
57
+ end
58
+
59
+ # The `writer!` method is a metamethod, and it takes the same arguments as `writer`.
60
+ # The difference between the two are that `writer!` is used to define setter methods
61
+ # for the class of an instance object.
62
+ def writer!(*names)
63
+ raise ArgumentError unless names.any?
64
+ self.class.writer(*names)
65
+ self
66
+ end
67
+
68
+
69
+ # The `accessor` method is a metamethod, and it takes an `Array` of `Symbols`.
70
+ # It goes over each `Symbol` and calls the `attribute` method with the
71
+ # `Symbol` as an argument, creating both a getter and setter method.
72
+ def accessor(*names)
73
+ names.each { |name| attribute name }
74
+ end
75
+
76
+ # The `accessor!` method is a metamethod, and it takes the same arguments as `accessor`.
77
+ # The difference between the two are that `accessor!` is used to define setter/getter methods
78
+ # for the class of an instance object.
79
+ def accessor!(*names)
80
+ raise ArgumentError unless names.any?
81
+ self.class.accessor(*names)
82
+ self
83
+ end
84
+
85
+ private
86
+ # The `attribute` method is the metamethod behind `accessor`, `writer`, and `reader`.
87
+ # It takes two `Symbols`, but has a default for the last.
88
+ def attribute(name, type = :accessor)
89
+ # If the `name` or `type` parameters are anything but `Symbol` classes
90
+ # then it should raise a TypeError.
91
+ raise TypeError unless name.is_a?(Symbol) && type.is_a?(Symbol)
92
+
93
+ # Based on the `Symbol` passed in as `type` determine what kind of `Proc` to create.
94
+ block = case type
95
+
96
+ # For getter metamethods, pass along a block that accesses the instance variable
97
+ when :reader then -> { instance_variable_get "@#{name}".to_sym }
98
+
99
+ # For setter metamethods, pass along a block that takes a single argument and
100
+ # sets the instance variable to that value, finally returning `self`. The `self`
101
+ # return allows for cool chaining like `person.age(24).name("Katie")`
102
+ when :writer then ->(arg) { instance_variable_set "@#{name}".to_sym, arg; self }
103
+
104
+ # Finally for both functionalities the accessor metamethod does both the setter and
105
+ # reader based on if an argument was passed or not (default not).
106
+ when :accessor
107
+ ->(arg = nil) {
108
+ if arg
109
+ instance_variable_set "@#{name}".to_sym, arg
110
+ self
111
+ else
112
+ instance_variable_get "@#{name}".to_sym
113
+ end
114
+ }
115
+ # If for some reason the `type` parameter was a Symbol, but not those listed above
116
+ # then raise an `ArgumentError`
117
+ else raise ArgumentError
118
+ end
119
+
120
+ # Finally define an instance method on the class with the `name` parameter and
121
+ # `Proc` created.
122
+ define_method name, block
123
+ end
124
+ end
125
+
126
+ # Extend the main object with the `Accessor` module to populate it with the correct
127
+ # method singleton methods.
128
+ class Object
129
+ extend Accessor
130
+ include Accessor
131
+ end
@@ -0,0 +1,3 @@
1
+ module Accessor
2
+ VERSION = "1.0.2"
3
+ end
@@ -0,0 +1,14 @@
1
+ require "minitest/pride"
2
+ require 'minitest/autorun'
3
+ require 'accessor'
4
+
5
+ class Person
6
+ accessor :name, :email
7
+ writer :password
8
+ reader :encrypted_password
9
+
10
+ def encrypt_password!
11
+ @encrypted_password = Base64::strict_encode64(@password)
12
+ end
13
+
14
+ end
@@ -0,0 +1,89 @@
1
+ require 'minitest/autorun'
2
+ require_relative 'helper'
3
+
4
+ class TestAccessor < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @iperson = Person.new
8
+ end
9
+
10
+ def test_person_class_has_accessor_method
11
+ assert_respond_to Person, :accessor
12
+ end
13
+
14
+ def test_person_class_has_writer_method
15
+ assert_respond_to Person, :writer
16
+ end
17
+
18
+ def test_person_class_has_reader_method
19
+ assert_respond_to Person, :reader
20
+ end
21
+
22
+ def test_person_has_name_accessor
23
+ assert_respond_to @iperson, :name
24
+ end
25
+
26
+ def test_person_has_email_accessor
27
+ assert_respond_to @iperson, :email
28
+ end
29
+
30
+ def test_person_has_password_writer
31
+ assert_respond_to @iperson, :password
32
+ end
33
+
34
+ def test_person_has_encrypted_password_reader
35
+ assert_respond_to @iperson, :encrypted_password
36
+ end
37
+
38
+ def test_cant_read_password_ivariable
39
+ assert_raises(ArgumentError) { @iperson.password }
40
+ end
41
+
42
+ def test_cant_write_encrypted_password_ivariable
43
+ assert_raises(ArgumentError) { @iperson.encrypted_password("test") }
44
+ end
45
+
46
+ def test_person_has_accessor_method
47
+ assert_respond_to @iperson, :accessor!
48
+ end
49
+
50
+ def test_person_has_writer_method
51
+ assert_respond_to @iperson, :writer!
52
+ end
53
+
54
+ def test_person_has_reader_method
55
+ assert_respond_to @iperson, :reader!
56
+ end
57
+
58
+ def test_iaccessor_defines_getter_method
59
+ @iperson.accessor! :age
60
+ assert_respond_to @iperson, :age
61
+ end
62
+
63
+ def test_iaccessor_defines_setter_method
64
+ @iperson.accessor! :age
65
+ assert_send [@iperson, :age, 23]
66
+ end
67
+
68
+ def test_ireader_defines_getter_method
69
+ @iperson.reader! :age
70
+ assert_respond_to @iperson, :age
71
+ end
72
+
73
+ def test_iwritter_defines_setter_method
74
+ @iperson.writer! :age
75
+ assert_send [@iperson, :age, 23]
76
+ end
77
+
78
+ def test_iaccessor_requires_names
79
+ assert_raises(ArgumentError) { @iperson.accessor! }
80
+ end
81
+
82
+ def test_ireader_requires_names
83
+ assert_raises(ArgumentError) { @iperson.reader! }
84
+ end
85
+
86
+ def test_iwriter_requires_names
87
+ assert_raises(ArgumentError) { @iperson.writer! }
88
+ end
89
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: accessor
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kurtis Rainbolt-Greene
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &2156430340 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.9'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2156430340
25
+ - !ruby/object:Gem::Dependency
26
+ name: rocco
27
+ requirement: &2156429780 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '0.8'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2156429780
36
+ - !ruby/object:Gem::Dependency
37
+ name: redcarpet
38
+ requirement: &2156429280 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '1.7'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2156429280
47
+ - !ruby/object:Gem::Dependency
48
+ name: awesome_print
49
+ requirement: &2156428780 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2156428780
58
+ - !ruby/object:Gem::Dependency
59
+ name: guard
60
+ requirement: &2156428260 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: '0.10'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *2156428260
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-minitest
71
+ requirement: &2156427760 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '0.4'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2156427760
80
+ - !ruby/object:Gem::Dependency
81
+ name: guard-rocco
82
+ requirement: &2156427120 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 0.0.3
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *2156427120
91
+ - !ruby/object:Gem::Dependency
92
+ name: guard-bundler
93
+ requirement: &2156426540 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: '0.1'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *2156426540
102
+ description: A syntactically better accessor, setter, and getter metamethod generator
103
+ email:
104
+ - kurtisrainboltgreene@gmail.com
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - .gitignore
110
+ - .travis.yml
111
+ - CHANGELOG.mdown
112
+ - Gemfile
113
+ - Guardfile
114
+ - LICENSE
115
+ - README.md
116
+ - Rakefile
117
+ - accessor.gemspec
118
+ - benchmarks/vs_attr.rb
119
+ - example/example_1.rb
120
+ - lib/accessor.rb
121
+ - lib/accessor/version.rb
122
+ - test/helper.rb
123
+ - test/test_accessor.rb
124
+ homepage: http://krainboltgreene.github.com/accessor
125
+ licenses: []
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubyforge_project:
144
+ rubygems_version: 1.8.10
145
+ signing_key:
146
+ specification_version: 3
147
+ summary: A syntactically better accessor, setter, and getter metamethod generator
148
+ test_files:
149
+ - test/helper.rb
150
+ - test/test_accessor.rb