-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodels.rb
164 lines (137 loc) · 7.22 KB
/
models.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
require 'rubygems'
require 'sinatra'
require 'dm-core'
require 'dm-timestamps'
require 'dm-aggregates'
require 'dm-migrations'
require 'uri'
# --------------------------------------------------
# Model
# --------------------------------------------------
DataMapper::setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/alias.db")
class User
include DataMapper::Resource
property :id, Serial
property :email, String, :length => 255
property :nickname, String, :length => 255
property :identifier, String, :length => 255
property :photo_url, String, :length => 255
has n, :aliases
def self.find(identifier)
u = first(:identifier => identifier)
u = new(:identifier => identifier) if u.nil?
return u
end
end
class Command
include DataMapper::Resource
property :id, Serial
property :name, Text
property :desc, Text
property :url, Text
def self.basic_commands
basic_commands = {
':help' => {:desc => 'Show a list of all available commands', :url=>'/help'},
':login' => {:desc => 'Login using your twitter account', :url=>'/signin_with_twitter'},
':logout' => {:desc => 'Logout', :url=>'/signout'},
':alias' => {:desc => 'Show all aliases available', :url=>'/alias'},
':addalias' => {:desc => 'Create a new alias ', :url=>'/addalias'}
}
end
def self.url(p_name)
record = first(:name => p_name)
record ? record.url : nil
end
end
class Alias
include DataMapper::Resource
property :id, Serial
property :alias, Text, :required => true
property :url, Text, :required => true
property :desc, Text, :default => 'Not Available'
property :created_at, DateTime
property :updated_at, DateTime
belongs_to :user
def self.basic_aliases
basic_aliases = {
:g => {:desc => 'Search Google for {query}', :url=>'http://www.google.com/search?q={query}'},
:b => {:desc => 'Search Bing for {query}', :url=>'http://www.bing.com/search?q={query}'},
:y => {:desc => 'Search Yahoo! for {query}', :url=>'search.yahoo.com/search?p={query}'},
:gl => {:desc => 'I am feeling lucky for {query}', :url=>'http://www.google.com/search?btnI=I2+Feeling+Lucky&q={query}'},
:gd => {:desc => 'Open Google Docs or Search Google Docs for {query}', :url=>'https://docs.google.com/?ui%3D1<mpl=homepage#search/{query}'},
:gi => {:desc => 'Search Google Images for {query}',:url=>'http://images.google.com/search?q={query}&biw=1276&bih=702&tbm=isch'},
:gm => {:desc => 'Search Google Maps for {query}', :url=>'http://maps.google.com/maps?q={query}'},
:gt => {:desc => 'Translate {query}', :url=>'http://translate.google.com/?text={query}'},
:gr => {:desc => 'Open Google Reader', :url=>'http://reader.google.com'},
:gml => {:desc => 'Open GMail', :url=>'http://mail.google.com'},
:gn => {:desc => 'Open Google News or Search News for {query}', :url=>'http://www.google.com/search?aq=f&hl=en&gl=au&tbm=nws&btnmeta_news_search=1&q={query}'},
:utb => {:desc => 'Open Youtube or Search Videos for {query}', :url=>'http://www.youtube.com/results?search_query={query}'},
:am => {:desc => 'Open Amazon or Search Books for {query}', :url=>'http://www.amazon.com/s?url=search-alias=aps&field-keywords={query}'},
:weather => {:desc => 'Weather for {query}', :url=>'http://weather.yahoo.com/search/weather?location={query}'},
:tw => {:desc => 'Open Twitter or search users for {query}', :url=>'http://twitter.com/#!/{query}'},
:twt => {:desc => 'Search Twitter for {query}', :url=>'http://twitter.com/#!/search/{query}'},
:wiki => {:desc => 'Search Wikipedia for {query}', :url=>'http://en.wikipedia.org/wiki/{query_}'},
:imdb => {:desc => 'Search IMDB for {query}', :url=>'http://www.imdb.com/find?s=all&q={query}'},
:rt => {:desc => 'Search Rotten Tomatoes for {query}', :url=>'http://www.rottentomatoes.com/m/{query_}'},
:ebay => {:desc => 'Search Ebay for {query}', :url=>'http://www.ebay.com/sch/?_nkw={query}'},
:lin => {:desc => 'Open Linkedin or search users for {query}', :url=>'http://www.linkedin.com/commonSearch?type=people&keywords={query}'},
:fb => {:desc => 'Open Facebook or search users for {query}', :url=>'http://www.facebook.com/search/?q={query}'},
:flkr => {:desc => 'Open Flickr or search images for {query}', :url=>'http://www.flickr.com/search/?q={query}&w=all'}
}
# :cba => 'https://www.my.commbank.com.au/netbank/Logon/Logon.aspx',
# :as => 'http://www.as.com',
# :rdoc => 'http://www.ruby-doc.org/core/classes/{query}.html',
end
def self.alias?(p_alias)
first(:alias => p_alias)? true : false
end
def self.url(p_alias)
record = first(:alias => p_alias)
record ? record.url : nil
end
def self.fallback_url(param, params)
fallback_url = 'http://www.google.com/search?q={query}'
puts "param= #{param}"
query = param
if params != nil && params.length > 0
# if params.length > 1
query = query + "+" + params.join("+")
#else
# query = query + "+" + params[0]
#end
query = URI.escape(query, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
end
inject_query(fallback_url,query.split)
end
def self.inject_query(url, queries)
if queries.length == 0 || queries == nil
return (url.include? "{query}" or url.include? "{query_}")? remove_param_from_url(url,"{query}","{query_}") : url
else
if url.include? "{query}"
url.gsub('{query}', build_query_to_replace("+",queries))
elsif url.include? "{query_}"
url.gsub('{query_}', build_query_to_replace("_",queries))
else
puts "URL= #{url} does not contain any known match for parameters."
"http://www.google.com"
end
end
end
def self.build_query_to_replace(separator, queries)
if queries.length > 1
queries.join(separator)
else
queries[0]
end
end
def self.remove_param_from_url(url, *matches)
matches.each do |match|
puts "match=#{match}"
url = url.gsub(match,'') # making the URI valid
end
uri_split = URI.split(url)
uri_split[0] + "://" + uri_split[2] # protocol + domain
end
end
DataMapper.finalize.auto_upgrade!
#DataMapper.finalize.auto_migrate!