Guest User

Untitled

a guest
Nov 20th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.51 KB | None | 0 0
  1. require 'hashie'
  2.  
  3. module VK
  4. module Resolver
  5. NAMESPACES = ['users', 'friends']
  6.  
  7. def method_missing(method_name, *args, &block)
  8. method_name = method_name.to_s
  9.  
  10. if NAMESPACES.include?(method_name)
  11. # called from Client
  12. Namespace.new(method_name, resolver: resolver)
  13. else
  14. # called from Namespace or one-level method
  15. Method.new(method_name, resolver: resolver).call(args.first || {}, &block)
  16. end
  17. end
  18.  
  19. private
  20. def resolver
  21. Hashie::Mash.new(name: @name, token: token)
  22. end
  23. end
  24.  
  25. class Client
  26. include Resolver
  27.  
  28. attr_reader :token
  29.  
  30. def initialize(token = nil)
  31. @token = token
  32. end
  33. end
  34.  
  35. module Resolvable
  36. attr_reader :name
  37.  
  38. def initialize(name, options = {})
  39. @name = name
  40. @resolver = options.delete(:resolver)
  41. end
  42.  
  43. def token
  44. @resolver.token
  45. end
  46. end
  47.  
  48. class Namespace
  49. include Resolvable
  50. include Resolver
  51. end
  52.  
  53. class Method
  54. include Resolvable
  55.  
  56. def call(args = {}, &block)
  57. # response = API.call(full_name, args, token)
  58. # Result.process(response, type, block)
  59. [full_name, args, token]
  60. end
  61.  
  62. private
  63. def full_name
  64. [@resolver.name, @name].compact.map(&:to_s).join('.')
  65. end
  66.  
  67. def type
  68. @name =~ PREDICATE_NAMES ? :boolean : :anything
  69. end
  70. end
  71. end
  72.  
  73. p VK::Client.new.users.get(uid: 1)
  74. p VK::Client.new.get_profiles(token: 'trololo')
  75. p VK::Client.new('trololo').friends.get_by_id(uids: [1, 2, 3])
Add Comment
Please, Sign In to add comment