planet_express 0.0.3 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -9,7 +9,6 @@ Gemfile.lock
9
9
  InstalledFiles
10
10
  _yardoc
11
11
  coverage
12
- doc/
13
12
  lib/bundler/man
14
13
  pkg
15
14
  rdoc
data/CHANGELOG.md ADDED
@@ -0,0 +1,33 @@
1
+ Changelog
2
+ =========
3
+
4
+ ### 0.0.7
5
+ - If Rails.logger exists use it, if not switch to log4r.
6
+
7
+ ### 0.0.6
8
+ - Start using log4r instead of Logger.new (now logs are namespaced)
9
+ - Minor changes to README and documentation. Added Changelog and silverpop api.
10
+ - Adding name spaced exceptions to handle custom errors.
11
+
12
+ ### 0.0.5
13
+ - Start using job.configure { } to change the Silverpop gateway url.
14
+ - Start using Pry instead of IRB.
15
+ - Start using Awesome Print instead of inspect.
16
+
17
+ ### 0.0.4
18
+ - Minor changes to README and documentation.
19
+
20
+ ### 0.0.3
21
+ - First usable version. Seems to be working.
22
+
23
+ ### 0.0.2
24
+ - Adding a few clasess, still a mess.
25
+
26
+ ### 0.0.1
27
+ - Empty gem using bundler's boilerplate.
28
+
29
+ TODO
30
+ ----
31
+
32
+ - Include Yard for documentation http://yardoc.org
33
+ - Let change the gateway from the Class, instead from the instance
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- planet_express (0.0.3)
4
+ planet_express (0.0.7)
5
5
  activesupport
6
6
  hpricot
7
+ log4r
7
8
 
8
9
  GEM
9
10
  remote: http://rubygems.org/
@@ -11,6 +12,8 @@ GEM
11
12
  activesupport (3.2.8)
12
13
  i18n (~> 0.6)
13
14
  multi_json (~> 1.0)
15
+ awesome_print (1.1.0)
16
+ coderay (1.0.8)
14
17
  diff-lcs (1.1.3)
15
18
  guard (1.4.0)
16
19
  listen (>= 0.4.2)
@@ -24,7 +27,13 @@ GEM
24
27
  hpricot (0.8.6)
25
28
  i18n (0.6.1)
26
29
  listen (0.5.3)
27
- multi_json (1.3.6)
30
+ log4r (1.1.10)
31
+ method_source (0.7.1)
32
+ multi_json (1.3.7)
33
+ pry (0.9.9.6)
34
+ coderay (~> 1.0.5)
35
+ method_source (~> 0.7.1)
36
+ slop (>= 2.4.4, < 3)
28
37
  rb-fsevent (0.9.2)
29
38
  rspec (2.11.0)
30
39
  rspec-core (~> 2.11.0)
@@ -35,16 +44,19 @@ GEM
35
44
  diff-lcs (~> 1.1.3)
36
45
  rspec-mocks (2.11.3)
37
46
  ruby_gntp (0.3.4)
47
+ slop (2.4.4)
38
48
  thor (0.16.0)
39
49
 
40
50
  PLATFORMS
41
51
  ruby
42
52
 
43
53
  DEPENDENCIES
54
+ awesome_print
44
55
  guard
45
56
  guard-bundler
46
57
  guard-rspec
47
58
  planet_express!
59
+ pry
48
60
  rb-fsevent
49
61
  rspec
50
62
  ruby_gntp
data/README.md CHANGED
@@ -1,118 +1,55 @@
1
1
  Planet Express.rb
2
2
  =================
3
3
 
4
+ Description
5
+ -----------
6
+
4
7
  Planet Express, Inc. is an intergalactic email delivery <strike>company</strike>
5
8
  lib built in Ruby. Is meant to be used with Silverpop mailing system, to provide
6
9
  an easy way to send emails. We're using it with Rails 3 apps.
7
10
 
8
11
  > "Our crew is replaceable. Your <strike>package</strike> email isn't."
9
12
 
10
- **@MarioZaizar**
11
-
12
- ## Installation
13
- ---------------
13
+ Features
14
+ --------
14
15
 
15
- Add this line to your application's Gemfile:
16
+ - Send emails using Silverpop.
16
17
 
17
- ```
18
- gem 'planet_express'
19
- ```
20
-
21
- And then execute:
22
-
23
- ```
24
- $ bundle
25
- ```
26
-
27
- Or install it yourself as:
28
-
29
- ```
30
- $ gem install planet_express
31
- ```
32
-
33
- Usage
34
- -----
18
+ ### Examples
35
19
 
36
20
  You only need three things, the package, the destination and the data.
21
+ Then create a new deliver, prepare the ship and deliver it!
37
22
 
38
23
  ```
24
+ require 'planet_express'
25
+
39
26
  recipient = 'mariozaizar@gmail.com'
40
27
  package_id = 1807752
41
- cargo = {
42
- fist_name: 'Mario',
43
- last_name: 'Zaizar',
44
- bill_float_test_body: "<h1>Good news everyone!</h1><img src='http://goo.gl/XazeH'>"
45
- }
46
- ```
28
+ cargo = { bill_float_test_body: "<h1>Good news everyone!</h1><img src='http://goo.gl/XazeH'>" }
47
29
 
48
- Then create a new deliver, prepare the ship and deliver it!
49
-
50
- ```
51
30
  job = PlanetExpress::Delivery.new
52
31
  request = job.prepare package_id, recipient, cargo
53
32
  response = job.deliver!
54
33
  ```
55
34
 
56
- Silverpop API
57
- -------------
58
-
59
- We're using this <https://transact5.silverpop.com/XTMail> end point.
60
-
61
- ### Request:
35
+ ### Configuration
62
36
 
63
37
  ```
64
- <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
65
- <XTMAILING>
66
- <CAMPAIGN_ID>1807752</CAMPAIGN_ID>
67
- <SHOW_ALL_SEND_DETAIL>true</SHOW_ALL_SEND_DETAIL>
68
- <SEND_AS_BATCH>false</SEND_AS_BATCH>
69
- <NO_RETRY_ON_FAILURE>false</NO_RETRY_ON_FAILURE>
70
- <RECIPIENT>
71
- <EMAIL>mariozaizar@gmail.com</EMAIL>
72
- <BODY_TYPE>HTML</BODY_TYPE>
73
- <PERSONALIZATION>
74
- <TAG_NAME>first_name</TAG_NAME>
75
- <VALUE><![CDATA[Mario]]></VALUE>
76
- </PERSONALIZATION>
77
- <PERSONALIZATION>
78
- <TAG_NAME>last_name</TAG_NAME>
79
- <VALUE><![CDATA[Zaizar]]></VALUE>
80
- </PERSONALIZATION>
81
- </RECIPIENT>
82
- </XTMAILING>
38
+ job.configure do |config|
39
+ config.gateway_url = 'https://transact3.silverpop.com/XTMail'
40
+ end
83
41
  ```
84
42
 
85
- ### Response:
43
+ Installation
44
+ ------------
86
45
 
87
- Succcess:
46
+ Add this line to your application's Gemfile `gem 'planet_express'` and then
47
+ execute `bundle install`. Or install it yourself as: `gem install planet_express`.
88
48
 
89
- ```
90
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
91
- <XTMAILING_RESPONSE>
92
- <CAMPAIGN_ID>1807752</CAMPAIGN_ID>
93
- <RECIPIENTS_RECEIVED>1</RECIPIENTS_RECEIVED>
94
- <EMAILS_SENT>1</EMAILS_SENT>
95
- <NUMBER_ERRORS>0</NUMBER_ERRORS>
96
- <STATUS>0</STATUS>
97
- <ERROR_CODE></ERROR_CODE>
98
- <ERROR_STRING></ERROR_STRING>
99
- </XTMAILING_RESPONSE>
100
- ```
101
-
102
- When something is wrong:
49
+ Silverpop API
50
+ -------------
103
51
 
104
- ```
105
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
106
- <XTMAILING_RESPONSE>
107
- <CAMPAIGN_ID>1807752</CAMPAIGN_ID>
108
- <RECIPIENTS_RECEIVED>1</RECIPIENTS_RECEIVED>
109
- <EMAILS_SENT>0</EMAILS_SENT>
110
- <NUMBER_ERRORS>1</NUMBER_ERRORS>
111
- <STATUS>2</STATUS>
112
- <ERROR_CODE>2</ERROR_CODE>
113
- <ERROR_STRING>something wrong!</ERROR_STRING>
114
- </XTMAILING_RESPONSE>
115
- ```
52
+ Check this file: [doc/silverpop_api.md](./doc/silverpop_api.md)
116
53
 
117
54
  Contributing
118
55
  ------------
@@ -122,3 +59,5 @@ Contributing
122
59
  3. Commit your changes (`git commit -am 'Add some feature'`)
123
60
  4. Push to the branch (`git push origin my-new-feature`)
124
61
  5. Create new Pull Request
62
+
63
+ **@MarioZaizar**
File without changes
@@ -0,0 +1,79 @@
1
+ Silverpop API
2
+ -------------
3
+
4
+ We're using this <https://transact5.silverpop.com/XTMail> end point.
5
+
6
+ ### Request:
7
+
8
+ ```
9
+ <?xml version='1.0' encoding='UTF-8' standalone='yes'?>
10
+ <XTMAILING>
11
+ <CAMPAIGN_ID>1807752</CAMPAIGN_ID>
12
+ <SHOW_ALL_SEND_DETAIL>true</SHOW_ALL_SEND_DETAIL>
13
+ <SEND_AS_BATCH>false</SEND_AS_BATCH>
14
+ <NO_RETRY_ON_FAILURE>false</NO_RETRY_ON_FAILURE>
15
+ <RECIPIENT>
16
+ <EMAIL>mariozaizar@gmail.com</EMAIL>
17
+ <BODY_TYPE>HTML</BODY_TYPE>
18
+ <PERSONALIZATION>
19
+ <TAG_NAME>first_name</TAG_NAME>
20
+ <VALUE><![CDATA[Mario]]></VALUE>
21
+ </PERSONALIZATION>
22
+ <PERSONALIZATION>
23
+ <TAG_NAME>last_name</TAG_NAME>
24
+ <VALUE><![CDATA[Zaizar]]></VALUE>
25
+ </PERSONALIZATION>
26
+ </RECIPIENT>
27
+ </XTMAILING>
28
+ ```
29
+
30
+ ### Response:
31
+
32
+ Succcess:
33
+
34
+ ```
35
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
36
+ <XTMAILING_RESPONSE>
37
+ <CAMPAIGN_ID>1807752</CAMPAIGN_ID>
38
+ <RECIPIENTS_RECEIVED>1</RECIPIENTS_RECEIVED>
39
+ <EMAILS_SENT>1</EMAILS_SENT>
40
+ <NUMBER_ERRORS>0</NUMBER_ERRORS>
41
+ <STATUS>0</STATUS>
42
+ <ERROR_CODE></ERROR_CODE>
43
+ <ERROR_STRING></ERROR_STRING>
44
+ </XTMAILING_RESPONSE>
45
+ ```
46
+
47
+ When something is wrong:
48
+
49
+ ```
50
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
51
+ <XTMAILING_RESPONSE>
52
+ <CAMPAIGN_ID>1807752</CAMPAIGN_ID>
53
+ <RECIPIENTS_RECEIVED>1</RECIPIENTS_RECEIVED>
54
+ <EMAILS_SENT>0</EMAILS_SENT>
55
+ <NUMBER_ERRORS>1</NUMBER_ERRORS>
56
+ <STATUS>2</STATUS>
57
+ <ERROR_CODE>2</ERROR_CODE>
58
+ <ERROR_STRING>something wrong!</ERROR_STRING>
59
+ </XTMAILING_RESPONSE>
60
+ ```
61
+
62
+ ```
63
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
64
+ <XTMAILING_RESPONSE>
65
+ <CAMPAIGN_ID>4914098</CAMPAIGN_ID>
66
+ <RECIPIENTS_RECEIVED>1</RECIPIENTS_RECEIVED>
67
+ <EMAILS_SENT>0</EMAILS_SENT>
68
+ <NUMBER_ERRORS>1</NUMBER_ERRORS>
69
+ <STATUS>2</STATUS>
70
+ <ERROR_CODE>0</ERROR_CODE>
71
+ <ERROR_STRING></ERROR_STRING>
72
+ <RECIPIENT_DETAIL>
73
+ <EMAIL>user_email</EMAIL>
74
+ <SEND_STATUS>1</SEND_STATUS>
75
+ <ERROR_CODE>4</ERROR_CODE>
76
+ <ERROR_STRING>invalid email address user_email</ERROR_STRING>
77
+ </RECIPIENT_DETAIL>
78
+ </XTMAILING_RESPONSE>
79
+ ```
@@ -0,0 +1,9 @@
1
+ module PlanetExpress
2
+ class Configuration
3
+ attr_accessor :gateway_url
4
+
5
+ def initialize *args
6
+ @gateway_url = 'https://transact5.silverpop.com/XTMail'
7
+ end
8
+ end
9
+ end
@@ -1,27 +1,40 @@
1
1
  module PlanetExpress
2
2
  class Delivery
3
- # Everybody needs log in your life
4
- cattr_accessor :logger
5
- self.logger = Logger.new(STDOUT)
6
-
7
- def prepare campaign_id, recipient, personalizations={}
8
- # Is a better way to do this?
9
- @campaign_id = campaign_id
10
- @recipient = recipient
11
- @personalizations = personalizations
3
+ include Log4r
4
+
5
+ attr_accessor :configuration
6
+ attr_accessor :logger
7
+
8
+ def initialize *args
9
+ # Settings
10
+ self.configuration ||= PlanetExpress::Configuration.new
11
+
12
+ # By default try to use the same logger than Rails
13
+ begin
14
+ self.logger = Rails.logger
15
+ rescue
16
+ self.logger = Log4r::Logger.new('PlanetExpress')
17
+ self.logger.outputters << Log4r::Outputter.stdout
18
+ end
12
19
 
13
- logger.info "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
14
- logger.info "campaign_id => #{@campaign_id}"
15
- logger.info "recipient => #{@recipient}"
16
- logger.info "personalizations => #{@personalizations}"
17
- logger.info "personalizations total => #{@personalizations.count}"
20
+ logger.info "gateway_url => #{configuration.gateway_url}"
21
+ end
22
+
23
+ def configure
24
+ # Override Settings
25
+ yield(configuration)
26
+ end
18
27
 
28
+ def prepare campaign_id, recipient, personalizations={}
29
+ @campaign_id, @recipient, @personalizations = campaign_id, recipient, personalizations
19
30
  @personalizations.merge!({ :timestamp => Time.now, :email_template => @campaign_id })
31
+ raise PlanetExpress::ArgumentError if campaign_id.nil? or recipient.nil?
32
+
20
33
  build_request
21
34
  end
22
35
 
23
36
  def deliver!
24
- url = URI.parse 'https://transact5.silverpop.com/XTMail'
37
+ url = URI.parse configuration.gateway_url
25
38
  http, resp = Net::HTTP.new(url.host, url.port), ''
26
39
  http.use_ssl = true
27
40
 
@@ -40,40 +53,37 @@ module PlanetExpress
40
53
 
41
54
  @personalizations.each_pair do |name, value|
42
55
  fields_xml +=
43
- "<PERSONALIZATION>" +
44
- " <TAG_NAME>#{name}</TAG_NAME>" +
45
- " <VALUE><![CDATA[#{value}]]></VALUE>" +
46
- "</PERSONALIZATION>"
56
+ " <PERSONALIZATION>\n" +
57
+ " <TAG_NAME>#{name}</TAG_NAME>\n" +
58
+ " <VALUE><![CDATA[#{value}]]></VALUE>\n" +
59
+ " </PERSONALIZATION>\n"
47
60
  end
48
61
 
49
62
  recipient_xml =
50
- "<RECIPIENT>" +
51
- " <EMAIL>" + @recipient + "</EMAIL>" +
52
- " <BODY_TYPE>HTML</BODY_TYPE>" +
53
- " #{fields_xml}" +
54
- "</RECIPIENT>"
63
+ " <RECIPIENT>\n" +
64
+ " <EMAIL>" + @recipient + "</EMAIL>\n" +
65
+ " <BODY_TYPE>HTML</BODY_TYPE>\n" +
66
+ "#{fields_xml}" +
67
+ " </RECIPIENT>\n"
55
68
 
56
69
  @request =
57
- "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>" +
58
- "<XTMAILING>" +
59
- " <CAMPAIGN_ID>#{@campaign_id}</CAMPAIGN_ID>" +
60
- " <SHOW_ALL_SEND_DETAIL>true</SHOW_ALL_SEND_DETAIL>" +
61
- " <SEND_AS_BATCH>false</SEND_AS_BATCH>" +
62
- " <NO_RETRY_ON_FAILURE>false</NO_RETRY_ON_FAILURE>" +
63
- # " <TRANSACTION_ID>" + @transaction_id + "</TRANSACTION_ID>" +
64
- " #{recipient_xml}" +
65
- "</XTMAILING>"
66
-
67
- logger.info "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
68
- logger.info "request => #{@request}"
70
+ "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n" +
71
+ "<XTMAILING>\n" +
72
+ " <CAMPAIGN_ID>#{@campaign_id}</CAMPAIGN_ID>\n" +
73
+ " <SHOW_ALL_SEND_DETAIL>true</SHOW_ALL_SEND_DETAIL>\n" +
74
+ " <SEND_AS_BATCH>false</SEND_AS_BATCH>\n" +
75
+ " <NO_RETRY_ON_FAILURE>false</NO_RETRY_ON_FAILURE>\n" +
76
+ # " <TRANSACTION_ID>" + @transaction_id + "</TRANSACTION_ID>\n" +
77
+ "#{recipient_xml}" +
78
+ "</XTMAILING>\n"
69
79
 
80
+ logger.info "original request => \n#{@request}"
70
81
  @request
71
82
  end
72
83
 
73
84
  def build_response response
85
+ logger.info "original response => \n#{response}"
74
86
  @response = Hpricot::XML(response)
75
- logger.info "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"
76
- logger.info "response => #{response.inspect}"
77
87
 
78
88
  status = @response.at('STATUS').innerHTML.to_i
79
89
  error_string = @response.at('ERROR_STRING').innerHTML
@@ -0,0 +1,8 @@
1
+ module PlanetExpress
2
+ class Error < StandardError; end
3
+ class ArgumentError < ArgumentError;
4
+ def message
5
+ "Missing data. Please provide the campaign_id, recipient email and the personalizations hash."
6
+ end
7
+ end
8
+ end
@@ -1,3 +1,3 @@
1
1
  module PlanetExpress
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -1,9 +1,12 @@
1
+ require 'hpricot'
2
+ require 'log4r'
1
3
  require 'net/http'
2
4
  require 'uri'
3
- require 'hpricot'
4
5
 
5
- require "planet_express/version"
6
+ require "planet_express/configuration"
6
7
  require "planet_express/delivery"
8
+ require "planet_express/exceptions"
9
+ require "planet_express/version"
7
10
 
8
11
  module PlanetExpress
9
12
  end
@@ -19,9 +19,12 @@ Gem::Specification.new do |gem|
19
19
 
20
20
  gem.add_dependency 'activesupport'
21
21
  gem.add_dependency 'hpricot'
22
+ gem.add_dependency 'log4r'
22
23
 
24
+ gem.add_development_dependency 'awesome_print'
23
25
  gem.add_development_dependency 'guard'
24
26
  gem.add_development_dependency 'guard-bundler'
25
27
  gem.add_development_dependency 'guard-rspec'
28
+ gem.add_development_dependency 'pry'
26
29
  gem.add_development_dependency 'rspec'
27
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: planet_express
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-25 00:00:00.000000000 Z
12
+ date: 2012-12-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -43,6 +43,38 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: log4r
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: awesome_print
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
46
78
  - !ruby/object:Gem::Dependency
47
79
  name: guard
48
80
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +123,22 @@ dependencies:
91
123
  - - ! '>='
92
124
  - !ruby/object:Gem::Version
93
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: pry
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
94
142
  - !ruby/object:Gem::Dependency
95
143
  name: rspec
96
144
  requirement: !ruby/object:Gem::Requirement
@@ -119,15 +167,19 @@ files:
119
167
  - .gitignore
120
168
  - .rbenv-version
121
169
  - .rvmrc
122
- - DEVELOP.md
170
+ - CHANGELOG.md
123
171
  - Gemfile
124
172
  - Gemfile.lock
125
173
  - Guardfile
126
174
  - LICENSE.txt
127
175
  - README.md
128
176
  - Rakefile
177
+ - doc/contribute.md
178
+ - doc/silverpop_api.md
129
179
  - lib/planet_express.rb
180
+ - lib/planet_express/configuration.rb
130
181
  - lib/planet_express/delivery.rb
182
+ - lib/planet_express/exceptions.rb
131
183
  - lib/planet_express/version.rb
132
184
  - planet_express.gemspec
133
185
  - spec/planet_express_spec.rb
@@ -144,18 +196,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
196
  - - ! '>='
145
197
  - !ruby/object:Gem::Version
146
198
  version: '0'
147
- segments:
148
- - 0
149
- hash: 4224548502706184700
150
199
  required_rubygems_version: !ruby/object:Gem::Requirement
151
200
  none: false
152
201
  requirements:
153
202
  - - ! '>='
154
203
  - !ruby/object:Gem::Version
155
204
  version: '0'
156
- segments:
157
- - 0
158
- hash: 4224548502706184700
159
205
  requirements: []
160
206
  rubyforge_project:
161
207
  rubygems_version: 1.8.23