rypple 0.0.3 → 0.0.4

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/bin/rypple CHANGED
@@ -1,10 +1,36 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
+ require 'optparse'
3
4
  require 'rubygems'
4
5
  require 'rypple'
5
6
 
6
- configDir = File.join(ENV["HOME"], '.rypple')
7
+ #Default options
8
+ options = {:input => '.',
9
+ :setup => false,}
7
10
 
8
- if File.exists?(configDir)
9
- Rypple.sync(configDir)
11
+ opts = OptionParser.new do |opts|
12
+ opts.banner = "Rypple Version: " + Rypple::VERSION + "\nUsage: rypple [options]"
13
+ # opts.separator ""
14
+ # opts.separator "Specific options:"
15
+
16
+ opts.on("-s", "--setup",
17
+ "Runs setup routine for Rypple") do |ext|
18
+ options[:setup] = true
19
+ end
20
+
21
+ opts.on("-i", "--input [dir]",
22
+ "Directory to read configuration files and sync with Rypple.") do |ext|
23
+ options[:input] = ext
24
+ end
25
+
26
+ opts.on_tail("-h", "--help", "Help:") do
27
+ puts opts
28
+ exit
29
+ end
30
+ end.parse!(ARGV)
31
+
32
+ if options[:setup]
33
+ Rypple.Setup()
34
+ elsif File.exists?(options[:input])
35
+ Rypple.sync(options[:input])
10
36
  end
data/lib/rypple/base.rb CHANGED
@@ -7,11 +7,12 @@ module Rypple
7
7
  require 'dropbox_sdk'
8
8
  require 'pathname'
9
9
 
10
- ACCESS_TYPE = :app_folder
11
10
  DefaultConfiguration = {
12
11
  :destinationDir => './test',
13
12
  :dropbox => {
13
+ :root => '/',
14
14
  :sync => ['**'],
15
+ :access_type => :app_folder,
15
16
  }
16
17
  }
17
18
 
@@ -31,6 +32,11 @@ module Rypple
31
32
  dropboxKeys[:key] = gets.chomp!
32
33
  print "Please enter your Dropbox API secret:"
33
34
  dropboxKeys[:secret] = gets.chomp!
35
+ print "Should this API access be used in sandbox mode? (Y/n):"
36
+ answer = gets.downcase.chomp
37
+ if !answer.empty? and answer == 'n'
38
+ dropboxKeys[:access_type]= :dropbox
39
+ end
34
40
  end
35
41
 
36
42
  session = nil
@@ -54,7 +60,7 @@ module Rypple
54
60
  dropboxKeys[:session] = session.serialize()
55
61
  end
56
62
 
57
- client = DropboxClient.new(session, ACCESS_TYPE)
63
+ client = DropboxClient.new(session, dropboxKeys[:access_type])
58
64
 
59
65
  if client.nil?
60
66
  return nil, nil, nil
@@ -84,14 +90,14 @@ module Rypple
84
90
  return conf
85
91
  end
86
92
 
87
- def Rypple.saveConfig(conf, path)
93
+ def Rypple.saveDropbox(keys, path)
88
94
  dropConfig = File.join(path, DropboxKeyFile)
89
95
  File.open(dropConfig, 'w') do|file|
90
96
  file.puts keys.to_yaml
91
97
  end
92
98
  end
93
99
 
94
- def Rypple.saveDropbox(keys, path)
100
+ def Rypple.saveConfig(conf, path)
95
101
  ryppleConf = File.join(path, RyppleConfigFile)
96
102
  File.open(ryppleConf, 'w') do |file|
97
103
  file.puts conf.to_yaml
@@ -157,14 +163,25 @@ module Rypple
157
163
  destDir = conf[:destinationDir]
158
164
 
159
165
  oldFileState = dropboxKeys[:files]
160
- files = Rypple.walkDropbox(client, '/', oldFileState)
166
+ files = Rypple.walkDropbox(client, conf[:dropbox][:root], oldFileState)
161
167
 
168
+ rootLength = conf[:dropbox][:root].length
162
169
  if !files.nil?
163
- files.keys.each { |x|
164
- file = client.get_file(x)
165
- dest = File.join(destDir, x)
166
- File.makedirs(File.dirname(dest))
167
- File.open(dest, 'w') {|f| f.puts file}
170
+ files.keys.each { |xx|
171
+ fileDest = xx[rootLength, xx.length]
172
+ matched = false
173
+ conf[:dropbox][:sync].each { |ii|
174
+ if File.fnmatch?(ii, xx, File::FNM_DOTMATCH)
175
+ matched = true
176
+ break
177
+ end
178
+ }
179
+ if matched
180
+ file = client.get_file(xx)
181
+ dest = File.join(destDir, fileDest)
182
+ File.makedirs(File.dirname(dest))
183
+ File.open(dest, 'w') {|f| f.puts file}
184
+ end
168
185
  }
169
186
  end
170
187
 
@@ -172,17 +189,15 @@ module Rypple
172
189
  Dir.glob(File.join(destDir, ii)).each { |oo|
173
190
  if !File.directory?(oo)
174
191
  upName = Pathname.new(oo).relative_path_from(Pathname.new(destDir)).to_s
175
- upName = File.join("", upName)
192
+ upName = File.join("", conf[:dropbox][:root], upName)
176
193
  if files.nil? or !files.has_key?(upName)
177
- up = File.open(oo)
178
- client.put_file(upName, up, true)
179
- up.close()
194
+ File.open(oo) { |f| client.put_file(upName, f, true) }
180
195
  end
181
196
  end
182
197
  }
183
198
  }
184
199
 
185
- dropboxKeys[:files] = Rypple.walkDropbox(client, '/', {})
200
+ dropboxKeys[:files] = Rypple.walkDropbox(client, conf[:dropbox][:root], {})
186
201
  Rypple.cleanup(conf, dropboxKeys, path)
187
202
 
188
203
  return true
@@ -0,0 +1,190 @@
1
+ require 'rubygems'
2
+ require 'rypple'
3
+
4
+ module Rypple
5
+
6
+ DefaultCGI = <<'eos'
7
+ #!/usr/bin/ruby
8
+ gemPath = "%%GEM_PATH"
9
+ configPath = "%%CONFIG_PATH"
10
+ inDir = "%%IN_DIR"
11
+ outDir = "%%OUT_DIR"
12
+
13
+ if !gemPath.empty?
14
+ $:.push(gemPath)
15
+ ENV['GEM_PATH'] = gemPath
16
+ end
17
+
18
+ require 'cgi'
19
+ require 'rubygems'
20
+ require 'rypple'
21
+ require 'jekyll'
22
+
23
+ cgi = CGI.new
24
+
25
+ puts cgi.header
26
+
27
+ puts "<h1>Rippling . . .</h1>"
28
+ if Rypple.sync(configPath)
29
+ puts "<h1>Generating Static Site</h1>"
30
+ puts `%%COMMAND #{inDir} #{outDir}`
31
+ end
32
+ eos
33
+
34
+ DefaultUpdateForm = <<'eos'
35
+ <html>
36
+ <head>
37
+ <title>Rypple</title>
38
+ </head>
39
+ <body>
40
+ <h1> Throw a stone into a pond..</h1>
41
+ <form action="update.cgi" method="POST">
42
+ <input type="submit" value="Rypple">
43
+ </form>
44
+ </body>
45
+ </html>
46
+ eos
47
+
48
+ DefaultHTAccess = <<'eos'
49
+ AuthName "Rypple Updater"
50
+ AuthType Basic
51
+ AuthUserFile %%AUTH_FILE
52
+ Require valid-user
53
+ eos
54
+
55
+ # Returns false if installation fails
56
+ def Rypple.Setup()
57
+ puts "Configuring the Rypple update script for web use."
58
+ if File.exists?(ENV["HOME"])
59
+ configBase = File.join(ENV["HOME"], 'ryppleSite')
60
+ puts "Please enter directory for Rypple Site. Default:", configBase
61
+ else
62
+ puts "Please enter directory for the new Rypple site."
63
+ end
64
+ directory = gets.chomp!
65
+
66
+ if !directory.empty?
67
+ configBase = File.expand_path(configBase)
68
+ end
69
+
70
+ if !File.exists?(configBase)
71
+ begin
72
+ Dir.mkdir(configBase)
73
+ rescue SystemCallError
74
+ puts "Cannot create directory", configBase, "aborting."
75
+ return false
76
+ end
77
+ end
78
+
79
+ conf = Rypple.loadConfiguration(configBase)
80
+ conf[:destinationDir] = directory
81
+ session, client, keys = Rypple.connectToDropbox(configBase)
82
+
83
+ if !conf.nil? and !keys.nil?
84
+ Rypple.cleanup(conf, keys, configBase)
85
+ end
86
+
87
+ baseCGI = DefaultCGI.dup
88
+ baseCGI.gsub!(/%%CONFIG_PATH/, configBase)
89
+
90
+ choice = false
91
+ insert = true
92
+ while !choice do
93
+ puts "Is your web host set up to use ruby gems? (y/N)"
94
+ answer = gets.chomp!.downcase!
95
+ if answer.nil? or answer.empty?
96
+ choice = true
97
+ elsif answer == "n" or answer == "y"
98
+ insert = (answer == "n")
99
+ choice = true
100
+ end
101
+ end
102
+
103
+ if insert
104
+ gemPath = ''
105
+ if ENV.has_key?('GEM_HOME')
106
+ gemPath = ENV['GEM_HOME']
107
+ else
108
+ puts "Please enter search path for the ruby gems."
109
+ gemPath = gets.chomp!
110
+ end
111
+
112
+ baseCGI.gsub!(/%%GEM_PATH/, gemPath)
113
+ end
114
+
115
+ baseCGI.gsub!(/%%IN_DIR/, configBase)
116
+
117
+ outDir = ""
118
+ while outDir.empty? or !File.exists?(outDir) do
119
+ puts "Where should the static site generator output files?"
120
+ outDir = gets.chomp!
121
+
122
+ if !outDir.empty?
123
+ outDir = File.expand_path(outDir)
124
+ else
125
+ puts "Cannot use empty output directory, aborting."
126
+ return false
127
+ end
128
+
129
+ if !File.exists?(outDir)
130
+ begin
131
+ Dir.mkdir(outDir)
132
+ rescue SystemCallError
133
+ puts "Cannot create output directory", outDir
134
+ next
135
+ end
136
+ end
137
+ end
138
+
139
+ baseCGI.gsub!(/%%OUT_DIR/, outDir)
140
+
141
+ command = File.join("#{ENV["GEM_HOME"]}", 'bin', 'jekyll')
142
+ if File.exists?(command)
143
+ puts "Please enter any arguments to pass to jekyll"
144
+ args = gets.chomp!
145
+ baseCGI.gsub!(/%%COMMAND/, command + ' ' + args)
146
+ end
147
+
148
+ ryppleDir = File.join(configBase, 'rypple')
149
+
150
+ if !File.exists?(ryppleDir)
151
+ begin
152
+ Dir.mkdir(ryppleDir)
153
+ rescue SystemCallError
154
+ "Cannot create rypple directory."
155
+ end
156
+ end
157
+
158
+ File.open(File.join(ryppleDir, 'update.html'), 'w', 0644) { |f| f.puts DefaultUpdateForm }
159
+
160
+ out = File.join(ryppleDir, 'update.cgi')
161
+ File.open(out, 'w', 0755) { |f| f.puts baseCGI }
162
+
163
+ puts "Should I enable basic user authentication for the update script? (Y/n):"
164
+
165
+ answer = gets.chomp!
166
+ if answer.nil? or answer.empty? or answer.downcase! == 'y'
167
+ print "Enter user name for authentication:"
168
+ user = gets.chomp!
169
+ print "Enter password for authentication:"
170
+ chars = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
171
+ salt = chars[rand(chars.size - 1)] + chars[rand(chars.size - 1)]
172
+ pass = gets.chomp!.crypt(salt)
173
+ authFile = File.join(configBase, '.htpasswd')
174
+ File.open(authFile, 'w') { |f| f.puts "#{user}:#{pass}" }
175
+ htaccess = DefaultHTAccess.gsub(/%%AUTH_FILE/, authFile)
176
+ File.open(File.join(ryppleDir, '.htaccess'), 'w') { |f| f.puts htaccess }
177
+ end
178
+
179
+ puts "Attempting first update"
180
+
181
+ if Rypple.sync(configBase)
182
+ puts `jekyll #{configBase} #{outDir}`
183
+ else
184
+ puts "Rypple sync failed."
185
+ end
186
+
187
+ return true
188
+ end
189
+
190
+ end
@@ -1,3 +1,3 @@
1
1
  module Rypple
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/rypple.rb CHANGED
@@ -1 +1,20 @@
1
- require 'rypple/base'
1
+ #$:.unshift File.dirname(__FILE__) #For use/testing without the gem.
2
+
3
+ # Requires all ruby files in a directory.
4
+ #
5
+ # path - Relative path from here to the directory.
6
+ #
7
+ # Returns nothing
8
+ def require_all(path)
9
+ glob = File.join(File.dirname(__FILE__), path, '*.rb')
10
+ Dir[glob].each { |f| require f }
11
+ end
12
+
13
+ require 'rubygems'
14
+
15
+ require 'fileutils'
16
+ require 'ftools'
17
+ require 'yaml'
18
+ require 'pathname'
19
+
20
+ require_all 'rypple'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rypple
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jason Ziglar
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-28 00:00:00 Z
18
+ date: 2012-03-01 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: jekyll
@@ -63,6 +63,7 @@ files:
63
63
  - bin/ryppleInstall
64
64
  - lib/rypple.rb
65
65
  - lib/rypple/base.rb
66
+ - lib/rypple/setup.rb
66
67
  - lib/rypple/version.rb
67
68
  - pkg/ripple-0.0.1.gem
68
69
  - rypple.gemspec