mabbre 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c5db2c5a298a84213898b57446f49f5f19f010b0
4
+ data.tar.gz: 1398a1fc8fef6a48ebfc1639674c3bf88369ec13
5
+ SHA512:
6
+ metadata.gz: 98edd86d51eed250ee24289b614e4b986aaae0f6b2c22d40eba048cca89849050e6b6802d7169dcbe82e259fe634cfdd57c75ee193604d8898d90f3c5a7afca1
7
+ data.tar.gz: 2e1e614d03708c085c1dc5b4de9765ce677c8217344ae2ad636f2ae1a23a49d030bcf38bba157e5b4770a103da2e9b3581f132b1fcacd82b3c0bc05c0656b6ec
data/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ .buildpath
16
+ .project
data/.rubocop.yml ADDED
@@ -0,0 +1,8 @@
1
+ Metrics/LineLength:
2
+ Max: 120
3
+ Style/HashSyntax:
4
+ EnforcedStyle: hash_rockets
5
+ Style/SpaceInsideBlockBraces:
6
+ SpaceBeforeBlockParameters: false
7
+ Style/StringLiterals:
8
+ EnforcedStyle: double_quotes
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.5
data/.travis.yml ADDED
@@ -0,0 +1,17 @@
1
+ language: ruby
2
+ rvm:
3
+ - ruby-head
4
+ - 2.1
5
+ - 2.0
6
+ - 1.9.3
7
+ - 1.9.2
8
+ - 1.8.7
9
+ - jruby-head
10
+ - jruby-1.7
11
+ - jruby-1.6
12
+ - rbx
13
+ bundler_args: "--without development"
14
+ addons:
15
+ code_climate:
16
+ repo_token:
17
+ secure: G3aVZeyCMZutQxsLu+hYHWgR/kqeLyn120obZwZ/17xc/VFx1y1F5f9Cqw/awj/f8+xl+UinOp69AM8w1JAEqD5I4N8L1nLJja+CSrWYUxSBOpGua6CtrEWB1VLyoxdXUNOL1oGQenKXZqQtbHRyUPuxebaP1K1XUHO3X5wnb6k=
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source "https://rubygems.org"
2
+ gemspec
3
+
4
+ group :development do
5
+ gem "byebug", "~> 3.5.1"
6
+ gem "guard-rspec", "~> 4.3.1"
7
+ gem "guard-rubocop", "~> 1.2.0"
8
+ gem "libnotify", "~> 0.8.4"
9
+ gem "pry", "~> 0.10.1"
10
+ gem "rubocop", "~> 0.27.1"
11
+ end
12
+
13
+ group :development, :test do
14
+ gem "codeclimate-test-reporter", "~> 0.4.1"
15
+ gem "rake", "~> 10.3.2"
16
+ gem "rspec", "~> 3.1.0"
17
+ gem "simplecov", "~> 0.9.1"
18
+ end
data/Guardfile ADDED
@@ -0,0 +1,12 @@
1
+ guard :rspec, :cmd => "rspec -fd" do
2
+ watch(/^spec\/.+_spec\.rb$/)
3
+ watch(/^lib\/(.+)\.rb$/) {|m| "spec/lib/#{m[1]}_spec.rb" }
4
+ watch("spec/spec_helper.rb") { "spec" }
5
+ end
6
+
7
+ guard :rubocop do
8
+ watch(/^.+\.rb$/)
9
+ watch(/^(?:.+\/)?\.rubocop\.yml$/) {|m| File.dirname(m[0]) }
10
+ watch(/^(?:.+\/)?.+\.gemspec$/)
11
+ watch(/^(?:.+\/)?(?:Gem|Rake)file$/)
12
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Gabriel de Oliveira
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.
data/README.md ADDED
@@ -0,0 +1,81 @@
1
+ # MAbbre
2
+
3
+ [![Gem Version](http://img.shields.io/gem/v/mabbre.svg)][gem]
4
+ [![Build Status](http://img.shields.io/travis/gdeoliveira/mabbre.svg)][travis]
5
+ [![Code Climate](http://img.shields.io/codeclimate/github/gdeoliveira/mabbre.svg)][codeclimate]
6
+ [![Test Coverage](http://img.shields.io/codeclimate/coverage/github/gdeoliveira/mabbre.svg)][codeclimate]
7
+ [![Dependency Status](http://img.shields.io/gemnasium/gdeoliveira/mabbre.svg)][gemnasium]
8
+ [![Inline docs](http://inch-ci.org/github/gdeoliveira/mabbre.svg?branch=master)][inch-ci]
9
+
10
+ [gem]: https://rubygems.org/gems/mabbre
11
+ [travis]: http://travis-ci.org/gdeoliveira/mabbre
12
+ [codeclimate]: https://codeclimate.com/github/gdeoliveira/mabbre
13
+ [gemnasium]: https://gemnasium.com/gdeoliveira/mabbre
14
+ [inch-ci]: http://inch-ci.org/github/gdeoliveira/mabbre
15
+
16
+ MAbbre allows a group of methods in a Class or a Module to be accessed using an abbreviated form. These methods can be defined anywhere within a hierarchy of inclusion and/or inheritance.
17
+
18
+ ## Installation
19
+
20
+ Add this line to your application's Gemfile:
21
+
22
+ ```ruby
23
+ gem "mabbre"
24
+ ```
25
+
26
+ And then execute:
27
+
28
+ $ bundle
29
+
30
+ Or install it yourself as:
31
+
32
+ $ gem install mtrack
33
+
34
+ ## Usage
35
+
36
+ Step 1: Define methods within an `allow_abbreviated` block in a Class or a Module:
37
+
38
+ ```ruby
39
+ module M
40
+ extend MAbbre::Mixin
41
+ allow_abbreviated do
42
+ def very_long_method
43
+ "This method has a very long name."
44
+ end
45
+ end
46
+ end
47
+
48
+ class C
49
+ include M
50
+ allow_abbreviated do
51
+ def another_long_method
52
+ "Another method with a long name."
53
+ end
54
+ end
55
+ end
56
+
57
+ class D < C
58
+ allow_abbreviated do
59
+ def yet_another_long_method
60
+ "Yet another looong method name."
61
+ end
62
+ end
63
+ end
64
+ ```
65
+
66
+ Step 2: Call these methods using a shortened name!
67
+
68
+ ```ruby
69
+ o = D.new
70
+ o.very #=> "This method has a very long name."
71
+ o.another #=> "Another method with a long name."
72
+ o.yet #=> "Yet another looong method name."
73
+ ```
74
+
75
+ ## Contributing
76
+
77
+ 1. Fork it ( https://github.com/gdeoliveira/mabbre/fork )
78
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
79
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
80
+ 4. Push to the branch (`git push origin my-new-feature`)
81
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ Dir[File.join(File.dirname(__FILE__), "tasks", "**", "*.rb")].each do |file|
5
+ require file
6
+ end
7
+
8
+ RSpec::Core::RakeTask.new(:spec)
9
+
10
+ task :default => :coverage
@@ -0,0 +1,51 @@
1
+ require "mabbre/interpreter"
2
+
3
+ module MAbbre
4
+ ##
5
+ # This module is extended by MAbbre::Mixin and all custom extensions of MAbbre::Mixin. You should not extend this
6
+ # module directly, instead simply include MAbbre::Mixin into your custom extension:
7
+ #
8
+ # module MyExtension
9
+ # include MAbbre::Mixin
10
+ # # Define custom methods here.
11
+ # end
12
+ #
13
+ # module M
14
+ # extend MyExtension
15
+ # # You can use MAbbre's and MyExtension's methods here.
16
+ # end
17
+ #
18
+ # If you're overriding the +extended+ or +included+ methods in your custom extension always make sure to call +super+,
19
+ # so MAbbre can be properly initialized.
20
+ module Extension
21
+ private
22
+
23
+ ##
24
+ # call-seq:
25
+ # extended(submodule) => submodule
26
+ #
27
+ # Includes MAbbre::Interpreter in +submodule+ (the Class or Module that extended MAbbre::Mixin).
28
+ #
29
+ # Returns passed +submodule+.
30
+ def extended(submodule)
31
+ super
32
+ submodule.instance_eval { include Interpreter }
33
+ submodule
34
+ end
35
+
36
+ ##
37
+ # call-seq:
38
+ # included(submodule) => submodule
39
+ #
40
+ # Initializes +submodule+ as a custom extension of MAbbre::Mixin. The new custom extension +submodule+ can then be
41
+ # extended by a Class or Module just like MAbbre::Mixin, or included further to generate other, more specific custom
42
+ # extensions.
43
+ #
44
+ # Returns passed +submodule+.
45
+ def included(submodule)
46
+ super
47
+ submodule.instance_eval { extend Extension }
48
+ submodule
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,23 @@
1
+ module MAbbre
2
+ ##
3
+ # This module is added to the method lookup path and interprets abbreviations for tracked methods.
4
+ module Interpreter
5
+ private
6
+
7
+ ##
8
+ # call-seq:
9
+ # method_missing(name, *args)
10
+ #
11
+ # If a suitable candidate for abbreviation +name+ is found it will be called using +args+. Otherwise it will let
12
+ # +super+ handle the missing method.
13
+ def method_missing(name, *args)
14
+ matched = nil
15
+
16
+ if self.class.tracked_methods(MAbbre).one? {|m| matched = m if m.to_s =~ /\A#{name}/ }
17
+ send(matched, *args)
18
+ else
19
+ super
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,48 @@
1
+ require "mtrack"
2
+ require "mabbre/extension"
3
+
4
+ module MAbbre
5
+ ##
6
+ # This module provides the #allow_abbreviated method to Classes or Modules that extend it.
7
+ module Mixin
8
+ include MTrack::Mixin
9
+ extend Extension
10
+
11
+ private
12
+
13
+ ##
14
+ # call-seq:
15
+ # allow_abbreviated() => set
16
+ # allow_abbreviated() {|| ... } => set
17
+ #
18
+ # If a block is provided all the methods defined within the block will be accessible by using a shortened version of
19
+ # their name as long as no abiguities are found between them.
20
+ #
21
+ # Returns a set containing the methods that were defined within the block.
22
+ #
23
+ # class C
24
+ # extend MAbbre::Mixin
25
+ # allow_abbreviated do
26
+ # def long_method; end
27
+ # def longer_method; end
28
+ # def longest_method; end
29
+ # end
30
+ # end #=> #<Set: {:long_method, :longer_method, :longest_method}>
31
+ def allow_abbreviated(&b)
32
+ track_methods(MAbbre, &b)
33
+ end
34
+
35
+ ##
36
+ # call-seq:
37
+ # included(submodule) => submodule
38
+ #
39
+ # Adds the #allow_abbreviated method to +submodule+ by extending Mixin.
40
+ #
41
+ # Returns passed +submodule+.
42
+ def included(submodule)
43
+ super
44
+ submodule.instance_eval { extend Mixin }
45
+ submodule
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,39 @@
1
+ ##
2
+ # MAbbre allows a group of methods in a Class or a Module to be accessed using an abbreviated form. These methods can
3
+ # be defined anywhere within a hierarchy of inclusion and/or inheritance.
4
+ #
5
+ # module M
6
+ # extend MAbbre::Mixin
7
+ # allow_abbreviated do
8
+ # def very_long_method
9
+ # "This method has a very long name."
10
+ # end
11
+ # end
12
+ # end
13
+ #
14
+ # class C
15
+ # include M
16
+ # allow_abbreviated do
17
+ # def another_long_method
18
+ # "Another method with a long name."
19
+ # end
20
+ # end
21
+ # end
22
+ #
23
+ # class D < C
24
+ # allow_abbreviated do
25
+ # def yet_another_long_method
26
+ # "Yet another looong method name."
27
+ # end
28
+ # end
29
+ # end
30
+ #
31
+ # o = D.new
32
+ # o.very #=> "This method has a very long name."
33
+ # o.another #=> "Another method with a long name."
34
+ # o.yet #=> "Yet another looong method name."
35
+ module MAbbre
36
+ ##
37
+ # Current version of MAbbre.
38
+ VERSION = "0.0.1"
39
+ end
data/lib/mabbre.rb ADDED
@@ -0,0 +1,2 @@
1
+ require "mabbre/mixin"
2
+ require "mabbre/version"
data/mabbre.gemspec ADDED
@@ -0,0 +1,21 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "mabbre/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mabbre"
8
+ spec.version = MAbbre::VERSION
9
+ spec.authors = ["Gabriel de Oliveira"]
10
+ spec.email = ["deoliveira.gab@gmail.com"]
11
+ spec.summary = "Write a short summary. Required."
12
+ spec.description = "Write a longer description. Optional."
13
+ spec.homepage = "https://github.com/gdeoliveira/mabbre"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.test_files = spec.files.grep(/^(test|spec|features)\//)
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency "mtrack", "~> 1.1.0"
21
+ end
data/spec/.rubocop.yml ADDED
@@ -0,0 +1,4 @@
1
+ inherit_from:
2
+ - ../.rubocop.yml
3
+ Metrics/LineLength:
4
+ Max: 140
@@ -0,0 +1,215 @@
1
+ require "spec_helper"
2
+
3
+ METHOD_DEFINITION = proc { __method__ }
4
+
5
+ describe MAbbre::Mixin do
6
+ describe "#allow_abbreviated" do
7
+ it "is added after extending #{described_class}" do
8
+ mod = ::Module.new
9
+ expect(mod.private_methods.map(&:to_sym)).not_to include(:allow_abbreviated)
10
+ mod.module_eval { extend MAbbre::Mixin }
11
+ expect(mod.private_methods.map(&:to_sym)).to include(:allow_abbreviated)
12
+ end
13
+
14
+ context "block given" do
15
+ it "returns a set with the methods that can be abbreviated" do
16
+ mod = ::Module.new.module_eval do
17
+ extend MAbbre::Mixin
18
+ allow_abbreviated do
19
+ define_method :qwe, &METHOD_DEFINITION
20
+ define_method :asd, &METHOD_DEFINITION
21
+ define_method :zxc, &METHOD_DEFINITION
22
+ end
23
+ end
24
+ expect(mod).to be_a(Set)
25
+ expect(mod).to match_array([:qwe, :asd, :zxc])
26
+ end
27
+ end
28
+
29
+ context "no block given" do
30
+ it "returns an empty set" do
31
+ mod = ::Module.new.module_eval do
32
+ extend MAbbre::Mixin
33
+ allow_abbreviated
34
+ end
35
+ expect(mod).to be_a(Set)
36
+ expect(mod).to be_empty
37
+ end
38
+ end
39
+ end
40
+
41
+ describe "hierarchy" do
42
+ let(:base_extension) do
43
+ Module.new.tap do |m|
44
+ m.module_eval do
45
+ include MAbbre::Mixin
46
+ define_method :base_extension_meth, &METHOD_DEFINITION
47
+ end
48
+ end
49
+ end
50
+
51
+ let(:sub_extension) do
52
+ be = base_extension
53
+ Module.new.tap do |m|
54
+ m.module_eval do
55
+ include be
56
+ define_method :sub_extension_meth, &METHOD_DEFINITION
57
+ end
58
+ end
59
+ end
60
+
61
+ let(:base_module) do
62
+ se = sub_extension
63
+ Module.new.tap do |m|
64
+ m.module_eval do
65
+ extend se
66
+ define_method :meth_00_extra, &METHOD_DEFINITION
67
+ allow_abbreviated do
68
+ define_method :meth_01_extra, &METHOD_DEFINITION
69
+ define_method :meth_02_extra, &METHOD_DEFINITION
70
+ define_method :meth_03_extra, &METHOD_DEFINITION
71
+ end
72
+ define_method :meth_09_extra, &METHOD_DEFINITION
73
+ end
74
+ end
75
+ end
76
+
77
+ let(:sub_module) do
78
+ bm = base_module
79
+ Module.new.tap do |m|
80
+ m.module_eval do
81
+ include bm
82
+ define_method :meth_10_extra, &METHOD_DEFINITION
83
+ allow_abbreviated do
84
+ define_method :meth_11_extra, &METHOD_DEFINITION
85
+ define_method :meth_12_extra, &METHOD_DEFINITION
86
+ define_method :meth_13_extra, &METHOD_DEFINITION
87
+ end
88
+ define_method :meth_19_extra, &METHOD_DEFINITION
89
+ end
90
+ end
91
+ end
92
+
93
+ let(:super_class) do
94
+ sm = sub_module
95
+ Class.new.tap do |c|
96
+ c.class_eval do
97
+ include sm
98
+ define_method :meth_20_extra, &METHOD_DEFINITION
99
+ allow_abbreviated do
100
+ define_method :meth_21_extra, &METHOD_DEFINITION
101
+ define_method :meth_22_extra, &METHOD_DEFINITION
102
+ define_method :meth_23_extra, &METHOD_DEFINITION
103
+ end
104
+ define_method :meth_29_extra, &METHOD_DEFINITION
105
+ end
106
+ end
107
+ end
108
+
109
+ let(:sub_class) do
110
+ sc = super_class
111
+ Class.new(sc).tap do |c|
112
+ c.class_eval do
113
+ define_method :meth_30_extra, &METHOD_DEFINITION
114
+ allow_abbreviated do
115
+ define_method :meth_31_extra, &METHOD_DEFINITION
116
+ define_method :meth_32_extra, &METHOD_DEFINITION
117
+ define_method :meth_33_extra, &METHOD_DEFINITION
118
+ end
119
+ define_method :meth_39_extra, &METHOD_DEFINITION
120
+ end
121
+ end
122
+ end
123
+
124
+ context "base module" do
125
+ subject { base_module }
126
+
127
+ it "has custom extensions as ancestors" do
128
+ expect(subject.singleton_methods.map(&:to_sym)).to include(:base_extension_meth, :sub_extension_meth)
129
+ end
130
+
131
+ it "tracks methods that can be abbreviated" do
132
+ expect(subject.tracked_methods(MAbbre)).to match_array([:meth_01_extra, :meth_02_extra, :meth_03_extra])
133
+ end
134
+ end
135
+
136
+ context "sub module" do
137
+ subject { sub_module }
138
+
139
+ it "tracks methods that can be abbreviated" do
140
+ expect(subject.tracked_methods(MAbbre)).to match_array([:meth_01_extra, :meth_02_extra, :meth_03_extra,
141
+ :meth_11_extra, :meth_12_extra, :meth_13_extra])
142
+ end
143
+ end
144
+
145
+ context "super class" do
146
+ subject { super_class }
147
+
148
+ it "tracks methods that can be abbreviated" do
149
+ expect(subject.tracked_methods(MAbbre)).to match_array([:meth_01_extra, :meth_02_extra, :meth_03_extra,
150
+ :meth_11_extra, :meth_12_extra, :meth_13_extra,
151
+ :meth_21_extra, :meth_22_extra, :meth_23_extra])
152
+ end
153
+
154
+ describe "instance" do
155
+ subject { super_class.new }
156
+
157
+ it "avoids calling ambiguous methods" do
158
+ expect { subject.meth }.to raise_error(NoMethodError)
159
+ expect { subject.meth_0 }.to raise_error(NoMethodError)
160
+ expect { subject.meth_1 }.to raise_error(NoMethodError)
161
+ expect { subject.meth_2 }.to raise_error(NoMethodError)
162
+ end
163
+
164
+ it "calls resolvable methods that can be abbreviated" do
165
+ expect(subject.meth_01).to be(:meth_01_extra)
166
+ expect(subject.meth_12).to be(:meth_12_extra)
167
+ expect(subject.meth_23).to be(:meth_23_extra)
168
+ end
169
+
170
+ it "avoids calling resolvable methods that can't be abbreviated" do
171
+ expect { subject.meth_00 }.to raise_error(NoMethodError)
172
+ expect { subject.meth_10 }.to raise_error(NoMethodError)
173
+ expect { subject.meth_20 }.to raise_error(NoMethodError)
174
+ end
175
+ end
176
+ end
177
+
178
+ context "sub class" do
179
+ subject { sub_class }
180
+
181
+ it "tracks methods that can be abbreviated" do
182
+ expect(subject.tracked_methods(MAbbre)).to match_array([:meth_01_extra, :meth_02_extra, :meth_03_extra,
183
+ :meth_11_extra, :meth_12_extra, :meth_13_extra,
184
+ :meth_21_extra, :meth_22_extra, :meth_23_extra,
185
+ :meth_31_extra, :meth_32_extra, :meth_33_extra])
186
+ end
187
+
188
+ describe "instance" do
189
+ subject { sub_class.new }
190
+
191
+ it "avoids calling ambiguous methods" do
192
+ expect { subject.meth }.to raise_error(NoMethodError)
193
+ expect { subject.meth_0 }.to raise_error(NoMethodError)
194
+ expect { subject.meth_1 }.to raise_error(NoMethodError)
195
+ expect { subject.meth_2 }.to raise_error(NoMethodError)
196
+ expect { subject.meth_3 }.to raise_error(NoMethodError)
197
+ end
198
+
199
+ it "calls resolvable methods that can be abbreviated" do
200
+ expect(subject.meth_02).to be(:meth_02_extra)
201
+ expect(subject.meth_13).to be(:meth_13_extra)
202
+ expect(subject.meth_21).to be(:meth_21_extra)
203
+ expect(subject.meth_32).to be(:meth_32_extra)
204
+ end
205
+
206
+ it "avoids calling resolvable methods that can't be abbreviated" do
207
+ expect { subject.meth_09 }.to raise_error(NoMethodError)
208
+ expect { subject.meth_19 }.to raise_error(NoMethodError)
209
+ expect { subject.meth_29 }.to raise_error(NoMethodError)
210
+ expect { subject.meth_39 }.to raise_error(NoMethodError)
211
+ end
212
+ end
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ describe MAbbre::VERSION do
4
+ it { should_not be_nil }
5
+ end
@@ -0,0 +1,21 @@
1
+ unless ENV["COVERAGE"].nil?
2
+ require "codeclimate-test-reporter"
3
+ SimpleCov.start do
4
+ formatter SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ CodeClimate::TestReporter::Formatter
7
+ ]
8
+ add_filter "/spec/"
9
+ end
10
+ end
11
+
12
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
13
+ require "mabbre"
14
+
15
+ RSpec.configure do |config|
16
+ config.color = true
17
+ config.order = :rand
18
+ config.expect_with :rspec do |c|
19
+ c.syntax = :expect
20
+ end
21
+ end
data/tasks/console.rb ADDED
@@ -0,0 +1,33 @@
1
+ desc "Open a console with the #{Bundler::GemHelper.gemspec.name} gem loaded"
2
+ task :console do
3
+ require Bundler::GemHelper.gemspec.name
4
+
5
+ if RUBY_VERSION >= "2"
6
+ begin
7
+ require "byebug"
8
+ rescue LoadError # rubocop:disable Lint/HandleExceptions
9
+ end
10
+ else
11
+ begin
12
+ require "debugger"
13
+ rescue LoadError # rubocop:disable Lint/HandleExceptions
14
+ end
15
+ end
16
+
17
+ if RUBY_VERSION >= "1.9"
18
+ begin
19
+ require "pry"
20
+ rescue LoadError
21
+ require "irb"
22
+ end
23
+ else
24
+ require "irb"
25
+ end
26
+
27
+ if defined? Pry
28
+ Pry.start
29
+ else
30
+ ARGV.clear
31
+ IRB.start
32
+ end
33
+ end
data/tasks/coverage.rb ADDED
@@ -0,0 +1,9 @@
1
+ desc "Run tests and generate coverage report"
2
+ task :coverage do
3
+ if RUBY_VERSION >= "1.9"
4
+ ENV["COVERAGE"] = "true"
5
+ else
6
+ warn "Ruby version 1.9+ is needed in order to generate coverage report."
7
+ end
8
+ Rake::Task[:spec].invoke
9
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mabbre
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gabriel de Oliveira
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mtrack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.0
27
+ description: Write a longer description. Optional.
28
+ email:
29
+ - deoliveira.gab@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - ".rubocop.yml"
36
+ - ".ruby-version"
37
+ - ".travis.yml"
38
+ - Gemfile
39
+ - Guardfile
40
+ - LICENSE.txt
41
+ - README.md
42
+ - Rakefile
43
+ - lib/mabbre.rb
44
+ - lib/mabbre/extension.rb
45
+ - lib/mabbre/interpreter.rb
46
+ - lib/mabbre/mixin.rb
47
+ - lib/mabbre/version.rb
48
+ - mabbre.gemspec
49
+ - spec/.rubocop.yml
50
+ - spec/lib/mabbre/mixin_spec.rb
51
+ - spec/lib/mabbre/version_spec.rb
52
+ - spec/spec_helper.rb
53
+ - tasks/console.rb
54
+ - tasks/coverage.rb
55
+ homepage: https://github.com/gdeoliveira/mabbre
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.4.4
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Write a short summary. Required.
79
+ test_files:
80
+ - spec/.rubocop.yml
81
+ - spec/lib/mabbre/mixin_spec.rb
82
+ - spec/lib/mabbre/version_spec.rb
83
+ - spec/spec_helper.rb