nigilist 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
+ SHA256:
3
+ metadata.gz: '0334689325cf628d99a8efb459006d81ecb413351f2e9fa1ddc30938e801c60a'
4
+ data.tar.gz: b7019471120fc97630677f7fd349b84851d4d6d5b92c11a845dc266e1481ac4f
5
+ SHA512:
6
+ metadata.gz: c8da51f5d735d143a3d3d86724253228deeddfd93004c39362f84c6453c5764717537b9942899305b32a9d83f1a57e960483907d5b023a3f1cd31cb75af5d5f8
7
+ data.tar.gz: 4d5a2dcd11ea3a97bebfef5303c4dee048a26ed6bec17e93eb27697f2a28c186f2d1ebe527761d95d9fb647c78bf82a8bd9d94dda2fefda964020904d48d2d7a
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ dist: trusty
2
+ language: ruby
3
+ script:
4
+ - bundle exec rake
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'bundler', '~> 1.16.1'
5
+ gem 'minitest', '~> 5.11.3'
6
+ gem 'minitest-power_assert', '~> 0.3.0'
7
+ gem 'rake', '~> 12.3.0'
8
+ gem 'juwelier', '~> 2.4.9'
9
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,71 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ addressable (2.5.2)
5
+ public_suffix (>= 2.0.2, < 4.0)
6
+ builder (3.2.3)
7
+ descendants_tracker (0.0.4)
8
+ thread_safe (~> 0.3, >= 0.3.1)
9
+ faraday (0.12.2)
10
+ multipart-post (>= 1.2, < 3)
11
+ git (1.3.0)
12
+ github_api (0.18.2)
13
+ addressable (~> 2.4)
14
+ descendants_tracker (~> 0.0.4)
15
+ faraday (~> 0.8)
16
+ hashie (~> 3.5, >= 3.5.2)
17
+ oauth2 (~> 1.0)
18
+ hashie (3.5.7)
19
+ highline (1.7.10)
20
+ juwelier (2.4.9)
21
+ builder
22
+ bundler
23
+ git
24
+ github_api
25
+ highline
26
+ kamelcase (~> 0)
27
+ nokogiri
28
+ psych
29
+ rake
30
+ rdoc
31
+ semver2
32
+ jwt (1.5.6)
33
+ kamelcase (0.0.2)
34
+ semver2 (~> 3)
35
+ mini_portile2 (2.3.0)
36
+ minitest (5.11.3)
37
+ minitest-power_assert (0.3.0)
38
+ minitest
39
+ power_assert (>= 1.1)
40
+ multi_json (1.13.1)
41
+ multi_xml (0.6.0)
42
+ multipart-post (2.0.0)
43
+ nokogiri (1.8.2)
44
+ mini_portile2 (~> 2.3.0)
45
+ oauth2 (1.4.0)
46
+ faraday (>= 0.8, < 0.13)
47
+ jwt (~> 1.0)
48
+ multi_json (~> 1.3)
49
+ multi_xml (~> 0.5)
50
+ rack (>= 1.2, < 3)
51
+ power_assert (1.1.1)
52
+ psych (3.0.2)
53
+ public_suffix (3.0.1)
54
+ rack (2.0.4)
55
+ rake (12.3.0)
56
+ rdoc (6.0.1)
57
+ semver2 (3.4.2)
58
+ thread_safe (0.3.6)
59
+
60
+ PLATFORMS
61
+ ruby
62
+
63
+ DEPENDENCIES
64
+ bundler (~> 1.16.1)
65
+ juwelier (~> 2.4.9)
66
+ minitest (~> 5.11.3)
67
+ minitest-power_assert (~> 0.3.0)
68
+ rake (~> 12.3.0)
69
+
70
+ BUNDLED WITH
71
+ 1.16.1
data/LISENCE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Alexandr Borisov
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.
data/README.md ADDED
@@ -0,0 +1,69 @@
1
+ # Nigilist
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/nihilist.svg)](https://rubygems.org/gems/nihilist)
4
+ [![Build Status](https://travis-ci.org/aishek/nihilist.svg?branch=master)](https://travis-ci.org/aishek/nihilist)
5
+ [![Code Climate](https://codeclimate.com/github/aishek/nihilist.svg)](https://codeclimate.com/github/aishek/nihilist)
6
+
7
+
8
+ Nigilist is extremely useful for implement Null Object pattern. It allows null object to return `false` for all question-methods, and `nil` for all non-bang-methods without defining them.
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ gem install nigilist
14
+ ```
15
+
16
+ ## Usage
17
+
18
+ ```ruby
19
+ class Guest
20
+ include Nigilist
21
+
22
+ def polite?
23
+ true
24
+ end
25
+
26
+ def locale
27
+ 'ru'.freeze
28
+ end
29
+ end
30
+
31
+ current_user = Guest.new
32
+ current_user.admin? # false
33
+ current_user.polite? # true
34
+ current_user.address # nil
35
+ current_user.locale # 'ru'
36
+ ```
37
+
38
+ ### Explanation of Null Object pattern
39
+
40
+ For example, you have a `User` model, with `#admin?` method, and `Guest` model allows you use same interface for both authorized and unauthorized users like so:
41
+
42
+ ```ruby
43
+ class Guest
44
+ def admin?
45
+ false
46
+ end
47
+ end
48
+
49
+ current_user = current_session.user || Guest.new
50
+ current_user.admin?
51
+ ```
52
+
53
+ So when your project grow and other methods got it place inside `User` model you have to define same methods in `Guest` model which contains no logic but only return `false` or `nil`.
54
+
55
+ ## License
56
+
57
+ Nigilist is free software, and may be redistributed under the terms specified in the LICENSE.txt file.
58
+
59
+ ## Credits
60
+
61
+ Gem nigilist is maintained by [Cifronomika](http://cifronomika.ru/).
62
+
63
+ Contributors:
64
+
65
+ * [Alexandr Borisov](https://github.com/aishek)
66
+
67
+ ## The gem about one method
68
+
69
+ The gem contains exactly one module with one method defined: `method_missing`. I'm sure you able to implement it by yourself in couple of minutes. So feel free just to copy it from `lib/nihilist.rb` 😉
data/Rakefile ADDED
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts 'Run `bundle install` to install missing gems'
8
+ exit e.status_code
9
+ end
10
+
11
+ require 'rake/testtask'
12
+
13
+ Rake::TestTask.new do |t|
14
+ t.libs << 'test'
15
+ t.test_files = FileList['test/*_test.rb']
16
+ t.verbose = true
17
+ end
18
+
19
+ desc 'Run tests'
20
+ task :default => :test
21
+
22
+ require 'juwelier'
23
+ Juwelier::Tasks.new do |gem|
24
+ gem.name = 'nigilist'
25
+ gem.homepage = "https://github.com/aishek/nihilist"
26
+ gem.license = 'MIT'
27
+ gem.summary = 'Nigilist simplifies NullObject pattern classes'
28
+ gem.description = 'After include Nigilist module all ?-ends methods will return false, all non-!-ends methods will return nil.'
29
+ gem.email = 'ab@cifronomika.ru'
30
+ gem.authors = ['Alexandr Borisov']
31
+ gem.version = File.read('VERSION').chomp
32
+
33
+ if gem.respond_to?(:metadata)
34
+ gem.metadata['allowed_push_host'] = 'https://rubygems.org'
35
+ else
36
+ raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
37
+ end
38
+
39
+ # dependencies defined in Gemfile
40
+ end
41
+ Juwelier::RubygemsDotOrgTasks.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
data/lib/nigilist.rb ADDED
@@ -0,0 +1,12 @@
1
+ module Nigilist
2
+ def method_missing(message, *args, &block)
3
+ method_name = message.to_s
4
+ if method_name.end_with?('?')
5
+ false
6
+ elsif !method_name.end_with?('!')
7
+ nil
8
+ else
9
+ super
10
+ end
11
+ end
12
+ end
data/nigilist.gemspec ADDED
@@ -0,0 +1,62 @@
1
+ # Generated by juwelier
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: nigilist 0.0.1 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "nigilist".freeze
9
+ s.version = "0.0.1"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.metadata = { "allowed_push_host" => "https://rubygems.org" } if s.respond_to? :metadata=
13
+ s.require_paths = ["lib".freeze]
14
+ s.authors = ["Alexandr Borisov".freeze]
15
+ s.date = "2018-02-05"
16
+ s.description = "After include Nigilist module all ?-ends methods will return false, all non-!-ends methods will return nil.".freeze
17
+ s.email = "ab@cifronomika.ru".freeze
18
+ s.extra_rdoc_files = [
19
+ "README.md"
20
+ ]
21
+ s.files = [
22
+ ".travis.yml",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LISENCE.txt",
26
+ "README.md",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "lib/nigilist.rb",
30
+ "nigilist.gemspec",
31
+ "test/nihilist_test.rb"
32
+ ]
33
+ s.homepage = "https://github.com/aishek/nihilist".freeze
34
+ s.licenses = ["MIT".freeze]
35
+ s.rubygems_version = "2.7.3".freeze
36
+ s.summary = "Nigilist simplifies NullObject pattern classes".freeze
37
+
38
+ if s.respond_to? :specification_version then
39
+ s.specification_version = 4
40
+
41
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
42
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 1.16.1"])
43
+ s.add_development_dependency(%q<minitest>.freeze, ["~> 5.11.3"])
44
+ s.add_development_dependency(%q<minitest-power_assert>.freeze, ["~> 0.3.0"])
45
+ s.add_development_dependency(%q<rake>.freeze, ["~> 12.3.0"])
46
+ s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4.9"])
47
+ else
48
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.16.1"])
49
+ s.add_dependency(%q<minitest>.freeze, ["~> 5.11.3"])
50
+ s.add_dependency(%q<minitest-power_assert>.freeze, ["~> 0.3.0"])
51
+ s.add_dependency(%q<rake>.freeze, ["~> 12.3.0"])
52
+ s.add_dependency(%q<juwelier>.freeze, ["~> 2.4.9"])
53
+ end
54
+ else
55
+ s.add_dependency(%q<bundler>.freeze, ["~> 1.16.1"])
56
+ s.add_dependency(%q<minitest>.freeze, ["~> 5.11.3"])
57
+ s.add_dependency(%q<minitest-power_assert>.freeze, ["~> 0.3.0"])
58
+ s.add_dependency(%q<rake>.freeze, ["~> 12.3.0"])
59
+ s.add_dependency(%q<juwelier>.freeze, ["~> 2.4.9"])
60
+ end
61
+ end
62
+
@@ -0,0 +1,39 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/pride'
3
+ require 'minitest/power_assert'
4
+
5
+ require 'nigilist'
6
+
7
+ class Guest
8
+ include Nigilist
9
+
10
+ def polite?
11
+ true
12
+ end
13
+
14
+ def planet
15
+ 'Earth'.freeze
16
+ end
17
+ end
18
+
19
+ class NigilistTest < Minitest::Test
20
+ def setup
21
+ @guest = Guest.new
22
+ end
23
+
24
+ def test_undefined_question_end_method_return_false
25
+ assert { @guest.admin? == false }
26
+ end
27
+
28
+ def test_defined_question_end_method_return_its_result
29
+ assert { @guest.polite? == true }
30
+ end
31
+
32
+ def test_undefined_non_bang_end_method_return_nil
33
+ assert { @guest.name.nil? }
34
+ end
35
+
36
+ def test_defined_non_bang_end_method_return_its_result
37
+ assert { @guest.planet == 'Earth' }
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nigilist
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alexandr Borisov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-02-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.16.1
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.16.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 5.11.3
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 5.11.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-power_assert
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.3.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.3.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 12.3.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 12.3.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: juwelier
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 2.4.9
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 2.4.9
83
+ description: After include Nigilist module all ?-ends methods will return false, all
84
+ non-!-ends methods will return nil.
85
+ email: ab@cifronomika.ru
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files:
89
+ - README.md
90
+ files:
91
+ - ".travis.yml"
92
+ - Gemfile
93
+ - Gemfile.lock
94
+ - LISENCE.txt
95
+ - README.md
96
+ - Rakefile
97
+ - VERSION
98
+ - lib/nigilist.rb
99
+ - nigilist.gemspec
100
+ - test/nihilist_test.rb
101
+ homepage: https://github.com/aishek/nihilist
102
+ licenses:
103
+ - MIT
104
+ metadata:
105
+ allowed_push_host: https://rubygems.org
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 2.7.3
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: Nigilist simplifies NullObject pattern classes
126
+ test_files: []