Guest User

Untitled

a guest
Feb 21st, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1.  
  2. class PropKey
  3. class << self # Class methods
  4. def resource_id
  5. "5"
  6. end
  7. def type
  8. "2"
  9. end
  10. def creation_date
  11. "2005-03-02"
  12. end
  13. def getlastmodified
  14. "2006-10-03"
  15. end
  16. def displayname
  17. "test object"
  18. end
  19. def resourcetype
  20. "file"
  21. end
  22. def owner
  23. "mnutt"
  24. end
  25. def getcontenttype
  26. "text/html"
  27. end
  28. #Media property
  29. def getcontentlength
  30. 42
  31. end
  32. end
  33. end
  34.  
  35. module Properties
  36.  
  37. # Define properties that are shared by all resources.
  38. unless(const_defined?('DEFAULT_PROPERTIES'))
  39. DEFAULT_PROPERTIES = {:resource_id => {:key => PropKey.resource_id},
  40. :type => {:key => PropKey.type},
  41. :creation_date => {:key => PropKey.creation_date},
  42. :last_modified => {:key => PropKey.getlastmodified},
  43. :display_name => {:key => PropKey.displayname},
  44. :resource_type => {:key => PropKey.resourcetype},
  45. :owner => {:key => PropKey.owner},
  46. :content_type => {:key => PropKey.getcontenttype}}
  47. end
  48.  
  49. # Setup class instance variables. These are filled out by the
  50. # define_properties call right after the class methods definition.
  51. @property_names = {}
  52. @protected_properties = []
  53.  
  54. module ClassMethods
  55.  
  56. attr_accessor :property_names
  57.  
  58. # Defines valid properties for this class
  59. #
  60. def define_properties(props = {})
  61. props.each do |name, attr|
  62. module_eval <<-"end;"
  63. self.property_names[:#{name}] = attr[:key]
  64.  
  65. def #{name}=(value)
  66. @properties[:#{name}] = value
  67. end
  68.  
  69. def #{name}
  70. @properties[:#{name}]
  71. end
  72.  
  73. end;
  74. end
  75. end
  76.  
  77. end # End ClassMethods module
  78.  
  79. extend ClassMethods
  80.  
  81. # Add the class methods to the model it is being mixed into
  82. def self.append_features(klass)
  83. super
  84. klass.extend(ClassMethods)
  85. end
  86.  
  87. self.define_properties(DEFAULT_PROPERTIES)
  88.  
  89. end
  90.  
  91. class Media
  92. include Properties
  93.  
  94. define_properties :content_length => {:key => PropKey.getcontentlength}
  95.  
  96. end
  97.  
  98. # ==============================================================
  99. # Error:
  100. # NoMethodError: undefined method `[]=' for nil:NilClass
  101. # from ./mixins.rb:74:in `define_properties'
  102. # from ./mixins.rb:73:in `define_properties'
  103. # from ./mixins.rb:104
  104. # from (irb):1
Add Comment
Please, Sign In to add comment