to_parsed_obj 0.1.1 → 0.2.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.
data/.lre ADDED
@@ -0,0 +1,18 @@
1
+ def run_specs!
2
+ require 'rspec'
3
+ RSpec.instance_eval { @configuration = RSpec::Core::Configuration.new }
4
+ RSpec::world.instance_eval { @example_groups = [] }
5
+ load "spec/to_parsed_obj_spec.rb"
6
+
7
+ #puts RSpec::world.shared_example_groups.size
8
+ RSpec::Core::Runner.run([], $stderr, $stdout)
9
+ end
10
+
11
+ LRE.watch(".*spec/.*.rb") do |f|
12
+ run_specs!
13
+ end
14
+
15
+ LRE.watch(".*lib/.*.rb") do |f|
16
+ load(f)
17
+ run_specs!
18
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
data/lib/to_parsed_obj.rb CHANGED
@@ -13,6 +13,8 @@ module ToParsedObj
13
13
  m.call(obj)
14
14
  elsif m.kind_of?(Array)
15
15
  m.all? { |x| match?(obj,x) }
16
+ elsif m.kind_of?(Class)
17
+ obj.kind_of?(m)
16
18
  else
17
19
  m == obj
18
20
  end
@@ -26,6 +28,8 @@ module ToParsedObj
26
28
  elsif convertor.respond_to?(:call)
27
29
  if convertor.arity == 1
28
30
  convertor.call(obj)
31
+ elsif convertor.arity == 0
32
+ convertor.call
29
33
  else
30
34
  convertor.call(obj,self)
31
35
  end
@@ -37,8 +41,15 @@ module ToParsedObj
37
41
  class Parsers
38
42
  include FromHash
39
43
  fattr(:parsers) { [] }
40
- def parse(obj)
41
- parsers.each do |parser|
44
+ def each_parser(one_time,&b)
45
+ one_time.each do |m,c|
46
+ parser = ToParsedObj::SingleParser.new(:matcher => m, :convertor => c)
47
+ yield(parser)
48
+ end
49
+ parsers.each(&b)
50
+ end
51
+ def parse(obj,one_time={})
52
+ each_parser(one_time) do |parser|
42
53
  return parser.parse(obj) if parser.match?(obj)
43
54
  end
44
55
  obj
@@ -49,8 +60,8 @@ module ToParsedObj
49
60
  end
50
61
  def add_basic!
51
62
  require 'date'
52
- add(:matcher => /^[0-9]+$/, :convertor => :to_i)
53
- add(:matcher => [/^[0-9\.]+$/,/^[^\.]*\.[^\.]*$/], :convertor => :to_f)
63
+ add(:matcher => /^-?[0-9]+$/, :convertor => :to_i)
64
+ add(:matcher => [/^-?[0-9\.]+$/,/^[^\.]*\.[^\.]*$/], :convertor => :to_f)
54
65
  add(:matcher => /^\d+[\/\\]\d+[\/\\]\d+$/) { |str| Date.parse(str) }
55
66
 
56
67
  add(:matcher => /^(\d+[\/\\]\d+[\/\\]\d+\s+\d+(?::\d+){1,99})/) do |str,single|
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + "/../to_parsed_obj"
2
2
  ToParsedObj.add_basic!
3
3
 
4
4
  class Object
5
- def to_parsed_obj
6
- ToParsedObj.parse(self)
5
+ def to_parsed_obj(*args)
6
+ ToParsedObj.parse(self,*args)
7
7
  end
8
8
  end
@@ -3,6 +3,11 @@ require 'to_parsed_obj/ext'
3
3
 
4
4
  TP = ToParsedObj
5
5
 
6
+ class Foo
7
+ include FromHash
8
+ attr_accessor :bar
9
+ end
10
+
6
11
  describe "ToParsedObj" do
7
12
  before do
8
13
  TP::Parsers.instance!
@@ -22,6 +27,12 @@ describe "ToParsedObj" do
22
27
  mit "should convert float" do
23
28
  "2.3".should parse_to(2.3)
24
29
  end
30
+ mit "should convert negative int" do
31
+ "-2".should parse_to(-2)
32
+ end
33
+ mit "should convert negative float" do
34
+ "-2.3".should parse_to(-2.3)
35
+ end
25
36
  mit "should not parse multiple dots to float" do
26
37
  "1.2.3".should parse_to("1.2.3")
27
38
  end
@@ -31,6 +42,9 @@ describe "ToParsedObj" do
31
42
  mit "should parse time with hours and minutes" do
32
43
  "4/1/2010 12:30".should parse_to(Time.local(2010,4,1,12,30) )
33
44
  end
45
+ mit "should parse time with single digit hour and minutes" do
46
+ "4/1/2010 2:30".should parse_to(Time.local(2010,4,1,2,30) )
47
+ end
34
48
  mit "should parse time with seconds" do
35
49
  "4/1/2010 12:30:01".should parse_to(Time.local(2010,4,1,12,30,1) )
36
50
  end
@@ -42,4 +56,20 @@ describe "ToParsedObj" do
42
56
  t = Time.local(2010,4,1)
43
57
  t.inspect.should parse_to(t)
44
58
  end
59
+ mit "should pass unknown object through" do
60
+ f = Foo.new
61
+ f.should parse_to(f)
62
+ end
63
+ mit "should use class parser" do
64
+ TP.add :matcher => Foo do |obj|
65
+ obj.bar * 2
66
+ end
67
+ f = Foo.new(:bar => 12)
68
+ f.should parse_to(24)
69
+ end
70
+ mit 'one time' do
71
+ require 'date'
72
+ "TODAY".to_parsed_obj.should == 'TODAY'
73
+ "TODAY".to_parsed_obj('TODAY' => lambda { Date.today }).should == Date.today
74
+ end
45
75
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{to_parsed_obj}
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mharris717"]
12
- s.date = %q{2011-01-12}
12
+ s.date = %q{2012-03-04}
13
13
  s.description = %q{parse strings into the appropriate object}
14
14
  s.email = %q{mharris717@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -18,6 +18,7 @@ Gem::Specification.new do |s|
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
+ ".lre",
21
22
  ".rspec",
22
23
  "Gemfile",
23
24
  "Gemfile.lock",
@@ -34,7 +35,7 @@ Gem::Specification.new do |s|
34
35
  s.homepage = %q{http://github.com/mharris717/to_parsed_obj}
35
36
  s.licenses = ["MIT"]
36
37
  s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.3.7}
38
+ s.rubygems_version = %q{1.5.2}
38
39
  s.summary = %q{parse strings into the appropriate object}
39
40
  s.test_files = [
40
41
  "spec/spec_helper.rb",
@@ -42,7 +43,6 @@ Gem::Specification.new do |s|
42
43
  ]
43
44
 
44
45
  if s.respond_to? :specification_version then
45
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
46
  s.specification_version = 3
47
47
 
48
48
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
metadata CHANGED
@@ -1,138 +1,104 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: to_parsed_obj
3
- version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - mharris717
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-01-12 00:00:00 -05:00
12
+ date: 2012-03-04 00:00:00.000000000 -05:00
19
13
  default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: mharris_ext
23
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: &15925308 !ruby/object:Gem::Requirement
24
18
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
32
23
  type: :runtime
33
24
  prerelease: false
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
25
+ version_requirements: *15925308
26
+ - !ruby/object:Gem::Dependency
36
27
  name: fattr
37
- requirement: &id002 !ruby/object:Gem::Requirement
28
+ requirement: &15924876 !ruby/object:Gem::Requirement
38
29
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
46
34
  type: :runtime
47
35
  prerelease: false
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
36
+ version_requirements: *15924876
37
+ - !ruby/object:Gem::Dependency
50
38
  name: rspec
51
- requirement: &id003 !ruby/object:Gem::Requirement
39
+ requirement: &15924468 !ruby/object:Gem::Requirement
52
40
  none: false
53
- requirements:
41
+ requirements:
54
42
  - - ~>
55
- - !ruby/object:Gem::Version
56
- hash: 11
57
- segments:
58
- - 2
59
- - 1
60
- - 0
43
+ - !ruby/object:Gem::Version
61
44
  version: 2.1.0
62
45
  type: :development
63
46
  prerelease: false
64
- version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
47
+ version_requirements: *15924468
48
+ - !ruby/object:Gem::Dependency
66
49
  name: bundler
67
- requirement: &id004 !ruby/object:Gem::Requirement
50
+ requirement: &15923928 !ruby/object:Gem::Requirement
68
51
  none: false
69
- requirements:
52
+ requirements:
70
53
  - - ~>
71
- - !ruby/object:Gem::Version
72
- hash: 23
73
- segments:
74
- - 1
75
- - 0
76
- - 0
54
+ - !ruby/object:Gem::Version
77
55
  version: 1.0.0
78
56
  type: :development
79
57
  prerelease: false
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
58
+ version_requirements: *15923928
59
+ - !ruby/object:Gem::Dependency
82
60
  name: jeweler
83
- requirement: &id005 !ruby/object:Gem::Requirement
61
+ requirement: &15923316 !ruby/object:Gem::Requirement
84
62
  none: false
85
- requirements:
63
+ requirements:
86
64
  - - ~>
87
- - !ruby/object:Gem::Version
88
- hash: 7
89
- segments:
90
- - 1
91
- - 5
92
- - 2
65
+ - !ruby/object:Gem::Version
93
66
  version: 1.5.2
94
67
  type: :development
95
68
  prerelease: false
96
- version_requirements: *id005
97
- - !ruby/object:Gem::Dependency
69
+ version_requirements: *15923316
70
+ - !ruby/object:Gem::Dependency
98
71
  name: rcov
99
- requirement: &id006 !ruby/object:Gem::Requirement
72
+ requirement: &15918756 !ruby/object:Gem::Requirement
100
73
  none: false
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- hash: 3
105
- segments:
106
- - 0
107
- version: "0"
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
108
78
  type: :development
109
79
  prerelease: false
110
- version_requirements: *id006
111
- - !ruby/object:Gem::Dependency
80
+ version_requirements: *15918756
81
+ - !ruby/object:Gem::Dependency
112
82
  name: win32console
113
- requirement: &id007 !ruby/object:Gem::Requirement
83
+ requirement: &15918300 !ruby/object:Gem::Requirement
114
84
  none: false
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- hash: 3
119
- segments:
120
- - 0
121
- version: "0"
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
122
89
  type: :development
123
90
  prerelease: false
124
- version_requirements: *id007
91
+ version_requirements: *15918300
125
92
  description: parse strings into the appropriate object
126
93
  email: mharris717@gmail.com
127
94
  executables: []
128
-
129
95
  extensions: []
130
-
131
- extra_rdoc_files:
96
+ extra_rdoc_files:
132
97
  - LICENSE.txt
133
98
  - README.rdoc
134
- files:
99
+ files:
135
100
  - .document
101
+ - .lre
136
102
  - .rspec
137
103
  - Gemfile
138
104
  - Gemfile.lock
@@ -147,38 +113,33 @@ files:
147
113
  - to_parsed_obj.gemspec
148
114
  has_rdoc: true
149
115
  homepage: http://github.com/mharris717/to_parsed_obj
150
- licenses:
116
+ licenses:
151
117
  - MIT
152
118
  post_install_message:
153
119
  rdoc_options: []
154
-
155
- require_paths:
120
+ require_paths:
156
121
  - lib
157
- required_ruby_version: !ruby/object:Gem::Requirement
122
+ required_ruby_version: !ruby/object:Gem::Requirement
158
123
  none: false
159
- requirements:
160
- - - ">="
161
- - !ruby/object:Gem::Version
162
- hash: 3
163
- segments:
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ segments:
164
129
  - 0
165
- version: "0"
166
- required_rubygems_version: !ruby/object:Gem::Requirement
130
+ hash: 381227005
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
132
  none: false
168
- requirements:
169
- - - ">="
170
- - !ruby/object:Gem::Version
171
- hash: 3
172
- segments:
173
- - 0
174
- version: "0"
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
175
137
  requirements: []
176
-
177
138
  rubyforge_project:
178
- rubygems_version: 1.3.7
139
+ rubygems_version: 1.5.2
179
140
  signing_key:
180
141
  specification_version: 3
181
142
  summary: parse strings into the appropriate object
182
- test_files:
143
+ test_files:
183
144
  - spec/spec_helper.rb
184
145
  - spec/to_parsed_obj_spec.rb