Module: Rmega::Nodes::Factory

Extended by:
Factory
Included in:
Factory
Defined in:
lib/rmega/nodes/factory.rb

Constant Summary collapse

URL_REGEXP =
/(http.:\/\/[w\.]*mega\.[a-z\.]+\/\#[A-Z0-9\_\-\!\=]+)/i
FOLDER_URL_REGEXP =
/\#\F/

Instance Method Summary collapse

Instance Method Details

#build(session, data) ⇒ Object



27
28
29
30
# File 'lib/rmega/nodes/factory.rb', line 27

def build(session, data)
  type = Node::TYPES[data['t']].to_s
  return Nodes.const_get(type.capitalize).new(session, data)
end

#build_from_url(url, session = Session.new) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/rmega/nodes/factory.rb', line 32

def build_from_url(url, session = Session.new)
  public_handle, key = url.strip.split('!')[1, 2]

  raise "Invalid url or missing file key" unless key

  node = if url =~ FOLDER_URL_REGEXP
    nodes_data = session.request({a: 'f', c: 1, r: 1}, {n: public_handle})
    session.master_key = Utils.base64urldecode(key)
    session.storage.nodes = nodes_data['f'].map do |data|
      data["__n"] = public_handle
      Nodes::Factory.build(session, data)
    end
    session.storage.nodes[0]
  else
    data = session.request(a: 'g', g: 1, p: public_handle)
    Nodes::File.new(session, data)
  end

  node.instance_variable_set('@public_handle', public_handle)
  node.instance_variable_set('@public_url', url)

  return node
end

#url?(string) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/rmega/nodes/factory.rb', line 23

def url?(string)
  string.to_s =~ URL_REGEXP
end