to_range 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0217ba92e178aae603550a851aded71ccc82b1b7
4
- data.tar.gz: e6a5b0439ecb02e6af9acfbe593ba4027ff078bd
3
+ metadata.gz: b65f779ac8b6f64f0a6d9318112e182980043aac
4
+ data.tar.gz: 7da5cdc9aa59d7ea387e7429c5974bb4467b397e
5
5
  SHA512:
6
- metadata.gz: ef771bb89354879ba882fe6ba68ab7c7bec1bf44ceab69eaf4ad455015dd4013970893695f1554a6e67956d979b30f3a5198327fbaca72fceaba27a38ef0571d
7
- data.tar.gz: 24f820934435443bace8a9bbaeddbc975ef76fd76e77b6e866edf59686c338a3e710b6e3113e22aebdd2fe0fe2da95a730dca6cf9f296681536c358aab1348f4
6
+ metadata.gz: 4df14998f05d8e7888b576257ee297a8aa7efcc4fb60f0b2e33fcf86b9bc1982089cc028ed920e0b32e9f970a81a637366a0f105bd87c0f2f8ab82d649450ea5
7
+ data.tar.gz: cb4ca44c134fc3a31e827d66d2864b9272c3c0a3178f5291f4440e98d4499794b5f635f59a73cd1450191f4c91d7edad7f01fd14ee6163777a7df6c275d45f99
@@ -5,5 +5,4 @@ rvm:
5
5
  - 1.9.3
6
6
  - jruby-18mode
7
7
  - jruby-19mode
8
- - rbx-2.1.1
9
8
  - 1.8.7
data/README.md CHANGED
@@ -1,6 +1,21 @@
1
- # ToRange [![Code Climate](https://codeclimate.com/github/metaware/to_range/badges/gpa.svg)](https://codeclimate.com/github/metaware/to_range) [![Build Status](https://travis-ci.org/metaware/to_range.svg?branch=master)](https://travis-ci.org/metaware/to_range)
1
+ # to_range [![Code Climate](https://codeclimate.com/github/metaware/to_range/badges/gpa.svg)](https://codeclimate.com/github/metaware/to_range) [![Build Status](https://travis-ci.org/metaware/to_range.svg?branch=master)](https://travis-ci.org/metaware/to_range)
2
2
 
3
- Small Ruby Gem to Convert strings (parseable) into Range Objects
3
+ ![to_range Logo](https://raw.github.com/metaware/to_range/master/to_range.png)
4
+
5
+ Ruby Gem to Convert strings (parsable) into Range Objects
6
+
7
+ ## Usage
8
+
9
+ irb(main):001:0> "1..10".to_range
10
+ => 1..10
11
+ => PROFIT!
12
+
13
+ For any ambiguous cases, where there might be multiple matches of a possible range, This library assumes you need only the first possible, valid-looking Range match, ex:
14
+
15
+ irb(main):001:0> "1.10..50..100".to_range
16
+ => 10..50
17
+
18
+ **PS: It blows on your face, if it's unable to find a possible parsable match.**
4
19
 
5
20
  ## Installation
6
21
 
@@ -16,16 +31,10 @@ Or install it yourself as:
16
31
 
17
32
  $ gem install to_range
18
33
 
19
- ## Usage
20
-
21
- irb(main):001:0> "1..10".to_range
22
- => 1..10
23
- => PROFIT!
24
-
25
34
  ## Contributing
26
35
 
27
36
  1. Fork it
28
37
  2. Create your feature branch (`git checkout -b my-new-feature`)
29
38
  3. Commit your changes (`git commit -am 'Add some feature'`)
30
39
  4. Push to the branch (`git push origin my-new-feature`)
31
- 5. Create new Pull Request
40
+ 5. Create new Pull Request
data/Rakefile CHANGED
@@ -1,8 +1,13 @@
1
1
  require 'rake/testtask'
2
2
  require 'bundler/gem_tasks'
3
3
  require 'rspec/core/rake_task'
4
+ require 'cucumber/rake/task'
4
5
 
5
- task :default => :spec
6
+ Cucumber::Rake::Task.new(:features) do |t|
7
+ t.cucumber_opts = "features --format pretty"
8
+ end
9
+
10
+ task :default => [:features, :spec]
6
11
 
7
12
  RSpec::Core::RakeTask.new
8
13
 
@@ -0,0 +1,33 @@
1
+ require 'to_range'
2
+
3
+ Transform /^(-?\d+)$/ do |number|
4
+ number.to_i
5
+ end
6
+
7
+ Given(/^we have a string that looks like "(.*?)"$/) do |test_str|
8
+ @test_str = test_str
9
+ end
10
+
11
+ When(/^we try to convert this string into a range object by calling to_range on the string$/) do
12
+ @result = @test_str.to_range
13
+ end
14
+
15
+ When(/^we try to convert this non\-parseable string into a range object by calling to_range on the string$/) do
16
+ expect { @test_str.to_range }.to raise_error
17
+ end
18
+
19
+ Then(/^we should get a range object$/) do
20
+ expect(@result).to be_an_instance_of(Range)
21
+ end
22
+
23
+ Then(/^it should raise an exception$/) do
24
+ pending # express the regexp above with the code you wish you had
25
+ end
26
+
27
+ Then(/^we should not get a range object$/) do
28
+ expect(@result).to_not be_an_instance_of(Range)
29
+ end
30
+
31
+ Then(/^it should range from "(.*?)" to "(.*?)"$/) do |from, to|
32
+ expect(@result).to eq(from..to)
33
+ end
@@ -0,0 +1,21 @@
1
+ Feature: to_range
2
+ In order to convert range looking strings into ruby range objects
3
+ As a Ruby developer
4
+ I should be able to use to_range gem
5
+
6
+ Scenario: string is parseable to a range object
7
+ Given we have a string that looks like "0..10"
8
+ When we try to convert this string into a range object by calling to_range on the string
9
+ Then we should get a range object
10
+ And it should range from "0" to "10"
11
+
12
+ Scenario: string is not parseable to a range object
13
+ Given we have a string that looks like "010"
14
+ When we try to convert this non-parseable string into a range object by calling to_range on the string
15
+ Then we should not get a range object
16
+
17
+ Scenario: string is ambiguous
18
+ Given we have a string that looks like "100..105..115"
19
+ When we try to convert this string into a range object by calling to_range on the string
20
+ Then we should get a range object
21
+ And it should range from "100" to "105"
@@ -1,12 +1,13 @@
1
- class ToRangeParseFailed < StandardError; end
1
+ class StringToRangeConversionFailed < StandardError; end
2
2
 
3
3
  class String
4
4
 
5
5
  def to_range
6
6
  str = scan(/\d+\.{2,3}\d+/).first
7
- dots = str.count('.')
8
- if dots > 3
9
- raise ToRangeParseFailed
7
+ if str
8
+ dots = str.count('.')
9
+ else
10
+ raise StringToRangeConversionFailed
10
11
  end
11
12
  three_dots = (dots == 3)
12
13
  arr = three_dots ? str.split('...') : str.split('..')
@@ -1,3 +1,3 @@
1
1
  module ToRange
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -24,7 +24,7 @@ describe String do
24
24
 
25
25
  context 'ambiguous cases' do
26
26
 
27
- it 'parses the first parseable occurrence' do
27
+ it 'parses the first parsable occurrence' do
28
28
  expect('1..5..10'.to_range).to eq(1..5)
29
29
  expect('1.5..10'.to_range).to eq(5..10)
30
30
  expect('15..10...20'.to_range).to eq(15..10)
@@ -39,12 +39,13 @@ describe String do
39
39
 
40
40
  context "exception cases" do
41
41
 
42
- it 'raises an exception when the string is not parseable' do
43
- expect { '1.4.6'.to_range }.to raise_exception
44
- expect { '146'.to_range }.to raise_exception
45
- expect { '1.4..'.to_range }.to raise_exception
46
- expect { '..1.4..'.to_range }.to raise_exception
47
- expect { '..14..'.to_range }.to raise_exception
42
+ it 'raises an exception when the string is not parsable' do
43
+ expect { '1.4.6'.to_range }.to raise_exception(StringToRangeConversionFailed)
44
+ expect { '146'.to_range }.to raise_exception(StringToRangeConversionFailed)
45
+ expect { '1.4..'.to_range }.to raise_exception(StringToRangeConversionFailed)
46
+ expect { '..1.4..'.to_range }.to raise_exception(StringToRangeConversionFailed)
47
+ expect { '..14..'.to_range }.to raise_exception(StringToRangeConversionFailed)
48
+ expect { '1234'.to_range }.to raise_exception(StringToRangeConversionFailed)
48
49
  end
49
50
 
50
51
  end
@@ -21,4 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "cucumber"
24
25
  end
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: to_range
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jasdeep Singh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-18 00:00:00.000000000 Z
11
+ date: 2015-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cucumber
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Gem to parse Range like strings to actual Range Objects
56
70
  email:
57
71
  - jasdeep@metawarelabs.com
@@ -66,6 +80,8 @@ files:
66
80
  - LICENSE.txt
67
81
  - README.md
68
82
  - Rakefile
83
+ - features/step_definitions/to_range_steps.rb
84
+ - features/to_range.feature
69
85
  - lib/to_range.rb
70
86
  - lib/to_range/string.rb
71
87
  - lib/to_range/version.rb
@@ -73,6 +89,7 @@ files:
73
89
  - spec/spec_helper.rb
74
90
  - spec/to_range_spec.rb
75
91
  - to_range.gemspec
92
+ - to_range.png
76
93
  homepage: http://github.com/metaware/to_range
77
94
  licenses:
78
95
  - MIT
@@ -98,6 +115,8 @@ signing_key:
98
115
  specification_version: 4
99
116
  summary: Ruby String extensiion to parse Range like strings to actual Range Objects
100
117
  test_files:
118
+ - features/step_definitions/to_range_steps.rb
119
+ - features/to_range.feature
101
120
  - spec/lib/string_spec.rb
102
121
  - spec/spec_helper.rb
103
122
  - spec/to_range_spec.rb