attr_readonly 0.0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +21 -20
- data/README.md +59 -3
- data/Rakefile +56 -0
- data/attr_readonly.gemspec +8 -0
- data/lib/attr_readonly.rb +39 -2
- data/lib/attr_readonly/version.rb +4 -1
- data/spec/attr_readonly_spec.rb +136 -0
- data/spec/init_spec.rb +1 -0
- data/spec/spec_helper.rb +16 -0
- data/ultragreen_roodi_coding_convention.yml +25 -0
- metadata +121 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27965629590e66f907071bae9837d1b90b70e03f
|
4
|
+
data.tar.gz: ab2de0b16b3cd2e0e28844408287dbbd9f477b65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6fcee4acdb5afbb97fd7cb55eb645122343bd12e8eb7502ccd4570a50a1e845046d383bdf674ede81b208a5ec98ae888ec61265a146088c5d66fa7109112bb0
|
7
|
+
data.tar.gz: fbbe277f83bcbd3bd2251d81bc4b126efc3a9eb6eabffcce8b810358c8413a5e54ed67c4140fa3d77df15b35a83b5ffbf27e74c371962b54340f6254cad559e5
|
data/LICENSE.txt
CHANGED
@@ -1,22 +1,23 @@
|
|
1
|
-
Copyright (c) 2013 Romain GEORGES
|
1
|
+
attr_readonly Copyright (c) 2012-2013 Ultragreen Software, Romain GEORGES
|
2
|
+
All rights reserved.
|
2
3
|
|
3
|
-
|
4
|
+
Redistribution and use in source and binary forms, with or without
|
5
|
+
modification, are permitted provided that the following conditions
|
6
|
+
are met:
|
7
|
+
1. Redistributions of source code must retain the above copyright
|
8
|
+
notice, this list of conditions and the following disclaimer.
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright
|
10
|
+
notice, this list of conditions and the following disclaimer in the
|
11
|
+
documentation and/or other materials provided with the distribution.
|
4
12
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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.
|
13
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
14
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
15
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
16
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
17
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
18
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
19
|
+
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
20
|
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
21
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
22
|
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
23
|
+
SUCH DAMAGE.
|
data/README.md
CHANGED
@@ -1,6 +1,22 @@
|
|
1
|
-
#
|
1
|
+
# attr_readonly
|
2
2
|
|
3
|
-
|
3
|
+
## Author
|
4
|
+
|
5
|
+
Romain GEORGES <romain@ultragreen.net>
|
6
|
+
Ultragreen Software
|
7
|
+
|
8
|
+
## Copyright
|
9
|
+
|
10
|
+
Ultragreen Software (c) 2013
|
11
|
+
BSD-2 License
|
12
|
+
|
13
|
+
## Description
|
14
|
+
|
15
|
+
Provide a new macro like attr_accessor to make real read_only accessors to frozen dup of the attributs given in parameters
|
16
|
+
|
17
|
+
## Version
|
18
|
+
|
19
|
+
current : 1.0.0
|
4
20
|
|
5
21
|
## Installation
|
6
22
|
|
@@ -18,7 +34,47 @@ Or install it yourself as:
|
|
18
34
|
|
19
35
|
## Usage
|
20
36
|
|
21
|
-
|
37
|
+
This gem add the macro : attr_readonly to class definition
|
38
|
+
|
39
|
+
You could create reader accessors, in Ruby like :
|
40
|
+
|
41
|
+
class Test
|
42
|
+
attr_reader :foo
|
43
|
+
def initialize(foo: '')
|
44
|
+
@foo = foo
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
if you try to do a direct affectation you raise an exception NoMethodError :
|
49
|
+
|
50
|
+
Test::new.foo= 'bar'
|
51
|
+
# => undefined method `foo=' for #<Test:0x00000801932598 @foo=""> (NoMethodError)
|
52
|
+
|
53
|
+
But if you try to use a method on this accessor (for exemple <<), you could modify it !
|
54
|
+
|
55
|
+
test = Test::new
|
56
|
+
p test.foo << 'bar'
|
57
|
+
# => "bar"
|
58
|
+
p test
|
59
|
+
# => <Test:0x000008019323b8 @foo="bar">
|
60
|
+
|
61
|
+
if you want to secure an API, or prevent inapriopriate usage of a componant you want to diffuse, this a problem.
|
62
|
+
|
63
|
+
So, use this gem, replace the macro attr_reader by attr_readonly :
|
64
|
+
|
65
|
+
require 'attr_readonly'
|
66
|
+
class Test
|
67
|
+
attr_readonly :foo
|
68
|
+
def initialize(foo: '')
|
69
|
+
@foo = foo
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
Test::new.foo << 'bar'
|
74
|
+
# => can't modify frozen String (RuntimeError)
|
75
|
+
|
76
|
+
No fear, it's just a frozen copy (dup), your real attribut is not frozen
|
77
|
+
|
22
78
|
|
23
79
|
## Contributing
|
24
80
|
|
data/Rakefile
CHANGED
@@ -1 +1,57 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rspec'
|
4
|
+
require 'rake'
|
5
|
+
require "rake/clean"
|
6
|
+
require "rubygems/package_task"
|
7
|
+
require "rdoc/task"
|
8
|
+
require 'code_statistics'
|
9
|
+
require 'rspec/core/rake_task'
|
10
|
+
require 'yard'
|
11
|
+
require 'yard/rake/yardoc_task.rb'
|
12
|
+
require "github/markup"
|
13
|
+
require "redcarpet"
|
14
|
+
require "rake/tasklib"
|
15
|
+
require "roodi"
|
16
|
+
require "roodi_task"
|
17
|
+
|
18
|
+
|
19
|
+
RoodiTask.new() do | t |
|
20
|
+
t.patterns = %w(lib/**/*.rb)
|
21
|
+
t.config = "ultragreen_roodi_coding_convention.yml"
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
CLEAN.include('*.tmp','*.old')
|
26
|
+
CLOBBER.include('*.tmp', 'build/*','#*#')
|
27
|
+
|
28
|
+
|
29
|
+
content = File::readlines(File.join(File.dirname(__FILE__), 'attr_readonly.gemspec')).join
|
30
|
+
spec = eval(content)
|
31
|
+
|
32
|
+
RSpec::Core::RakeTask.new('spec')
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
YARD::Rake::YardocTask.new do |t|
|
37
|
+
t.files = [ 'lib/**/*.rb', '-','doc/**/*','spec/**/*_spec.rb']
|
38
|
+
t.options = %w(--markup-provider=redcarpet --markup=markdown --main=README.md)
|
39
|
+
t.options += ['-o', "yardoc"]
|
40
|
+
end
|
41
|
+
YARD::Config.load_plugin('yard-rspec')
|
42
|
+
|
43
|
+
namespace :yardoc do
|
44
|
+
task :clobber do
|
45
|
+
rm_r "yardoc" rescue nil
|
46
|
+
rm_r ".yardoc" rescue nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
task :clobber => "yardoc:clobber"
|
50
|
+
|
51
|
+
|
52
|
+
Gem::PackageTask.new(spec) do |pkg|
|
53
|
+
pkg.need_tar = true
|
54
|
+
pkg.need_zip = true
|
55
|
+
end
|
56
|
+
|
57
|
+
task :default => [:gem]
|
data/attr_readonly.gemspec
CHANGED
@@ -20,4 +20,12 @@ 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('yard')
|
25
|
+
spec.add_development_dependency('rdoc')
|
26
|
+
spec.add_development_dependency('roodi')
|
27
|
+
spec.add_development_dependency('code_statistics')
|
28
|
+
spec.add_development_dependency('yard-rspec')
|
29
|
+
spec.add_development_dependency('github_markup')
|
30
|
+
spec.add_development_dependency('redcarpet')
|
23
31
|
end
|
data/lib/attr_readonly.rb
CHANGED
@@ -1,8 +1,38 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
# Copyright Ultragreen (c) 2012-2�~B013
|
4
|
+
#---
|
5
|
+
# Author : Romain GEORGES
|
6
|
+
# type : gem component library
|
7
|
+
# obj : Methodic Module
|
8
|
+
#---
|
9
|
+
|
10
|
+
# require version is securing for debug
|
11
|
+
begin
|
12
|
+
require "attr_readonly/version"
|
13
|
+
rescue LoadError
|
14
|
+
puts 'debug'
|
15
|
+
end
|
2
16
|
|
17
|
+
# module Methodic
|
18
|
+
# @author Romain GEORGES <romain@ultragreen.net>
|
19
|
+
# @see http://www.ultragreen.net/projects/attr_reader
|
20
|
+
# @version 1.0.0
|
21
|
+
# @note this module include a method to be mix in Module (Class)
|
3
22
|
module AttrReadonly
|
4
23
|
|
5
|
-
|
24
|
+
|
25
|
+
# pretty accessor for specifying mandatories options
|
26
|
+
# @param [*Symbol] syms a list of symbols defining accessors to add
|
27
|
+
# @return [Array] Array of symbols methods name (accessors) created
|
28
|
+
# @example usage
|
29
|
+
# require 'attr_readonly'
|
30
|
+
# class Test
|
31
|
+
# attr_readonly :foo
|
32
|
+
# def initialize(foo: '')
|
33
|
+
# @foo = :foo
|
34
|
+
# end
|
35
|
+
# end
|
6
36
|
def attr_readonly *syms
|
7
37
|
syms.each do |method|
|
8
38
|
define_method(method){
|
@@ -14,8 +44,15 @@ module AttrReadonly
|
|
14
44
|
end
|
15
45
|
|
16
46
|
|
47
|
+
|
48
|
+
# reimplement Module
|
49
|
+
# adding AttrReadonly Mixin for attr_readonly macro
|
17
50
|
class Module
|
18
51
|
|
52
|
+
# include AttrReadonly
|
19
53
|
include AttrReadonly
|
20
54
|
|
21
55
|
end
|
56
|
+
|
57
|
+
|
58
|
+
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require './lib/attr_readonly.rb'
|
2
|
+
|
3
|
+
describe "Globale Conception" do
|
4
|
+
|
5
|
+
|
6
|
+
describe AttrReadonly do
|
7
|
+
subject { AttrReadonly }
|
8
|
+
specify { subject.should be_an_instance_of Module }
|
9
|
+
context "#attr_readonly" do
|
10
|
+
it "should be defined a method call :attr_readonly in the module" do
|
11
|
+
subject.method_defined?(:attr_readonly).should be_true
|
12
|
+
end
|
13
|
+
it "should accept a variable number of parameters" do
|
14
|
+
subject.method(:attr_readonly).arity.should == -1
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
describe Module do
|
21
|
+
subject { Module }
|
22
|
+
specify { subject.should be_an_instance_of Class }
|
23
|
+
it "should include module AttrReadonly" do
|
24
|
+
subject.include?(AttrReadonly).should be_true
|
25
|
+
end
|
26
|
+
it "should include method :attr_readonly"do
|
27
|
+
subject.method_defined?(:attr_readonly).should be_true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
describe "Test Class instance" do
|
33
|
+
|
34
|
+
before :all do
|
35
|
+
|
36
|
+
class Test
|
37
|
+
attr_readonly :array
|
38
|
+
attr_readonly :string
|
39
|
+
attr_readonly :hash
|
40
|
+
def initialize(array: [], hash: {}, string: "")
|
41
|
+
@array = array
|
42
|
+
@hash = hash
|
43
|
+
@string = string
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
subject { Test::new }
|
53
|
+
specify { subject.should be_an_instance_of Test }
|
54
|
+
|
55
|
+
describe "instance variables" do
|
56
|
+
it "should be exist @hash with an empty hash" do
|
57
|
+
subject.instance_variable_get('@hash').should == {}
|
58
|
+
end
|
59
|
+
it "should be exist @array with an empty array" do
|
60
|
+
subject.instance_variable_get('@array').should == []
|
61
|
+
end
|
62
|
+
it "should be exist @string with an empty string" do
|
63
|
+
subject.instance_variable_get('@string').should == ""
|
64
|
+
end
|
65
|
+
end
|
66
|
+
describe "Reader accessors" do
|
67
|
+
it "should include method :array" do
|
68
|
+
subject.methods.include?(:array).should be_true
|
69
|
+
end
|
70
|
+
it "should include method :string" do
|
71
|
+
subject.methods.include?(:string).should be_true
|
72
|
+
end
|
73
|
+
it "should include method :hash" do
|
74
|
+
subject.methods.include?(:hash).should be_true
|
75
|
+
end
|
76
|
+
end
|
77
|
+
describe "No writer accessors" do
|
78
|
+
it "should not include method :array=" do
|
79
|
+
subject.methods.include?(:array=).should be_false
|
80
|
+
end
|
81
|
+
it "should not include method :string=" do
|
82
|
+
subject.methods.include?(:string=).should be_false
|
83
|
+
end
|
84
|
+
it "should not include method :hash=" do
|
85
|
+
subject.methods.include?(:hash=).should be_false
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
describe "initials values for read accessors" do
|
90
|
+
it "should #hash return an empty hash" do
|
91
|
+
subject.hash.should == {}
|
92
|
+
end
|
93
|
+
it "should #array return an empty array" do
|
94
|
+
subject.array.should == []
|
95
|
+
end
|
96
|
+
it "should #string return an empty string" do
|
97
|
+
subject.string.should == ""
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe "Attempt to write by attributs object methods" do
|
102
|
+
it "should raise an exception if trying to write hash[:test] = 'test'" do
|
103
|
+
lambda {subject.hash[:test] = 'test'}.should raise_error RuntimeError
|
104
|
+
lambda {subject.hash.store(:key,'test')}.should raise_error RuntimeError
|
105
|
+
lambda {subject.hash.merge!({:key => 'test'})}.should raise_error RuntimeError
|
106
|
+
end
|
107
|
+
it "should raise an exception if trying to write array[1] = 'test'" do
|
108
|
+
lambda {subject.array[1] = 'test'}.should raise_error RuntimeError
|
109
|
+
lambda {subject.array.push('test')}.should raise_error RuntimeError
|
110
|
+
end
|
111
|
+
it "should raise an exception if trying to write string << 'test'" do
|
112
|
+
lambda {subject.string << 'test' }.should raise_error RuntimeError
|
113
|
+
lambda {subject.string.concat(33)}.should raise_error RuntimeError
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "Getting the instance variable via the accessors could be done, if set by the inside of the Object (simulate via instance_variable_set)" do
|
119
|
+
it "should #hash return {:test => 'test'}" do
|
120
|
+
subject.instance_variable_set(:@hash,{:test => 'test'})
|
121
|
+
subject.hash.should == {:test => 'test'}
|
122
|
+
end
|
123
|
+
it "should #array return [:test]" do
|
124
|
+
subject.instance_variable_set(:@array,[:test])
|
125
|
+
subject.array.should == [:test]
|
126
|
+
end
|
127
|
+
it "should #string return 'test'" do
|
128
|
+
subject.instance_variable_set(:@string,'test')
|
129
|
+
subject.string.should == "test"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
data/spec/init_spec.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "spec_helper"
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper.rb"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
|
+
config.run_all_when_everything_filtered = true
|
10
|
+
config.filter_run :focus
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'rspec'
|
15
|
+
|
16
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
AssignmentInConditionalCheck:
|
2
|
+
CaseMissingElseCheck:
|
3
|
+
ClassLineCountCheck:
|
4
|
+
line_count: 300
|
5
|
+
ClassNameCheck:
|
6
|
+
pattern: !ruby/regexp /^[A-Z][a-zA-Z0-9]*$/
|
7
|
+
#ClassVariableCheck:
|
8
|
+
CyclomaticComplexityBlockCheck:
|
9
|
+
complexity: 5
|
10
|
+
CyclomaticComplexityMethodCheck:
|
11
|
+
complexity: 10
|
12
|
+
EmptyRescueBodyCheck:
|
13
|
+
ForLoopCheck:
|
14
|
+
MethodLineCountCheck:
|
15
|
+
line_count: 30
|
16
|
+
MethodNameCheck:
|
17
|
+
pattern: !ruby/regexp /^[_a-z<>=\[|+-\/\*`]+[_a-z0-9_<>=~@\[\]]*[=!\?]?$/
|
18
|
+
# MissingForeignKeyIndexCheck:
|
19
|
+
ModuleLineCountCheck:
|
20
|
+
line_count: 500
|
21
|
+
ModuleNameCheck:
|
22
|
+
pattern: !ruby/regexp /^[A-Z][a-zA-Z0-9]*$/
|
23
|
+
ParameterNumberCheck:
|
24
|
+
parameter_count: 5
|
25
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: attr_readonly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Romain GEORGES
|
@@ -38,6 +38,118 @@ 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: yard
|
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: rdoc
|
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: roodi
|
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: code_statistics
|
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'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yard-rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: github_markup
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: redcarpet
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
41
153
|
description: Provide a new macro like attr_accessor to make real read_only accessors
|
42
154
|
to frozen dup of the attributs given in parameters
|
43
155
|
email:
|
@@ -54,6 +166,10 @@ files:
|
|
54
166
|
- attr_readonly.gemspec
|
55
167
|
- lib/attr_readonly.rb
|
56
168
|
- lib/attr_readonly/version.rb
|
169
|
+
- spec/attr_readonly_spec.rb
|
170
|
+
- spec/init_spec.rb
|
171
|
+
- spec/spec_helper.rb
|
172
|
+
- ultragreen_roodi_coding_convention.yml
|
57
173
|
homepage: ''
|
58
174
|
licenses:
|
59
175
|
- BSD
|
@@ -78,4 +194,7 @@ rubygems_version: 2.0.7
|
|
78
194
|
signing_key:
|
79
195
|
specification_version: 4
|
80
196
|
summary: Provide a new macro like attr_accessor to make real read_only accessors
|
81
|
-
test_files:
|
197
|
+
test_files:
|
198
|
+
- spec/attr_readonly_spec.rb
|
199
|
+
- spec/init_spec.rb
|
200
|
+
- spec/spec_helper.rb
|