Ruby unexpected end error in dynamo_db_access.rb
In my ruby application I am using dynamoDB as database, now the database related pages are not working in my application, the log file says
/home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': /home/ubuntu/game/services/lib/dynamo_db_access.rb:126: syntax error, unexpected $end, expecting keyword_end (SyntaxError)
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/ubuntu/game/services/model/model.rb:1:in `<top (required)>'
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/ubuntu/game/services/model/email.rb:1:in `<top (required)>'
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from service.rb:4:in `<main>'
/home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': /home/ubuntu/game/services/lib/dynamo_db_access.rb:126: syntax error, unexpected $end, expecting keyword_end (SyntaxError)
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/ubuntu/game/services/model/model.rb:1:in `<top (required)>'
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/ubuntu/game/services/model/email.rb:1:in `<top (required)>'
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from /home/ubuntu/.rvm/rubies/ruby-1.9.3-p448/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from service.rb:4:in `<main>'
but i found everything was in correct syntax and this is my dynamo_db_access.rb file
require 'aws'
class DynamoDBAccess
def initialize
@ACCESS_KEY = ENV['game_AWS_ACCESS_KEY']
@SECRET_KEY = ENV['game_AWS_SECRET_KEY']
@table_prefix = (ENV['game_ENV'] == 'production') ? "" : "dev_"
AWS.config(
:access_key_id => @ACCESS_KEY,
:secret_access_key => @SECRET_KEY
)
@db = AWS::DynamoDB.new
end
def get_item(table_name,hash_value,range_value=nil)
begin
item = get_item_object(table_name,hash_value,range_value)
item.attributes.to_h
rescue => e
return nil
end
end
def delete_item(table_name,hash_value,range_value=nil)
begin
item = get_item_object(table_name,hash_value,range_value)
if item
item.delete
true
else
false
end
rescue => e
return false
end
end
def create_item(table_name,hash)
begin
table = get_table(table_name)
item = table.items.create(hash)
return true
rescue => e
puts e.message
puts e.backtrace
return false
end
end
def update_item(table_name,hash_value,hash,range_value=nil)
begin
item = get_item_object(table_name,hash_value,range_value)
hash.each_key{|k|
item.attributes.update{|u|
if hash[k] == nil
u.delete k.to_s
else
u.set k.to_s => hash[k]
end
}
}
return true
rescue => e
return false
end
end
def get_hash_values(table_name)
tab = get_table(table_name)
tab.items.collect{|i| i.hash_value}
end
def get_all_items(table_name)
tab = get_table(table_name)
arr = []
tab.items.each{|item|
arr << item.attributes.to_h
}
arr
end
def delete_many(table_name,values)
tab = get_table(table_name)
tab.batch_write(
:delete => values
)
end
def get_many(table_name,values)
tab = get_table(table_name)
arr = []
tab.batch_get(:all,values).each{|a| arr << a}
arr
end
def get_with_range_less_than(table_name,hash_value,range_limit)
arr = []
tab = get_table(table_name)
tab.items.query(:hash_value => hash_value,:range_less_than => range_limit).each{|item|
arr << item.attributes.to_h
}
arr
end
def get_with_range_greater_than(table_name,hash_value,range_limit)
arr = []
tab = get_table(table_name)
tab.items.query(:hash_value => hash_value,:range_greater_than => range_limit).each{|item|
arr << item.attributes.to_h
}
arr
end
private
def get_item_object(table_name,hash_value,range_value=nil)
item = get_table(table_name).items.at(hash_value,range_value)
end
def get_table(table_name)
table_name = @table_prefix + table_name
@db.tables[table_name].load_schema
end
end
where does the error occur? what's the problem with my code?
for reference (if necessary)
model.rb file
require File.dirname(__FILE__)+'/../lib/dynamo_db_access'
class Model
def initialize
@key = "id"
@db = DynamoDBAccess.new
end
def create(hash)
hash = process_hash_before_create(hash)
if required_present?(hash)
key = hash[@key]
range = hash[@range]
if !(get(key,range).keys.length > 0)
if @db.create_item(@table_name,hash)
item = get(key,range)
handle_create_lookups(item)
process_after_create(item)
item
else
false
end
else
raise NameError
end
else
raise ArgumentError
end
end
def delete(hash_value,range_value=nil)
item = get(hash_value,range_value)
process_before_delete(item)
if @db.delete_item(@table_name,hash_value,range_value)
handle_deleted_lookups(item)
handle_dependencies_on_delete(item)
process_after_delete(item)
true
else
false
end
end
def get(hash_value,range_value=nil)
@db.get_item(@table_name,hash_value,range_value)
end
def update(hash)
key_val = hash.delete(@key)
range_val = hash.delete(@range)
old = get(key_val,range_val)
if @db.update_item(@table_name,key_val,hash,range_val)
handle_update_lookups(old,hash)
true
else
false
end
end
def key
@key
end
def get_key_from_lookup(att_name,value)
@db.get_item("#{att_name}_#{@table_name}",value)["#{@table_name}_#{@key}"]
end
def lookup(att_name,value)
key = @db.get_item("#{att_name}_#{@table_name}",value)["#{@table_name}_#{@key}"]
get(key)
end
def get_dependency(name,value,range=nil)
@db.get_item("#{@table_name}_#{name}",value,range)
end
def get_dependencies(name,values)
@db.get_many("#{@table_name}_#{name}",values)
end
def get_dependencies_with_range_less_than(name,value,range_value)
@db.get_with_range_less_than("#{@table_name}_#{name}",value,range_value)
end
def get_dependencies_with_range_greater_than(name,value,range_value)
@db.get_with_range_greater_than("#{@table_name}_#{name}",value,range_value)
end
def delete_dependency(name,value,range=nil)
@db.delete_item("#{@table_name}_#{name}",value,range)
end
def delete_dependencies(name,values)
@db.delete_many("#{@table_name}_#{name}",values)
end
def create_dependency(name,hash)
@db.create_item("#{@table_name}_#{name}",hash)
end
def update_dependency(name,hash,range=nil)
@db.delete_item("#{@table_name}_#{name}",hash["#{@table_name}_id"],range)
@db.create_item("#{@table_name}_#{name}",hash)
end
def get_hash_values
@db.get_hash_values(@table_name)
end
def get_all_items
@db.get_all_items(@table_name)
end
def delete_many(values)
@db.delete_many(@table_name,values)
end
def get_many(values)
@db.get_many(@table_name,values)
end
private
def required_present?(hash)
if hash[@key]
@required.each{|k|
if !hash.keys.include?(k)
return false
end
}
true
else
false
end
end
def handle_create_lookups(created_item)
@lookups.each{|d|
if @db.create_item("#{d}_#{@table_name}",{d => created_item[d],"#{@table_name}_#{@key}" => created_item[@key]})
next
else
return false
end
}
true
end
def handle_deleted_lookups(deleted_item)
@lookups.each{|d|
if @db.delete_item("#{d}_#{@table_name}",deleted_item[d])
next
else
return false
end
}
true
end
def handle_update_lookups(old,hash)
att_hash={}
hash.each_key{|k|
if @lookups.include?(k) && hash[k] != old[k]
#a dependent attribute has been changed
att_hash[k] = old[k]
end
}
att_hash.each_key{|k|
@db.delete_item("#{k}_#{@table_name}",att_hash[k])
@db.create_item("#{k}_#{@table_name}",{k => hash[k],"#{@table_name}_#{@key}" => old[@key]})
}
end
def handle_dependencies_on_delete(deleted_item)
key = deleted_item[@key]
@dependencies.each{|d|
@db.delete_item("#{@table_name}_#{d}",key)
}
end
def process_after_create(hash)
end
def process_after_delete(hash)
end
def process_before_delete(hash)
end
def process_hash_before_create(hash)
hash["created"] = Time.now.to_i
hash.keys.each{|k|
if(!hash[k] || hash[k].to_s.strip.length == 0)
hash.delete(k)
end
}
hash
end
end
and email.rb
require File.dirname(__FILE__)+'/model'
require 'digest/md5'
class Email < Model
def initialize
super
@table_name = "email"
@required = ["to","queued","template"]
@dependencies = []
@lookups = []
end
def process_hash_before_create(hash)
begin
hash["id"] = Digest::MD5.hexdigest("#{hash["to"]}#{hash["template"]}#{Time.now.to_s}")
return hash
rescue
return {}
end
end
def create(hash)
begin
super(hash)
rescue ArgumentError
raise ArgumentError, "All required parameters not supplied."
end
end
end
+3
source to share