ruby-bitly 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +34 -0
- data/README.rdoc +30 -13
- data/Rakefile +6 -3
- data/VERSION +1 -1
- data/bin/bitly +139 -12
- data/lib/ruby-bitly.rb +48 -33
- data/ruby-bitly.gemspec +14 -5
- metadata +55 -7
data/README
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
# This app is a simple bitly ruby client.
|
2
|
+
|
3
|
+
## Examples
|
4
|
+
bitly -s http://long-url.com.whatever/
|
5
|
+
bitly -e http://bit.ly/whatever
|
6
|
+
bitly --user-clicks http://bit.ly/whatever
|
7
|
+
bitly --global-clicks http://bit.ly/whatever
|
8
|
+
|
9
|
+
### Other examples:
|
10
|
+
bitly -q -s http://long-url.com.whatever/
|
11
|
+
bitly --verbose -e http://bit.ly/whatever
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
bitly [options] url
|
15
|
+
|
16
|
+
For help: bitly -h
|
17
|
+
|
18
|
+
## Options
|
19
|
+
-s, --shorten Shorten a long url
|
20
|
+
-e, --expand Expand a short bitly url
|
21
|
+
-u, --user-clicks Show user clicks from the short bitly url
|
22
|
+
-g, --global-clicks Show global clicks from the short bitly url
|
23
|
+
|
24
|
+
-h, --help Displays help message, then exit
|
25
|
+
-v, --version Display the version, then exit
|
26
|
+
-q, --quiet Output as little as possible, overrides verbose
|
27
|
+
-V, --verbose Verbose output
|
28
|
+
|
29
|
+
## Author
|
30
|
+
rafaeldx7 ~ rafaeldx7(a)gmail.com
|
31
|
+
|
32
|
+
## Copyright
|
33
|
+
Copyright (c) 2010 rafaeldx7. Licensed under the MIT License:
|
34
|
+
http://www.opensource.org/licenses/mit-license.php
|
data/README.rdoc
CHANGED
@@ -1,17 +1,34 @@
|
|
1
|
-
= ruby
|
1
|
+
= This app is a simple bitly ruby client.
|
2
2
|
|
3
|
-
|
3
|
+
== Examples
|
4
|
+
bitly -s http://long-url.com.whatever/
|
5
|
+
bitly -e http://bit.ly/whatever
|
6
|
+
bitly --user-clicks http://bit.ly/whatever
|
7
|
+
bitly --global-clicks http://bit.ly/whatever
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
* Make your feature addition or bug fix.
|
9
|
-
* Add tests for it. This is important so I don't break it in a
|
10
|
-
future version unintentionally.
|
11
|
-
* Commit, do not mess with rakefile, version, or history.
|
12
|
-
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
13
|
-
* Send me a pull request. Bonus points for topic branches.
|
9
|
+
Other examples:
|
10
|
+
bitly -q -s http://long-url.com.whatever/
|
11
|
+
bitly --verbose -e http://bit.ly/whatever
|
14
12
|
|
15
|
-
==
|
13
|
+
== Usage
|
14
|
+
bitly [options] url
|
16
15
|
|
17
|
-
|
16
|
+
For help: bitly -h
|
17
|
+
|
18
|
+
== Options
|
19
|
+
-s, --shorten Shorten a long url
|
20
|
+
-e, --expand Expand a short bitly url
|
21
|
+
-u, --user-clicks Show user clicks from the short bitly url
|
22
|
+
-g, --global-clicks Show global clicks from the short bitly url
|
23
|
+
|
24
|
+
-h, --help Displays help message, then exit
|
25
|
+
-v, --version Display the version, then exit
|
26
|
+
-q, --quiet Output as little as possible, overrides verbose
|
27
|
+
-V, --verbose Verbose output
|
28
|
+
|
29
|
+
== Author
|
30
|
+
rafaeldx7 ~ rafaeldx7(a)gmail.com
|
31
|
+
|
32
|
+
== Copyright
|
33
|
+
Copyright (c) 2010 rafaeldx7. Licensed under the MIT License:
|
34
|
+
http://www.opensource.org/licenses/mit-license.php
|
data/Rakefile
CHANGED
@@ -5,12 +5,15 @@ begin
|
|
5
5
|
require 'jeweler'
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
7
|
gem.name = "ruby-bitly"
|
8
|
-
gem.summary = %Q{bit.ly ruby client}
|
9
|
-
gem.description = %Q{bit.ly ruby client}
|
8
|
+
gem.summary = %Q{This is a simple bit.ly ruby client}
|
9
|
+
gem.description = %Q{This is a simple bit.ly ruby client}
|
10
10
|
gem.email = "rafaeldx7@gmail.com"
|
11
11
|
gem.homepage = "http://github.com/rafaeldx7/ruby-bitly"
|
12
12
|
gem.authors = ["rafaeldx7"]
|
13
|
-
gem.
|
13
|
+
gem.add_runtime_dependency "rest-client", "1.5.1"
|
14
|
+
gem.add_runtime_dependency "json_pure", "1.4.3"
|
15
|
+
gem.add_development_dependency "rake", "0.8.7"
|
16
|
+
gem.add_development_dependency "rspec", "1.3.0"
|
14
17
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
18
|
end
|
16
19
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/bin/bitly
CHANGED
@@ -1,19 +1,146 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This app is a simple bitly ruby client.
|
3
|
+
#
|
4
|
+
# == Examples
|
5
|
+
# bitly -s http://long-url.com.whatever/
|
6
|
+
# bitly -e http://bit.ly/whatever
|
7
|
+
# bitly --user-clicks http://bit.ly/whatever
|
8
|
+
# bitly --global-clicks http://bit.ly/whatever
|
9
|
+
#
|
10
|
+
# Other examples:
|
11
|
+
# bitly -q -s http://long-url.com.whatever/
|
12
|
+
# bitly --verbose -e http://bit.ly/whatever
|
13
|
+
#
|
14
|
+
# == Usage
|
15
|
+
# bitly [options] url
|
16
|
+
#
|
17
|
+
# For help: bitly -h
|
18
|
+
#
|
19
|
+
# == Options
|
20
|
+
# -s, --shorten Shorten a long url
|
21
|
+
# -e, --expand Expand a short bitly url
|
22
|
+
# -u, --user-clicks Show user clicks from the short bitly url
|
23
|
+
# -g, --global-clicks Show global clicks from the short bitly url
|
24
|
+
#
|
25
|
+
# -h, --help Displays help message, then exit
|
26
|
+
# -v, --version Display the version, then exit
|
27
|
+
# -q, --quiet Output as little as possible, overrides verbose
|
28
|
+
# -V, --verbose Verbose output
|
29
|
+
#
|
30
|
+
# == Author
|
31
|
+
# rafaeldx7 ~ rafaeldx7(a)gmail.com
|
32
|
+
#
|
33
|
+
# == Copyright
|
34
|
+
# Copyright (c) 2010 rafaeldx7. Licensed under the MIT License:
|
35
|
+
# http://www.opensource.org/licenses/mit-license.php
|
2
36
|
|
3
37
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
4
38
|
|
5
39
|
require 'ruby-bitly'
|
40
|
+
require 'optparse'
|
41
|
+
require 'rdoc/usage'
|
42
|
+
require 'ostruct'
|
43
|
+
require 'date'
|
6
44
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
45
|
+
class App
|
46
|
+
VERSION = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION'))
|
47
|
+
|
48
|
+
attr_reader :options
|
49
|
+
|
50
|
+
def initialize(arguments, stdin)
|
51
|
+
@arguments = arguments
|
52
|
+
@stdin = stdin
|
53
|
+
|
54
|
+
# Set defaults
|
55
|
+
@options = OpenStruct.new
|
56
|
+
@options.verbose = false
|
57
|
+
@options.quiet = false
|
58
|
+
end
|
59
|
+
|
60
|
+
# Parse options, check arguments, then process the command
|
61
|
+
def run
|
62
|
+
|
63
|
+
if parsed_options? && arguments_valid?
|
64
|
+
|
65
|
+
puts "Start at #{DateTime.now}\n\n" if @options.verbose
|
66
|
+
|
67
|
+
output_options if @options.verbose # [Optional]
|
68
|
+
|
69
|
+
process_arguments
|
70
|
+
puts process_command.to_s
|
71
|
+
|
72
|
+
puts "\nFinished at #{DateTime.now}" if @options.verbose
|
73
|
+
|
74
|
+
else
|
75
|
+
output_usage
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
|
82
|
+
def parsed_options?
|
83
|
+
|
84
|
+
# Specify options
|
85
|
+
opts = OptionParser.new
|
86
|
+
|
87
|
+
opts.on('-s', '--shorten') { @options.shorten = true }
|
88
|
+
opts.on('-e', '--expand') { @options.expand = true }
|
89
|
+
opts.on('-u', '--user-clicks') { @options.user_clicks = true }
|
90
|
+
opts.on('-g', '--global-clicks') { @options.global_clicks = true }
|
91
|
+
|
92
|
+
opts.on('-v', '--version') { output_version ; exit 0 }
|
93
|
+
opts.on('-h', '--help') { output_help }
|
94
|
+
opts.on('-V', '--verbose') { @options.verbose = true }
|
95
|
+
opts.on('-q', '--quiet') { @options.quiet = true }
|
96
|
+
|
97
|
+
opts.parse!(@arguments) rescue return false
|
98
|
+
|
99
|
+
process_options
|
100
|
+
true
|
101
|
+
end
|
102
|
+
|
103
|
+
# Performs post-parse processing on options
|
104
|
+
def process_options
|
105
|
+
@options.verbose = false if @options.quiet
|
106
|
+
end
|
107
|
+
|
108
|
+
def output_options
|
109
|
+
puts "Options:\n"
|
110
|
+
|
111
|
+
@options.marshal_dump.each do |name, val|
|
112
|
+
puts " #{name} = #{val}"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# True if required arguments were provided
|
117
|
+
def arguments_valid?
|
118
|
+
@arguments.length == 1 and (@options.shorten or @options.expand or @options.user_clicks or @options.global_clicks)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Setup the arguments
|
122
|
+
def process_arguments
|
123
|
+
end
|
124
|
+
|
125
|
+
def output_help
|
126
|
+
RDoc::usage() #exits app
|
127
|
+
end
|
128
|
+
|
129
|
+
def output_usage
|
130
|
+
RDoc::usage('usage') # gets usage from comments above
|
131
|
+
end
|
132
|
+
|
133
|
+
def output_version
|
134
|
+
puts "#{File.basename(__FILE__)} version #{VERSION}"
|
135
|
+
end
|
136
|
+
|
137
|
+
def process_command
|
138
|
+
return Bitly.shorten(@arguments[0]).short_url if @options.shorten
|
139
|
+
return Bitly.expand(@arguments[0]).long_url if @options.expand
|
140
|
+
return Bitly.clicks(@arguments[0]).user_clicks.to_s if @options.user_clicks
|
141
|
+
return Bitly.clicks(@arguments[0]).global_clicks.to_s if @options.global_clicks
|
142
|
+
end
|
17
143
|
end
|
18
144
|
|
19
|
-
|
145
|
+
app = App.new(ARGV, STDIN)
|
146
|
+
app.run
|
data/lib/ruby-bitly.rb
CHANGED
@@ -43,61 +43,76 @@ class Bitly
|
|
43
43
|
|
44
44
|
def shorten
|
45
45
|
unless read_only?
|
46
|
-
@response = Bitly.post_shorten(@long_url)
|
46
|
+
if @response = Bitly.post_shorten(@long_url)
|
47
|
+
|
48
|
+
@status_code = @response["status_code"]
|
49
|
+
@status_txt = @response["status_txt"]
|
50
|
+
@long_url = @response["data"]["long_url"]
|
51
|
+
@new_hash = @response["data"]["new_hash"]
|
52
|
+
@global_hash = @response["data"]["global_hash"]
|
53
|
+
@hash = @response["data"]["hash"]
|
54
|
+
@short_url = @response["data"]["url"]
|
55
|
+
|
56
|
+
read_only_now!
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def expand
|
62
|
+
if @response = Bitly.post_expand(@short_url)
|
47
63
|
|
64
|
+
@long_url = @response["data"]["expand"].first["long_url"]
|
65
|
+
@global_hash = @response["data"]["expand"].first["global_hash"]
|
66
|
+
@user_hash = @response["data"]["expand"].first["user_hash"]
|
48
67
|
@status_code = @response["status_code"]
|
49
68
|
@status_txt = @response["status_txt"]
|
50
|
-
@long_url = @response["data"]["long_url"]
|
51
|
-
@new_hash = @response["data"]["new_hash"]
|
52
|
-
@global_hash = @response["data"]["global_hash"]
|
53
|
-
@hash = @response["data"]["hash"]
|
54
|
-
@short_url = @response["data"]["url"]
|
55
69
|
|
56
70
|
read_only_now!
|
57
71
|
end
|
58
72
|
end
|
59
73
|
|
60
|
-
def
|
61
|
-
@response = Bitly.
|
74
|
+
def clicks
|
75
|
+
if @response = Bitly.get_clicks(@short_url)
|
62
76
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
77
|
+
@global_clicks = @response["data"]["clicks"].first["global_clicks"]
|
78
|
+
@user_clicks = @response["data"]["clicks"].first["user_clicks"]
|
79
|
+
@global_hash = @response["data"]["clicks"].first["global_hash"]
|
80
|
+
@user_hash = @response["data"]["clicks"].first["user_hash"]
|
81
|
+
@status_code = @response["status_code"]
|
82
|
+
@status_txt = @response["status_txt"]
|
68
83
|
|
69
|
-
|
84
|
+
read_only_now!
|
85
|
+
end
|
70
86
|
end
|
71
87
|
|
72
|
-
def
|
73
|
-
|
88
|
+
def Bitly.request
|
89
|
+
Bitly.load_personal_data
|
74
90
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
read_only_now!
|
91
|
+
begin
|
92
|
+
response = yield
|
93
|
+
JSON.parse(response)
|
94
|
+
rescue
|
95
|
+
response[:error] = "error"
|
96
|
+
end
|
83
97
|
end
|
84
98
|
|
85
99
|
def Bitly.post_shorten(new_long_url)
|
86
|
-
Bitly.
|
87
|
-
|
88
|
-
|
100
|
+
Bitly.request do
|
101
|
+
RestClient.post(REST_API_URL + ACTION_PATH[:shorten], { :longURL => new_long_url, :login => @@login, :apiKey => @@key })
|
102
|
+
end
|
89
103
|
end
|
90
104
|
|
91
105
|
def Bitly.post_expand(new_short_url)
|
92
|
-
Bitly.
|
93
|
-
|
94
|
-
|
106
|
+
Bitly.request do
|
107
|
+
RestClient.post(REST_API_URL + ACTION_PATH[:expand], { :shortURL => new_short_url, :login => @@login, :apiKey => @@key })
|
108
|
+
end
|
95
109
|
end
|
96
110
|
|
97
111
|
def Bitly.get_clicks(new_short_url)
|
98
|
-
Bitly.
|
99
|
-
|
100
|
-
|
112
|
+
Bitly.request do
|
113
|
+
RestClient.get("#{REST_API_URL}#{ACTION_PATH[:clicks]}?login=#{@@login}&apiKey=#{@@key}&shortUrl=#{new_short_url}")
|
114
|
+
# RestClient.get(REST_API_URL + ACTION_PATH[:clicks], { :login => @@login, :apiKey => @@key, :shortUrl => new_short_url })
|
115
|
+
end
|
101
116
|
end
|
102
117
|
|
103
118
|
def Bitly.shorten(new_long_url)
|
data/ruby-bitly.gemspec
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruby-bitly}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["rafaeldx7"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-08-04}
|
13
13
|
s.default_executable = %q{bitly}
|
14
|
-
s.description = %q{bit.ly ruby client}
|
14
|
+
s.description = %q{This is a simple bit.ly ruby client}
|
15
15
|
s.email = %q{rafaeldx7@gmail.com}
|
16
16
|
s.executables = ["bitly"]
|
17
17
|
s.extra_rdoc_files = [
|
@@ -38,7 +38,7 @@ Gem::Specification.new do |s|
|
|
38
38
|
s.rdoc_options = ["--charset=UTF-8"]
|
39
39
|
s.require_paths = ["lib"]
|
40
40
|
s.rubygems_version = %q{1.3.7}
|
41
|
-
s.summary = %q{bit.ly ruby client}
|
41
|
+
s.summary = %q{This is a simple bit.ly ruby client}
|
42
42
|
s.test_files = [
|
43
43
|
"spec/ruby-bitly_spec.rb",
|
44
44
|
"spec/spec_helper.rb"
|
@@ -49,12 +49,21 @@ Gem::Specification.new do |s|
|
|
49
49
|
s.specification_version = 3
|
50
50
|
|
51
51
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
52
|
-
s.
|
52
|
+
s.add_runtime_dependency(%q<rest-client>, ["= 1.5.1"])
|
53
|
+
s.add_runtime_dependency(%q<json_pure>, ["= 1.4.3"])
|
54
|
+
s.add_development_dependency(%q<rake>, ["= 0.8.7"])
|
55
|
+
s.add_development_dependency(%q<rspec>, ["= 1.3.0"])
|
53
56
|
else
|
54
57
|
s.add_dependency(%q<rest-client>, ["= 1.5.1"])
|
58
|
+
s.add_dependency(%q<json_pure>, ["= 1.4.3"])
|
59
|
+
s.add_dependency(%q<rake>, ["= 0.8.7"])
|
60
|
+
s.add_dependency(%q<rspec>, ["= 1.3.0"])
|
55
61
|
end
|
56
62
|
else
|
57
63
|
s.add_dependency(%q<rest-client>, ["= 1.5.1"])
|
64
|
+
s.add_dependency(%q<json_pure>, ["= 1.4.3"])
|
65
|
+
s.add_dependency(%q<rake>, ["= 0.8.7"])
|
66
|
+
s.add_dependency(%q<rspec>, ["= 1.3.0"])
|
58
67
|
end
|
59
68
|
end
|
60
69
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-bitly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- rafaeldx7
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-08-04 00:00:00 -03:00
|
19
19
|
default_executable: bitly
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -32,9 +32,57 @@ dependencies:
|
|
32
32
|
- 5
|
33
33
|
- 1
|
34
34
|
version: 1.5.1
|
35
|
-
type: :
|
35
|
+
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
|
-
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: json_pure
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - "="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 1
|
46
|
+
segments:
|
47
|
+
- 1
|
48
|
+
- 4
|
49
|
+
- 3
|
50
|
+
version: 1.4.3
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rake
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - "="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 49
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
- 8
|
65
|
+
- 7
|
66
|
+
version: 0.8.7
|
67
|
+
type: :development
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - "="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 27
|
78
|
+
segments:
|
79
|
+
- 1
|
80
|
+
- 3
|
81
|
+
- 0
|
82
|
+
version: 1.3.0
|
83
|
+
type: :development
|
84
|
+
version_requirements: *id004
|
85
|
+
description: This is a simple bit.ly ruby client
|
38
86
|
email: rafaeldx7@gmail.com
|
39
87
|
executables:
|
40
88
|
- bitly
|
@@ -91,7 +139,7 @@ rubyforge_project:
|
|
91
139
|
rubygems_version: 1.3.7
|
92
140
|
signing_key:
|
93
141
|
specification_version: 3
|
94
|
-
summary: bit.ly ruby client
|
142
|
+
summary: This is a simple bit.ly ruby client
|
95
143
|
test_files:
|
96
144
|
- spec/ruby-bitly_spec.rb
|
97
145
|
- spec/spec_helper.rb
|