playit 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ #
2
+ # Christophe Hamerling - Linagora
3
+ #
4
+ source 'https://rubygems.org'
5
+
6
+ # Specify your gem's dependencies in playit.gemspec
7
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,24 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ playit (0.0.1)
5
+ highline (~> 1.6.13)
6
+ multi_json (~> 1.0.3)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ highline (1.6.13)
12
+ metaclass (0.0.1)
13
+ mocha (0.11.4)
14
+ metaclass (~> 0.0.1)
15
+ multi_json (1.0.4)
16
+ rake (0.9.2.2)
17
+
18
+ PLATFORMS
19
+ ruby
20
+
21
+ DEPENDENCIES
22
+ mocha (~> 0.11.4)
23
+ playit!
24
+ rake (~> 0.9.2)
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Christophe Hamerling
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ playit
2
+ ======
3
+
4
+ PlayFP7 command line management
data/Rakefile ADDED
@@ -0,0 +1,153 @@
1
+ #
2
+ # Christophe Hamerling - Linagora
3
+ #
4
+ require 'rubygems'
5
+ require 'rake'
6
+ require 'date'
7
+
8
+ #############################################################################
9
+ #
10
+ # Helper functions
11
+ #
12
+ #############################################################################
13
+
14
+ def name
15
+ @name ||= Dir['*.gemspec'].first.split('.').first
16
+ end
17
+
18
+ def version
19
+ line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
20
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
21
+ end
22
+
23
+ def date
24
+ Date.today.to_s
25
+ end
26
+
27
+ def rubyforge_project
28
+ name
29
+ end
30
+
31
+ def gemspec_file
32
+ "#{name}.gemspec"
33
+ end
34
+
35
+ def gem_file
36
+ "#{name}-#{version}.gem"
37
+ end
38
+
39
+ def replace_header(head, header_name)
40
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
41
+ end
42
+
43
+ #############################################################################
44
+ #
45
+ # Standard tasks
46
+ #
47
+ #############################################################################
48
+
49
+ task :default => :test
50
+
51
+ require 'rake/testtask'
52
+ Rake::TestTask.new(:test) do |test|
53
+ test.libs << 'lib' << 'test'
54
+ test.pattern = 'test/**/test_*.rb'
55
+ test.verbose = true
56
+ end
57
+
58
+ desc "Generate RCov test coverage and open in your browser"
59
+ task :coverage do
60
+ require 'rcov'
61
+ sh "rm -fr coverage"
62
+ sh "rcov test/test_*.rb"
63
+ sh "open coverage/index.html"
64
+ end
65
+
66
+ require 'rake/rdoctask'
67
+ Rake::RDocTask.new do |rdoc|
68
+ rdoc.rdoc_dir = 'rdoc'
69
+ rdoc.title = "#{name} #{version}"
70
+ rdoc.rdoc_files.include('README*')
71
+ rdoc.rdoc_files.include('lib/**/*.rb')
72
+ end
73
+
74
+ desc "Open an irb session preloaded with this library"
75
+ task :console do
76
+ sh "irb -rubygems -r ./lib/#{name}.rb"
77
+ end
78
+
79
+ #############################################################################
80
+ #
81
+ # Custom tasks (add your own tasks here)
82
+ #
83
+ #############################################################################
84
+
85
+
86
+
87
+ #############################################################################
88
+ #
89
+ # Packaging tasks
90
+ #
91
+ #############################################################################
92
+
93
+ desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
94
+ task :release => :build do
95
+ unless `git branch` =~ /^\* master$/
96
+ puts "You must be on the master branch to release!"
97
+ exit!
98
+ end
99
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
100
+ sh "git tag v#{version}"
101
+ sh "git push origin master"
102
+ sh "git push origin v#{version}"
103
+ sh "gem push pkg/#{name}-#{version}.gem"
104
+ end
105
+
106
+ desc "Build #{gem_file} into the pkg directory"
107
+ task :build => :gemspec do
108
+ sh "mkdir -p pkg"
109
+ sh "gem build #{gemspec_file}"
110
+ sh "mv #{gem_file} pkg"
111
+ end
112
+
113
+ desc "Generate #{gemspec_file}"
114
+ task :gemspec => :validate do
115
+ # read spec file and split out manifest section
116
+ spec = File.read(gemspec_file)
117
+ head, manifest, tail = spec.split(" # = MANIFEST =\n")
118
+
119
+ # replace name version and date
120
+ replace_header(head, :name)
121
+ replace_header(head, :version)
122
+ replace_header(head, :date)
123
+ #comment this out if your rubyforge_project has a different name
124
+ replace_header(head, :rubyforge_project)
125
+
126
+ # determine file list from git ls-files
127
+ files = `git ls-files`.
128
+ split("\n").
129
+ sort.
130
+ reject { |file| file =~ /^\./ }.
131
+ reject { |file| file =~ /^(rdoc|pkg)/ }.
132
+ map { |file| " #{file}" }.
133
+ join("\n")
134
+
135
+ # piece file back together and write
136
+ manifest = " s.files = %w[\n#{files}\n ]\n"
137
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
138
+ File.open(gemspec_file, 'w') { |io| io.write(spec) }
139
+ puts "Updated #{gemspec_file}"
140
+ end
141
+
142
+ desc "Validate #{gemspec_file}"
143
+ task :validate do
144
+ libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}"]
145
+ unless libfiles.empty?
146
+ puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
147
+ exit!
148
+ end
149
+ unless Dir['VERSION*'].empty?
150
+ puts "A `VERSION` file at root level violates Gem best practices."
151
+ exit!
152
+ end
153
+ end
data/bin/playit ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
5
+
6
+ require 'playit'
7
+
8
+ Playit::Command.execute(*ARGV)
@@ -0,0 +1,96 @@
1
+ #
2
+ # Christophe Hamerling - Linagora
3
+ #
4
+ ##
5
+ ## Playit! Play management tool
6
+ ##
7
+ ## Options:
8
+ ##
9
+ ## - configure
10
+ ## Open the system editor to fill properties, check Play Wiki for details
11
+ ##
12
+ ## - boostrap init/stop/restart
13
+ ## Create the links between the Play components (Service Bus, Event Cloud, DCEP, ...)
14
+ ##
15
+ ## - meta start/stop/restart
16
+ ## Will reload metadata service from fresh data
17
+ ##
18
+ ## - topics
19
+ ## Get the current available topics
20
+ ##
21
+ ## - status
22
+ ## Displays current status/configuration
23
+ ##
24
+ ## - help
25
+ ## Displays this message...
26
+ ##
27
+ ## PlayFP7 project - Christophe Hamerling - Linagora
28
+ ##
29
+ module Playit
30
+ class Command
31
+
32
+ class << self
33
+
34
+ def execute(*args)
35
+ command = args.shift
36
+ major = args.shift
37
+ minor = args.empty? ? nil : args.join(' ')
38
+
39
+ return overview unless command
40
+ delegate(command, major, minor)
41
+ end
42
+
43
+ def delegate command, major, minor
44
+
45
+ return configure if command == 'configure'
46
+ return bootstrap(major) if command == 'bootstrap'
47
+ return metadata(major) if command == 'meta'
48
+ return topics if command == 'topics'
49
+ return status if command == 'status'
50
+ return overview if command == 'help'
51
+
52
+ return overview
53
+
54
+ end
55
+
56
+ #
57
+ # Edit the configuration in an editor
58
+ #
59
+ def configure
60
+ puts "Playit! #{Platform.edit(Playit.config.file)}"
61
+ end
62
+
63
+ def overview
64
+ puts usage
65
+ end
66
+
67
+ def usage
68
+ File.readlines(__FILE__).
69
+ grep(/^##.*/).
70
+ map { |line| line.chomp[3..-1] }.
71
+ join("\n")
72
+ end
73
+
74
+ def metadata(operation)
75
+ return Playit::Services::Metadata.start if operation == 'start'
76
+ return Playit::Services::Metadata.stop if operation == 'stop'
77
+ return Playit::Services::Metadata.restart if operation == 'restart'
78
+
79
+ "Invalid operation #{operation} for metadata service"
80
+ end
81
+
82
+ def bootstrap(operation)
83
+ return Playit::Services::Bootstrap.init if operation == 'init'
84
+ return Playit::Services::Bootstrap.stop if operation == 'stop'
85
+
86
+ "Invalid operation #{operation} for bootstrap service"
87
+ end
88
+
89
+ def topics
90
+ Playit::Services::Governance.topics
91
+ end
92
+
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,81 @@
1
+ #
2
+ # Christophe Hamerling - Linagora
3
+ #
4
+ module Playit
5
+ class Config
6
+
7
+ # The main config file for boom
8
+ FILE = "#{ENV['HOME']}/.playfp7.conf"
9
+
10
+ # Public: The attributes Hash for configuration options. The attributes
11
+ # needed are dictated by each backend, but the `backend` option must be
12
+ # present.
13
+ attr_reader :attributes
14
+
15
+ # Public: creates a new instance of Config.
16
+ #
17
+ # This will load the attributes from boom's config file, or bootstrap it
18
+ # if this is a new install. Bootstrapping defaults to the JSON backend.
19
+ #
20
+ # Returns nothing.
21
+ def initialize
22
+ bootstrap unless File.exist?(file)
23
+ load_attributes
24
+ end
25
+
26
+ # Public: accessor for the configuration file.
27
+ #
28
+ # Returns the String file path.
29
+ def file
30
+ FILE
31
+ end
32
+
33
+ # Public: saves an empty, barebones hash to @attributes for the purpose of
34
+ # new user setup.
35
+ #
36
+ # Returns whether the attributes were saved.
37
+ def bootstrap
38
+ @attributes = {
39
+ :governance => 'DEFINE BASE URL',
40
+ :metadata => 'DEFINE BASE URL',
41
+ :bootstrap => 'DEFINE BASE URL',
42
+ :dsb => 'DEFINE DSB URL',
43
+ :seacloud => 'DEFINE SEACLOUD URL'
44
+ }
45
+ save
46
+ end
47
+
48
+ # Public: assigns a hash to the configuration attributes object. The
49
+ # contents of the attributes hash depends on what the backend needs. A
50
+ # `backend` key MUST be present, however.
51
+ #
52
+ # attrs - the Hash representation of attributes to persist to disk.
53
+ #
54
+ # Examples
55
+ #
56
+ # config.attributes = {"backend" => "json"}
57
+ #
58
+ # Returns whether the attributes were saved.
59
+ def attributes=(attrs)
60
+ @attributes = attrs
61
+ save
62
+ end
63
+
64
+ # Public: loads and parses the JSON tree from disk into memory and stores
65
+ # it in the attributes Hash.
66
+ #
67
+ # Returns nothing.
68
+ def load_attributes
69
+ @attributes = MultiJson.decode(File.new(file, 'r').read)
70
+ end
71
+
72
+ # Public: writes the in-memory JSON Hash to disk.
73
+ #
74
+ # Returns nothing.
75
+ def save
76
+ json = MultiJson.encode(attributes)
77
+ File.open(file, 'w') {|f| f.write(json) }
78
+ end
79
+
80
+ end
81
+ end
@@ -0,0 +1,87 @@
1
+ #
2
+ # Christophe Hamerling - Linagora
3
+ #
4
+ module Playit
5
+ class Platform
6
+ class << self
7
+ # Public: tests if currently running on darwin.
8
+ #
9
+ # Returns true if running on darwin (MacOS X), else false
10
+ def darwin?
11
+ !!(RUBY_PLATFORM =~ /darwin/)
12
+ end
13
+
14
+ # Public: tests if currently running on windows.
15
+ #
16
+ # Apparently Windows RUBY_PLATFORM can be 'win32' or 'mingw32'
17
+ #
18
+ # Returns true if running on windows (win32/mingw32), else false
19
+ def windows?
20
+ !!(RUBY_PLATFORM =~ /mswin|mingw/)
21
+ end
22
+
23
+ # Public: returns the command used to open a file or URL
24
+ # for the current platform.
25
+ #
26
+ # Currently only supports MacOS X and Linux with `xdg-open`.
27
+ #
28
+ # Returns a String with the bin
29
+ def open_command
30
+ if darwin?
31
+ 'open'
32
+ elsif windows?
33
+ 'start'
34
+ else
35
+ 'xdg-open'
36
+ end
37
+ end
38
+
39
+ # Public: opens a given Item's value in the browser. This
40
+ # method is designed to handle multiple platforms.
41
+ #
42
+ # Returns a String of the Item value.
43
+ def open(url)
44
+ unless windows?
45
+ system("#{open_command} '#{url.gsub("\'","'\\\\''")}'")
46
+ else
47
+ system("#{open_command} #{url.gsub("\'","'\\\\''")}")
48
+ end
49
+ url
50
+ end
51
+
52
+ # Public: returns the command used to copy a given Item's value to the
53
+ # clipboard for the current platform.
54
+ #
55
+ # Returns a String with the bin
56
+ def copy_command
57
+ if darwin?
58
+ 'pbcopy'
59
+ elsif windows?
60
+ 'clip'
61
+ else
62
+ 'xclip -selection clipboard'
63
+ end
64
+ end
65
+
66
+ # Public: opens the JSON file in an editor for you to edit. Uses the
67
+ # $EDITOR environment variable, or %EDITOR% on Windows for editing.
68
+ # This method is designed to handle multiple platforms.
69
+ # If $EDITOR is nil, try to open using the open_command.
70
+ #
71
+ # Returns a String with a helpful message.
72
+ def edit(file)
73
+ unless $EDITOR.nil?
74
+ unless windows?
75
+ system("`echo $EDITOR` #{file} &")
76
+ else
77
+ system("start %EDITOR% #{file}")
78
+ end
79
+ else
80
+ system("#{open_command} #{file}")
81
+ end
82
+
83
+ "Make your edits, and do be sure to save."
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,31 @@
1
+ #
2
+ # Christophe Hamerling - Linagora
3
+ #
4
+ module Playit
5
+ module Services
6
+ class Bootstrap
7
+ class << self
8
+
9
+ def init
10
+ puts '[INFO] Init bootstrap service...'
11
+ url = "#{Playit.config.attributes["bootstrap"]}/rest/init"
12
+ open(url) { |f|
13
+ f.each_line {
14
+ |line| puts line
15
+ }
16
+ }
17
+ end
18
+
19
+ def stop
20
+ puts '[INFO] Stop bootstrap service...'
21
+ puts '[INFO] TODO!'
22
+ end
23
+
24
+ def restart
25
+ stop
26
+ start
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,32 @@
1
+ #
2
+ # Christophe Hamerling - Linagora
3
+ #
4
+ module Playit
5
+ module Services
6
+ class Governance
7
+ class << self
8
+
9
+ def start
10
+ puts '[INFO] Start governance...'
11
+ end
12
+
13
+ def stop
14
+ puts '[INFO] Stop governance...'
15
+ end
16
+
17
+ #
18
+ # Display the governance topics
19
+ #
20
+ def topics
21
+ puts '[INFO] Getting topics...'
22
+ url = "#{Playit.config.attributes["governance"]}/getTopics"
23
+ open(url) { |f|
24
+ f.each_line {
25
+ |line| puts line
26
+ }
27
+ }
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,44 @@
1
+ #
2
+ # Christophe Hamerling - Linagora
3
+ #
4
+ module Playit
5
+ module Services
6
+ class Metadata
7
+ class << self
8
+
9
+ def start
10
+ puts '[INFO] Start metadata service...'
11
+ url = "#{Playit.config.attributes["metadata"]}/start"
12
+ puts url
13
+ begin
14
+ open(url) { |f|
15
+ f.each_line {
16
+ |line| puts line
17
+ }
18
+ }
19
+ rescue OpenURI::HTTPError
20
+ puts "[ERROR] Already started! Call stop or restart methods"
21
+ end
22
+
23
+ end
24
+
25
+ def stop
26
+ puts '[INFO] Stop metadata service...'
27
+ url = "#{Playit.config.attributes["metadata"]}/stop"
28
+ puts url
29
+ open(url) { |f|
30
+ f.each_line {
31
+ |line| puts line
32
+ }
33
+ }
34
+ end
35
+
36
+ def restart
37
+ puts '[INFO] Restart metadata service...'
38
+ stop
39
+ start
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
data/lib/playit.rb ADDED
@@ -0,0 +1,34 @@
1
+ #
2
+ # Christophe Hamerling - Linagora
3
+ #
4
+ begin
5
+ require 'rubygems'
6
+ rescue LoadError
7
+ end
8
+
9
+ require 'open-uri'
10
+ require 'highline/import'
11
+ require 'multi_json'
12
+ require 'fileutils'
13
+ require 'pp'
14
+
15
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
16
+
17
+ require 'playit/command'
18
+ require 'playit/config'
19
+ require 'playit/platform'
20
+ require 'playit/services/bootstrap'
21
+ require 'playit/services/governance'
22
+ require 'playit/services/metadata'
23
+
24
+ module Playit
25
+
26
+ VERSION = '0.0.1'
27
+
28
+ extend self
29
+
30
+ def config
31
+ @config ||= Playit::Config.new
32
+ end
33
+
34
+ end
data/playit.gemspec ADDED
@@ -0,0 +1,54 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # Christophe Hamerling - Linagora
4
+ #
5
+ Gem::Specification.new do |s|
6
+
7
+ s.specification_version = 2 if s.respond_to? :specification_version=
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
+ s.rubygems_version = '1.3.5'
10
+
11
+ s.authors = ["Christophe Hamerling"]
12
+ s.email = ["christophe.hamerling@linagora.com"]
13
+ s.description = %q{Manage Play services from the command line}
14
+ s.summary = %q{This gem provides a binary 'playit' used to manage Play FP7 services from the command line}
15
+ s.homepage = "http://chamerling.github.com/playit/"
16
+
17
+ s.files = `git ls-files`.split($\)
18
+ s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
20
+ s.name = "playit"
21
+ s.require_paths = ["lib"]
22
+ s.version = "0.0.1"
23
+
24
+ s.add_dependency('multi_json', "~> 1.0.3")
25
+
26
+ # Input stream management
27
+ s.add_dependency('highline', "~> 1.6.13")
28
+
29
+ s.add_development_dependency('mocha', "~> 0.11.4")
30
+ s.add_development_dependency('rake', "~> 0.9.2")
31
+
32
+ ## Leave this section as-is. It will be automatically generated from the
33
+ ## contents of your Git repository via the gemspec task. DO NOT REMOVE
34
+ ## THE MANIFEST COMMENTS, they are used as delimiters by the task.
35
+ # = MANIFEST =
36
+ s.files = %w[
37
+ Gemfile
38
+ Gemfile.lock
39
+ LICENSE
40
+ README.md
41
+ Rakefile
42
+ bin/playit
43
+ lib/playit.rb
44
+ lib/playit/command.rb
45
+ lib/playit/config.rb
46
+ lib/playit/platform.rb
47
+ lib/playit/services/bootstrap.rb
48
+ lib/playit/services/governance.rb
49
+ lib/playit/services/metadata.rb
50
+ playit.gemspec
51
+ ]
52
+ # = MANIFEST =
53
+
54
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: playit
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Christophe Hamerling
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-06-21 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: multi_json
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 17
29
+ segments:
30
+ - 1
31
+ - 0
32
+ - 3
33
+ version: 1.0.3
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: highline
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 21
45
+ segments:
46
+ - 1
47
+ - 6
48
+ - 13
49
+ version: 1.6.13
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: mocha
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 59
61
+ segments:
62
+ - 0
63
+ - 11
64
+ - 4
65
+ version: 0.11.4
66
+ type: :development
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: rake
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 63
77
+ segments:
78
+ - 0
79
+ - 9
80
+ - 2
81
+ version: 0.9.2
82
+ type: :development
83
+ version_requirements: *id004
84
+ description: Manage Play services from the command line
85
+ email:
86
+ - christophe.hamerling@linagora.com
87
+ executables:
88
+ - playit
89
+ extensions: []
90
+
91
+ extra_rdoc_files: []
92
+
93
+ files:
94
+ - Gemfile
95
+ - Gemfile.lock
96
+ - LICENSE
97
+ - README.md
98
+ - Rakefile
99
+ - bin/playit
100
+ - lib/playit.rb
101
+ - lib/playit/command.rb
102
+ - lib/playit/config.rb
103
+ - lib/playit/platform.rb
104
+ - lib/playit/services/bootstrap.rb
105
+ - lib/playit/services/governance.rb
106
+ - lib/playit/services/metadata.rb
107
+ - playit.gemspec
108
+ homepage: http://chamerling.github.com/playit/
109
+ licenses: []
110
+
111
+ post_install_message:
112
+ rdoc_options: []
113
+
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ hash: 3
122
+ segments:
123
+ - 0
124
+ version: "0"
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ hash: 3
131
+ segments:
132
+ - 0
133
+ version: "0"
134
+ requirements: []
135
+
136
+ rubyforge_project:
137
+ rubygems_version: 1.8.8
138
+ signing_key:
139
+ specification_version: 2
140
+ summary: This gem provides a binary 'playit' used to manage Play FP7 services from the command line
141
+ test_files: []
142
+
143
+ has_rdoc: