taskmapper-cli 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/lib/tm.rb CHANGED
@@ -1,33 +1,33 @@
1
- require 'tm/version.rb'
1
+ require_relative 'tm/version.rb'
2
2
 
3
- require 'tm/string_extensions'
3
+ require_relative 'tm/string_extensions'
4
4
 
5
5
  # Taskmapper provider handler
6
- require 'tm/provider_handler'
6
+ require_relative 'tm/provider_handler'
7
7
 
8
8
  # Commands
9
- require 'tm/commands/command'
10
- require 'tm/commands/list_all_projects'
11
- require 'tm/commands/first_project'
12
- require 'tm/commands/last_project'
13
- require 'tm/commands/single_project'
14
- require 'tm/commands/list_all_tasks'
15
- require 'tm/commands/first_task'
16
- require 'tm/commands/last_task'
17
- require 'tm/commands/single_task'
18
- require 'tm/commands/create_task'
19
- require 'tm/commands/create_comment'
20
- require 'tm/commands/generate_provider'
9
+ require_relative 'tm/commands/command'
10
+ require_relative 'tm/commands/list_all_projects'
11
+ require_relative 'tm/commands/first_project'
12
+ require_relative 'tm/commands/last_project'
13
+ require_relative 'tm/commands/single_project'
14
+ require_relative 'tm/commands/list_all_tasks'
15
+ require_relative 'tm/commands/first_task'
16
+ require_relative 'tm/commands/last_task'
17
+ require_relative 'tm/commands/single_task'
18
+ require_relative 'tm/commands/create_task'
19
+ require_relative 'tm/commands/create_comment'
20
+ require_relative 'tm/commands/generate_provider'
21
21
 
22
22
  # Formatters
23
- require 'tm/commands/list_all_comments_for_task'
23
+ require_relative 'tm/commands/list_all_comments_for_task'
24
24
 
25
- require 'tm/format/format'
26
- require 'tm/format/csv'
27
- require 'tm/format/pretty'
28
- require 'tm/format/table'
25
+ require_relative 'tm/format/format'
26
+ require_relative 'tm/format/csv'
27
+ require_relative 'tm/format/pretty'
28
+ require_relative 'tm/format/table'
29
29
 
30
- require 'tm/exceptions'
30
+ require_relative 'tm/exceptions'
31
31
 
32
32
  module TM
33
33
 
@@ -0,0 +1,11 @@
1
+ module TM
2
+ module Commands
3
+ class Command
4
+ def initialize(provider_handler, formatter, attributes = '')
5
+ @provider_handler = provider_handler
6
+ @formatter = formatter
7
+ @attributes = attributes.extend(TM::StringExtensions).to_hash
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module TM
2
+ module Commands
3
+ class CreateComment < Command
4
+
5
+ def execute(task_attribute = '', comment_attribute = '')
6
+ project = @provider_handler.taskmapper.project(@attributes)
7
+ task_attribute = task_attribute.extend(TM::StringExtensions).to_hash
8
+ ticket = project.tickets(task_attribute).first
9
+ comment_attribute = comment_attribute.extend(TM::StringExtensions).to_hash
10
+ comment = ticket.comment! comment_attribute
11
+ @formatter.before(comment)
12
+ @formatter.format(comment)
13
+ @formatter.after
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ module TM
2
+ module Commands
3
+ class CreateTask < Command
4
+
5
+ def execute(task_attributes = '')
6
+ project = @provider_handler.taskmapper.project(@attributes)
7
+ task_attributes = task_attributes.extend(TM::StringExtensions).to_hash
8
+ task= project.ticket! task_attributes
9
+ @formatter.before(task)
10
+ @formatter.format(task)
11
+ @formatter.after
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module TM
2
+ module Commands
3
+ class FirstProject < Command
4
+ def execute
5
+ project = @provider_handler.taskmapper.projects.first
6
+ @formatter.before(project)
7
+ @formatter.format(project)
8
+ @formatter.after
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module TM
2
+ module Commands
3
+ class FirstTask < Command
4
+ def execute(search_attrs = '')
5
+ project = @provider_handler.taskmapper.project(@attributes)
6
+ ticket = project.tickets.first
7
+ @formatter.before(ticket)
8
+ @formatter.format(ticket)
9
+ @formatter.after
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,224 @@
1
+ require 'fileutils'
2
+
3
+ module TM
4
+ module Commands
5
+ class GenerateProvider
6
+ class << self
7
+ def create(provider_name)
8
+ short_name = provider_name
9
+ provider_name = "taskmapper-#{provider_name}"
10
+ FileUtils.mkdir_p "#{provider_name}/lib/provider"
11
+ create_readme(provider_name)
12
+ create_gemfile(provider_name)
13
+ create_version_file(provider_name, short_name)
14
+ create_rakefile(provider_name)
15
+ create_lib_file(provider_name, short_name)
16
+ create_provider_file(provider_name, short_name)
17
+ create_project_file(provider_name, short_name)
18
+ create_ticket_file(provider_name, short_name)
19
+ create_comment_file(provider_name, short_name)
20
+ create_gemspec(provider_name, short_name)
21
+ end
22
+
23
+ private
24
+ def provider_lib_path(provider_name)
25
+ "#{provider_name}/lib"
26
+ end
27
+
28
+ def create_gemfile(provider_name)
29
+ File.open("#{provider_name}/Gemfile", "w") do |file|
30
+ file.puts <<EOS
31
+ source 'https://rubygems.org'
32
+ gemspec
33
+ EOS
34
+ end
35
+ puts "Created #{provider_name}/Gemfile"
36
+ end
37
+
38
+ def create_rakefile(provider_name)
39
+ File.open("#{provider_name}/Rakefile", "w") do |file|
40
+ file.puts <<EOS
41
+ require 'rake/clean'
42
+ require 'rdoc/task'
43
+ require 'bundler/gem_tasks'
44
+
45
+ Rake::RDocTask.new do |rd|
46
+ rd.main = "README.rdoc"
47
+ rd.rdoc_files.include("README.rdoc","lib/**/*.rb")
48
+ rd.title = 'Your application title'
49
+ end
50
+
51
+ EOS
52
+ end
53
+ puts "Created #{provider_name}/Rakefile"
54
+ end
55
+
56
+ def create_version_file(provider_name, short_name)
57
+ File.open("#{provider_lib_path(provider_name)}/provider/version.rb", "w") do |file|
58
+ file.puts <<EOS
59
+ module TaskMapper
60
+ module #{short_name.capitalize}
61
+ VERSION = '0.0.1'
62
+ end
63
+ end
64
+ EOS
65
+ end
66
+ puts "Created #{provider_lib_path(provider_name)}/provider/version.rb"
67
+ end
68
+
69
+ def create_gemspec(provider_name, short_name)
70
+ File.open("#{provider_name}/#{provider_name}.gemspec", "w") do |file|
71
+ file.puts <<EOS
72
+ # Ensure we require the local version and not one we might have installed
73
+ # already
74
+ lib = File.expand_path('../lib', __FILE__)
75
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
76
+ require 'provider/version'
77
+
78
+ spec = Gem::Specification.new do |s|
79
+ s.name = '#{provider_name}'
80
+ s.version = TaskMapper::#{short_name.capitalize}::VERSION
81
+ s.author = 'Your Name Here'
82
+ s.email = 'your@email.address.com'
83
+ s.homepage = 'http://your.website.com'
84
+ s.platform = Gem::Platform::RUBY
85
+ s.summary = 'A description of your project'
86
+ # Add your other files here if you make them
87
+ s.files = %w(
88
+ lib/provider/version.rb
89
+ lib/#{provider_name}.rb
90
+ )
91
+ s.require_paths << 'lib'
92
+ s.has_rdoc = true
93
+ s.extra_rdoc_files = ['README.rdoc']
94
+ s.rdoc_options << '--title' << '#{provider_name}' << '--main' << 'README.rdoc' << '-ri'
95
+ s.add_development_dependency('rake')
96
+ s.add_development_dependency('rdoc')
97
+ s.add_development_dependency('bundler')
98
+ s.add_runtime_dependency('taskmapper')
99
+ end
100
+ EOS
101
+ end
102
+ puts "Created #{provider_name}/#{provider_name}.gemspec"
103
+ end
104
+
105
+ def create_readme(provider_name)
106
+ File.open("#{provider_name}/README.rdoc", "w") do |file|
107
+ file << "= #{provider_name.capitalize}"
108
+ file << "Describe your project here"
109
+ end
110
+ puts "Created #{provider_name}/README.rdoc"
111
+ end
112
+
113
+ def create_lib_file(provider_name, short_name)
114
+ File.open("#{provider_lib_path(provider_name)}/#{provider_name}.rb", "w") do |file|
115
+ file.puts <<EOS
116
+ #require YOUR_PROVIDER_API
117
+
118
+ %w{ #{short_name} project ticket comment }.each do |f|
119
+ require File.dirname(__FILE__) + '/provider/' + f + '.rb'
120
+ end
121
+ EOS
122
+ end
123
+ puts "Created #{provider_lib_path(provider_name)}/#{provider_name}.rb"
124
+ end
125
+
126
+ def create_provider_file(provider_name,short_name)
127
+ File.open("#{provider_lib_path(provider_name)}/provider/#{short_name}.rb", "w") do |file|
128
+ file.puts <<EOS
129
+ module TaskMapper::Provider
130
+ # This is the Yoursystem Provider for taskmapper
131
+ module #{short_name.capitalize}
132
+ include TaskMapper::Provider::Base
133
+ #TICKET_API = #{short_name.capitalize}::Ticket # The class to access the api's tickets
134
+ #PROJECT_API = #{short_name.capitalize}::Project # The class to access the api's projects
135
+
136
+ # This is for cases when you want to instantiate using TaskMapper::Provider::#{short_name.capitalize}.new(auth)
137
+ def self.new(auth = {})
138
+ TaskMapper.new(:#{short_name}, auth)
139
+ end
140
+
141
+ # Providers must define an authorize method. This is used to initialize and set authentication
142
+ # parameters to access the API
143
+ def authorize(auth = {})
144
+ # Set authentication parameters for whatever you're using to access the API
145
+ @authentication ||= TaskMapper::Authenticator.new(auth)
146
+ end
147
+
148
+ # declare needed overloaded methods here
149
+ end
150
+ end
151
+ EOS
152
+ end
153
+ puts "Created #{provider_lib_path(provider_name)}/provider/#{short_name}.rb"
154
+ end
155
+
156
+ def create_project_file(provider_name, short_name)
157
+ File.open("#{provider_lib_path(provider_name)}/provider/project.rb", "w") do |file|
158
+ file.puts <<EOS
159
+ module TaskMapper::Provider
160
+ module #{short_name.capitalize}
161
+ # Project class for #{provider_name}
162
+
163
+ class Project < TaskMapper::Provider::Base::Project
164
+ #API = #{short_name.capitalize}::Project # The class to access the api's projects
165
+ # declare needed overloaded methods here
166
+ def copy(project)
167
+ project.tickets.each do |ticket|
168
+ copy_ticket = self.ticket!(:title => ticket.title, :description => ticket.description)
169
+ ticket.comments.each do |comment|
170
+ copy_ticket.comment!(:body => comment.body)
171
+ sleep 1
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
177
+ EOS
178
+ end
179
+ puts "Created #{provider_lib_path(provider_name)}/provider/project.rb"
180
+ end
181
+
182
+ def create_ticket_file(provider_name, short_name)
183
+ File.open("#{provider_lib_path(provider_name)}/provider/ticket.rb", "w") do |file|
184
+ file.puts <<EOS
185
+ module TaskMapper::Provider
186
+ module #{short_name.capitalize}
187
+ # Ticket class for #{provider_name}
188
+
189
+ class Ticket < TaskMapper::Provider::Base::Ticket
190
+ #API = #{short_name.capitalize}::Ticket # The class to access the api's
191
+ #tickets
192
+ #declare needed overloaded methods here
193
+
194
+ end
195
+ end
196
+ end
197
+ EOS
198
+ end
199
+ puts "Created #{provider_lib_path(provider_name)}/provider/ticket.rb"
200
+ end
201
+
202
+ def create_comment_file(provider_name, short_name)
203
+ File.open("#{provider_lib_path(provider_name)}/provider/comment.rb", "w") do |file|
204
+ file.puts <<EOS
205
+ module TaskMapper::Provider
206
+ module #{short_name.capitalize}
207
+ # The comment class for #{provider_name}
208
+ # Do any mapping between TaskMapper and your system's comment model here
209
+ # versions of the ticket.
210
+
211
+ class Comment < TaskMapper::Provider::Base::Comment
212
+ #API = #{short_name.capitalize}::Comment # the class to access the api's
213
+ #comment
214
+ end
215
+ end
216
+ end
217
+ EOS
218
+ end
219
+ puts "Created #{provider_lib_path(provider_name)}/provider/comment.rb"
220
+ end
221
+ end
222
+ end
223
+ end
224
+ end
@@ -0,0 +1,12 @@
1
+ module TM
2
+ module Commands
3
+ class LastProject < Command
4
+ def execute
5
+ project = @provider_handler.taskmapper.projects.last
6
+ @formmater.before(project)
7
+ @formatter.format(project)
8
+ @formatter.after
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module TM
2
+ module Commands
3
+ class LastTask < Command
4
+ def execute(search_attrs = '')
5
+ project = @provider_handler.taskmapper.project(@attributes)
6
+ ticket = project.tickets.last
7
+ @formatter.before(ticket)
8
+ @formatter.format(ticket)
9
+ @formatter.after
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ module TM
2
+ module Commands
3
+ class ListAllCommentsForTask < Command
4
+ def execute(search_attrs = '')
5
+ project = @provider_handler.taskmapper.project(@attributes)
6
+ ticket = project.tickets(search_attrs.extend(TM::StringExtensions).to_hash).first
7
+ comments = ticket.comments
8
+ @formatter.before(comments.first)
9
+ comments.each do |comment|
10
+ @formatter.format(comment)
11
+ end
12
+ @formatter.after
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module TM
2
+ module Commands
3
+ class ListAllProjects < Command
4
+ def execute
5
+ projects = @provider_handler.taskmapper.projects
6
+ @formatter.before(projects.first)
7
+ projects.each do |project|
8
+ @formatter.format(project)
9
+ end
10
+ @formatter.after
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ module TM
2
+ module Commands
3
+ class ListAllTasks < Command
4
+ def execute(search_attrs = '')
5
+ project = @provider_handler.taskmapper.project(@attributes)
6
+ tickets = project.tickets
7
+ @formatter.before(tickets.first)
8
+ tickets.each do |ticket|
9
+ @formatter.format(ticket)
10
+ end
11
+ @formatter.after
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ module TM
2
+ module Commands
3
+ class SingleProject < Command
4
+ def execute
5
+ project = @provider_handler.taskmapper.project(@attributes)
6
+ @formatter.before(project)
7
+ @formatter.format(project)
8
+ @formatter.after
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module TM
2
+ module Commands
3
+ class SingleTask < Command
4
+ def execute(search_attrs = '')
5
+ project = @provider_handler.taskmapper.project(@attributes)
6
+ ticket = project.tickets(search_attrs.extend(TM::StringExtensions).to_hash).first
7
+ @formatter.before(ticket)
8
+ @formatter.format(ticket)
9
+ @formatter.after
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module TM
2
+ class Error < StandardError; end
3
+ class InvalidProvider < Error; end
4
+ end
@@ -0,0 +1,11 @@
1
+ module TM
2
+ module Format
3
+ class CSV
4
+ include Format
5
+
6
+ def format(entity)
7
+ puts "#{normalize_entity(entity).values.join(", ")}"
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ module TM
2
+ module Format
3
+ PROJECT_KEYS = %w[id name description created_at updated_at]
4
+ TICKET_KEYS = %w[status priority title resolution assignee requestor project_id]
5
+ COMMENT_KEYS = %w[author body ticket_id]
6
+
7
+ def before(entity); end
8
+ def after; end
9
+
10
+ def normalize_entity(entity)
11
+ entity.keys.inject({}) do |hash, key|
12
+ if PROJECT_KEYS.include?(key) || TICKET_KEYS.include?(key) || COMMENT_KEYS.include?(key)
13
+ hash[key] = entity[key]
14
+ end
15
+ hash
16
+ end
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ require 'rainbow'
2
+
3
+ module TM
4
+ module Format
5
+ class Pretty
6
+ include Format
7
+
8
+ def format(entity)
9
+ normalize_entity(entity).each_pair do |title, value|
10
+ printf("%s: ", title.bright)
11
+ printf("%s\n", value.to_s.color(:green))
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,22 @@
1
+ require 'terminal-table'
2
+
3
+ module TM
4
+ module Format
5
+ class Table
6
+ include Format
7
+
8
+ def before(entity = {})
9
+ @@table = Terminal::Table.new :headings => normalize_entity(entity).keys
10
+ @@table.align_column(0, :right)
11
+ end
12
+
13
+ def format(entity)
14
+ @@table << normalize_entity(entity).values
15
+ end
16
+
17
+ def after
18
+ puts @@table.to_s
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,33 @@
1
+ require 'taskmapper'
2
+ require 'taskmapper-kanbanpad'
3
+ require 'taskmapper-github'
4
+ require 'taskmapper-basecamp'
5
+ require 'taskmapper-bugherd'
6
+ require 'taskmapper-bugzilla'
7
+ require 'taskmapper-fogbugz'
8
+ require 'taskmapper-github'
9
+ require 'taskmapper-kanbanpad'
10
+ require 'taskmapper-lighthouse'
11
+ require 'taskmapper-pivotal'
12
+ require 'taskmapper-rally'
13
+ require 'taskmapper-redmine'
14
+ require 'taskmapper-trac'
15
+ require 'taskmapper-unfuddle'
16
+ require 'taskmapper-zendesk'
17
+
18
+ module TM
19
+ class ProviderHandler
20
+ attr_reader :taskmapper
21
+
22
+ def initialize(taskmapper)
23
+ @taskmapper = taskmapper
24
+ end
25
+
26
+ def self.build_handler(provider, authentication)
27
+ self.new(TaskMapper.new(provider.to_sym,
28
+ authentication.extend(TM::StringExtensions).to_hash))
29
+ rescue NameError
30
+ raise TM::InvalidProvider, "Provider doesn't exists"
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,12 @@
1
+ module TM
2
+ module StringExtensions
3
+ def to_hash
4
+ return '' if self.nil?
5
+ self.split(/,/).inject({}) do |hash, kv|
6
+ arg, val = kv.split(/:/)
7
+ hash[arg.to_sym] = val
8
+ hash
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,3 +1,3 @@
1
1
  module Tm
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taskmapper-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -16,17 +16,33 @@ dependencies:
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - '='
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.0.1
21
+ version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - '='
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: taskmapper-basecamp
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
28
44
  - !ruby/object:Gem::Version
29
- version: 1.0.1
45
+ version: '0'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: taskmapper-github
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -203,6 +219,22 @@ dependencies:
203
219
  - - ! '>='
204
220
  - !ruby/object:Gem::Version
205
221
  version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: taskmapper-zendesk
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
206
238
  - !ruby/object:Gem::Dependency
207
239
  name: rainbow
208
240
  requirement: !ruby/object:Gem::Requirement
@@ -326,6 +358,26 @@ extra_rdoc_files:
326
358
  files:
327
359
  - bin/tm
328
360
  - lib/tm/version.rb
361
+ - lib/tm/string_extensions.rb
362
+ - lib/tm/exceptions.rb
363
+ - lib/tm/provider_handler.rb
364
+ - lib/tm/format/format.rb
365
+ - lib/tm/format/csv.rb
366
+ - lib/tm/format/pretty.rb
367
+ - lib/tm/format/table.rb
368
+ - lib/tm/commands/command.rb
369
+ - lib/tm/commands/create_comment.rb
370
+ - lib/tm/commands/create_task.rb
371
+ - lib/tm/commands/first_project.rb
372
+ - lib/tm/commands/first_task.rb
373
+ - lib/tm/commands/generate_provider.rb
374
+ - lib/tm/commands/last_project.rb
375
+ - lib/tm/commands/last_task.rb
376
+ - lib/tm/commands/list_all_comments_for_task.rb
377
+ - lib/tm/commands/list_all_projects.rb
378
+ - lib/tm/commands/list_all_tasks.rb
379
+ - lib/tm/commands/single_project.rb
380
+ - lib/tm/commands/single_task.rb
329
381
  - lib/tm.rb
330
382
  - README.rdoc
331
383
  - tm.rdoc
@@ -349,7 +401,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
349
401
  version: '0'
350
402
  segments:
351
403
  - 0
352
- hash: 1821152514098397477
404
+ hash: 2762427979354817147
353
405
  required_rubygems_version: !ruby/object:Gem::Requirement
354
406
  none: false
355
407
  requirements:
@@ -358,7 +410,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
358
410
  version: '0'
359
411
  segments:
360
412
  - 0
361
- hash: 1821152514098397477
413
+ hash: 2762427979354817147
362
414
  requirements: []
363
415
  rubyforge_project:
364
416
  rubygems_version: 1.8.25