polite 0.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.
- data/.gitignore +10 -0
- data/Gemfile +10 -0
- data/README.md +50 -0
- data/Rakefile +10 -0
- data/lib/polite.rb +7 -0
- data/lib/polite/core_ext.rb +9 -0
- data/lib/polite/please.rb +24 -0
- data/lib/polite/pretty_please.rb +12 -0
- data/lib/polite/version.rb +3 -0
- data/polite.gemspec +17 -0
- data/test/polite/test_please.rb +26 -0
- data/test/polite/test_pretty_please.rb +19 -0
- data/test/test_helper.rb +11 -0
- metadata +67 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
Polite
|
2
|
+
======
|
3
|
+
|
4
|
+
Be nice to Ruby and it will be nice to you.
|
5
|
+
|
6
|
+
## <a name="contributing">Installation</a>
|
7
|
+
|
8
|
+
The best way to introduce politeness into Ruby is to use RubyGems:
|
9
|
+
|
10
|
+
$ [sudo] gem install polite
|
11
|
+
|
12
|
+
## <a name="please">Please</a>
|
13
|
+
|
14
|
+
If you're rude to Ruby it will be rude to you:
|
15
|
+
|
16
|
+
ruby = Object.new
|
17
|
+
ruby.get_me_a_coffee
|
18
|
+
# => NoMethodError: undefined method `get_me_a_coffee' for #<Object:0x007fb0421526c0>
|
19
|
+
|
20
|
+
But if you're polite, it will be nice to you.
|
21
|
+
|
22
|
+
ruby.please.get_me_a_coffee
|
23
|
+
# => nil
|
24
|
+
|
25
|
+
However, even Ruby has it's limits:
|
26
|
+
|
27
|
+
ruby.please.get_me_a_coffee.and_a_sandwich
|
28
|
+
# => NoMethodError: undefined method `and_a_sandwich' for nil:NilClass
|
29
|
+
|
30
|
+
## <a name="pretty_please">Pretty please</a>
|
31
|
+
|
32
|
+
If you want Ruby to do a lot for you, the way to go is to be even more polite:
|
33
|
+
|
34
|
+
ruby.pretty_please.get_me_a_coffee
|
35
|
+
# => #<Object:0x007fb0421526c0>
|
36
|
+
|
37
|
+
Ruby will definitely be nice to you:
|
38
|
+
|
39
|
+
ruby.pretty_please.get_me_a_coffee.and_a_sandwich.and_a_newspaper
|
40
|
+
# => #<Object:0x007fb0421526c0>
|
41
|
+
|
42
|
+
ruby.pretty_please.respond_to?(:pay_for_my_dinner)
|
43
|
+
# => true
|
44
|
+
|
45
|
+
## <a name="contributing">License</a>
|
46
|
+
|
47
|
+
Copyright (c) 2011 Tobias Svensson.
|
48
|
+
|
49
|
+
Pick a polite license of your choice.
|
50
|
+
|
data/Rakefile
ADDED
data/lib/polite.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Polite
|
2
|
+
class Please < BasicObject
|
3
|
+
attr_reader :delegate
|
4
|
+
|
5
|
+
def initialize(delegate)
|
6
|
+
@delegate = delegate
|
7
|
+
end
|
8
|
+
|
9
|
+
def method_missing(method, *args, &block)
|
10
|
+
begin
|
11
|
+
delegate.public_send(method, *args, &block)
|
12
|
+
rescue
|
13
|
+
polite_return_value
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def polite_return_value
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
data/polite.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/polite/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Tobias Svensson"]
|
6
|
+
gem.email = ["tob@tobiassvensson.co.uk"]
|
7
|
+
gem.description = %q{Politeness for Ruby}
|
8
|
+
gem.summary = gem.description
|
9
|
+
gem.homepage = "http://github.com/tobiassvn/polite"
|
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 = "polite"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Polite::VERSION
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
+
|
3
|
+
class TestPlease < MiniTest::Unit::TestCase
|
4
|
+
include Polite
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@delegate = Object.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_assigns_delegate
|
11
|
+
assert_equal @delegate, Please.new(@delegate).delegate
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_delegates_method_calls
|
15
|
+
assert_equal @delegate.object_id, Please.new(@delegate).object_id
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_global_instance_method
|
19
|
+
assert_equal @delegate.object_id, @delegate.please.object_id
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_politeness
|
23
|
+
assert_nil @delegate.please.try_doing_something_that_wont_work
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
+
|
3
|
+
class TestPrettyPlease < MiniTest::Unit::TestCase
|
4
|
+
include Polite
|
5
|
+
|
6
|
+
def test_is_an_extension_of_please
|
7
|
+
assert_equal Please, PrettyPlease.superclass
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_politeness
|
11
|
+
refute_nil Object.new.pretty_please.do.something.that.wont.work
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_polite_respond_to
|
15
|
+
assert Object.new.pretty_please.respond_to?(:you_are_handsome)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: polite
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Tobias Svensson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-23 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: Politeness for Ruby
|
15
|
+
email:
|
16
|
+
- tob@tobiassvensson.co.uk
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- README.md
|
24
|
+
- Rakefile
|
25
|
+
- lib/polite.rb
|
26
|
+
- lib/polite/core_ext.rb
|
27
|
+
- lib/polite/please.rb
|
28
|
+
- lib/polite/pretty_please.rb
|
29
|
+
- lib/polite/version.rb
|
30
|
+
- polite.gemspec
|
31
|
+
- test/polite/test_please.rb
|
32
|
+
- test/polite/test_pretty_please.rb
|
33
|
+
- test/test_helper.rb
|
34
|
+
homepage: http://github.com/tobiassvn/polite
|
35
|
+
licenses: []
|
36
|
+
post_install_message:
|
37
|
+
rdoc_options: []
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
hash: 218283220022515442
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
hash: 218283220022515442
|
58
|
+
requirements: []
|
59
|
+
rubyforge_project:
|
60
|
+
rubygems_version: 1.8.10
|
61
|
+
signing_key:
|
62
|
+
specification_version: 3
|
63
|
+
summary: Politeness for Ruby
|
64
|
+
test_files:
|
65
|
+
- test/polite/test_please.rb
|
66
|
+
- test/polite/test_pretty_please.rb
|
67
|
+
- test/test_helper.rb
|