wire-framework 0.1.5.9 → 0.1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2858d57db2bf499296459695b344266fc2ec03ad
4
- data.tar.gz: 0d07178f4f4af3365e42b41b963d618e7eed237e
3
+ metadata.gz: 8029fd3239ff8f787957849338915e540da75f87
4
+ data.tar.gz: 79cb78ab379a3686efca80e827c5c43834b8a71e
5
5
  SHA512:
6
- metadata.gz: 7f9ddc12f09de5f0826b5c1484a00ebad077bbe01651aa068b98907675c9f05626737cba9168b00a0d59eebd3aa84a4653e13eaea516c14b818acc102f213c60
7
- data.tar.gz: 23aca561ecc20cc1d9473500d0b22c97f1b6450a54ff34948c7e43325439d40127e6dfdcd134003292e876ba17789629ef9844383816360c1a1f57a018bb54e2
6
+ metadata.gz: 557fbc73d49212fe4469d81dfa39d29ead0ffe3325f366fbed9fd88f6df66cc2acf4230c17e1056335b1f840399ae6773f004cd4978a77531e9a5311ccbf61c3
7
+ data.tar.gz: 06c3444d8a889a930122e5472e69836586b706f34f86cdd647961af951e5ce130a6494d57cbf63a097c86ddec723ae345b85b0caf99359381bca4fb383e3e3b0
data/lib/app/cache.rb CHANGED
@@ -17,10 +17,25 @@
17
17
  require 'lmdb'
18
18
 
19
19
  module Cache
20
- module Memory
20
+ # Cache::LMDB is a Wire::App for cache arbitrary HTTP responses in an LMDB
21
+ # @author Bryan T. Meyers
22
+ module LMDB
21
23
 
22
24
  @@cache = {}
23
25
 
26
+ # Cache-specific configuration
27
+ # @param [Hash] conf the existing configuration
28
+ # @return [Hash] post-processed configuration
29
+ def self.configure(conf)
30
+ unless @@cache[conf['remote']]
31
+ @@cache[conf['remote']] = LMDB.new("#{conf['cache']}/#{conf['remote']}", mapsize: 2**30)
32
+ end
33
+ conf
34
+ end
35
+
36
+ # Add or Update a cached response
37
+ # @param [Hash] context the context for this request
38
+ # @return [Response] a valid Rack response triplet, or status code
24
39
  def self.update_cached(context)
25
40
  uri = context.uri.join('/')
26
41
  all = context.uri[0..2].join('/')
@@ -53,6 +68,9 @@ module Cache
53
68
  result
54
69
  end
55
70
 
71
+ # Read a cached response
72
+ # @param [Hash] context the context for this request
73
+ # @return [Response] a valid Rack response triplet, or status code
56
74
  def self.get_cached(context)
57
75
  uri = context.uri.join('/')
58
76
  env = @@cache[context.config['remote']]
@@ -64,6 +82,9 @@ module Cache
64
82
  result
65
83
  end
66
84
 
85
+ # Remove a cached response
86
+ # @param [Hash] context the context for this request
87
+ # @return [Response] a valid Rack response triplet, or status code
67
88
  def self.purge_cached(context)
68
89
  uri = context.uri.join('/')
69
90
  env = @@cache[context.config['remote']]
@@ -79,13 +100,11 @@ module Cache
79
100
  result
80
101
  end
81
102
 
103
+ # Proxy method used when routing
104
+ # @param [Array] actions the allowed actions for this URI
105
+ # @param [Hash] context the context for this request
106
+ # @return [Response] a Rack Response triplet, or status code
82
107
  def self.invoke(actions, context)
83
-
84
- # Create Cache if not set up
85
- unless @@cache[context.config['remote']]
86
- @@cache[context.config['remote']] = LMDB.new("/tmp/cache/#{context.config['remote']}", mapsize: 2**30)
87
- end
88
-
89
108
  case context.action
90
109
  when :create, :update, :delete
91
110
  result = context.forward(context.action)
data/lib/app/db.rb CHANGED
@@ -39,11 +39,10 @@ module DB
39
39
  conf.each do |k,v|
40
40
  config[k.to_sym] = v
41
41
  end
42
- config['db'] = Sequel.connect(config)
43
- config
42
+ Sequel.connect(config)
44
43
  end
45
44
 
46
- # Read all of the configs in './configs/dbs'
45
+ # Read all of the configs in './config/dbs'
47
46
  # @return [void]
48
47
  def self.read_configs
49
48
  Wire::Config.read_config_dir('config/dbs', method(:init_db))
@@ -132,7 +131,7 @@ module DB
132
131
  def self.do_read(context)
133
132
  model = context.config['models'][context.resource]
134
133
  return 404 unless model
135
- id = context.uri[3]
134
+ id = context.id
136
135
  if id.eql?('new') or id.eql? 'upload'
137
136
  return '{}'
138
137
  end
@@ -147,7 +146,7 @@ module DB
147
146
  def self.do_update(context)
148
147
  model = context.config['models'][context.resource]
149
148
  return 404 unless model
150
- instance = model[context.uri[3]]
149
+ instance = model[context.id]
151
150
  return 404 unless instance
152
151
  instance.update(context.json)
153
152
  end
@@ -158,9 +157,10 @@ module DB
158
157
  def self.do_delete(context)
159
158
  model = context.config['models'][context.resource]
160
159
  return 404 unless model
161
- instance = model[context.uri[3]]
160
+ instance = model[context.id]
162
161
  if instance
163
- if instance.destroy
162
+ instance = instance.destroy
163
+ if instance.errors.length == 0
164
164
  200
165
165
  else
166
166
  [500, {}, 'Failed to delete instance']
@@ -27,7 +27,12 @@ module Render
27
27
  def self.do_read(actions, context, specific)
28
28
  response = context.forward(specific)
29
29
  mime = response[1]['content-type']
30
- renderer = context.closet.renderers[mime]
30
+ renderer = nil
31
+ context.closet.renderers.each do |k,c|
32
+ if c['mimes'].include? mime
33
+ renderer = c
34
+ end
35
+ end
31
36
  if renderer
32
37
  template = renderer['partial']
33
38
  template.render(self, { actions: actions,
@@ -58,4 +63,4 @@ module Render
58
63
  end
59
64
  end
60
65
  end
61
- end
66
+ end
@@ -30,7 +30,6 @@ module Render
30
30
  if context.resource
31
31
  body = context.body
32
32
  if body
33
- #TODO: This looks off...
34
33
  body = body.split('=')[1]
35
34
  if body
36
35
  body = URI.decode(body)
@@ -38,12 +37,18 @@ module Render
38
37
  ## Assume unsupported mime type
39
38
  status = 415
40
39
  message = 'INSTANT: Unsupported MIME Type'
41
- renderer = context.closet.renderers["#{context.resource}/#{context.id}"]
40
+ mime = "#{context.resource}/#{context.id}"
41
+ renderer = nil
42
+ context.closet.renderers.each do |k, v|
43
+ if v['mimes'].include? mime
44
+ renderer = v['partial']
45
+ break
46
+ end
47
+ end
42
48
  if renderer
43
- template = context.closet.templates[renderer]
44
- result = template.render(self, { actions: actions,
49
+ result = renderer.render(self, { actions: actions,
45
50
  context: context,
46
- mime: "#{context.resource}/#{context.id}",
51
+ mime: mime,
47
52
  response: body, })
48
53
  name = context.config['template']
49
54
  template = context.closet.templates[name]
@@ -58,6 +58,7 @@ module Render
58
58
  end
59
59
  if template
60
60
  hash = { actions: actions,
61
+ context: context,
61
62
  resource: resource,
62
63
  mime: mime,
63
64
  response: body }
@@ -103,9 +104,8 @@ module Render
103
104
  end
104
105
  if template
105
106
  hash = { actions: actions,
106
- app: context.app,
107
- resource: context.resource,
108
- id: context.id,
107
+ context: context,
108
+ resource: resource,
109
109
  mime: mime,
110
110
  response: body }
111
111
  if resource['extras']
data/lib/app/repo/svn.rb CHANGED
@@ -139,43 +139,52 @@ module Repo
139
139
  # @param [String] username the Author of this change
140
140
  # @return [Integer] status code
141
141
  def self.do_update_file(conf, repo, id, content, message, mime, username)
142
- options = "--depth empty --username #{conf['user']} --password #{conf['password']}"
143
- status = 500
142
+ options = "--username #{conf['user']} --password #{conf['password']}"
143
+ status = 500
144
144
  repo_path = "/tmp/#{username}/#{repo}"
145
145
  unless Dir.exist? repo_path
146
146
  FileUtils.mkdir_p(repo_path)
147
147
  end
148
148
 
149
- `svn checkout #{options} '#{conf['protocol']}://#{conf['host']}/#{repo}' '#{repo_path}'`
149
+ `svn checkout --depth empty #{options} '#{conf['protocol']}://#{conf['host']}/#{repo}' '#{repo_path}'`
150
150
 
151
151
  if $?.exitstatus == 0
152
- file_path = CGI.unescape(id)
153
- if conf['web_folder']
154
- file_path = "#{conf['web_folder']}/#{file_path}"
152
+ Dir.chdir(repo_path) do
153
+ file_path = CGI.unescape(id)
154
+ if conf['web_folder']
155
+ file_path = "#{conf['web_folder']}/#{file_path}"
156
+ end
157
+ folder_path = file_path.split('/')
158
+ folder_path.pop
159
+ folder_path = folder_path.join('/')
160
+ `svn update --parents #{options} #{file_path}`
161
+ unless Dir.exist? folder_path
162
+ FileUtils.mkdir_p(folder_path)
163
+ end
164
+ file = File.open(file_path, 'w')
165
+ file.syswrite(content)
166
+ file.close
167
+ `svn add --force *`
168
+ $stderr.puts `svn status`
169
+ `svn propset svn:mime-type '#{mime ? mime : 'application/octet-stream'}' #{file_path}`
170
+ if $?.exitstatus != 0
171
+ break
172
+ end
173
+ `svn commit #{options} -m "#{message}"`
174
+ if $?.exitstatus != 0
175
+ break
176
+ end
177
+ `svn propset #{options} --revprop -r HEAD svn:author '#{username}'`
155
178
  end
156
- folder_path = file_path.split('/')
157
- folder_path.pop
158
- folder_path = folder_path.join('/')
159
-
160
- unless Dir.exist? folder_path
161
- FileUtils.mkdir_p(folder_path)
162
- end
163
-
164
- file = File.open(file_path, 'w+')
165
- file.syswrite(content)
166
- file.close
167
- `svn add --force "#{repo_path}/*"`
168
- `svn propset svn:mime-type "#{mime}" "#{file_path}"`
169
- `svn commit #{options} -m "#{message}" "#{repo_path}"`
170
- if $?.exitstatus == 0
171
- status = 200
172
- end
173
- `svn propset #{options} --revprop -r HEAD svn:author '#{username}' "#{repo_path}"`
174
179
  end
175
180
  `rm -R '#{repo_path}'`
181
+ if $?.exitstatus == 0
182
+ status = 200
183
+ end
176
184
  status
177
185
  end
178
186
 
187
+
179
188
  # Create a single file
180
189
  # @param [String] conf the repo config
181
190
  # @param [String] repo the new repo name
data/lib/closet.rb CHANGED
@@ -43,11 +43,11 @@ module Wire
43
43
  if @mode.eql? 'development'
44
44
  $stderr.puts 'Reading DB Configs...'
45
45
  end
46
- @dbs = Wire::DB.read_configs
46
+ @dbs = DB.read_configs
47
47
  if @mode.eql? 'development'
48
48
  $stderr.puts 'Reading Repo Configs...'
49
49
  end
50
- @repos = Wire::Repo.read_configs
50
+ @repos = Repo.read_configs
51
51
  end
52
52
 
53
53
  # Setup the closet
data/lib/wire.rb CHANGED
@@ -33,7 +33,7 @@ end
33
33
  # @author Bryan T. Meyers
34
34
  module Wire
35
35
  # Current version of the Wire Gem
36
- VERSION = '0.1.5.9'
36
+ VERSION = '0.1.6.0'
37
37
  end
38
38
 
39
39
  require_relative 'app'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wire-framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5.9
4
+ version: 0.1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan T. Meyers