veye 0.0.2
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.
- checksums.yaml +15 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +51 -0
- data/README.md +271 -0
- data/README.rdoc +6 -0
- data/Rakefile +44 -0
- data/bin/veye +390 -0
- data/lib/veye/api/base_resource.rb +29 -0
- data/lib/veye/api/json_response.rb +56 -0
- data/lib/veye/api/resource.rb +22 -0
- data/lib/veye/api.rb +3 -0
- data/lib/veye/package/follow.rb +50 -0
- data/lib/veye/package/info.rb +50 -0
- data/lib/veye/package/info_csv.rb +18 -0
- data/lib/veye/package/info_json.rb +14 -0
- data/lib/veye/package/info_pretty.rb +27 -0
- data/lib/veye/package/info_table.rb +29 -0
- data/lib/veye/package/search.rb +46 -0
- data/lib/veye/package/search_csv.rb +33 -0
- data/lib/veye/package/search_json.rb +19 -0
- data/lib/veye/package/search_pretty.rb +35 -0
- data/lib/veye/package/search_table.rb +40 -0
- data/lib/veye/package.rb +23 -0
- data/lib/veye/pagination/pagination_csv.rb +17 -0
- data/lib/veye/pagination/pagination_json.rb +12 -0
- data/lib/veye/pagination/pagination_pretty.rb +22 -0
- data/lib/veye/pagination/pagination_table.rb +22 -0
- data/lib/veye/pagination/show.rb +26 -0
- data/lib/veye/pagination.rb +7 -0
- data/lib/veye/project/check.rb +147 -0
- data/lib/veye/project/licence.rb +48 -0
- data/lib/veye/project/project_csv.rb +28 -0
- data/lib/veye/project/project_dependency_csv.rb +25 -0
- data/lib/veye/project/project_dependency_json.rb +12 -0
- data/lib/veye/project/project_dependency_pretty.rb +30 -0
- data/lib/veye/project/project_dependency_table.rb +27 -0
- data/lib/veye/project/project_json.rb +13 -0
- data/lib/veye/project/project_licence_csv.rb +19 -0
- data/lib/veye/project/project_licence_json.rb +12 -0
- data/lib/veye/project/project_licence_pretty.rb +23 -0
- data/lib/veye/project/project_licence_table.rb +29 -0
- data/lib/veye/project/project_pretty.rb +28 -0
- data/lib/veye/project/project_table.rb +30 -0
- data/lib/veye/project.rb +11 -0
- data/lib/veye/service.rb +14 -0
- data/lib/veye/user/favorite_csv.rb +28 -0
- data/lib/veye/user/favorite_json.rb +14 -0
- data/lib/veye/user/favorite_pretty.rb +25 -0
- data/lib/veye/user/favorite_table.rb +28 -0
- data/lib/veye/user/me.rb +75 -0
- data/lib/veye/user/profile_csv.rb +21 -0
- data/lib/veye/user/profile_json.rb +14 -0
- data/lib/veye/user/profile_pretty.rb +31 -0
- data/lib/veye/user/profile_table.rb +34 -0
- data/lib/veye/user.rb +7 -0
- data/lib/veye/version.rb +13 -0
- data/lib/veye.rb +82 -0
- data/test/default_test.rb +14 -0
- data/test/files/Gemfile +20 -0
- data/test/files/maven-1.0.1.pom +128 -0
- data/test/test_helper.rb +9 -0
- data/veye.rdoc +5 -0
- metadata +229 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rainbow'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module Project
|
5
|
+
class ProjectLicencePretty
|
6
|
+
def before; end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def format(results)
|
10
|
+
|
11
|
+
n = 1
|
12
|
+
results["licenses"].each_pair do |licence, products|
|
13
|
+
product_keys = products.map {|prod| prod["prod_key"]}
|
14
|
+
licence_name = "#{licence}".foreground(:green).bright
|
15
|
+
printf("%3d - %s\n", n, licence_name)
|
16
|
+
printf("\t%-15s : %s\n", "Products", product_keys.join(", "))
|
17
|
+
|
18
|
+
n += 1
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module Project
|
5
|
+
class ProjectLicenceTable
|
6
|
+
def before
|
7
|
+
@@table = Terminal::Table.new :title => "Licences",
|
8
|
+
:headings => %w(index licence product_keys)
|
9
|
+
|
10
|
+
@@table.align_column(0, :right)
|
11
|
+
end
|
12
|
+
|
13
|
+
def after
|
14
|
+
puts @@table.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def format(results)
|
18
|
+
n = 1
|
19
|
+
results["licenses"].each_pair do |licence, products|
|
20
|
+
products.each do |prod|
|
21
|
+
row = [n, licence, prod["prod_key"]]
|
22
|
+
@@table << row
|
23
|
+
end
|
24
|
+
n += 1
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rainbow'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module Project
|
5
|
+
class ProjectPretty
|
6
|
+
def before; end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def format(results)
|
10
|
+
results = [results] if results.is_a? Hash
|
11
|
+
|
12
|
+
results.each_with_index do |result, index|
|
13
|
+
project_name = "#{result['name']}".foreground(:green).bright
|
14
|
+
printf("%3d - %s\n", index + 1, project_name)
|
15
|
+
printf("\t%-15s: %s\n", "Project key", "#{result['project_key']}".bright)
|
16
|
+
printf("\t%-15s: %s\n", "Project type", result['project_type'])
|
17
|
+
printf("\t%-15s: %s\n", "Private", result['private'])
|
18
|
+
printf("\t%-15s: %s\n", "Period", result['period'])
|
19
|
+
printf("\t%-15s: %s\n", "Source", result['source'])
|
20
|
+
printf("\t%-15s: %s\n", "Dependencies", result['dep_number'])
|
21
|
+
printf("\t%-15s: %s\n", "Outdated", result['out_number'])
|
22
|
+
printf("\t%-15s: %s\n", "Created", result['created_at'])
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module Project
|
5
|
+
class ProjectTable
|
6
|
+
def before
|
7
|
+
@@table = Terminal::Table.new :title => "Projects",
|
8
|
+
:headings => %w(index name project_key private period source dependencies outdated created_at)
|
9
|
+
|
10
|
+
@@table.align_column(0, :right)
|
11
|
+
end
|
12
|
+
|
13
|
+
def after
|
14
|
+
puts @@table.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def format(results)
|
18
|
+
results = [results] if results.is_a? Hash
|
19
|
+
|
20
|
+
results.each_with_index do |result, index|
|
21
|
+
row = [index + 1, result['name'], result['project_key'], result['private'],
|
22
|
+
result['period'], result['source'], result['dep_number'],
|
23
|
+
result['out_number'], result['created_at']]
|
24
|
+
@@table << row
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
data/lib/veye/project.rb
ADDED
data/lib/veye/service.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
module Veye
|
2
|
+
class Service
|
3
|
+
RESOURCE_PATH = "/services"
|
4
|
+
def self.ping(n = 1)
|
5
|
+
public_api = API::Resource.new RESOURCE_PATH
|
6
|
+
api_respond = "no idea"
|
7
|
+
public_api.resource['/ping'].get do |response, request, result, &block|
|
8
|
+
api_respond = API::JSONResponse.new(request, result, response)
|
9
|
+
end
|
10
|
+
|
11
|
+
return api_respond
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Veye
|
2
|
+
module User
|
3
|
+
class FavoriteCSV
|
4
|
+
def before
|
5
|
+
printf("index,name,prod_key,prod_type,version,language\n")
|
6
|
+
end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def make_row(result, index = 1)
|
10
|
+
row = sprintf("%d,%s,%s,%s,%s,%s",
|
11
|
+
index + 1,
|
12
|
+
result['name'],
|
13
|
+
result['prod_key'],
|
14
|
+
result['prod_type'],
|
15
|
+
result['version'],
|
16
|
+
result['language']
|
17
|
+
)
|
18
|
+
row
|
19
|
+
end
|
20
|
+
|
21
|
+
def format(results)
|
22
|
+
results = [results] if results.is_a? Hash
|
23
|
+
results.each_with_index {|result, index| printf("%s\n", make_row(result, index))}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rainbow'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module User
|
5
|
+
class FavoritePretty
|
6
|
+
def before; end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def show_favorite(fav, index)
|
10
|
+
printf("\t%15s - %s\n",
|
11
|
+
"#{fav['name']}".foreground(:green).bright,
|
12
|
+
"#{fav['prod_key'].bright}")
|
13
|
+
puts "\t-------------------------"
|
14
|
+
printf("\t%-15s: %s\n", "Product type", fav['prod_type'])
|
15
|
+
printf("\t%-15s: %s\n", "Version", "#{fav['prod_type']}".bright)
|
16
|
+
printf("\t%-15s: %s\n", "Language", fav['language'])
|
17
|
+
end
|
18
|
+
|
19
|
+
def format(results)
|
20
|
+
results = [results] if results.is_a? Hash
|
21
|
+
results.each_with_index {|fav, index| show_favorite(fav, index)}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module User
|
5
|
+
class FavoriteTable
|
6
|
+
def before
|
7
|
+
@@table = Terminal::Table.new :title => "Favorite packages",
|
8
|
+
:headings => %w(nr name product_key version language)
|
9
|
+
@@table.align_column(0, :right)
|
10
|
+
end
|
11
|
+
|
12
|
+
def after
|
13
|
+
puts @@table.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
def make_row(fav, index)
|
17
|
+
row = [index + 1, fav['name'], fav['prod_key'], fav['version'], fav['language']]
|
18
|
+
row
|
19
|
+
end
|
20
|
+
|
21
|
+
def format(results)
|
22
|
+
results = [results] if results.is_a? Hash
|
23
|
+
results.each_with_index {|fav, index| @@table << make_row(fav, index)}
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/veye/user/me.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require_relative 'profile_csv.rb'
|
2
|
+
require_relative 'profile_json.rb'
|
3
|
+
require_relative 'profile_pretty.rb'
|
4
|
+
require_relative 'profile_table.rb'
|
5
|
+
|
6
|
+
require_relative 'favorite_csv.rb'
|
7
|
+
require_relative 'favorite_json.rb'
|
8
|
+
require_relative 'favorite_pretty.rb'
|
9
|
+
require_relative 'favorite_table.rb'
|
10
|
+
|
11
|
+
module Veye
|
12
|
+
module User
|
13
|
+
class Me
|
14
|
+
@@profile_formats = {
|
15
|
+
'csv' => ProfileCSV.new,
|
16
|
+
'json' => ProfileJSON.new,
|
17
|
+
'pretty' => ProfilePretty.new,
|
18
|
+
'table' => ProfileTable.new
|
19
|
+
}
|
20
|
+
|
21
|
+
@@favorite_formats = {
|
22
|
+
'csv' => FavoriteCSV.new,
|
23
|
+
'json' => FavoriteJSON.new,
|
24
|
+
'pretty' => FavoritePretty.new,
|
25
|
+
'table' => FavoriteTable.new
|
26
|
+
}
|
27
|
+
|
28
|
+
def self.get_profile(api_key)
|
29
|
+
user_api = API::Resource.new(RESOURCE_PATH)
|
30
|
+
response_data = nil
|
31
|
+
qparams = {:params => {:api_key => api_key}}
|
32
|
+
|
33
|
+
user_api.resource.get(qparams) do |response, request, result|
|
34
|
+
response_data = API::JSONResponse.new(request, result, response)
|
35
|
+
end
|
36
|
+
|
37
|
+
return response_data
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.get_favorites(api_key, page = 1)
|
41
|
+
user_api = API::Resource.new(RESOURCE_PATH)
|
42
|
+
response_data = nil
|
43
|
+
qparams = {
|
44
|
+
:params => {
|
45
|
+
:api_key => api_key,
|
46
|
+
:page => page || 1
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
user_api.resource['/favorites'].get(qparams) do |response, request, result|
|
51
|
+
response_data = API::JSONResponse.new(request, result, response)
|
52
|
+
end
|
53
|
+
|
54
|
+
return response_data
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.format_profile(results, format = 'pretty')
|
58
|
+
formatter = @@profile_formats[format]
|
59
|
+
formatter.before
|
60
|
+
formatter.format(results)
|
61
|
+
formatter.after
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.format_favorites(results, format = 'pretty')
|
65
|
+
formatter = @@favorite_formats[format]
|
66
|
+
|
67
|
+
formatter.before
|
68
|
+
formatter.format results
|
69
|
+
formatter.after
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Veye
|
2
|
+
module User
|
3
|
+
class ProfileCSV
|
4
|
+
def before
|
5
|
+
printf("index,username,fullname,email,plan_name_id,admin,new_notifications,total_notifications\n")
|
6
|
+
end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def format(results)
|
10
|
+
results = [results] if results.is_a? Hash
|
11
|
+
|
12
|
+
results.each_with_index do |result, index|
|
13
|
+
printf("%d,%s,%s,%s,%s,%s,%s,%s\n",
|
14
|
+
index + 1, result['username'], result['fullname'], result['email'],
|
15
|
+
result['plan_name_id'], result['admin'],
|
16
|
+
result['notifications']['new'],result['notifications']['total'])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'rainbow'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module User
|
5
|
+
class ProfilePretty
|
6
|
+
def before; end
|
7
|
+
def after; end
|
8
|
+
|
9
|
+
def show_profile(profile, index)
|
10
|
+
printf("\t%15s - %s\n",
|
11
|
+
"#{profile['username']}".foreground(:green).bright,
|
12
|
+
"#{profile['fullname'].bright}")
|
13
|
+
puts "\t-------------------------"
|
14
|
+
printf("\t%-15s: %s\n", "Email", profile['email'])
|
15
|
+
printf("\t%-15s: %s\n", "Plan name", profile['plan_name_id'])
|
16
|
+
printf("\t%-15s: %s\n", "Admin", profile['admin'])
|
17
|
+
printf("\t%-15s: %s\n", "Deleted", profile['deleted'])
|
18
|
+
printf("\t%-15s: %s\n", "New notif.s",
|
19
|
+
"#{profile['notifications']['new']}".bright)
|
20
|
+
printf("\t%-15s: %s\n", "Total notif.s",
|
21
|
+
profile['notifications']['total'])
|
22
|
+
end
|
23
|
+
|
24
|
+
def format(results)
|
25
|
+
results = [results] if results.is_a? Hash
|
26
|
+
results.each_with_index {|profile, index| show_profile(profile, index)}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Veye
|
4
|
+
module User
|
5
|
+
class ProfileTable
|
6
|
+
def before
|
7
|
+
@@table = Terminal::Table.new :title => "User's profile",
|
8
|
+
:headings => %w(nr username fullname email plan_name, admin, deleted, new_notifications, total_notifications)
|
9
|
+
|
10
|
+
@@table.align_column(0, :right)
|
11
|
+
end
|
12
|
+
|
13
|
+
def after
|
14
|
+
puts @@table.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def make_row(profile, index)
|
18
|
+
row = [index + 1, profile['username'], profile['fullname'], profile['email']]
|
19
|
+
row << profile['plan_name_id']
|
20
|
+
row << profile['admin']
|
21
|
+
row << profile['deleted']
|
22
|
+
row << profile['notifications']['new']
|
23
|
+
row << profile['notifications']['total']
|
24
|
+
return row
|
25
|
+
end
|
26
|
+
|
27
|
+
def format(results)
|
28
|
+
results = [results] if results.is_a? Hash
|
29
|
+
results.each_with_index {|profile, index| @@table << make_row(profile, index)}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
data/lib/veye/user.rb
ADDED
data/lib/veye/version.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
module Veye
|
2
|
+
VERSION = '0.0.2'
|
3
|
+
BIGEYE = %q{
|
4
|
+
|
5
|
+
_ __ _ ______
|
6
|
+
| | / /___ _____ _____ (_)____ ____ / ____/__ __ ___
|
7
|
+
| | / // _ \ / ___// ___// // __ \ / __ \ / __/ / / / // _ \
|
8
|
+
| |/ // __// / (__ )/ // /_/ // / / // /___ / /_/ // __/
|
9
|
+
|___/ \___//_/ /____//_/ \____//_/ /_//_____/ \__, / \___/
|
10
|
+
/____/
|
11
|
+
}
|
12
|
+
|
13
|
+
end
|
data/lib/veye.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# Add requires for other files you add to your project here, so
|
2
|
+
# you just need to require this one file in your bin file
|
3
|
+
require 'veye/version.rb'
|
4
|
+
require 'veye/service.rb'
|
5
|
+
require 'veye/api.rb'
|
6
|
+
require 'veye/package.rb'
|
7
|
+
require 'veye/project.rb'
|
8
|
+
require 'veye/user.rb'
|
9
|
+
require 'veye/pagination.rb'
|
10
|
+
|
11
|
+
$global_options ||= nil
|
12
|
+
DEFAULT_CONFIG_FILE = ".veye.rc"
|
13
|
+
DEFAULT_CONFIG_PATH = "~"
|
14
|
+
|
15
|
+
def get_config_fullpath
|
16
|
+
File.expand_path("#{DEFAULT_CONFIG_PATH}/#{DEFAULT_CONFIG_FILE}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def config_exists?
|
20
|
+
filepath = get_config_fullpath
|
21
|
+
File.exists?(filepath)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.check_configs(global_opts)
|
25
|
+
unless config_exists?
|
26
|
+
msg = sprintf("%s: %s\n",
|
27
|
+
"config file doesnt exist. ".foreground(:red),
|
28
|
+
"Use `veye initconfig` to initialize settings file.")
|
29
|
+
exit_now!(msg)
|
30
|
+
end
|
31
|
+
check_api_key(global_opts)
|
32
|
+
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
36
|
+
def init_environment
|
37
|
+
#sets up required variables and modules to work on IRB or unittest
|
38
|
+
config_file = get_config_fullpath
|
39
|
+
$global_options = YAML.load_file(config_file)
|
40
|
+
$global_options[:config_file] = config_file
|
41
|
+
$global_options[:url] = Veye::API::Resource.build_url($global_options)
|
42
|
+
|
43
|
+
$global_options
|
44
|
+
end
|
45
|
+
|
46
|
+
def check_api_key(global_opts)
|
47
|
+
result = false
|
48
|
+
if global_opts[:api_key].nil? or global_opts[:api_key].match("add your api key")
|
49
|
+
msg = sprintf("%s: %s\n",
|
50
|
+
"Warning: API key is missing.".foreground(:yellow),
|
51
|
+
"You cant access private data.")
|
52
|
+
print msg
|
53
|
+
else
|
54
|
+
result = true
|
55
|
+
end
|
56
|
+
|
57
|
+
result
|
58
|
+
end
|
59
|
+
|
60
|
+
def update_api_key
|
61
|
+
user_key = gets.chomp.to_s.strip
|
62
|
+
if user_key =~ /No/i
|
63
|
+
msg = sprintf("%s: %s",
|
64
|
+
"Warning:".foreground(:yellow),
|
65
|
+
" missing, you cant access private data.")
|
66
|
+
print msg
|
67
|
+
else
|
68
|
+
$global_options[:api_key] = user_key
|
69
|
+
save_configs
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def save_configs
|
74
|
+
filepath = get_config_fullpath
|
75
|
+
File.open(filepath, 'w') do |f|
|
76
|
+
f.puts $global_options.to_yaml
|
77
|
+
end
|
78
|
+
msg = sprintf("%s: %s",
|
79
|
+
"Success".foreground(:green),
|
80
|
+
"new settings are saved into file: `#{filepath}`")
|
81
|
+
print msg
|
82
|
+
end
|
data/test/files/Gemfile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
gem 'rails', '3.2.9'
|
3
|
+
group :assets do
|
4
|
+
gem 'sass-rails', '~> 3.2.3'
|
5
|
+
gem 'coffee-rails', '~> 3.2.1'
|
6
|
+
gem 'uglifier', '>= 1.0.3'
|
7
|
+
end
|
8
|
+
gem 'jquery-rails'
|
9
|
+
gem "mongoid", ">= 3.0.14"
|
10
|
+
gem "rspec-rails", ">= 2.11.4", :group => [:development, :test]
|
11
|
+
gem "database_cleaner", ">= 0.9.1", :group => :test
|
12
|
+
gem "mongoid-rspec", ">= 1.5.5", :group => :test
|
13
|
+
gem "email_spec", ">= 1.4.0", :group => :test
|
14
|
+
gem "cucumber-rails", ">= 1.3.0", :group => :test, :require => false
|
15
|
+
gem "launchy", ">= 2.1.2", :group => :test
|
16
|
+
gem "capybara", ">= 1.1.4", :group => :test
|
17
|
+
gem "factory_girl_rails", ">= 4.1.0", :group => [:development, :test]
|
18
|
+
gem "omniauth", ">= 1.1.1"
|
19
|
+
gem "omniauth-twitter"
|
20
|
+
gem "quiet_assets", ">= 1.0.1", :group => :development
|