purdie 0.0.12 → 0.0.13
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 +4 -4
- data/README.md +17 -13
- data/Rakefile +6 -2
- data/features/comments.feature +2 -13
- data/features/duff-credentials.feature +2 -3
- data/features/flickr-album.feature +5 -0
- data/features/flickr-different-size.feature +1 -0
- data/features/flickr-with-lookups.feature +1 -0
- data/features/rfm.feature +5 -0
- data/features/select-file.feature +26 -24
- data/features/soundcloud-set.feature +2 -2
- data/features/support/fixtures/vcr.nope/A_URL_we_don_t_understand/Handle_a_URL_we_don_t_recognise.yml +125 -0
- data/features/support/fixtures/vcr.nope/First_contact_with_the_Real_World/Generate_YAML_for_the_Raw_Funk_Maharishi.yml +536 -0
- data/features/support/fixtures/vcr.nope/Flickr/Generate_Flickr_YAML.yml +131 -0
- data/features/support/fixtures/vcr.nope/Flickr/Generate_Flickr_YAML_with_lookups.yml +129 -0
- data/features/support/fixtures/vcr.nope/Flickr_album/Generate_Flickr_YAML_for_an_album.yml +2280 -0
- data/features/support/fixtures/vcr.nope/Handle_comments/Handle_comments_in_a_source_file.yml +131 -0
- data/features/support/fixtures/vcr.nope/Missing_or_bad_credentials/Bad_credentials_for_multiple_services.yml +156 -0
- data/features/support/fixtures/{vcr → vcr.nope}/Purdie/Generate_several_YAML.yml +0 -0
- data/features/support/fixtures/vcr.nope/Select_a_file_to_process/Choose_file_to_process.yml +220 -0
- data/features/support/fixtures/vcr.nope/Set_Flickr_picturesize/Generate_Flickr_YAML.yml +131 -0
- data/features/support/fixtures/{vcr/Select_a_file_to_process/Choose_file_to_process.yml → vcr.nope/Soundcloud/Generate_SoundCloud_YAML.yml} +4 -4
- data/features/support/fixtures/vcr.nope/Soundcloud/Generate_SoundCloud_YAML_for_multiple_tracks.yml +181 -0
- data/features/support/fixtures/vcr.nope/Soundcloud_set/Generate_YAML_for_a_SoundCloud_set.yml +461 -0
- data/features/support/fixtures/vcr.nope/Vimeo/Generate_Vimeo_YAML.yml +53 -0
- data/features/support/fixtures/vcr.nope/Vimeo_albums/Generate_YAML_for_a_Vimeo_album.yml +210 -0
- data/features/support/fixtures/vcr.nope/YouTube/Generate_YouTube_YAML.yml +970 -0
- data/features/support/fixtures/vcr.nope/YouTube_playlists/Generate_YAML_for_a_YouTube_playlist.yml +9688 -0
- data/features/support/fixtures/vcr/A_URL_we_don_t_understand/Handle_a_URL_we_don_t_recognise.yml +23 -17
- data/features/support/fixtures/vcr/First_contact_with_the_Real_World/Generate_YAML_for_the_Raw_Funk_Maharishi.yml +134 -57
- data/features/support/fixtures/vcr/Flickr/Generate_Flickr_YAML.yml +24 -18
- data/features/support/fixtures/vcr/Flickr/Generate_Flickr_YAML_with_lookups.yml +25 -19
- data/features/support/fixtures/vcr/Flickr_album/Generate_Flickr_YAML_for_an_album.yml +1438 -193
- data/features/support/fixtures/vcr/Handle_comments/Handle_comments_in_a_source_file.yml +23 -100
- data/features/support/fixtures/vcr/Missing_or_bad_credentials/Bad_credentials_for_multiple_services.yml +15 -15
- data/features/support/fixtures/vcr/Set_Flickr_picturesize/Generate_Flickr_YAML.yml +24 -18
- data/features/support/fixtures/vcr/Soundcloud/Generate_SoundCloud_YAML.yml +9 -8
- data/features/support/fixtures/vcr/Soundcloud/Generate_SoundCloud_YAML_for_multiple_tracks.yml +14 -14
- data/features/support/fixtures/vcr/Soundcloud_set/Generate_YAML_for_a_SoundCloud_set.yml +41 -40
- data/features/support/fixtures/vcr/Vimeo/Generate_Vimeo_YAML.yml +8 -8
- data/features/support/fixtures/vcr/Vimeo_albums/Generate_YAML_for_a_Vimeo_album.yml +38 -38
- data/features/support/fixtures/vcr/YouTube/Generate_YouTube_YAML.yml +873 -873
- data/features/support/fixtures/vcr/YouTube_playlists/Generate_YAML_for_a_YouTube_playlist.yml +9108 -1923
- data/features/support/hooks.rb +8 -0
- data/features/youtube-playlist.feature +0 -2
- data/lib/purdie.rb +2 -8
- data/lib/purdie/bernard.rb +7 -60
- data/lib/purdie/cli.rb +1 -1
- data/lib/purdie/config.rb +17 -8
- data/lib/purdie/helpers.rb +8 -0
- data/lib/purdie/ingester.rb +16 -16
- data/lib/purdie/item.rb +36 -0
- data/lib/purdie/resolver.rb +15 -0
- data/lib/purdie/services/soundcloud.rb +1 -1
- data/lib/purdie/source_list.rb +54 -16
- data/lib/purdie/version.rb +1 -1
- data/purdie.gemspec +19 -19
- data/spec/bernard_spec.rb +30 -0
- data/spec/config_spec.rb +4 -4
- data/spec/item_spec.rb +46 -0
- data/spec/resolver_spec.rb +40 -0
- data/spec/services/youtube_spec.rb +1 -1
- data/spec/source_list_spec.rb +59 -34
- data/spec/spec_helper.rb +1 -1
- data/spec/support/fixtures/output-generator +2 -0
- data/spec/support/fixtures/youtube.tubes +1 -0
- data/spec/vcr/Purdie_Bernard/deals_with_YouTube.yml +9686 -0
- data/spec/vcr/Purdie_Bernard/processes_files.yml +570 -0
- data/spec/vcr/Purdie_Item/populates_itself.yml +182 -0
- data/spec/vcr/Purdie_Resolver/resolves_a_Flickr_set.yml +772 -0
- data/spec/vcr/Purdie_Resolver/resolves_a_SoundCloud_set.yml +103 -0
- data/spec/vcr/Purdie_Resolver/resolves_a_YouTube_playlist.yml +970 -0
- data/spec/vcr/Purdie_SourceList/constructs_a_list_from_a_set_URL.yml +772 -0
- data/spec/vcr/Purdie_SourceList/make_output/actually_makes_output.yml +526 -0
- data/spec/vcr/Purdie_SourceList/process_its_items/processes_items.yml +210 -0
- data/spec/vcr/Purdie_SourceList/resolve_sets/constructs_a_list_from_a_set_URL.yml +95 -77
- metadata +78 -22
- data/features/flickr-alternative-outfile.feature +0 -29
- data/features/purdie.feature +0 -48
data/features/support/hooks.rb
CHANGED
|
@@ -2,3 +2,11 @@ Before do
|
|
|
2
2
|
FileUtils.mkdir_p "tmp/aruba/_config/"
|
|
3
3
|
FileUtils.cp "#{$fixtures}/_config/purdie.yaml", "tmp/aruba/_config/"
|
|
4
4
|
end
|
|
5
|
+
|
|
6
|
+
Before "@clearconf" do
|
|
7
|
+
FileUtils.rm "tmp/aruba/_config/purdie.yaml"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
After do
|
|
11
|
+
FileUtils.rm "tmp/aruba/_config/purdie.yaml"
|
|
12
|
+
end
|
data/lib/purdie.rb
CHANGED
|
@@ -10,10 +10,12 @@ require 'purdie/version'
|
|
|
10
10
|
require 'purdie/helpers'
|
|
11
11
|
require 'purdie/bernard'
|
|
12
12
|
require 'purdie/config'
|
|
13
|
+
require 'purdie/item'
|
|
13
14
|
require 'purdie/ingester'
|
|
14
15
|
require 'purdie/source_list'
|
|
15
16
|
require 'purdie/license_manager'
|
|
16
17
|
require 'purdie/exceptions'
|
|
18
|
+
require 'purdie/resolver'
|
|
17
19
|
|
|
18
20
|
require 'purdie/services/soundcloud'
|
|
19
21
|
require 'purdie/services/flickr'
|
|
@@ -21,11 +23,3 @@ require 'purdie/services/vimeo'
|
|
|
21
23
|
require 'purdie/services/youtube'
|
|
22
24
|
|
|
23
25
|
Dotenv.load
|
|
24
|
-
|
|
25
|
-
class Hash
|
|
26
|
-
def attach_license service, license
|
|
27
|
-
l = Purdie::LicenseManager.get service, license
|
|
28
|
-
self['license'] = l['full_name']
|
|
29
|
-
self['license_url'] = l['url']
|
|
30
|
-
end
|
|
31
|
-
end
|
data/lib/purdie/bernard.rb
CHANGED
|
@@ -5,7 +5,7 @@ module Purdie
|
|
|
5
5
|
attr_reader :config
|
|
6
6
|
|
|
7
7
|
def initialize
|
|
8
|
-
@config = Config.
|
|
8
|
+
@config = Config.instance.config
|
|
9
9
|
begin
|
|
10
10
|
@sources = Dir.entries(@config['source_dir']).select { |e|
|
|
11
11
|
e !~ /^\./
|
|
@@ -15,71 +15,18 @@ module Purdie
|
|
|
15
15
|
rescue Errno::ENOENT
|
|
16
16
|
@sources = nil
|
|
17
17
|
end
|
|
18
|
-
|
|
19
|
-
Purdie.debug @config.inspect
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def source_file= path
|
|
23
|
-
@sources = [path]
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def services
|
|
27
|
-
@services ||= Ingester.ingesters.map { |i| i.new @config }
|
|
28
18
|
end
|
|
29
19
|
|
|
30
|
-
def
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
list.each do |line|
|
|
35
|
-
next if line[0] == '#'
|
|
36
|
-
next if line == ''
|
|
37
|
-
|
|
38
|
-
begin
|
|
39
|
-
print "Processing #{line.strip}... "
|
|
40
|
-
grab line
|
|
41
|
-
rescue NoMethodError => nme
|
|
42
|
-
puts "unrecognised URL [#{line}]" if nme.status == "undefined method `ingest' for nil:NilClass"
|
|
43
|
-
rescue Purdie::LicenseException => le
|
|
44
|
-
bad_licenses[Purdie.basename le.service].push le.name rescue bad_licenses[Purdie.basename le.service] = [le.name]
|
|
45
|
-
puts 'fail'
|
|
46
|
-
rescue Purdie::CredentialsException => ce
|
|
47
|
-
bad_creds.push Purdie.basename(ce.service)
|
|
48
|
-
puts 'fail'
|
|
49
|
-
else
|
|
50
|
-
puts 'done'
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
if bad_creds.any?
|
|
55
|
-
raise Purdie::CredentialsException.new self, "Missing or duff credentials for: #{bad_creds.uniq.join ', '}"
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
if bad_licenses.any?
|
|
59
|
-
bad = bad_licenses.map { |k,v| "#{k}: #{v.uniq.join ', '}" }.join '; '
|
|
60
|
-
message = "Unknown licenses: #{bad}"
|
|
61
|
-
message += "\n"
|
|
62
|
-
message += 'Please consider adding the details for these licenses at https://github.com/rawfunkmaharishi/purdie/blob/master/_config/licenses.yaml'
|
|
63
|
-
raise Purdie::PurdieException.new message
|
|
64
|
-
end
|
|
65
|
-
end
|
|
20
|
+
# def source_file= path
|
|
21
|
+
# @sources = path
|
|
22
|
+
# end
|
|
66
23
|
|
|
67
24
|
def fetch
|
|
68
|
-
raise
|
|
25
|
+
raise PurdieException.new 'No data sources specified' unless @sources
|
|
69
26
|
|
|
70
|
-
@sources.each do |source|
|
|
71
|
-
|
|
27
|
+
@sources.map { |s| SourceList.from_file s }.each do |source|
|
|
28
|
+
source.write
|
|
72
29
|
end
|
|
73
|
-
|
|
74
|
-
dump
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def grab url
|
|
78
|
-
services.select{ |s| url =~ /#{s.class.matcher}/ }[0].ingest url
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def dump
|
|
82
|
-
services.map { |service| service.write }
|
|
83
30
|
end
|
|
84
31
|
end
|
|
85
32
|
end
|
data/lib/purdie/cli.rb
CHANGED
data/lib/purdie/config.rb
CHANGED
|
@@ -1,22 +1,31 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'singleton'
|
|
2
2
|
|
|
3
3
|
module Purdie
|
|
4
4
|
class Config
|
|
5
|
+
include Singleton
|
|
6
|
+
|
|
5
7
|
def initialize
|
|
6
|
-
|
|
8
|
+
reset!
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def reset! # testing a singleton is hard
|
|
12
|
+
@config = OpenStruct.new fetch_yaml 'defaults'
|
|
7
13
|
|
|
8
14
|
if File.exists? '_config/purdie.yaml'
|
|
9
|
-
|
|
10
|
-
|
|
15
|
+
@local = OpenStruct.new YAML.load File.read '_config/purdie.yaml'
|
|
16
|
+
|
|
17
|
+
@config = OpenStruct.new (@config.to_h.deep_merge @local)
|
|
11
18
|
end
|
|
12
19
|
end
|
|
13
20
|
|
|
14
|
-
def
|
|
15
|
-
@
|
|
21
|
+
def config
|
|
22
|
+
@config
|
|
16
23
|
end
|
|
17
24
|
|
|
18
|
-
|
|
19
|
-
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def fetch_yaml file
|
|
28
|
+
YAML.load(File.open(File.join(File.dirname(__FILE__), '..', '..', '_config/%s.yaml' % file)))
|
|
20
29
|
end
|
|
21
30
|
end
|
|
22
31
|
end
|
data/lib/purdie/helpers.rb
CHANGED
data/lib/purdie/ingester.rb
CHANGED
|
@@ -4,20 +4,22 @@ module Purdie
|
|
|
4
4
|
module Ingester
|
|
5
5
|
attr_reader :config, :subconfig, :matcher
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
include Enumerable
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
attr_reader :ingesters
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
@ingesters = []
|
|
8
14
|
|
|
9
15
|
def self.included base
|
|
10
16
|
# Voodoo: http://stackoverflow.com/questions/10692961/inheriting-class-methods-from-mixins
|
|
11
17
|
base.extend ClassMethods
|
|
12
|
-
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def self.ingesters
|
|
16
|
-
INGESTERS
|
|
18
|
+
@ingesters.push base
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
def initialize config = nil
|
|
20
|
-
config = Config.
|
|
22
|
+
config = Config.instance.config unless config
|
|
21
23
|
@config = config
|
|
22
24
|
@items = []
|
|
23
25
|
|
|
@@ -39,16 +41,14 @@ module Purdie
|
|
|
39
41
|
@items.push distill url
|
|
40
42
|
end
|
|
41
43
|
|
|
42
|
-
def
|
|
43
|
-
@items
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def count
|
|
47
|
-
@items.count
|
|
44
|
+
def each
|
|
45
|
+
@items.each do |item|
|
|
46
|
+
yield item
|
|
47
|
+
end
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
def
|
|
51
|
-
@items
|
|
50
|
+
def [] key
|
|
51
|
+
@items[key]
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
def to_yaml
|
|
@@ -56,7 +56,7 @@ module Purdie
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
def write
|
|
59
|
-
if self.
|
|
59
|
+
if self.any?
|
|
60
60
|
FileUtils.mkdir_p File.dirname @output_file
|
|
61
61
|
File.open @output_file, 'w' do |f|
|
|
62
62
|
f.write self.to_yaml
|
data/lib/purdie/item.rb
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Purdie
|
|
2
|
+
class Item
|
|
3
|
+
attr_reader :url, :parent_file, :datas
|
|
4
|
+
|
|
5
|
+
def initialize url
|
|
6
|
+
@url = url
|
|
7
|
+
@datas = {}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def distill
|
|
11
|
+
@datas = service.distill @url
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def []= key, value
|
|
15
|
+
@datas[key] = value
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def [] key
|
|
19
|
+
@datas[key]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def service
|
|
23
|
+
c = Ingester.ingesters.select { |s| url =~ /#{s.matcher}/ }.first
|
|
24
|
+
c.new
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def to_yaml
|
|
28
|
+
Purdie.debug 'wtf'
|
|
29
|
+
@datas.to_yaml
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def source_list= source_list
|
|
33
|
+
@parent_file = source_list.parent_file
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Purdie
|
|
2
|
+
class Resolver
|
|
3
|
+
def self.resolve urls
|
|
4
|
+
urls = [urls].flatten
|
|
5
|
+
resolved = []
|
|
6
|
+
|
|
7
|
+
urls.each do |url|
|
|
8
|
+
service_class = Ingester.ingesters.select { |service| url =~ /#{service.matcher}/ }[0]
|
|
9
|
+
resolved += service_class.resolve(url) if service_class
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
resolved.uniq { |url| Purdie.strip_scheme url }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/purdie/source_list.rb
CHANGED
|
@@ -4,13 +4,11 @@ module Purdie
|
|
|
4
4
|
class SourceList
|
|
5
5
|
include Enumerable
|
|
6
6
|
|
|
7
|
+
attr_reader :items
|
|
8
|
+
attr_accessor :parent_file
|
|
9
|
+
|
|
7
10
|
def initialize sources
|
|
8
|
-
@sources =
|
|
9
|
-
flatten.
|
|
10
|
-
select { |i| i !~ /^#/ }.
|
|
11
|
-
map { |source| SourceList.resolve source }.
|
|
12
|
-
flatten.
|
|
13
|
-
uniq { |item| Purdie.strip_scheme item }
|
|
11
|
+
@sources = Resolver.resolve(sources).map { |item| Item.new item }
|
|
14
12
|
end
|
|
15
13
|
|
|
16
14
|
def [] key
|
|
@@ -19,22 +17,62 @@ module Purdie
|
|
|
19
17
|
|
|
20
18
|
def each &block
|
|
21
19
|
@sources.each do |source|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
yield source
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def process
|
|
25
|
+
bad_creds = []
|
|
26
|
+
bad_licenses = {}
|
|
27
|
+
@items = []
|
|
28
|
+
@sources.each do |source|
|
|
29
|
+
begin
|
|
30
|
+
print "Processing #{source.url}..."
|
|
31
|
+
source.distill
|
|
32
|
+
puts 'done'
|
|
33
|
+
rescue Purdie::CredentialsException => ce
|
|
34
|
+
bad_creds.push Purdie.basename(ce.service)
|
|
35
|
+
puts 'fail'
|
|
36
|
+
end
|
|
37
|
+
@items.push source
|
|
38
|
+
|
|
39
|
+
if bad_creds.any?
|
|
40
|
+
raise Purdie::CredentialsException.new self, "Missing or duff credentials for: #{bad_creds.uniq.join ', '}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
if bad_licenses.any?
|
|
44
|
+
bad = bad_licenses.map { |k,v| "#{k}: #{v.uniq.join ', '}" }.join '; '
|
|
45
|
+
message = "Unknown licenses: #{bad}"
|
|
46
|
+
message += "\n"
|
|
47
|
+
message += 'Please consider adding the details for these licenses at https://github.com/rawfunkmaharishi/purdie/blob/master/_config/licenses.yaml'
|
|
48
|
+
raise Purdie::PurdieException.new message
|
|
26
49
|
end
|
|
27
50
|
end
|
|
28
51
|
end
|
|
29
52
|
|
|
30
|
-
def
|
|
31
|
-
|
|
53
|
+
def write
|
|
54
|
+
process
|
|
55
|
+
|
|
56
|
+
FileUtils.mkdir_p File.dirname output_file
|
|
57
|
+
File.open output_file, 'w' do |f|
|
|
58
|
+
dump = @items.map { |item| item.datas }
|
|
59
|
+
f.write dump.to_yaml
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def output_file
|
|
64
|
+
base = File.basename(parent_file).split '.'
|
|
65
|
+
base.push nil if base.count == 1
|
|
66
|
+
base[-1] = 'yaml'
|
|
67
|
+
|
|
68
|
+
File.join ['_data', base.join('.')]
|
|
32
69
|
end
|
|
33
70
|
|
|
34
|
-
def self.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
71
|
+
def self.from_file source_file
|
|
72
|
+
sl = SourceList.new File.readlines(source_file).map { |l| l.strip }.select { |i| i !~ /^#/ }
|
|
73
|
+
sl.parent_file = source_file
|
|
74
|
+
|
|
75
|
+
sl
|
|
38
76
|
end
|
|
39
77
|
end
|
|
40
78
|
end
|
data/lib/purdie/version.rb
CHANGED
data/purdie.gemspec
CHANGED
|
@@ -18,25 +18,25 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
19
|
spec.require_paths = ['lib']
|
|
20
20
|
|
|
21
|
-
spec.add_dependency 'thor',
|
|
22
|
-
spec.add_dependency 'httparty',
|
|
23
|
-
spec.add_dependency 'deep_merge',
|
|
24
|
-
spec.add_dependency 'dotenv',
|
|
25
|
-
spec.add_dependency 'flickraw-cached',
|
|
26
|
-
spec.add_dependency 'soundcloud'
|
|
27
|
-
spec.add_dependency 'activesupport'
|
|
28
|
-
spec.add_dependency 'google-api-client'
|
|
21
|
+
spec.add_dependency 'thor', '~> 0.19'
|
|
22
|
+
spec.add_dependency 'httparty', '~> 0.13'
|
|
23
|
+
spec.add_dependency 'deep_merge', '~> 1.0'
|
|
24
|
+
spec.add_dependency 'dotenv', '~> 2.0'
|
|
25
|
+
spec.add_dependency 'flickraw-cached', '= 20120701'
|
|
26
|
+
spec.add_dependency 'soundcloud', '~> 0.3'
|
|
27
|
+
spec.add_dependency 'activesupport', '~> 4.2'
|
|
28
|
+
spec.add_dependency 'google-api-client', '~> 0.8'
|
|
29
29
|
|
|
30
|
-
spec.add_development_dependency 'bundler',
|
|
31
|
-
spec.add_development_dependency 'rake',
|
|
32
|
-
spec.add_development_dependency 'rspec',
|
|
33
|
-
spec.add_development_dependency 'aruba',
|
|
34
|
-
spec.add_development_dependency 'guard',
|
|
35
|
-
spec.add_development_dependency 'guard-rspec',
|
|
36
|
-
spec.add_development_dependency 'guard-cucumber',
|
|
30
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
|
31
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
|
32
|
+
spec.add_development_dependency 'rspec', '~> 3.2'
|
|
33
|
+
spec.add_development_dependency 'aruba', '~> 0.5'
|
|
34
|
+
spec.add_development_dependency 'guard', '~> 2.12'
|
|
35
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.5'
|
|
36
|
+
spec.add_development_dependency 'guard-cucumber', '~> 1.5'
|
|
37
37
|
spec.add_development_dependency 'terminal-notifier-guard', '~> 1.6'
|
|
38
|
-
spec.add_development_dependency 'coveralls',
|
|
39
|
-
spec.add_development_dependency 'webmock',
|
|
40
|
-
spec.add_development_dependency 'vcr',
|
|
41
|
-
spec.add_development_dependency 'timecop',
|
|
38
|
+
spec.add_development_dependency 'coveralls', '~> 0.7'
|
|
39
|
+
spec.add_development_dependency 'webmock', '~> 1.20'
|
|
40
|
+
spec.add_development_dependency 'vcr', '~> 2.9'
|
|
41
|
+
spec.add_development_dependency 'timecop', '~> 0.7'
|
|
42
42
|
end
|