str2duck 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MmRlMGM0ZGZhNmI3ZWZkOTQ3ZTVhYjJjYjcxYTIxMWZhMWQxMTc1Ng==
5
+ data.tar.gz: !binary |-
6
+ NjViNmI0MjdjOWQ1ZTBmNjYyYmY4Nzc2N2MxZGMxNzJiMGNmN2U1YQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MDMzZTZkZDBjNzY2OTA1YjhhYzg0MDJjN2NjYWJjOWQ2ZmY5YzM5YTc0N2M4
10
+ MjM2M2Y4NGNkMDY1NmU0ZmY0ZTFhZTYwNTAxNTQ4OWFmY2VlYWJlZDEyNWJj
11
+ NDEwOWZmNjY1NmMxNTZmZGEzMDgxYTdmM2ZlMWRkYzFmZmM1YTE=
12
+ data.tar.gz: !binary |-
13
+ OWUyMGU4NTM4MzBjMDIxYjE0OTM2OTc3ZDI5ZGRmZjI0OTNjZTYxMzE3OTQ4
14
+ MzMzNzQ1YmI1OGI5YWVkN2RhNjBkOWQ5NzAxMWIyMzhhMTFlMDc0MGUwOTU0
15
+ NjRmOTFhM2UyNzQ1MjUwNDg2NGI0OTBkY2NmNTM4ZTM0YWJjNmE=
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,18 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ str2duck (0.0.1)
5
+ active_support
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ active_support (3.0.0)
11
+ activesupport (= 3.0.0)
12
+ activesupport (3.0.0)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ str2duck!
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 Adam Luzsi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ 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, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ str2duck
2
+ ========
3
+
4
+ String to Duck type parser
5
+ It can parse int, float, time, date . datetime, booleans etc from string
6
+
7
+ Possible bug source, not yet been tested is the american time format.
8
+
9
+ ```ruby
10
+
11
+ require 'str2duck'
12
+
13
+ "2011-03-12".duck #> Date obj
14
+ "false".duck #> False obj
15
+ "123".duck #> Integer obj
16
+ "123.123".duck #> Float obj
17
+ "2012-09-12T14:49:50+02:00".duck #> Time obj
18
+
19
+ ```
20
+
21
+ it is possible ot extend the Duck flexibility be require the Active Supports time extension,
22
+
23
+ simple like that:
24
+
25
+ ```ruby
26
+ require File.join 'active_support','time'
27
+ ```
28
+
29
+ This will give you even more flexibility in terms of use :)
30
+ like:
31
+
32
+ ```ruby
33
+
34
+ "Fri, 25 Jan 2013 20:02:15 +0100".duck #> DateTime obj
35
+ "Sun, 28 Aug 2005".duck #> Date obj
36
+
37
+ ```
38
+
39
+ Happy parsing!
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require File.join "bundler","gem_tasks"
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,19 @@
1
+ #begin
2
+ # string_input= string_data_obj
3
+ # contain= nil
4
+ # ["[", "]","^","$","*","/"].each do |one_sym|
5
+ # if string_input.include? one_sym
6
+ # contain ||= true
7
+ # end
8
+ # end
9
+ # if contain == true
10
+ # string_regexp= Regexp.new(string_input).inspect#.gsub('\\','')
11
+ # string_regexp= string_regexp[1..(string_regexp.length-2)]
12
+ # if string_input == string_regexp
13
+ # return Regexp.new(string_input)
14
+ # else
15
+ # raise ArgumentError,"invalid input string"
16
+ # end
17
+ # end
18
+ #rescue ArgumentError
19
+ #end
@@ -0,0 +1,43 @@
1
+ require_relative "../lib/str2duck"
2
+
3
+ [
4
+ "2011-03-12",
5
+ "2007-07-20 18:59:27 +0200",
6
+ "2010-10-30 18:02:56 +0200",
7
+ "2012-09-12T14:49:50+02:00",
8
+ "123",
9
+ "asd",
10
+ "123.432",
11
+ "true",
12
+ "false",
13
+ "some string data"
14
+ ].each do |object|
15
+ puts object.duck,object.duck.class,""
16
+ end
17
+
18
+ begin
19
+
20
+ require File.join 'active_support','time'
21
+
22
+ puts "but if you load the Active support gem like when you do anyway in Rails, the duck will be more with time formats flexible"
23
+
24
+ [
25
+ "2011-03-12",
26
+ "2007-07-20 18:59:27 +0200",
27
+ "2010-10-30 18:02:56 +0200",
28
+ "2012-09-12T14:49:50+02:00",
29
+ "123",
30
+ "asd",
31
+ "123.432",
32
+ "true",
33
+ "false",
34
+ "some string data"
35
+ ].each do |object|
36
+ puts object.duck,object.duck.class,""
37
+ end
38
+
39
+ puts "Sun, 28 Aug 2005".duck.class
40
+ puts "Fri, 25 Jan 2013 20:02:15 +0100".duck.class
41
+
42
+ rescue LoadError
43
+ end
data/files.rb ADDED
@@ -0,0 +1,24 @@
1
+ ### Get Files from dir
2
+ begin
3
+
4
+ files_to_be_loaded = %w[version.rb]
5
+
6
+ SpecFiles= Array.new
7
+
8
+ Dir[File.expand_path(File.join(File.dirname(__FILE__),"**","*"))].sort.uniq.each do |one_file_name|
9
+ one_file_name = File.expand_path one_file_name
10
+ file_name = one_file_name[(File.expand_path(File.dirname(__FILE__)).to_s.length+1)..(one_file_name.length-1)]
11
+
12
+ if !one_file_name.include?("pkg")
13
+ if !File.directory? file_name
14
+ SpecFiles.push file_name
15
+ STDOUT.puts file_name if $DEBUG
16
+ if files_to_be_loaded.include? one_file_name.split(File::SEPARATOR).last
17
+ load one_file_name
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,78 @@
1
+ #encoding: UTF-8
2
+ module Str2Duck
3
+ module Format
4
+ class << self
5
+
6
+ def datetime obj
7
+ if Str2Duck::Regexp.datetime?(obj)
8
+ if defined? DateTime
9
+ return DateTime.parse obj
10
+ else
11
+ time_parts= obj.scan(/\d+/).map(&:to_i)
12
+ if time_parts.count == 8
13
+ 2.times{time_parts.pop}
14
+ elsif time_parts.count == 6
15
+ return nil
16
+ end
17
+ return Time.new(*time_parts)
18
+ end
19
+ end
20
+ nil
21
+ end
22
+
23
+ def date obj
24
+ if Str2Duck::Regexp.date?(obj)
25
+ begin
26
+ return Date.parse obj
27
+ rescue NoMethodError
28
+ time_parts= obj.scan(/\d+/).map(&:to_i)
29
+ return Time.new(*time_parts)
30
+ end
31
+ end
32
+ nil
33
+ end
34
+
35
+ def time obj
36
+ if Str2Duck::Regexp.time?(obj)
37
+ begin
38
+ return Time.parse obj
39
+ rescue NoMethodError
40
+ time_parts= obj.scan(/\d+/).map(&:to_i)
41
+ 1.times{time_parts.pop}
42
+ return Time.new(*time_parts)
43
+ end
44
+ end
45
+ nil
46
+ end
47
+
48
+ def true obj
49
+ if Str2Duck::Regexp.true?(obj)
50
+ return true
51
+ end
52
+ nil
53
+ end
54
+
55
+ def false obj
56
+ if Str2Duck::Regexp.false?(obj)
57
+ return false
58
+ end
59
+ nil
60
+ end
61
+
62
+ def float obj
63
+ if Str2Duck::Regexp.float?(obj)
64
+ return obj.to_f
65
+ end
66
+ nil
67
+ end
68
+
69
+ def integer obj
70
+ if Str2Duck::Regexp.integer?(obj)
71
+ return obj.to_i
72
+ end
73
+ nil
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,16 @@
1
+ #encoding: UTF-8
2
+ module Str2Duck
3
+
4
+ def self.parse string_data_obj
5
+ raise ArgumentError,"invalid input, must be string!" if string_data_obj.class != String
6
+ return_value= nil
7
+
8
+ Str2Duck::Format.singleton_methods.each do |method_name|
9
+ return_value ||= Str2Duck::Format.__send__ method_name, string_data_obj
10
+ end
11
+
12
+ return_value ||= string_data_obj
13
+ return return_value
14
+ end
15
+
16
+ end
@@ -0,0 +1,65 @@
1
+ #encoding: UTF-8
2
+ module Str2Duck
3
+ module Regexp
4
+ class << self
5
+
6
+ def datetime? obj
7
+
8
+ answer_value= nil
9
+ [
10
+ /^\w+, \d+ \w+ \d\d\d\d \d\d:\d\d:\d\d \+\d+$/,
11
+ /^\d\d\d\d-\d\d-\d\d\w\d\d:\d\d:\d\d\+\d\d:\d\d$/
12
+ ].each do |regexp|
13
+ answer_value ||= obj =~ regexp
14
+ end
15
+
16
+ return Str2Duck.return_value_parse answer_value
17
+
18
+ end
19
+
20
+ def date? obj
21
+
22
+ answer_value= nil
23
+ [
24
+ /^\d\d\d\d-\d\d-\d\d$/,
25
+ /^\w+, \d+ \w+ \d\d\d\d$/
26
+ ].each do |regexp|
27
+ answer_value ||= obj =~ regexp
28
+ end
29
+
30
+ return Str2Duck.return_value_parse answer_value
31
+
32
+ end
33
+
34
+ def time? obj
35
+
36
+ answer_value= nil
37
+ [
38
+ /^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d \+\d+$/
39
+ ].each do |regexp|
40
+ answer_value ||= obj =~ regexp
41
+ end
42
+
43
+ return Str2Duck.return_value_parse answer_value
44
+
45
+ end
46
+
47
+ def true? obj
48
+ return Str2Duck.return_value_parse obj =~ /^true$/
49
+ end
50
+
51
+ def false? obj
52
+ return Str2Duck.return_value_parse obj =~ /^true$/
53
+ end
54
+
55
+ def float? obj
56
+ return Str2Duck.return_value_parse obj =~ /^\d+\.\d+$/
57
+ end
58
+
59
+ def integer? obj
60
+ return Str2Duck.return_value_parse obj =~ /^\d+$/
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,8 @@
1
+ class String
2
+
3
+ def duck
4
+ Str2Duck.parse(self)
5
+ end
6
+ alias :to_duck :duck
7
+
8
+ end
@@ -0,0 +1,17 @@
1
+ #encoding: UTF-8
2
+ module Str2Duck
3
+ class << self
4
+ def return_value_parse object
5
+ case object
6
+
7
+ when nil
8
+ return false
9
+ when 0
10
+ return true
11
+ else
12
+ nil
13
+
14
+ end
15
+ end
16
+ end
17
+ end
data/lib/str2duck.rb ADDED
@@ -0,0 +1,7 @@
1
+ #encoding: UTF-8
2
+
3
+ require File.join File.dirname(__FILE__),'str2duck','support'
4
+ require File.join File.dirname(__FILE__),'str2duck','format'
5
+ require File.join File.dirname(__FILE__),'str2duck','regexp'
6
+ require File.join File.dirname(__FILE__),'str2duck','parser'
7
+ require File.join File.dirname(__FILE__),'str2duck','string'
data/str2duck.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__),"files.rb"))
4
+
5
+ ### Specification for the new Gem
6
+ Gem::Specification.new do |spec|
7
+
8
+ spec.name = "str2duck"
9
+ spec.version = File.open(File.join(File.dirname(__FILE__),"VERSION")).read.split("\n")[0].chomp.gsub(' ','')
10
+ spec.authors = ["Adam Luzsi"]
11
+ spec.email = ["adamluzsi@gmail.com"]
12
+ spec.description = %q{ Parse string into obj }
13
+ spec.summary = %q{ String to Obj, Duck type parser }
14
+ spec.homepage = "https://github.com/adamluzsi/str2duck"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = SpecFiles
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ #spec.add_dependency 'active_support'
23
+
24
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: str2duck
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Luzsi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-27 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: ! ' Parse string into obj '
14
+ email:
15
+ - adamluzsi@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - Gemfile
21
+ - Gemfile.lock
22
+ - LICENSE
23
+ - README.md
24
+ - Rakefile
25
+ - VERSION
26
+ - dump/find_regexp.rb
27
+ - examples/sample.rb
28
+ - files.rb
29
+ - lib/str2duck.rb
30
+ - lib/str2duck/format.rb
31
+ - lib/str2duck/parser.rb
32
+ - lib/str2duck/regexp.rb
33
+ - lib/str2duck/string.rb
34
+ - lib/str2duck/support.rb
35
+ - str2duck.gemspec
36
+ homepage: https://github.com/adamluzsi/str2duck
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.2.1
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: String to Obj, Duck type parser
60
+ test_files: []