lamed 0.1.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lamed.gemspec +21 -10
- data/lib/lamed/aws/authentication.rb +105 -0
- data/lib/lamed/aws/aws.rb +25 -0
- data/lib/lamed/aws/sqs.rb +142 -0
- data/lib/lamed/controller.rb +37 -33
- data/lib/lamed/initializer.rb +7 -0
- data/lib/lamed/main.rb +2 -0
- data/lib/lamed/model.rb +55 -4
- data/lib/lamed/redis.rb +3 -0
- data/spec/examples/conf/config.yml +9 -0
- data/spec/examples/ext/controllers/hello_world.rb +2 -1
- data/spec/examples/ext/controllers/lamest/bar.rb +1 -1
- data/spec/examples/ext/controllers/lamest/foo.rb +1 -1
- data/spec/examples/ext/models/bar_model.rb +7 -1
- data/spec/lamed/aws/authentication_spec.rb +58 -0
- data/spec/lamed/aws/spec.rb +13 -0
- data/spec/lamed/aws/sqs_spec.rb +95 -0
- data/spec/lamed/controller_spec.rb +88 -0
- data/spec/{helpers_spec.rb → lamed/helper_spec.rb} +1 -1
- data/spec/lamed/initializer_spec.rb +42 -0
- data/spec/lamed/model_spec.rb +42 -0
- data/spec/{object_loader_spec.rb → lamed/object_loader_spec.rb} +4 -6
- metadata +21 -10
- data/spec/initializer_spec.rb +0 -26
- data/spec/lame_spec.rb +0 -7
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lamed.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{lamed}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Lee Chang"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-04-15}
|
13
13
|
s.description = %q{Yet another LaMe Ruby Web Framework}
|
14
14
|
s.email = %q{leetchang@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -25,6 +25,9 @@ Gem::Specification.new do |s|
|
|
25
25
|
"VERSION",
|
26
26
|
"lamed.gemspec",
|
27
27
|
"lib/lamed.rb",
|
28
|
+
"lib/lamed/aws/authentication.rb",
|
29
|
+
"lib/lamed/aws/aws.rb",
|
30
|
+
"lib/lamed/aws/sqs.rb",
|
28
31
|
"lib/lamed/controller.rb",
|
29
32
|
"lib/lamed/helper.rb",
|
30
33
|
"lib/lamed/initializer.rb",
|
@@ -44,10 +47,14 @@ Gem::Specification.new do |s|
|
|
44
47
|
"spec/examples/ext/views/lamest/bar.mustache",
|
45
48
|
"spec/examples/ext/views/lamest/foo.mustache",
|
46
49
|
"spec/examples/lib/foo_lib.rb",
|
47
|
-
"spec/
|
48
|
-
"spec/
|
49
|
-
"spec/
|
50
|
-
"spec/
|
50
|
+
"spec/lamed/aws/authentication_spec.rb",
|
51
|
+
"spec/lamed/aws/spec.rb",
|
52
|
+
"spec/lamed/aws/sqs_spec.rb",
|
53
|
+
"spec/lamed/controller_spec.rb",
|
54
|
+
"spec/lamed/helper_spec.rb",
|
55
|
+
"spec/lamed/initializer_spec.rb",
|
56
|
+
"spec/lamed/model_spec.rb",
|
57
|
+
"spec/lamed/object_loader_spec.rb",
|
51
58
|
"spec/spec.opts",
|
52
59
|
"spec/spec_helper.rb"
|
53
60
|
]
|
@@ -63,10 +70,14 @@ Gem::Specification.new do |s|
|
|
63
70
|
"spec/examples/ext/models/bar_model.rb",
|
64
71
|
"spec/examples/ext/models/foo_model.rb",
|
65
72
|
"spec/examples/lib/foo_lib.rb",
|
66
|
-
"spec/
|
67
|
-
"spec/
|
68
|
-
"spec/
|
69
|
-
"spec/
|
73
|
+
"spec/lamed/aws/authentication_spec.rb",
|
74
|
+
"spec/lamed/aws/spec.rb",
|
75
|
+
"spec/lamed/aws/sqs_spec.rb",
|
76
|
+
"spec/lamed/controller_spec.rb",
|
77
|
+
"spec/lamed/helper_spec.rb",
|
78
|
+
"spec/lamed/initializer_spec.rb",
|
79
|
+
"spec/lamed/model_spec.rb",
|
80
|
+
"spec/lamed/object_loader_spec.rb",
|
70
81
|
"spec/spec_helper.rb"
|
71
82
|
]
|
72
83
|
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module Aws
|
2
|
+
module Authentication
|
3
|
+
|
4
|
+
include AWS
|
5
|
+
|
6
|
+
AMAZON_ACCESS_KEY_ID = ENV['AMAZON_ACCESS_KEY_ID']
|
7
|
+
AMAZON_SECRET_ACCESS_KEY = ENV['AMAZON_SECRET_ACCESS_KEY']
|
8
|
+
SIGNATURE_VERSION = '2'
|
9
|
+
|
10
|
+
def aws_access_key_id
|
11
|
+
AMAZON_ACCESS_KEY_ID
|
12
|
+
end
|
13
|
+
|
14
|
+
def aws_secret_access_key
|
15
|
+
AMAZON_SECRET_ACCESS_KEY
|
16
|
+
end
|
17
|
+
|
18
|
+
def new_digest
|
19
|
+
OpenSSL::Digest::Digest.new('sha256')
|
20
|
+
end
|
21
|
+
|
22
|
+
def sign(string)
|
23
|
+
Base64.encode64(OpenSSL::HMAC.digest(new_digest, aws_secret_access_key, string)).strip
|
24
|
+
end
|
25
|
+
|
26
|
+
# Escape the nonreserved AWS characters. Use this instead of URI.escape or CGI.escape
|
27
|
+
# See String#unpack for hex nibbles: http://ruby-doc.org/core/classes/String.html#M000760
|
28
|
+
def aws_escape(string)
|
29
|
+
string.to_s.gsub(/([^a-zA-Z0-9._~-]+)/n) { '%' + $1.unpack('H2' * $1.size).join('%').upcase }
|
30
|
+
end
|
31
|
+
|
32
|
+
def aws_escape_params(params, opts = {})
|
33
|
+
request = params.merge(opts)
|
34
|
+
request.inject({}) { |h,(k,v)| h[aws_escape(k)] = aws_escape(v);h }
|
35
|
+
end
|
36
|
+
|
37
|
+
def uri_escape_params(params, opts = {})
|
38
|
+
request = params.merge(opts)
|
39
|
+
request.inject({}) { |h,(k,v)| h[URI.escape(k.to_s)] = URI.escape(v.to_s);h }
|
40
|
+
end
|
41
|
+
|
42
|
+
# Create an AWS signature
|
43
|
+
# From: http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/
|
44
|
+
# String to sign:
|
45
|
+
# HTTPVerb + "\n" +
|
46
|
+
# ValueOfHostHeaderInLowercase + "\n" +
|
47
|
+
# HTTPRequestURI + "\n" +
|
48
|
+
# CanonicalizedQueryString
|
49
|
+
# Calculate an RFC 2104-compliant HMAC with the string you just created, your Secret Access Key as the key.
|
50
|
+
# We use SHA256 as the hash algorithm.
|
51
|
+
# Do not encode the signature here. The string will be encoded when it's included in the query string.
|
52
|
+
#def aws_signature(httpverb, host, requesturi, params = {})
|
53
|
+
# sorted_params = params.sort.inject({}) { |h,(k,v)| h[k] = v;h }
|
54
|
+
# query_string = aws_escape_params(sorted_params).collect { |k,v| k + '=' + v }.join('&')
|
55
|
+
# string_to_sign = "#{httpverb.to_s.upcase}\n#{host}\n#{requesturi}\n#{query_string}"
|
56
|
+
# puts "STRING TO SIGN is " + string_to_sign.inspect
|
57
|
+
# sign(string_to_sign)
|
58
|
+
#end
|
59
|
+
def generate_string_to_sign(httpverb, host, uri, params = {})
|
60
|
+
verb = httpverb.to_s.upcase
|
61
|
+
sorted_params = params.sort.inject({}) { |h,(k,v)| h[k] = v;h }
|
62
|
+
query_string = aws_escape_params(sorted_params).collect { |k,v| k + '=' + v }.join('&')
|
63
|
+
"#{verb}\n#{host}\n#{uri}\n#{query_string}"
|
64
|
+
end
|
65
|
+
|
66
|
+
def generate_query(action, params = {})
|
67
|
+
request_hash = generate_request(action, params)
|
68
|
+
uri = url_path || "/"
|
69
|
+
uri = uri + "/" unless uri == "/"
|
70
|
+
string_to_sign = generate_string_to_sign(:get, @host, uri, request_hash)
|
71
|
+
signature = aws_signature(string_to_sign)
|
72
|
+
generate_query_string(request_hash, 'Signature' => signature)
|
73
|
+
end
|
74
|
+
|
75
|
+
def aws_signature(string_to_sign)
|
76
|
+
sign(string_to_sign)
|
77
|
+
end
|
78
|
+
|
79
|
+
def generate_request(action, params = {})
|
80
|
+
request = {
|
81
|
+
'Action' => action,
|
82
|
+
'SignatureMethod' => 'HmacSHA256',
|
83
|
+
'AWSAccessKeyId' => aws_access_key_id,
|
84
|
+
'SignatureVersion' => SIGNATURE_VERSION
|
85
|
+
}
|
86
|
+
request.merge(default_params).merge(params)
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
def generate_query_string(params, opts = {})
|
91
|
+
query_hash = params.merge(opts)
|
92
|
+
query_string = URI.escape(query_hash.collect { |k,v| k.to_s + '=' + v.to_s }.join('&'))
|
93
|
+
query_string.gsub(/\+/, "%2B") #encode pluses correctly
|
94
|
+
end
|
95
|
+
|
96
|
+
def generate_query(action, params = {})
|
97
|
+
request_hash = generate_request(action, params)
|
98
|
+
uri = url_path || "/"
|
99
|
+
uri = uri + "/" unless uri == "/"
|
100
|
+
string_to_sign = generate_string_to_sign(:get, @host, uri, request_hash)
|
101
|
+
signature = aws_signature(string_to_sign)
|
102
|
+
generate_query_string(request_hash, 'Signature' => signature)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'openssl'
|
3
|
+
require 'time'
|
4
|
+
require 'typhoeus'
|
5
|
+
require 'crack'
|
6
|
+
require 'uri'
|
7
|
+
require 'cgi'
|
8
|
+
|
9
|
+
module AWS
|
10
|
+
|
11
|
+
include Typhoeus
|
12
|
+
include Crack
|
13
|
+
|
14
|
+
# AWS time xml format: YYYY-MM-DDThh:mm:ssZ> Zone is set to Z or UTC
|
15
|
+
def time_xml
|
16
|
+
Time.now.utc.xmlschema
|
17
|
+
end
|
18
|
+
|
19
|
+
def http_get_xml(host, path, request_params)
|
20
|
+
path = path == "/" ? path : path + "/"
|
21
|
+
req = path + "?" + request_params
|
22
|
+
res = Request.get(@host + req)
|
23
|
+
XML.parse res.body
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
module Aws
|
2
|
+
module Sqs
|
3
|
+
|
4
|
+
DEFAULT_HOST = 'queue.amazonaws.com'
|
5
|
+
API_VERSION = '2009-02-01'
|
6
|
+
|
7
|
+
class Queue
|
8
|
+
|
9
|
+
include Aws::Authentication
|
10
|
+
include Aws
|
11
|
+
include Crack
|
12
|
+
|
13
|
+
REQUEST_TTL = 600
|
14
|
+
|
15
|
+
attr_reader :host, :path, :expires
|
16
|
+
|
17
|
+
def initialize(queue_name = nil)
|
18
|
+
@host = DEFAULT_HOST
|
19
|
+
@queue_name = queue_name
|
20
|
+
@path = queue_name.nil? ? "/" : get_http_path if @path.nil?
|
21
|
+
end
|
22
|
+
|
23
|
+
# Get the queue path using Action = +ListQueues+ and additional param +QueneNamePrefix+.
|
24
|
+
# Example response +/12345678012/exampleQueue+
|
25
|
+
def get_http_path
|
26
|
+
action = 'ListQueues'
|
27
|
+
params = { "QueueNamePrefix" => @queue_name }.merge(default_params)
|
28
|
+
path = url_path || ""
|
29
|
+
xml_doc = http_get_xml(@host, path, generate_query(action, params))
|
30
|
+
url = (xml_doc["ListQueuesResponse"]["ListQueuesResult"]["QueueUrl"])
|
31
|
+
url = url[0] if Array === url
|
32
|
+
URI.parse(url).path
|
33
|
+
end
|
34
|
+
|
35
|
+
def url_path
|
36
|
+
@path || '/'
|
37
|
+
end
|
38
|
+
|
39
|
+
# List all the queues that start with the prefix.
|
40
|
+
def list_queues(prefix = "")
|
41
|
+
action = "ListQueues"
|
42
|
+
@path = "/"
|
43
|
+
available_queues = Array.new
|
44
|
+
xml_doc = http_get_xml(@host, path, generate_query(action, default_params))
|
45
|
+
if xml_doc["ListQueuesResponse"]["ListQueuesResult"]["QueueUrl"]
|
46
|
+
xml_doc["ListQueuesResponse"]["ListQueuesResult"]["QueueUrl"].each do |url|
|
47
|
+
available_queues << url.split("/").last
|
48
|
+
end
|
49
|
+
end
|
50
|
+
available_queues
|
51
|
+
end
|
52
|
+
|
53
|
+
def attributes
|
54
|
+
action = "GetQueueAttributes"
|
55
|
+
params = { "AttributeName" =>"All" }.merge(default_params)
|
56
|
+
http_get_xml(@host, @path, generate_query(action, params))
|
57
|
+
end
|
58
|
+
|
59
|
+
def create(queue_name)
|
60
|
+
action = "CreateQueue"
|
61
|
+
params = { "QueueName" => queue_name}
|
62
|
+
params.merge!(default_params)
|
63
|
+
@path = "/"
|
64
|
+
http_get_xml(@host, @path, generate_query(action, params))
|
65
|
+
end
|
66
|
+
|
67
|
+
def send(message, send_params = nil)
|
68
|
+
action = "SendMessage"
|
69
|
+
params = { "MessageBody" => message }.merge(default_params)
|
70
|
+
http_get_xml(@host, url_path, generate_query(action, params))
|
71
|
+
end
|
72
|
+
|
73
|
+
def receive(receive_params = {})
|
74
|
+
action = "ReceiveMessage"
|
75
|
+
params = {
|
76
|
+
"MaxNumberOfMessages" => receive_params[:number] || 1,
|
77
|
+
"AttributeName" => "All" }
|
78
|
+
params["VisibilityTimeout"] = receive_params[:timeout] if receive_params[:timeout]
|
79
|
+
params.merge!(default_params)
|
80
|
+
xml = http_get_xml(@host, url_path, generate_query(action, params))
|
81
|
+
|
82
|
+
if !xml["ReceiveMessageResponse"]["ReceiveMessageResult"].nil?
|
83
|
+
message = xml["ReceiveMessageResponse"]["ReceiveMessageResult"]["Message"]
|
84
|
+
@message_body = message["Body"]
|
85
|
+
@message_attribute = message["Attribute"]
|
86
|
+
@receipt_handle = message["ReceiptHandle"]
|
87
|
+
@message = message
|
88
|
+
else
|
89
|
+
nil
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def receipt_handle
|
94
|
+
@receipt_handle
|
95
|
+
end
|
96
|
+
|
97
|
+
def message
|
98
|
+
@message
|
99
|
+
end
|
100
|
+
|
101
|
+
def message_body
|
102
|
+
@message_body
|
103
|
+
end
|
104
|
+
|
105
|
+
def message_attributes
|
106
|
+
@message_attribute
|
107
|
+
end
|
108
|
+
|
109
|
+
def delete(receipt_handle)
|
110
|
+
action = "DeleteMessage"
|
111
|
+
#unescaped_handle = URI.unescape(receipt_handle)
|
112
|
+
params = { "ReceiptHandle" => receipt_handle }.merge(default_params)
|
113
|
+
http_get_xml(@host, url_path, generate_query(action, params))
|
114
|
+
end
|
115
|
+
|
116
|
+
def delete_queue
|
117
|
+
action = "DeleteQueue"
|
118
|
+
params = default_params
|
119
|
+
http_get_xml(@host, url_path, generate_query(action, params))
|
120
|
+
end
|
121
|
+
|
122
|
+
# +time+ is expressed as a string.
|
123
|
+
def expires(time = nil)
|
124
|
+
if !time
|
125
|
+
(Time.now.utc + REQUEST_TTL).xmlschema
|
126
|
+
else
|
127
|
+
(Time.parse(time) + REQUEST_TTL).xmlschema
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def default_params
|
132
|
+
request = {
|
133
|
+
'Expires' => expires,
|
134
|
+
'Version' => API_VERSION
|
135
|
+
}
|
136
|
+
end
|
137
|
+
|
138
|
+
def create_request(uri, query_string = nil)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
data/lib/lamed/controller.rb
CHANGED
@@ -5,64 +5,68 @@ module Lamed
|
|
5
5
|
|
6
6
|
include Rack
|
7
7
|
include Lamed::Helper
|
8
|
-
extend Lamed::Helper
|
8
|
+
#extend Lamed::Helper
|
9
9
|
include Lamed::Model
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
def set_self_path(str)
|
10
|
+
|
11
|
+
def self_path(str)
|
14
12
|
@self_path = str
|
15
13
|
end
|
16
|
-
|
17
|
-
def
|
14
|
+
|
15
|
+
def req_params
|
16
|
+
env
|
17
|
+
end
|
18
|
+
|
19
|
+
def content_type(content_type)
|
20
|
+
req_params[:content_type] = content_type
|
21
|
+
end
|
22
|
+
|
23
|
+
def user_agent
|
24
|
+
req_params['HTTP_USER_AGENT']
|
25
|
+
end
|
26
|
+
|
27
|
+
# Find the uri's as and array of symbols from the request_path
|
28
|
+
def uri(request_path)
|
18
29
|
begin
|
19
30
|
uri = (request_path.split("/").collect {|r| r.downcase.intern unless r.empty?}).compact
|
20
31
|
rescue NoMethodError
|
21
32
|
uri = Array.new
|
22
33
|
end
|
23
|
-
|
34
|
+
@uri = uri
|
24
35
|
end
|
25
|
-
|
26
|
-
|
36
|
+
|
37
|
+
# Build param symbols from the query string
|
38
|
+
def params(query_string)
|
27
39
|
begin
|
28
|
-
|
40
|
+
params_prime = query_string.split('&').inject({}) { |h,(k,v)|
|
29
41
|
values = k.split('=')
|
30
42
|
# Drop any query params that have blank values
|
31
43
|
h[values[0].downcase.intern] = (CGI.unescape(values[1])).downcase if values.length == 2
|
32
44
|
h
|
33
45
|
}
|
34
46
|
rescue NoMethodError => e
|
35
|
-
|
47
|
+
params_prime = Hash.new
|
36
48
|
end
|
37
|
-
|
49
|
+
params_prime
|
38
50
|
end
|
39
|
-
|
40
|
-
def call
|
41
|
-
|
42
|
-
env[:query] = self.
|
43
|
-
env[:path] = self.
|
44
|
-
response
|
45
|
-
resp =
|
51
|
+
|
52
|
+
def call
|
53
|
+
#@env = env unless defined?(@env)
|
54
|
+
env[:query] = self.params(env['QUERY_STRING'])
|
55
|
+
env[:path] = self.uri(env['SCRIPT_NAME'])
|
56
|
+
response
|
57
|
+
resp = req_params
|
46
58
|
status_code = resp[:status_code] || 200
|
47
59
|
content_type = resp[:content_type] || "text/html"
|
48
60
|
[status_code, {"Content-Type" => content_type}, [resp[:body]]]
|
49
61
|
end
|
50
|
-
|
62
|
+
|
63
|
+
# This is just a reminder that I need to add something here
|
51
64
|
def request(*args)
|
52
65
|
end
|
53
66
|
|
54
|
-
def response
|
55
|
-
|
56
|
-
@req_params
|
57
|
-
return @req_params
|
58
|
-
end
|
59
|
-
|
60
|
-
def content_type(content_type)
|
61
|
-
@req_params[:content_type] = content_type
|
62
|
-
end
|
63
|
-
|
64
|
-
def user_agent
|
65
|
-
@env['HTTP_USER_AGENT']
|
67
|
+
def response
|
68
|
+
req_params[:body] = self.render
|
69
|
+
#return @req_params
|
66
70
|
end
|
67
71
|
end
|
68
72
|
end
|
data/lib/lamed/initializer.rb
CHANGED
@@ -5,6 +5,9 @@ require 'memcached'
|
|
5
5
|
require 'cgi'
|
6
6
|
require 'lib/lamed/helper'
|
7
7
|
require 'lib/lamed/object_loader'
|
8
|
+
require 'lib/lamed/aws/aws'
|
9
|
+
require 'lib/lamed/aws/authentication'
|
10
|
+
require 'lib/lamed/aws/sqs'
|
8
11
|
|
9
12
|
module Lamed
|
10
13
|
|
@@ -69,6 +72,10 @@ module Lamed
|
|
69
72
|
@logger
|
70
73
|
end
|
71
74
|
|
75
|
+
def opts
|
76
|
+
@opts = SYS_OPTIONS
|
77
|
+
end
|
78
|
+
|
72
79
|
def load_lib
|
73
80
|
Dir[ROOT + '/lib/**/*.rb'].each {|f| load f}
|
74
81
|
end
|
data/lib/lamed/main.rb
CHANGED
data/lib/lamed/model.rb
CHANGED
@@ -1,14 +1,38 @@
|
|
1
1
|
require 'mysql'
|
2
|
-
require '
|
2
|
+
require 'dm-core'
|
3
|
+
require 'dm-types'
|
4
|
+
require 'dm-aggregates'
|
5
|
+
#require 'lib/lamed/redis'
|
6
|
+
require 'redis'
|
3
7
|
|
4
8
|
module Lamed
|
5
9
|
|
6
10
|
module Model
|
11
|
+
|
12
|
+
#LAME_ROOT = ::LAME_ROOT unless defined?(LAME_ROOT)
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
# Support for DataMapper
|
17
|
+
class DM
|
7
18
|
|
8
|
-
#include
|
19
|
+
#include DataMapper::Resource
|
20
|
+
include DataMapper
|
9
21
|
|
10
|
-
|
11
|
-
|
22
|
+
# Setup the database connection using DataMapper
|
23
|
+
def initialize(params = {})
|
24
|
+
@host = params[:host] || 'localhost'
|
25
|
+
@port = (params[:port] || 3306).to_i
|
26
|
+
@user = params[:username] || 'root'
|
27
|
+
@password = params[:password] || 'pwd'
|
28
|
+
@database = params[:database] || 'ithingy'
|
29
|
+
@adapter = params[:adapter] || 'mysql'
|
30
|
+
self.connect
|
31
|
+
end
|
32
|
+
|
33
|
+
def connect(params = {})
|
34
|
+
DataMapper.setup(:default, "#{@adapter}://#{@user}:#{@password}@#{@host}:#{@port}/#{@database}")
|
35
|
+
end
|
12
36
|
end
|
13
37
|
|
14
38
|
class MySQL < Mysql
|
@@ -67,4 +91,31 @@ module Lamed
|
|
67
91
|
return res
|
68
92
|
end
|
69
93
|
end
|
94
|
+
end
|
95
|
+
|
96
|
+
class Redis
|
97
|
+
|
98
|
+
# Adding namespace or prefix keys to redis SET and GET request much like memcache.
|
99
|
+
|
100
|
+
$SYS_OPTIONS = {} unless defined?($SYS_OPTIONS)
|
101
|
+
|
102
|
+
REDIS_OPTIONS = {
|
103
|
+
:host => $SYS_OPTIONS[:redis_host] || '127.0.0.1' ,
|
104
|
+
:port => ($SYS_OPTIONS[:redis_port] || 6379).to_i,
|
105
|
+
:db => ($SYS_OPTIONS[:redis_db] || 0).to_i,
|
106
|
+
:timeout => ($SYS_OPTIONS[:redis_timeout] || 5).to_i,
|
107
|
+
}
|
108
|
+
|
109
|
+
def initialize(host, opts={})
|
110
|
+
@host = host || REDIS_OPTIONS[:host]
|
111
|
+
@port = opts[:port] || REDIS_OPTIONS[:port]
|
112
|
+
@db = opts[:db] || REDIS_OPTIONS[:db]
|
113
|
+
@timeout = opts[:timeout] || REDIS_OPTIONS[:timeout]
|
114
|
+
$debug = opts[:debug]
|
115
|
+
connect_to_server
|
116
|
+
end
|
117
|
+
|
118
|
+
def load
|
119
|
+
end
|
120
|
+
|
70
121
|
end
|
data/lib/lamed/redis.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
LAME_ROOT = File.join(File.dirname(__FILE__), '..')
|
2
|
+
ROOT = File.join(LAME_ROOT, "/spec/examples")
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
|
5
|
+
ENV['AMAZON_ACCESS_KEY_ID'] = 'THISISTHEACCESSKEYYO'
|
6
|
+
ENV['AMAZON_SECRET_ACCESS_KEY'] = 'THISISTHESECRETACCESSKEYYEAHBOISHOOBIDOO'
|
7
|
+
|
8
|
+
require 'lib/lamed/aws/aws'
|
9
|
+
require 'lib/lamed/aws/authentication'
|
10
|
+
|
11
|
+
include Aws::Authentication
|
12
|
+
|
13
|
+
describe Aws::Authentication do
|
14
|
+
|
15
|
+
it "should get AWS access id, secret, and new digest from system" do
|
16
|
+
aws_access_key_id.should == 'THISISTHEACCESSKEYYO'
|
17
|
+
aws_secret_access_key.should == 'THISISTHESECRETACCESSKEYYEAHBOISHOOBIDOO'
|
18
|
+
new_digest.inspect.should =~ /\#<OpenSSL::Digest::Digest:/
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should escape string in an AWS friendly way" do
|
22
|
+
string = 'Hello World. This:is:not-what-you-want'
|
23
|
+
aws_escape(string).should == 'Hello%20World.%20This%3Ais%3Anot-what-you-want'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should escape params in an AWS friendly way" do
|
27
|
+
hash = {
|
28
|
+
'foo' => 'Hello World',
|
29
|
+
'foo:bar' => 'Rock-around-the-world'
|
30
|
+
}
|
31
|
+
aws_escape_params(hash).should == {"foo"=>"Hello%20World", "foo%3Abar"=>"Rock-around-the-world"}
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should URI escape params" do
|
35
|
+
hash = {
|
36
|
+
'foo' => 'Hello World',
|
37
|
+
'foo:bar' => 'Rock-around-the-world'
|
38
|
+
}
|
39
|
+
uri_escape_params(hash, :ho => 'test').should == {"foo"=>"Hello%20World", "foo:bar"=>"Rock-around-the-world", "ho"=> "test"}
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should generate the string to sign" do
|
43
|
+
self.should_receive(:default_params).and_return("foo" => 'bar')
|
44
|
+
uri = '/123456789012/exampleQueue'
|
45
|
+
httpverb = "GET"
|
46
|
+
host = 'queue.amazonaws.com'
|
47
|
+
generate_string_to_sign(httpverb, host, uri, params = {}).should == ''
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should generate the query using action ListQueues" do
|
51
|
+
self.should_receive(:default_params).and_return("foo" => 'bar')
|
52
|
+
self.should_receive(:url_path).and_return('/123456789012/exampleQueue')
|
53
|
+
action = "ListQueues"
|
54
|
+
params = { 'QueueNamePrefix' => 'exampleQueue' }
|
55
|
+
generate_query(action, params).should == ''
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
LAME_ROOT = File.join(File.dirname(__FILE__), '..')
|
2
|
+
ROOT = File.join(LAME_ROOT, "/spec/examples")
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
|
5
|
+
require 'time'
|
6
|
+
require 'lib/lamed/aws/aws'
|
7
|
+
|
8
|
+
include AWS
|
9
|
+
describe "Return time object in xmlschema format" do
|
10
|
+
it "should return a time string in xml schema format" do
|
11
|
+
time_xml.should == Time.now.utc.xmlschema
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
#LAME_ROOT = File.join(File.dirname(__FILE__), '..')
|
2
|
+
#ROOT = File.join(LAME_ROOT, "/spec/examples")
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
|
5
|
+
|
6
|
+
ENV['AMAZON_ACCESS_KEY_ID'] = 'THISISTHEACCESSKEYYO'
|
7
|
+
ENV['AMAZON_SECRET_ACCESS_KEY'] = 'THISISTHESECRETACCESSKEYYEAHBOISHOOBIDOO'
|
8
|
+
|
9
|
+
require 'lib/lamed/aws/aws'
|
10
|
+
require 'lib/lamed/aws/authentication'
|
11
|
+
require 'lib/lamed/aws/sqs'
|
12
|
+
require 'spec_helper.rb'
|
13
|
+
|
14
|
+
include Aws
|
15
|
+
|
16
|
+
describe Aws::Sqs::Queue do
|
17
|
+
end
|
18
|
+
=begin
|
19
|
+
#it "should initialize a queue" do
|
20
|
+
# sqs = Sqs::Queue.new('prod_scs_completed_imports')
|
21
|
+
#end
|
22
|
+
|
23
|
+
before(:each) do
|
24
|
+
@sqs = Sqs::Queue.new()
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should generate a request hash" do
|
28
|
+
@sqs.generate_request('ListQueues').should == {
|
29
|
+
"Action" => "ListQueues",
|
30
|
+
"SignatureMethod" => "HmacSHA256",
|
31
|
+
"AWSAccessKeyId" => ENV['AMAZON_ACCESS_KEY_ID'],
|
32
|
+
"SignatureVersion" => "2",
|
33
|
+
"Expires" => @sqs.expires,
|
34
|
+
"Version" => "2009-02-01"
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should generate the string that will be signed" do
|
39
|
+
params = {
|
40
|
+
"Action" => "ListQueues",
|
41
|
+
"SignatureMethod" => "HmacSHA256",
|
42
|
+
"AWSAccessKeyId" => ENV['AMAZON_ACCESS_KEY_ID'],
|
43
|
+
"SignatureVersion" => "2",
|
44
|
+
"Expires" => "2010-02-10T21:24:40Z",
|
45
|
+
"Version" => "2009-02-01"
|
46
|
+
}
|
47
|
+
@sqs.generate_string_to_sign(:get, 'queue.amazonaws.com', '/', params).should == "GET\nqueue.amazonaws.com\n/\nAWSAccessKeyId=" +
|
48
|
+
"THISISTHEACCESSKEYYO&Action=ListQueues&Expires=" +
|
49
|
+
"2010-02-10T21%3A24%3A40Z&SignatureMethod=" +
|
50
|
+
"HmacSHA256&SignatureVersion=2&Version=2009-02-01"
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should generate a request signature" do
|
54
|
+
string_to_sign = "GET\nqueue.amazonaws.com\n/\nAWSAccessKeyId=" +
|
55
|
+
"1NK7GFJZMZPXRPE6S802&Action=ListQueues&Expires=" +
|
56
|
+
"2010-02-10T21%3A24%3A40Z&SignatureMethod=" +
|
57
|
+
"HmacSHA256&SignatureVersion=2&Version=2009-02-01"
|
58
|
+
@sqs.aws_signature(string_to_sign).should == 'UyAhOaBN7ye4GQ2lhgY3aYGUWy3Rb64S6Y6T/u/vb5o='
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should generate a SQS query hash with queue list request" do
|
62
|
+
@list_queue_query_string = @sqs.generate_query("ListQueues", 'QueueNamePrefix' => 'prod')
|
63
|
+
@list_queue_query_string.should =~ /Action=ListQueues&SignatureMethod=HmacSHA256&AWSAccessKeyId=THISISTHEACCESSKEYYO&SignatureVersion=2&Expires=/
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should create a new queue" do
|
67
|
+
@sqs.create("test_scs_completed_imports").inspect.should =~ /CreateQueueResponse/
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should list a queue's attribute" do
|
71
|
+
@sqs.attributes.inspect.should =~ /GetQueueAttributesResponse/
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should get a url path for a SQS queue" do
|
75
|
+
@sqs.path.should == '/002611861940/test_scs_completed_imports'
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should send a message" do
|
79
|
+
msg = "This is a test"
|
80
|
+
@sqs.send(msg).inspect.should =~ /SendMessageResponse/
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should receive the test message" do
|
84
|
+
@sqs.receive
|
85
|
+
message = sqs.message
|
86
|
+
@@receipt_handle = message["ReceiptHandle"]
|
87
|
+
message.inspect.should =~ /MessageId/
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should delete the message from the queue" do
|
91
|
+
receipt_handle = @@receipt_handle
|
92
|
+
@sqs.delete(receipt_handle).inspect.should =~ /DeleteMessageResponse/
|
93
|
+
end
|
94
|
+
end
|
95
|
+
=end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
LAME_ROOT = File.join(File.dirname(__FILE__), '..')
|
2
|
+
#ROOT = File.join(LAME_ROOT, "/spec/examples")
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
|
5
|
+
require 'rack'
|
6
|
+
require 'spec_helper'
|
7
|
+
require 'lib/lamed/model'
|
8
|
+
require 'lib/lamed/helper'
|
9
|
+
require 'lib/lamed/controller'
|
10
|
+
|
11
|
+
module Lamed
|
12
|
+
|
13
|
+
describe Controller do
|
14
|
+
|
15
|
+
it "Controller should exist" do
|
16
|
+
Controller.should == Lamed::Controller
|
17
|
+
end
|
18
|
+
|
19
|
+
it "Controller should have instance methods" do
|
20
|
+
Controller.instance_methods(false).sort.should == [:call, :content_type, :params, :req_params, :request, :response, :self_path, :uri, :user_agent]
|
21
|
+
end
|
22
|
+
|
23
|
+
it "Controller should have methods" do
|
24
|
+
Controller.methods(false).sort.should == []
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:controller) { Controller.new }
|
28
|
+
let(:env) { { "GATEWAY_INTERFACE"=>"CGI/1.1", "PATH_INFO"=>"", "QUERY_STRING"=>"hello=test&foo=bar",
|
29
|
+
"REMOTE_ADDR"=>"127.0.0.1", "REMOTE_HOST"=>"radio.local", "REQUEST_METHOD"=>"GET",
|
30
|
+
"REQUEST_URI"=>"http://localhost:9292/hello_world?hello=test&foo=bar", "SCRIPT_NAME"=>"/hello_world",
|
31
|
+
"SERVER_NAME"=>"localhost", "SERVER_PORT"=>"9292", "SERVER_PROTOCOL"=>"HTTP/1.1",
|
32
|
+
"SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/1.9.1/2009-12-07)", "HTTP_HOST"=>"localhost:9292",
|
33
|
+
"HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7",
|
34
|
+
"HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "HTTP_ACCEPT_LANGUAGE"=>"en-us,en;q=0.5",
|
35
|
+
"HTTP_ACCEPT_ENCODING"=>"gzip,deflate", "HTTP_ACCEPT_CHARSET"=>"UTF-8,*", "HTTP_KEEP_ALIVE"=>"300",
|
36
|
+
"HTTP_CONNECTION"=>"keep-alive", "HTTP_CACHE_CONTROL"=>"max-age=0", "rack.version"=>[1, 0],
|
37
|
+
"rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "rack.url_scheme"=>"http",
|
38
|
+
"HTTP_VERSION"=>"HTTP/1.1", "REQUEST_PATH"=>"/hello_world" } }
|
39
|
+
|
40
|
+
before(:each) do
|
41
|
+
controller.stub(:env).and_return(env)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "request_params" do
|
45
|
+
controller.req_params.should == {"GATEWAY_INTERFACE"=>"CGI/1.1", "PATH_INFO"=>"", "QUERY_STRING"=>"hello=test&foo=bar",
|
46
|
+
"REMOTE_ADDR"=>"127.0.0.1", "REMOTE_HOST"=>"radio.local", "REQUEST_METHOD"=>"GET", "REQUEST_URI"=>"http://localhost:9292/hello_world?hello=test&foo=bar",
|
47
|
+
"SCRIPT_NAME"=>"/hello_world", "SERVER_NAME"=>"localhost", "SERVER_PORT"=>"9292", "SERVER_PROTOCOL"=>"HTTP/1.1",
|
48
|
+
"SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/1.9.1/2009-12-07)", "HTTP_HOST"=>"localhost:9292",
|
49
|
+
"HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7",
|
50
|
+
"HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "HTTP_ACCEPT_LANGUAGE"=>"en-us,en;q=0.5",
|
51
|
+
"HTTP_ACCEPT_ENCODING"=>"gzip,deflate", "HTTP_ACCEPT_CHARSET"=>"UTF-8,*", "HTTP_KEEP_ALIVE"=>"300", "HTTP_CONNECTION"=>"keep-alive",
|
52
|
+
"HTTP_CACHE_CONTROL"=>"max-age=0", "rack.version"=>[1, 0], "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false,
|
53
|
+
"rack.url_scheme"=>"http", "HTTP_VERSION"=>"HTTP/1.1", "REQUEST_PATH"=>"/hello_world"}
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should set content type" do
|
57
|
+
controller.content_type('text/html').should == 'text/html'
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should get user_agent" do
|
61
|
+
controller.user_agent.should == 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7'
|
62
|
+
end
|
63
|
+
|
64
|
+
it "get uri" do
|
65
|
+
controller.uri(env["REQUEST_PATH"]).should == [:hello_world]
|
66
|
+
end
|
67
|
+
|
68
|
+
it "get params" do
|
69
|
+
controller.params(env["QUERY_STRING"]).should == {:hello=>"test", :foo=>"bar"}
|
70
|
+
end
|
71
|
+
|
72
|
+
it "set path" do
|
73
|
+
controller.self_path('/usr/pub').should == '/usr/pub'
|
74
|
+
end
|
75
|
+
|
76
|
+
before(:each) do
|
77
|
+
controller.stub(:render).and_return('Hello World')
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should return a response" do
|
81
|
+
controller.response.should == 'Hello World'
|
82
|
+
end
|
83
|
+
|
84
|
+
it "Controller.call" do
|
85
|
+
controller.call.should == [200, {"Content-Type"=>"text/html"}, ["Hello World"]]
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
LAME_ROOT = File.join(File.dirname(__FILE__), '..')
|
2
|
+
ROOT = File.join(LAME_ROOT, "/spec/examples")
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
|
5
|
+
require 'rack'
|
6
|
+
require 'lib/lamed/initializer'
|
7
|
+
require 'spec/examples/ext/models/bar_model'
|
8
|
+
|
9
|
+
|
10
|
+
describe "Initialize all Lamed Objects" do
|
11
|
+
it "should initialize the logger to STDERR" do
|
12
|
+
Lamed.logger.level.should == 0
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should initialize options to opts" do
|
16
|
+
Lamed.opts.should == {:main_cache=>["127.0.0.1:11211"], :redis_host=>"127.0.0.1", :redis_port=>6389, :http_procs=>1,
|
17
|
+
:workers=>1, :port=>3000, :run_as=>"reco", :pid=>"/var/run/", :logs=>"/var/log/nutsie_radio",
|
18
|
+
:rotate=>"daily"}
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should initialize the Controller, Lib, and Model objects" do
|
22
|
+
Lamed::Model.constants.should == [:BarModel, :FooModel]
|
23
|
+
Lamed::Controller.constants.sort.should == [:HelloWorld, :Lamest, :BarModel, :FooModel, :VERSION, :Cascade, :Chunked,
|
24
|
+
:ConditionalGet, :ContentLength, :ContentType, :File, :Deflater, :Directory,
|
25
|
+
:ForwardRequest, :Handler, :Head, :Lint, :Lock, :MethodOverride, :Mime,
|
26
|
+
:Recursive, :Reloader, :ShowStatus, :Static, :URLMap, :MockRequest,
|
27
|
+
:MockResponse, :Response, :Auth, :Session, :Adapter, :Builder, :CommonLogger,
|
28
|
+
:Utils, :Request, :ShowExceptions, :Template, :ContextMiss, :Context].sort
|
29
|
+
Object.constants.include?(:FooLib).should == true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe BarModel do
|
34
|
+
it "should load BarModel" do
|
35
|
+
BarModel.new.inspect.should =~ /BarModel @id=nil @title=nil/
|
36
|
+
BarModel.instance_variables.should == [:@valid, :@base_model, :@storage_names, :@default_order, :@descendants, :@relationships, :@properties,
|
37
|
+
:@field_naming_conventions, :@paranoid_properties, :@resource_methods]
|
38
|
+
end
|
39
|
+
|
40
|
+
it "return title request" do
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
LAME_ROOT = File.join(File.dirname(__FILE__), '..')
|
2
|
+
ROOT = File.join(LAME_ROOT, "/spec/examples")
|
3
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
|
4
|
+
|
5
|
+
require 'spec_helper'
|
6
|
+
require 'lib/lamed/model'
|
7
|
+
|
8
|
+
module Lamed
|
9
|
+
describe Model do
|
10
|
+
|
11
|
+
it "Model should exist" do
|
12
|
+
Model.should == Lamed::Model
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have instance methods" do
|
16
|
+
Model.instance_methods(false).should == []
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have methods" do
|
20
|
+
Model.methods(false).should == []
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe DM do
|
25
|
+
|
26
|
+
let(:dm) { DM.new(:host => 'localhost') }
|
27
|
+
|
28
|
+
it "should intialize DM" do
|
29
|
+
#dm = DM.new(:host => 'localhost')
|
30
|
+
dm.inspect.should =~ /Lamed/
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should connect to the database with defaults" do
|
34
|
+
dm.connect.inspect.should =~ /DataMapper::Adapters::MysqlAdapter/
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe MySQL do
|
39
|
+
|
40
|
+
it "should initialize DM"
|
41
|
+
end
|
42
|
+
end
|
@@ -93,7 +93,7 @@ module Lamed
|
|
93
93
|
|
94
94
|
it "should load up controllers" do
|
95
95
|
ObjectLoader.load_controller_object
|
96
|
-
Lamed.constants.should == [:Helper, :Model, :MySQL, :Controller, :ObjectLoader]
|
96
|
+
Lamed.constants.should == [:Helper, :Model, :DM, :MySQL, :Controller, :ObjectLoader]
|
97
97
|
Lamed::Controller.constants.sort.should == [:Adapter, :Auth, :Builder, :Cascade, :Chunked, :CommonLogger,
|
98
98
|
:ConditionalGet, :ContentLength, :ContentType, :Context, :ContextMiss,
|
99
99
|
:Deflater, :Directory, :File, :ForwardRequest, :Handler, :Head,
|
@@ -106,10 +106,8 @@ module Lamed
|
|
106
106
|
|
107
107
|
it "should load up models" do
|
108
108
|
ObjectLoader.load_model_object
|
109
|
-
Lamed.constants.should == [:Helper, :Model, :MySQL, :Controller, :ObjectLoader]
|
109
|
+
Lamed.constants.should == [:Helper, :Model, :DM, :MySQL, :Controller, :ObjectLoader]
|
110
110
|
Lamed::Model.constants.should == [:BarModel, :FooModel]
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
114
|
-
|
111
|
+
end
|
112
|
+
end
|
115
113
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lamed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lee Chang
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-04-15 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -50,6 +50,9 @@ files:
|
|
50
50
|
- VERSION
|
51
51
|
- lamed.gemspec
|
52
52
|
- lib/lamed.rb
|
53
|
+
- lib/lamed/aws/authentication.rb
|
54
|
+
- lib/lamed/aws/aws.rb
|
55
|
+
- lib/lamed/aws/sqs.rb
|
53
56
|
- lib/lamed/controller.rb
|
54
57
|
- lib/lamed/helper.rb
|
55
58
|
- lib/lamed/initializer.rb
|
@@ -69,10 +72,14 @@ files:
|
|
69
72
|
- spec/examples/ext/views/lamest/bar.mustache
|
70
73
|
- spec/examples/ext/views/lamest/foo.mustache
|
71
74
|
- spec/examples/lib/foo_lib.rb
|
72
|
-
- spec/
|
73
|
-
- spec/
|
74
|
-
- spec/
|
75
|
-
- spec/
|
75
|
+
- spec/lamed/aws/authentication_spec.rb
|
76
|
+
- spec/lamed/aws/spec.rb
|
77
|
+
- spec/lamed/aws/sqs_spec.rb
|
78
|
+
- spec/lamed/controller_spec.rb
|
79
|
+
- spec/lamed/helper_spec.rb
|
80
|
+
- spec/lamed/initializer_spec.rb
|
81
|
+
- spec/lamed/model_spec.rb
|
82
|
+
- spec/lamed/object_loader_spec.rb
|
76
83
|
- spec/spec.opts
|
77
84
|
- spec/spec_helper.rb
|
78
85
|
has_rdoc: true
|
@@ -110,8 +117,12 @@ test_files:
|
|
110
117
|
- spec/examples/ext/models/bar_model.rb
|
111
118
|
- spec/examples/ext/models/foo_model.rb
|
112
119
|
- spec/examples/lib/foo_lib.rb
|
113
|
-
- spec/
|
114
|
-
- spec/
|
115
|
-
- spec/
|
116
|
-
- spec/
|
120
|
+
- spec/lamed/aws/authentication_spec.rb
|
121
|
+
- spec/lamed/aws/spec.rb
|
122
|
+
- spec/lamed/aws/sqs_spec.rb
|
123
|
+
- spec/lamed/controller_spec.rb
|
124
|
+
- spec/lamed/helper_spec.rb
|
125
|
+
- spec/lamed/initializer_spec.rb
|
126
|
+
- spec/lamed/model_spec.rb
|
127
|
+
- spec/lamed/object_loader_spec.rb
|
117
128
|
- spec/spec_helper.rb
|
data/spec/initializer_spec.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
LAME_ROOT = File.join(File.dirname(__FILE__), '..')
|
2
|
-
ROOT = File.join(LAME_ROOT, "/spec/examples")
|
3
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
|
4
|
-
|
5
|
-
require 'rack'
|
6
|
-
require 'lib/lamed/initializer'
|
7
|
-
|
8
|
-
|
9
|
-
describe "Initialize all Lamed Objects" do
|
10
|
-
it "should initialize the logger to STDERR" do
|
11
|
-
Lamed.logger.level.should == 0
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should initialize the Controller, Lib, and Model objects" do
|
15
|
-
Lamed::Model.constants.should == [:BarModel, :FooModel]
|
16
|
-
Lamed::Controller.constants.sort.should == [:HelloWorld, :Lamest, :BarModel, :FooModel, :VERSION, :Cascade, :Chunked,
|
17
|
-
:ConditionalGet, :ContentLength, :ContentType, :File, :Deflater, :Directory,
|
18
|
-
:ForwardRequest, :Handler, :Head, :Lint, :Lock, :MethodOverride, :Mime,
|
19
|
-
:Recursive, :Reloader, :ShowStatus, :Static, :URLMap, :MockRequest,
|
20
|
-
:MockResponse, :Response, :Auth, :Session, :Adapter, :Builder, :CommonLogger,
|
21
|
-
:Utils, :Request, :ShowExceptions, :Template, :ContextMiss, :Context].sort
|
22
|
-
Object.constants.include?(:FooLib).should == true
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
|