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


1 answer


There is a solution in your question. the end is missing.



home / ubuntu / game / services / lib / dynamo_db_access.rb: 126: syntax error, unexpected $ end, expecting keyword_end (SyntaxError)

0


source







All Articles