strobe 0.1.2 → 0.1.3

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.
@@ -0,0 +1,42 @@
1
+ module Strobe
2
+ class CLI::DeployProgress
3
+ def initialize
4
+ @thread = nil
5
+ @width = 50
6
+ @current = 0
7
+ @ticker = CLI::Ticker.new
8
+ end
9
+
10
+ def upload_progress(percentage)
11
+ width = 50
12
+ left = ( percentage * width ).round
13
+
14
+ return if @current == left
15
+
16
+ (@current..left).each do |i|
17
+ arrow = nil
18
+ right = width - i
19
+
20
+ if i < width
21
+ right -= 1
22
+ arrow = ">"
23
+ end
24
+
25
+ print "Uploading [#{ '=' * i }#{ arrow }#{' ' * right}]\r"
26
+ end
27
+
28
+ @current = left
29
+ end
30
+
31
+ def upload_complete
32
+ upload_progress(1.0)
33
+ print "\n"
34
+
35
+ @ticker.tick "Reticulating splines"
36
+ end
37
+
38
+ def deploy_complete
39
+ @ticker.stop
40
+ end
41
+ end
42
+ end
@@ -1,56 +1,5 @@
1
1
  module Strobe
2
2
  class CLI::Main < CLI
3
- class DeployProgress
4
- def initialize
5
- @thread = nil
6
- @width = 50
7
- @current = 0
8
- @read, @write = IO.pipe
9
- end
10
-
11
- def upload_progress(percentage)
12
- width = 50
13
- left = ( percentage * width ).round
14
-
15
- return if @current == left
16
-
17
- (@current..left).each do |i|
18
- arrow = nil
19
- right = width - i
20
-
21
- if i < width
22
- right -= 1
23
- arrow = ">"
24
- end
25
-
26
- print "Uploading [#{ '=' * i }#{ arrow }#{' ' * right}]\r"
27
- end
28
-
29
- @current = left
30
- end
31
-
32
- def upload_complete
33
- upload_progress(1.0)
34
- print "\n"
35
-
36
- @thread = Thread.new do
37
- print "Reticulating splines..."
38
-
39
- while true
40
- break if IO.select( [ @read ], nil, nil, 0.5 )
41
- print "."
42
- end
43
-
44
- puts
45
- end
46
- end
47
-
48
- def deploy_complete
49
- @write << '1'
50
- @thread.join
51
- end
52
- end
53
-
54
3
  def help(*args)
55
4
  if args.first == "users"
56
5
  CLI::Users.start( [ "help" ] + args[1..-1] )
@@ -121,6 +70,14 @@ module Strobe
121
70
 
122
71
  if application_id = config[:application_id]
123
72
  resource Application.get! application_id, :lazy => true
73
+
74
+ host = resource[:url]
75
+ host = "staging.#{host}" if options[:staging]
76
+
77
+ unless agree "Deploying '#{resource[:name]}' to http://#{host}, continue? [Yn] "
78
+ say "exiting..."
79
+ exit
80
+ end
124
81
  else
125
82
  resource Account.first.applications.new
126
83
  end
@@ -140,7 +97,7 @@ module Strobe
140
97
  run_sc_build
141
98
 
142
99
  host = resource.deploy! :environment => options[:staging] && 'staging',
143
- :callback => DeployProgress.new
100
+ :callback => CLI::DeployProgress.new
144
101
 
145
102
  say "The application has successfully been deployed and is available at #{host}"
146
103
  end
@@ -217,7 +174,7 @@ module Strobe
217
174
  return unless agree "Run `sc-build -c`? [Yn] "
218
175
  end
219
176
 
220
- unless system "sc-build", "-c"
177
+ unless CLI::Ticker.tick("Running `sc-build -c`", 2) { system "sc-build", "-c" }
221
178
  error! "Something went wrong while running `sc-build -c`"
222
179
  end
223
180
  end
@@ -0,0 +1,42 @@
1
+ require 'rack'
2
+
3
+ module Strobe
4
+ module CLI::Preview
5
+ class Server < Rack::Server
6
+ def app
7
+ options[:app]
8
+ end
9
+
10
+ alias wrapped_app app
11
+ end
12
+
13
+ class MagicWrapper
14
+ def initialize(app)
15
+ @app = app
16
+ end
17
+
18
+ def call(env)
19
+ puts "ZOMGZOMG, calling: #{env['PATH_INFO']}"
20
+ @app.call(env)
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def sproutcore_app
27
+ gem "sproutcore", ">= 1.4.0"
28
+ require "sproutcore"
29
+
30
+ project = SC::Tools.new.requires_project!
31
+ SC::Rack::Service.new(*project)
32
+ end
33
+
34
+ def wrap(app)
35
+ MagicWrapper.new(app)
36
+ end
37
+
38
+ def preview_sproutcore_application
39
+ Server.start :app => wrap(sproutcore_app), :Port => 9292
40
+ end
41
+ end
42
+ end
@@ -20,10 +20,10 @@ module Strobe
20
20
  @filename = filename
21
21
 
22
22
  if @filename.exist?
23
- @hash = YAML.load(@filename) || {}
24
- else
25
- @hash = {}
23
+ @hash = YAML.load_file(@filename)
26
24
  end
25
+
26
+ @hash = {} unless Hash === @hash
27
27
  end
28
28
 
29
29
  def [](k)
@@ -0,0 +1,44 @@
1
+ module Strobe
2
+ class CLI::Ticker
3
+ def self.tick(msg, interval = 0.5)
4
+ ticker = new
5
+ ticker.tick(msg, interval)
6
+ return ticker unless block_given?
7
+ yield
8
+ ensure
9
+ ticker.stop
10
+ end
11
+
12
+ def initialize
13
+ @thread
14
+ @read, @write = IO.pipe
15
+ end
16
+
17
+ def tick(msg, interval = 0.5)
18
+ @thread = Thread.new do
19
+ print "#{msg}..."
20
+
21
+ while true
22
+ break if IO.select( [ @read ], nil, nil, interval )
23
+ print "."
24
+ end
25
+
26
+ @read.read
27
+ @read.close
28
+
29
+ puts
30
+ end
31
+
32
+ true
33
+ end
34
+
35
+ def stop
36
+ raise "Ticker is not ticking" unless @thread
37
+
38
+ @write << '1'
39
+ @write.close
40
+ @thread.join
41
+ true
42
+ end
43
+ end
44
+ end
data/lib/strobe/cli.rb CHANGED
@@ -5,14 +5,18 @@ require 'highline'
5
5
 
6
6
  module Strobe
7
7
  class CLI < Thor
8
- autoload :Main, 'strobe/cli/main'
9
- autoload :Settings, 'strobe/cli/settings'
10
- autoload :Table, 'strobe/cli/table'
11
- autoload :Users, 'strobe/cli/users'
8
+ autoload :DeployProgress, 'strobe/cli/deploy_progress'
9
+ autoload :Main, 'strobe/cli/main'
10
+ autoload :Preview, 'strobe/cli/preview'
11
+ autoload :Settings, 'strobe/cli/settings'
12
+ autoload :Table, 'strobe/cli/table'
13
+ autoload :Ticker, 'strobe/cli/ticker'
14
+ autoload :Users, 'strobe/cli/users'
12
15
 
13
16
  include Resources
14
17
 
15
18
  class_option "backtrace", :type => :boolean
19
+ class_option "yes", :type => :boolean, :aliases => "-y", :banner => "answer yes to all confirmation questions"
16
20
 
17
21
  def self.start(args)
18
22
  $ARGV = args
@@ -112,8 +116,8 @@ module Strobe
112
116
  end
113
117
  end
114
118
 
115
- def say(what = nil)
116
- puts what
119
+ def say(*args)
120
+ puts(*args)
117
121
  end
118
122
 
119
123
  def error(what)
@@ -125,6 +129,7 @@ module Strobe
125
129
  end
126
130
 
127
131
  def agree(msg, *args)
132
+ return true if options[:yes]
128
133
  @highline.agree(msg, *args) do |q|
129
134
  next unless STDIN.tty? # For testing
130
135
  q.readline = true
@@ -9,18 +9,21 @@ module Strobe
9
9
  filter :password_confirmation
10
10
 
11
11
  validates "user", "account", :presence => true
12
- validates "user.password", :presence => true,
13
- :length => { :minimum => 5 }, :with => :password_confirmation
12
+ validates "user.password", :with => :validate_password
14
13
 
15
14
  private
16
15
 
17
- def password_confirmation
16
+ def validate_password
18
17
  password = self["user.password"]
19
18
  confirmation = self["password_confirmation"]
20
19
 
21
- unless password == confirmation
22
- errors.add "user.password", "and confirmation do not match"
20
+ msg = case
21
+ when password.blank? then "can't be blank"
22
+ when password.length < 5 then "is too short (minimum is 5 characters)"
23
+ when password != confirmation then "and confirmation do not match"
23
24
  end
25
+
26
+ errors.add "user.password", msg if msg
24
27
  end
25
28
  end
26
29
  end
@@ -0,0 +1,13 @@
1
+ module Strobe
2
+ # Resources
3
+ module Resources
4
+ require 'strobe/resources/account'
5
+ require 'strobe/resources/application'
6
+ require 'strobe/resources/assignment'
7
+ require 'strobe/resources/me'
8
+ require 'strobe/resources/membership'
9
+ require 'strobe/resources/signup'
10
+ require 'strobe/resources/team'
11
+ require 'strobe/resources/user'
12
+ end
13
+ end
data/lib/strobe.rb CHANGED
@@ -14,6 +14,7 @@ module Strobe
14
14
  autoload :Connection, 'strobe/connection'
15
15
  autoload :IdentityMap, 'strobe/identity_map'
16
16
  autoload :Key, 'strobe/key'
17
+ autoload :Resources, 'strobe/resources'
17
18
  autoload :Validations, 'strobe/validations'
18
19
 
19
20
  module Resource
@@ -22,17 +23,6 @@ module Strobe
22
23
  autoload :Singleton, 'strobe/resource/singleton'
23
24
  end
24
25
 
25
- # Resources
26
- module Resources
27
- autoload :Account, 'strobe/resources/account'
28
- autoload :Application, 'strobe/resources/application'
29
- autoload :Assignment, 'strobe/resources/assignment'
30
- autoload :Me, 'strobe/resources/me'
31
- autoload :Membership, 'strobe/resources/membership'
32
- autoload :Signup, 'strobe/resources/signup'
33
- autoload :Team, 'strobe/resources/team'
34
- autoload :User, 'strobe/resources/user'
35
- end
36
26
 
37
27
  # Errors
38
28
  class StrobeError < StandardError ; end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 2
9
- version: 0.1.2
8
+ - 3
9
+ version: 0.1.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Yehuda Katz
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-04 00:00:00 -08:00
18
+ date: 2011-01-05 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -49,7 +49,7 @@ dependencies:
49
49
  type: :runtime
50
50
  version_requirements: *id002
51
51
  - !ruby/object:Gem::Dependency
52
- name: thor
52
+ name: mime-types
53
53
  prerelease: false
54
54
  requirement: &id003 !ruby/object:Gem::Requirement
55
55
  none: false
@@ -57,14 +57,14 @@ dependencies:
57
57
  - - ~>
58
58
  - !ruby/object:Gem::Version
59
59
  segments:
60
+ - 1
61
+ - 16
60
62
  - 0
61
- - 14
62
- - 0
63
- version: 0.14.0
63
+ version: 1.16.0
64
64
  type: :runtime
65
65
  version_requirements: *id003
66
66
  - !ruby/object:Gem::Dependency
67
- name: mime-types
67
+ name: rack
68
68
  prerelease: false
69
69
  requirement: &id004 !ruby/object:Gem::Requirement
70
70
  none: false
@@ -73,11 +73,26 @@ dependencies:
73
73
  - !ruby/object:Gem::Version
74
74
  segments:
75
75
  - 1
76
- - 16
76
+ - 2
77
77
  - 0
78
- version: 1.16.0
78
+ version: 1.2.0
79
79
  type: :runtime
80
80
  version_requirements: *id004
81
+ - !ruby/object:Gem::Dependency
82
+ name: thor
83
+ prerelease: false
84
+ requirement: &id005 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ segments:
90
+ - 0
91
+ - 14
92
+ - 0
93
+ version: 0.14.0
94
+ type: :runtime
95
+ version_requirements: *id005
81
96
  description: The client library for deploying applications to Strobe's HTML5 deployment platform
82
97
  email:
83
98
  - wycats@strobecorp.com
@@ -90,9 +105,12 @@ extra_rdoc_files: []
90
105
 
91
106
  files:
92
107
  - lib/strobe/association.rb
108
+ - lib/strobe/cli/deploy_progress.rb
93
109
  - lib/strobe/cli/main.rb
110
+ - lib/strobe/cli/preview.rb
94
111
  - lib/strobe/cli/settings.rb
95
112
  - lib/strobe/cli/table.rb
113
+ - lib/strobe/cli/ticker.rb
96
114
  - lib/strobe/cli/users.rb
97
115
  - lib/strobe/cli.rb
98
116
  - lib/strobe/collection.rb
@@ -110,6 +128,7 @@ files:
110
128
  - lib/strobe/resources/signup.rb
111
129
  - lib/strobe/resources/team.rb
112
130
  - lib/strobe/resources/user.rb
131
+ - lib/strobe/resources.rb
113
132
  - lib/strobe/validations.rb
114
133
  - lib/strobe.rb
115
134
  - bin/strobe