meta_instance 1.0.2 → 1.1.0

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.
@@ -1,3 +1,3 @@
1
1
  module MetaInstance
2
- VERSION = "1.0.2"
3
- end
2
+ VERSION = "1.1.0"
3
+ end
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.version = MetaInstance::VERSION
10
10
  s.platform = Gem::Platform::RUBY
11
11
  s.license = "MIT"
12
- s.authors = ["L. Preston Sego III"]
12
+ s.authors = ["Thomas Sawyer", "L. Preston Sego III"]
13
13
  s.email = "LPSego3+dev@gmail.com"
14
14
  s.homepage = "https://github.com/NullVoxPopuli/MetaInstance"
15
15
  s.summary = "MetaInstance-#{MetaInstance::VERSION}"
@@ -21,10 +21,11 @@ Gem::Specification.new do |s|
21
21
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
22
22
  s.require_paths = ["lib"]
23
23
 
24
+ s.add_runtime_dependency "activesupport"
25
+
24
26
 
25
27
  s.add_development_dependency "bundler"
26
28
  s.add_development_dependency "rspec"
27
29
  s.add_development_dependency "pry-byebug"
28
30
  s.add_development_dependency "codeclimate-test-reporter"
29
-
30
- end
31
+ end
@@ -0,0 +1,123 @@
1
+ require 'spec_helper'
2
+
3
+ class Song
4
+ attr_accessor :title
5
+ attr_accessor :artist
6
+ attr_accessor :year
7
+
8
+ def initialize(title, artist, year)
9
+ @title = title
10
+ @artist = artist
11
+ @year = year
12
+ end
13
+ end
14
+
15
+ describe MetaInstance do
16
+
17
+ let(:song){ Song.new("Paranoid", "Black Sabbath", 1970) }
18
+
19
+ describe '#variables' do
20
+
21
+ it 'returns instance variables as an array of symbols' do
22
+ actual = song.instance.variables
23
+ expected = [:@title, :@artist, :@year]
24
+ expect(actual).to eq expected
25
+ end
26
+
27
+ end
28
+
29
+ describe '#get' do
30
+ it 'gets the instance variable' do
31
+ actual = song.instance.get(:title)
32
+ expect(actual).to eq 'Paranoid'
33
+ end
34
+ end
35
+
36
+ describe '#set' do
37
+ it 'sets the instance varibale' do
38
+ expected = song.instance.get(:title) + '!!!'
39
+ song.instance.set(:title, expected)
40
+ actual = song.instance.get(:title)
41
+
42
+ expect(actual).to eq expected
43
+ end
44
+ end
45
+
46
+ describe '#[]' do
47
+ it 'retrieves an instance variable' do
48
+ actual = song.instance[:title]
49
+ expect(actual).to eq 'Paranoid'
50
+ end
51
+ end
52
+
53
+ describe '#to_h' do
54
+ it 'converts the list of instance variables to a hash' do
55
+ actual = song.instance.to_h
56
+ expected = {:title => "Paranoid", :artist => "Black Sabbath", :year => 1970}
57
+
58
+ expect(actual).to eq expected
59
+ end
60
+
61
+ it 'converts the list of instance variables to a hash with @ in the keys' do
62
+ actual = song.instance.to_h(true)
63
+ expected = {:@title => "Paranoid", :@artist => "Black Sabbath", :@year => 1970}
64
+
65
+ expect(actual).to eq expected
66
+ end
67
+ end
68
+
69
+ describe '#size' do
70
+ it 'counts the number of instance variables' do
71
+ actual = song.instance.size
72
+ expect(actual).to eq 3
73
+ end
74
+ end
75
+
76
+ describe '#<<' do
77
+ it 'sets an instance variable' do
78
+ song.instance << [:something, :else]
79
+ actual = song.instance.get(:something)
80
+
81
+ expect(actual).to eq :else
82
+ end
83
+ end
84
+
85
+ describe '#remove' do
86
+ it 'removes an instance variable' do
87
+ song.instance.remove(:title)
88
+ actual = song.instance.get(:title)
89
+
90
+ expect(actual).to eq nil
91
+ end
92
+ end
93
+
94
+ describe '#update' do
95
+ it 'updates an instance variable' do
96
+ song.instance.update(title: 'new title', other: 'var')
97
+ actual = song.instance.get(:title)
98
+ actual2 = song.instance.get(:other)
99
+
100
+ expect(actual).to eq 'new title'
101
+ expect(actual2).to eq 'var'
102
+ end
103
+ end
104
+
105
+ describe '#names' do
106
+ it 'returns the list of instance variables' do
107
+ actual = song.instance.keys
108
+
109
+ expect(actual).to eq [:title, :artist, :year]
110
+ end
111
+ end
112
+
113
+ describe '#values' do
114
+ it 'retrurns a list of values of the instance variables' do
115
+ actual = song.instance.values
116
+ expected = ["Paranoid", "Black Sabbath", 1970]
117
+
118
+ expect(actual).to eq expected
119
+ end
120
+ end
121
+
122
+
123
+ end
@@ -1,6 +1,13 @@
1
+ class Foo
2
+ include MetaInstance::InstanceMethodDefine
3
+
4
+ def bar; "bar"; end
5
+ end
6
+
7
+
1
8
  require 'spec_helper'
2
9
 
3
- describe MetaInstance do
10
+ describe MetaInstance::InstanceMethodDefine do
4
11
  let(:original){"bar"}
5
12
  let(:f){ Foo.new }
6
13
 
@@ -8,12 +15,12 @@ describe MetaInstance do
8
15
  expect(f.bar).to eq original
9
16
  end
10
17
 
11
- context "instance_define" do
18
+ context "define_method" do
12
19
 
13
20
  context "without args" do
14
21
 
15
22
  before(:each) do
16
- f.instance_define(:bar) do
23
+ f.define_method(:bar) do
17
24
  "foo"
18
25
  end
19
26
  end
@@ -31,7 +38,7 @@ describe MetaInstance do
31
38
  context "with args" do
32
39
 
33
40
  before(:each) do
34
- f.instance_define(:bar) do |number|
41
+ f.define_method(:bar) do |number|
35
42
  number * 2
36
43
  end
37
44
 
@@ -42,22 +49,22 @@ describe MetaInstance do
42
49
  end
43
50
  end
44
51
 
45
- context "backup_instance_method" do
52
+ context "backup_method" do
46
53
  before(:each) do
47
- f.backup_instance_method(:bar)
54
+ f.backup_method(:bar)
48
55
  end
49
56
 
50
57
  it "has the original method accessible" do
51
- name = "#{MetaInstance::METHOD_BACKUP_KEY}bar"
58
+ name = "#{MetaInstance::InstanceMethodDefine::METHOD_BACKUP_KEY}bar"
52
59
  expect(f.send(name)).to eq original
53
60
  end
54
61
  end
55
62
 
56
- context "restore_instance_method" do
63
+ context "restore_method" do
57
64
  before(:each) do
58
- f.backup_instance_method(:bar)
59
- f.instance_define(:bar) { "different" }
60
- f.restore_instance_method(:bar)
65
+ f.backup_method(:bar)
66
+ f.define_method(:bar) { "different" }
67
+ f.restore_method(:bar)
61
68
  end
62
69
 
63
70
  it "returns the original" do
@@ -65,12 +72,12 @@ describe MetaInstance do
65
72
  end
66
73
 
67
74
  it "doesn't respond_to the backup method" do
68
- expect(f).to_not respond_to "#{MetaInstance::METHOD_BACKUP_KEY}bar"
75
+ expect(f).to_not respond_to "#{MetaInstance::InstanceMethodDefine::METHOD_BACKUP_KEY}bar"
69
76
  end
70
77
 
71
78
  it "doesn't remove a method that isn't there" do
72
79
  expect(f).to_not respond_to(:foobar)
73
- expect(f.restore_instance_method(:foobar)).to be_nil
80
+ expect(f.restore_method(:foobar)).to be_nil
74
81
  end
75
82
  end
76
83
 
@@ -86,7 +93,7 @@ describe MetaInstance do
86
93
  end
87
94
 
88
95
  it "has the original method accessible" do
89
- name = "#{MetaInstance::METHOD_BACKUP_KEY}bar"
96
+ name = "#{MetaInstance::InstanceMethodDefine::METHOD_BACKUP_KEY}bar"
90
97
  expect(f.send(name)).to eq original
91
98
  end
92
99
 
@@ -102,7 +109,7 @@ describe MetaInstance do
102
109
  end
103
110
 
104
111
  it "does not re-backup the method" do
105
- name = "#{MetaInstance::METHOD_BACKUP_KEY}bar"
112
+ name = "#{MetaInstance::InstanceMethodDefine::METHOD_BACKUP_KEY}bar"
106
113
  expect(f.send(name)).to eq original
107
114
  end
108
115
 
File without changes
@@ -1,4 +1,3 @@
1
-
2
1
  require "rubygems"
3
2
  require "bundler/setup"
4
3
 
@@ -6,13 +5,12 @@ require "pry-byebug" # binding.pry to debug!
6
5
 
7
6
  # Coverage
8
7
  require "codeclimate-test-reporter"
9
- ENV['CODECLIMATE_REPO_TOKEN'] = "53c2221e147d16cbe8a445915377ff528b291a9534f5cb72f6abf8df13bd06f4"
8
+ ENV['CODECLIMATE_REPO_TOKEN'] = "97758529c5c06792d2f683e15e6ffe819ac16d140fe244640dcf103f1d172fc4"
10
9
  CodeClimate::TestReporter.start
11
10
 
12
11
  # This Gem
13
12
  require "meta_instance"
14
13
 
15
- Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each {|file| require file }
16
14
 
17
15
  # This file was generated by the `rspec --init` command. Conventionally, all
18
16
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
metadata CHANGED
@@ -1,15 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: meta_instance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
+ - Thomas Sawyer
7
8
  - L. Preston Sego III
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-09-18 00:00:00.000000000 Z
12
+ date: 2015-05-27 00:00:00.000000000 Z
12
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
13
28
  - !ruby/object:Gem::Dependency
14
29
  name: bundler
15
30
  requirement: !ruby/object:Gem::Requirement
@@ -72,19 +87,27 @@ executables: []
72
87
  extensions: []
73
88
  extra_rdoc_files: []
74
89
  files:
90
+ - ".codeclimate.yml"
75
91
  - ".gitignore"
76
- - ".rspec"
77
92
  - ".travis.yml"
78
93
  - Gemfile
79
- - LICENSE
94
+ - Gemfile.lock
95
+ - HISTORY.md
96
+ - LICENSE.txt
80
97
  - README.md
81
- - Rakefile
98
+ - docs/instance.md
99
+ - docs/module.md
82
100
  - lib/meta_instance.rb
101
+ - lib/meta_instance/freeze_method.rb
102
+ - lib/meta_instance/instance_method_define.rb
103
+ - lib/meta_instance/module_extensions.rb
104
+ - lib/meta_instance/proxy.rb
83
105
  - lib/meta_instance/version.rb
84
106
  - meta_instance.gemspec
85
- - spec/meta_instance_spec.rb
107
+ - spec/instance_spec.rb
108
+ - spec/meta_instance/instance_method_define_spec.rb
109
+ - spec/module_spec.rb
86
110
  - spec/spec_helper.rb
87
- - spec/support/foo.rb
88
111
  homepage: https://github.com/NullVoxPopuli/MetaInstance
89
112
  licenses:
90
113
  - MIT
@@ -105,11 +128,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
128
  version: '0'
106
129
  requirements: []
107
130
  rubyforge_project:
108
- rubygems_version: 2.4.1
131
+ rubygems_version: 2.4.6
109
132
  signing_key:
110
133
  specification_version: 4
111
- summary: MetaInstance-1.0.2
134
+ summary: MetaInstance-1.1.0
112
135
  test_files:
113
- - spec/meta_instance_spec.rb
136
+ - spec/instance_spec.rb
137
+ - spec/meta_instance/instance_method_define_spec.rb
138
+ - spec/module_spec.rb
114
139
  - spec/spec_helper.rb
115
- - spec/support/foo.rb
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --format progress
data/LICENSE DELETED
@@ -1,22 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2014 L. Preston Sego III
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
22
-
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"
@@ -1,5 +0,0 @@
1
- class Foo
2
- include MetaInstance
3
-
4
- def bar; "bar"; end
5
- end