raph 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.
@@ -1,47 +1,50 @@
1
- module Raph
2
- # This module consists of argument parsers for Humans
3
- module Parser
4
- # Base class for all argument parsers.
5
- #
6
- # You can create a custom parser by subclassing
7
- # `Raph::Parser::BaseParser` and overriding some methods,
8
- # or by implementing all the methods by duck typing.
9
- class BaseParser
10
- # Parser unique id.
11
- # If parser class name follows a convention NameParser
12
- # then it's id will be automatically determined as it's
13
- # name in snake case plus suffix 's'
14
- #
15
- # Example:
16
- # FlagParser.new.id # => :flags
17
- # FileParser.new.id # => :files
18
- # BaseArgumentParser.new.id # => :base_arguments
19
- def id
20
- name = class_name.gsub(/parser$/i, '')
21
- name << 's' # make it plural
22
- to_underscore(name).to_sym
23
- end
24
-
25
- # Parses arguments and returns results of parsing.
26
- def parse(args)
27
- end
28
-
29
- private
30
-
31
- # Returns name of current class.
32
- def class_name
33
- self.class.name.split('::').last || ''
34
- end
35
-
36
- # Returns underscored version of string
37
- # (snake case format).
38
- def to_underscore(str)
39
- str.gsub(/::/, '/').
40
- gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
41
- gsub(/([a-z\d])([A-Z])/,'\1_\2').
42
- tr("-", "_").
43
- downcase
44
- end
45
- end
46
- end
47
- end
1
+ module Raph
2
+ # This module consists of argument parsers for Humans
3
+ module Parser
4
+ # Base class for all argument parsers.
5
+ #
6
+ # You can create a custom parser by subclassing
7
+ # `Raph::Parser::BaseParser` and overriding some methods,
8
+ # or by implementing all the methods by duck typing.
9
+ class BaseParser
10
+ # Parser unique id.
11
+ # If parser class name follows a convention NameParser
12
+ # then it's id will be automatically determined as it's
13
+ # name in snake case plus suffix 's'
14
+ #
15
+ # Example:
16
+ # FlagParser.new.id # => :flags
17
+ # FileParser.new.id # => :files
18
+ # BaseArgumentParser.new.id # => :base_arguments
19
+ def id
20
+ name = class_name.gsub(/parser$/i, '')
21
+ name << 's' # make it plural
22
+ to_underscored_sym(name)
23
+ end
24
+
25
+ # Parses arguments and returns results of parsing.
26
+ def parse(args)
27
+ end
28
+
29
+ protected
30
+
31
+ # Returns underscored symbol of string
32
+ # (snake case format).
33
+ def to_underscored_sym(str)
34
+ str.gsub(/^[-]+/, '').
35
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
36
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
37
+ tr("-", "_").
38
+ downcase.
39
+ to_sym
40
+ end
41
+
42
+ private
43
+
44
+ # Returns name of current class.
45
+ def class_name
46
+ self.class.name.split('::').last || ''
47
+ end
48
+ end
49
+ end
50
+ end
@@ -1,24 +1,24 @@
1
- require 'raph/parser/base_parser'
2
-
3
- module Raph
4
- module Parser
5
- # Argument is considered as file argument if and only if
6
- # corresponding file exist on file system and match
7
- # current argument.
8
- #
9
- # Example:
10
- # 'test.rb' - file in current directory with name 'test.rb'
11
- # '*.rb' - all files in current directory with extension 'rb'
12
- # '**/*.xml' - all files in current directory and directories
13
- # that are in this directory with extension 'xml'
14
- class FileParser < BaseParser
15
- def parse(args)
16
- files = []
17
- args.each do |a|
18
- files.concat Dir[a]
19
- end
20
- files.uniq
21
- end
22
- end
23
- end
24
- end
1
+ require 'raph/parser/base_parser'
2
+
3
+ module Raph
4
+ module Parser
5
+ # Argument is considered as file argument if and only if
6
+ # corresponding file exist on file system and match
7
+ # current argument.
8
+ #
9
+ # Example:
10
+ # 'test.rb' - file in current directory with name 'test.rb'
11
+ # '*.rb' - all files in current directory with extension 'rb'
12
+ # '**/*.xml' - all files in current directory and directories
13
+ # that are in this directory with extension 'xml'
14
+ class FileParser < BaseParser
15
+ def parse(args)
16
+ files = []
17
+ args.each do |a|
18
+ files.concat Dir[a]
19
+ end
20
+ files.uniq
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,31 +1,31 @@
1
- require 'raph/parser/base_parser'
2
-
3
- module Raph
4
- module Parser
5
- # Considers option as flag if and only if
6
- # it's name starts with one dash and follows by
7
- # one word character or starts with two dashes
8
- # and follows by 2 or more word chacters or dashes.
9
- #
10
- # Assumes that each option doesn't have spaces.
11
- #
12
- # Example of flags:
13
- # '-h' '-T' '--config'
14
- #
15
- # Example of non-flags:
16
- # 'option' '---option2' '--h'
17
- class FlagParser < BaseParser
18
- def parse(args)
19
- flags = []
20
- args.each do |a|
21
- flags << a if flag? a
22
- end
23
- flags
24
- end
25
-
26
- def flag?(option)
27
- option =~ /^-[\w]$/ || option =~ /^--[\w][\w-]+$/
28
- end
29
- end
30
- end
31
- end
1
+ require 'raph/parser/base_parser'
2
+
3
+ module Raph
4
+ module Parser
5
+ # Considers option as flag if and only if
6
+ # it's name starts with one dash and follows by
7
+ # one word character or starts with two dashes
8
+ # and follows by 2 or more word chacters or dashes.
9
+ #
10
+ # Assumes that each option doesn't have spaces.
11
+ #
12
+ # Example of flags:
13
+ # '-h' '-T' '--config'
14
+ #
15
+ # Example of non-flags:
16
+ # 'option' '---option2' '--h'
17
+ class FlagParser < BaseParser
18
+ def parse(args)
19
+ flags = []
20
+ args.each do |a|
21
+ flags << to_underscored_sym(a) if flag? a
22
+ end
23
+ flags
24
+ end
25
+
26
+ def flag?(option)
27
+ option =~ /^-[\w]$/ || option =~ /^--[\w][\w-]+$/
28
+ end
29
+ end
30
+ end
31
+ end
data/lib/raph/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module Raph
2
- VERSION = '0.0.1'
3
- end
1
+ module Raph
2
+ VERSION = '0.0.2'
3
+ end
data/raph.gemspec CHANGED
@@ -1,26 +1,29 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'raph/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = 'raph'
8
- spec.version = Raph::VERSION
9
- spec.authors = ['Vitalii Elenhaupt']
10
- spec.email = ['velenhaupt@gmail.com']
11
- spec.summary = 'Ruby Argument Parsing for Humans.'
12
- spec.description = 'Simple argument parser.'
13
- spec.homepage = 'https://github.com/veelenga/raph'
14
- spec.license = 'MIT'
15
-
16
- spec.files = `git ls-files`.split($RS)
17
- spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(/^spec\//)
19
- spec.require_paths = ['lib']
20
-
21
- spec.required_ruby_version = '>= 1.9.3'
22
-
23
- spec.add_development_dependency 'bundler', '~> 1.7'
24
- spec.add_development_dependency 'rake', '~> 10.0'
25
- spec.add_development_dependency 'rspec', '~> 3.0'
26
- end
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'raph/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'raph'
8
+ spec.version = Raph::VERSION
9
+ spec.authors = ['Vitalii Elenhaupt']
10
+ spec.email = ['velenhaupt@gmail.com']
11
+ spec.summary = 'Ruby Argument Parsing for Humans.'
12
+ spec.description = <<-DESC
13
+ Lightweight argument parsing with flexible structure.
14
+ Add your parser in few minutes.
15
+ DESC
16
+ spec.homepage = 'https://github.com/veelenga/raph'
17
+ spec.license = 'MIT'
18
+
19
+ spec.files = `git ls-files`.split($RS)
20
+ spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
21
+ spec.test_files = spec.files.grep(/^spec\//)
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.required_ruby_version = '>= 1.9.3'
25
+
26
+ spec.add_development_dependency 'bundler', '~> 1.7'
27
+ spec.add_development_dependency 'rake', '~> 10.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.0'
29
+ end
@@ -1,46 +1,45 @@
1
- require 'spec_helper'
2
-
3
- module Raph
4
- module Parser
5
- describe AssignmentParser do
6
- describe '#id' do
7
- it 'has correct form' do
8
- expect(subject.id).to eq :assignments
9
- end
10
- end
11
-
12
- describe '#parse' do
13
- it 'returns assignments only' do
14
- expect(subject.parse(['-h', '-on=20', '--two=my-file'])).
15
- to match_array(['-on=20', '--two=my-file'])
16
- end
17
-
18
- it 'has no to return assignments here' do
19
- expect(subject.parse(['-h', 'file', '=', '123'])).
20
- to match_array([])
21
- expect(subject.parse([])).to match_array([])
22
- end
23
- end
24
-
25
- describe '#assignment?' do
26
- def ass?(option)
27
- subject.assignment? option
28
- end
29
-
30
- it 'is an assignment' do
31
- expect(ass? 'h=one').to be true
32
- expect(ass? '-ass=two').to be true
33
- expect(ass? '--ass=two').to be true
34
- expect(ass? 'ass=one=two').to be true
35
- end
36
-
37
- it 'is not as assignment' do
38
- expect(ass? '-h').to be false
39
- expect(ass? '-h=').to be false
40
- expect(ass? 'h=').to be false
41
- expect(ass? '=').to be false
42
- end
43
- end
44
- end
45
- end
46
- end
1
+ require 'spec_helper'
2
+
3
+ module Raph
4
+ module Parser
5
+ describe AssignmentParser do
6
+ describe '#id' do
7
+ it 'has correct form' do
8
+ expect(subject.id).to eq :assignments
9
+ end
10
+ end
11
+
12
+ describe '#parse' do
13
+ it 'returns assignments only' do
14
+ parsed = subject.parse(['-h', '-on=20', '--two=my-file'])
15
+ expect(parsed).to include(:on => '20', :two => 'my-file')
16
+ end
17
+
18
+ it 'has no to return assignments here' do
19
+ expect(subject.parse(['-h', 'file', '=', '123'])).to be_empty
20
+ expect(subject.parse([])).to be_empty
21
+ end
22
+ end
23
+
24
+ describe '#assignment?' do
25
+ def ass?(option)
26
+ subject.assignment? option
27
+ end
28
+
29
+ it 'is an assignment' do
30
+ expect(ass? 'h=one').to be true
31
+ expect(ass? '-ass=two').to be true
32
+ expect(ass? '--ass=two').to be true
33
+ end
34
+
35
+ it 'is not as assignment' do
36
+ expect(ass? '-h').to be false
37
+ expect(ass? '-h=').to be false
38
+ expect(ass? 'h=').to be false
39
+ expect(ass? '=').to be false
40
+ expect(ass? '-h=one=two').to be false
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,47 +1,47 @@
1
- require 'spec_helper'
2
-
3
- module Raph
4
- module Parser
5
- describe BaseParser do
6
- describe '#id' do
7
- it 'returns correct value for base class' do
8
- expect(subject.id).to eql :bases
9
- end
10
-
11
- it 'returns correct value for child class' do
12
- class BaseArgumentParser < BaseParser; end
13
- expect(BaseArgumentParser.new.id).to eql :base_arguments
14
- end
15
-
16
- it 'returns correct value for modulized class' do
17
- module A
18
- module B
19
- class TestParser < BaseParser; end
20
- end
21
- end
22
- expect(A::B::TestParser.new.id).to eql :tests
23
- end
24
-
25
- it 'is correct when no name convention' do
26
- class Plural < BaseParser; end
27
- expect(Plural.new.id).to eql :plurals
28
- end
29
-
30
- it 'can be redefined' do
31
- class Plural < BaseParser
32
- def id
33
- :tests
34
- end
35
- end
36
- expect(Plural.new.id).to eql :tests
37
- end
38
- end
39
-
40
- describe '#parse' do
41
- it 'returns args' do
42
- expect(subject.parse [1, 2, 3]).to be nil
43
- end
44
- end
45
- end
46
- end
47
- end
1
+ require 'spec_helper'
2
+
3
+ module Raph
4
+ module Parser
5
+ describe BaseParser do
6
+ describe '#id' do
7
+ it 'returns correct value for base class' do
8
+ expect(subject.id).to eql :bases
9
+ end
10
+
11
+ it 'returns correct value for child class' do
12
+ class BaseArgumentParser < BaseParser; end
13
+ expect(BaseArgumentParser.new.id).to eql :base_arguments
14
+ end
15
+
16
+ it 'returns correct value for modulized class' do
17
+ module A
18
+ module B
19
+ class TestParser < BaseParser; end
20
+ end
21
+ end
22
+ expect(A::B::TestParser.new.id).to eql :tests
23
+ end
24
+
25
+ it 'is correct when no name convention' do
26
+ class Plural < BaseParser; end
27
+ expect(Plural.new.id).to eql :plurals
28
+ end
29
+
30
+ it 'can be redefined' do
31
+ class Plural < BaseParser
32
+ def id
33
+ :tests
34
+ end
35
+ end
36
+ expect(Plural.new.id).to eql :tests
37
+ end
38
+ end
39
+
40
+ describe '#parse' do
41
+ it 'returns args' do
42
+ expect(subject.parse [1, 2, 3]).to be nil
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end