renkon 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5073c5b61edee99c3c1e27d1c79c1930e108fef25a5c5c9745f95632f0a1f2e1
4
+ data.tar.gz: 701f633eccc235b522b859be2dcf23d1cb834d4974e66332679401c3140ae7cb
5
+ SHA512:
6
+ metadata.gz: 02fed843d2e016be5d38c7e5200fd8f7bedd61fbb4aa7d0e41d6eaa8e5ed67382f6e8c4810e1d61616855af4cff453a33e1fcddada1a13ddf319d78669316631
7
+ data.tar.gz: 1cf3873740ffadfa42f6c38e40c18b8331c9bcb7504c3cc122c9a34c20bb4866d21dccfc8d6503ad01bc834e1c02e247b4c1a983da764c318fb054879b21064c
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in renkon.gemspec
6
+ gemspec
@@ -0,0 +1,53 @@
1
+ # Renkon
2
+
3
+ Reckon is a `Range` generator with `Comparable`.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'renkon'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install renkon
20
+
21
+ ## Usage
22
+
23
+ ```ruby
24
+ require 'renkon'
25
+ using Renkon::Patch
26
+
27
+ renkon = 10 <= Renkon.x <= 100
28
+ p renkon.to_range == (10..100) # => true
29
+
30
+ case 20
31
+ when 10 <= Renkon.x < 20
32
+ # unreachable
33
+ when 20 <= Renkon.x < 30
34
+ puts 'It executes here!'
35
+ end
36
+ ```
37
+
38
+ ## Development
39
+
40
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
41
+
42
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
43
+
44
+ ## Contributing
45
+
46
+ Bug reports and pull requests are welcome on GitHub at https://github.com/pocke/renkon.
47
+
48
+ License
49
+ -------
50
+
51
+ These codes are licensed under CC0.
52
+
53
+ [![CC0](http://i.creativecommons.org/p/zero/1.0/88x31.png "CC0")](http://creativecommons.org/publicdomain/zero/1.0/deed.en)
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ task :default => :test
5
+
6
+ Rake::TestTask.new do |test|
7
+ test.libs << 'test'
8
+ test.test_files = Dir['test/**/test_*.rb']
9
+ test.verbose = true
10
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "renkon"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,11 @@
1
+ require "renkon/version"
2
+ require_relative './renkon/patch'
3
+ require_relative './renkon/range'
4
+
5
+ module Renkon
6
+ class Error < StandardError; end
7
+
8
+ def self.x
9
+ Renkon::Range.new
10
+ end
11
+ end
@@ -0,0 +1,46 @@
1
+ require "renkon/version"
2
+
3
+ module Renkon
4
+ module CompareOperatorOverrider
5
+ def <(r)
6
+ if r.is_a?(Renkon::Range)
7
+ r.> self
8
+ else
9
+ super
10
+ end
11
+ end
12
+
13
+ def <=(r)
14
+ if r.is_a?(Renkon::Range)
15
+ r.>= self
16
+ else
17
+ super
18
+ end
19
+ end
20
+
21
+ def >(r)
22
+ if r.is_a?(Renkon::Range)
23
+ r.< self
24
+ else
25
+ super
26
+ end
27
+ end
28
+
29
+ def >=(r)
30
+ if r.is_a?(Renkon::Range)
31
+ r.<= self
32
+ else
33
+ super
34
+ end
35
+ end
36
+ end
37
+
38
+ module Patch
39
+ klasses = [Integer, Float, String]
40
+ klasses.each do |klass|
41
+ refine klass do
42
+ prepend CompareOperatorOverrider
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,35 @@
1
+ module Renkon
2
+ class Range
3
+ def initialize(gt: nil, gteq: nil, lt: nil, lteq: nil)
4
+ @gt = gt
5
+ @gteq = gteq
6
+ @lt = lt
7
+ @lteq = lteq
8
+ end
9
+
10
+ def <(r) dup.tap{|x|x.lt = r} end
11
+ def <=(r) dup.tap{|x|x.lteq = r} end
12
+ def >(r) dup.tap{|x|x.gt = r} end
13
+ def >=(r) dup.tap{|x|x.gteq = r} end
14
+
15
+ def to_range
16
+ first =
17
+ if gt
18
+ gt.succ
19
+ elsif gteq
20
+ gteq
21
+ end
22
+ last = lt || lteq
23
+ exclude_end = lt
24
+ ::Range.new(first, last, exclude_end)
25
+ end
26
+
27
+ def ===(right)
28
+ to_range === right
29
+ end
30
+
31
+ protected
32
+
33
+ attr_accessor :gt, :gteq, :lt, :lteq
34
+ end
35
+ end
@@ -0,0 +1,3 @@
1
+ module Renkon
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,28 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "renkon/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "renkon"
8
+ spec.version = Renkon::VERSION
9
+ spec.authors = ["Masataka Pocke Kuwabara"]
10
+ spec.email = ["kuwabara@pocke.me"]
11
+
12
+ spec.summary = %q{Range generator with Comparable}
13
+ spec.description = %q{Range generator with Comparable}
14
+ spec.homepage = "https://github.com/pocke/renkon"
15
+
16
+ # Specify which files should be added to the gem when it is released.
17
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
18
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
19
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
20
+ end
21
+ spec.bindir = "exe"
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.17"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "minitest", "~> 5.11.3"
28
+ end
data/test.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'renkon'
2
+ using Renkon::Patch
3
+
4
+ renkon = 10 <= Renkon.x <= 100
5
+ p renkon.to_range == (10..100) # => true
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: renkon
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Masataka Pocke Kuwabara
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-11-24 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.17'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 5.11.3
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 5.11.3
55
+ description: Range generator with Comparable
56
+ email:
57
+ - kuwabara@pocke.me
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - README.md
65
+ - Rakefile
66
+ - bin/console
67
+ - bin/setup
68
+ - lib/renkon.rb
69
+ - lib/renkon/patch.rb
70
+ - lib/renkon/range.rb
71
+ - lib/renkon/version.rb
72
+ - renkon.gemspec
73
+ - test.rb
74
+ homepage: https://github.com/pocke/renkon
75
+ licenses: []
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 2.7.6
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: Range generator with Comparable
97
+ test_files: []