Class: UserscriptsOrg

Inherits:
Object
  • Object
show all
Defined in:
lib/userscripts_org.rb

Defined Under Namespace

Classes: NotLoggedinError, Script, UserscriptsOrgError

Constant Summary collapse

VERSION =
"0.0.3"
BASE =
URI("http://userscripts.org/")

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ UserscriptsOrg

Returns a new instance of UserscriptsOrg.



18
19
20
21
22
# File 'lib/userscripts_org.rb', line 18

def initialize(config)
	@config  = OpenStruct.new(config)
	@agent   = WWW::Mechanize.new
	@uid     = nil
end

Instance Method Details

#create(content) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
# File 'lib/userscripts_org.rb', line 84

def create(content)
	@agent.get BASE + "/scripts/new"
	form = @agent.page.forms.find {|i| i.action == "/scripts/create" }
	form["which_source"] = "textarea"
	form["script[src]"]  = content
	@agent.submit(form, form.buttons.find {|i| i.name == "commit" })
	p @agent.page
	p @agent.page.uri

	get(@agent.page.uri.to_s[%r|/scripts/show/(\d+)|, 1])
end

#get(script) ⇒ Object



73
74
75
76
77
78
79
80
81
82
# File 'lib/userscripts_org.rb', line 73

def get(script)
	uid = script.respond_to?(:uid) ? script.uid : script
	@agent.get BASE + "/scripts/source/#{uid}.user.js"
	content = @agent.page.content
	Script.new({
		:uid     => uid,
		:name    => content[/@name\s+(.+)/, 1].chomp,
		:content => content,
	})
end

#listObject



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/userscripts_org.rb', line 41

def list
	check
	@agent.get(BASE + "/users/#{@uid}/scripts")
	@agent.page.links.map {|i|
		uid = i.href[%r|/scripts/show/(\d+)|, 1]
		uid ? Script.new(
			:uid  => uid.to_i,
			:name => i.text
		) : nil
	}.compact
end

#loginObject



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/userscripts_org.rb', line 28

def 
	# Login
	@agent.get(BASE + "/login")
	form = @agent.page.forms.find {|i| i.action == "/sessions" }
	form.    = @config.username
	form.password = @config.password
	@agent.submit(form, form.buttons.find {|i| i.name == "commit"})

	# Retreive user id
	@uid = @agent.page.links.find {|i| i.text == "public profile" }.href[%r|/users/(\d+)|, 1].to_i
	self
end

#logined?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/userscripts_org.rb', line 24

def logined?
	!!@uid
end

#update(name, content) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/userscripts_org.rb', line 53

def update(name, content)
	script = list.find {|i|
		i == name || i.name == name || i.uid == name
	}
	raise UserscriptsOrgError, "Script named #{name} is not found." if script.nil?
	@agent.get BASE + "/scripts/edit_src/#{script.uid}"

	form = @agent.page.forms.find {|i| i.action =~ %r|^/scripts/update_src/| }
	form["which_source"] = "textarea"
	form["script[src]"]  = content

	@agent.submit(form, form.buttons.find {|i| i.name == "commit"})

	date = (@agent.page.root/"//span[@class = 'date']").text.gsub(/^\s+|\s+$/, "")
	unless date == "Last update a few seconds ago"
		raise UserscriptsOrgError, "Update may failed"
	end
	script
end