yourub 1.1.1 → 2.0.0

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -6
  3. data/Gemfile +15 -1
  4. data/README.md +36 -25
  5. data/Rakefile +18 -0
  6. data/config/yourub.yml +1 -1
  7. data/lib/yourub/client.rb +38 -10
  8. data/lib/yourub/config.rb +34 -1
  9. data/lib/yourub/default.rb +1 -1
  10. data/lib/yourub/meta_search.rb +134 -0
  11. data/lib/yourub/rest/api.rb +6 -0
  12. data/lib/yourub/rest/categories.rb +39 -0
  13. data/lib/yourub/rest/request.rb +22 -4
  14. data/lib/yourub/rest/search.rb +11 -149
  15. data/lib/yourub/rest/videos.rb +38 -0
  16. data/lib/yourub/result.rb +41 -0
  17. data/lib/yourub/validator.rb +4 -11
  18. data/lib/yourub/version.rb +3 -3
  19. data/lib/yourub.rb +2 -3
  20. data/spec/fixtures/categories_list.json +1 -0
  21. data/spec/fixtures/categories_list_formatted.json +1 -0
  22. data/spec/fixtures/search_list.json +1 -0
  23. data/spec/fixtures/single_video.json +1 -0
  24. data/spec/fixtures/video_with_200_views.json +1 -0
  25. data/spec/fixtures/videos_list.json +1 -0
  26. data/spec/spec_helper.rb +11 -0
  27. data/spec/support/shared_context_result_load_fixture.rb +11 -0
  28. data/spec/support/shared_context_result_search_list.rb +16 -0
  29. data/spec/support/shared_context_result_search_list_with_single_videos.rb +24 -0
  30. data/spec/support/shared_context_stub_client_connection.rb +18 -0
  31. data/spec/yourub/client_spec.rb +29 -72
  32. data/spec/yourub/count_filter_spec.rb +4 -5
  33. data/spec/yourub/count_spec.rb +39 -0
  34. data/spec/yourub/integration.rb +105 -0
  35. data/spec/yourub/meta_search_spec.rb +141 -0
  36. data/spec/yourub/rest/categories_spec.rb +33 -0
  37. data/spec/yourub/rest/request_spec.rb +32 -0
  38. data/spec/yourub/rest/videos_spec.rb +24 -0
  39. data/spec/yourub/validator_spec.rb +54 -57
  40. data/yourub.gemspec +0 -5
  41. metadata +39 -66
  42. data/lib/yourub/cli.rb +0 -20
  43. data/lib/yourub/reader.rb +0 -21
  44. data/spec/fixtures/categories.json +0 -0
  45. data/spec/fixtures/category.json +0 -0
  46. data/spec/helper.rb +0 -26
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f4ebd119d0c0ca1c91826ac02c6fd172fc0f9119
4
- data.tar.gz: 5c4ceed6b992398e35b173e44a3b29f31b065ca0
3
+ metadata.gz: 3dd41972b4391d0680edfb6a53c4ffac3251ec10
4
+ data.tar.gz: 56d7304673339a8ee102c0ac93e5736f877453f4
5
5
  SHA512:
6
- metadata.gz: 4a460508012396828652e043c2f2bc5f90c61651145a78117e2f962b3a6ad545fe79722c188037f8430802eaa4209f99543b932db574c669aa5b931eb72f31a7
7
- data.tar.gz: 947f855feac11c2ce095c102dbd01a42898750dae9f3411afb0c2fbf354928c6c5a073b41c5b1b0911c38cd9eebcc1595ca21193cb7251bb4a27d0e213f9a280
6
+ metadata.gz: 197357a9f8930cf34a8230c871d7315df3361b3db59f6c42df6ace9e5308770fd9cff323b961fd02d4936006d6dd9e7edbeeb3fe7bc1f3d8636350538c909e35
7
+ data.tar.gz: e69618e8f18d5aa6eb9d8a76bf0f949cac2ed1effcd57ccce6a837917e1628d8966338c41bc7c7391b6bb9b3f825e99d8026d02b10cf9871b49bca9402376736
data/.gitignore CHANGED
@@ -1,20 +1,17 @@
1
1
  *.gem
2
2
  *.rbc
3
3
  *.sublime-workspace
4
+ spec/yourub/integration_spec.rb
4
5
  .bundle
5
6
  .config/*
6
7
  .yardoc
7
8
  Gemfile.lock
8
9
  InstalledFiles
9
10
  _yardoc
10
- coverage
11
- doc/
11
+ coverage/*
12
+ doc/*
12
13
  lib/bundler/man
13
14
  lib/yourub/DEVELOPER_KEY
14
15
  lib/yourub/cli.rb
15
16
  pkg
16
17
  rdoc
17
- spec/reports
18
- test/tmp
19
- test/version_tmp
20
- tmp
data/Gemfile CHANGED
@@ -1,5 +1,19 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in yourub.gemspec
3
+ gem 'rake'
4
+ gem 'yard'
5
+
6
+ group :development do
7
+ gem 'byebug'
8
+ end
9
+
10
+ group :test do
11
+ gem 'coveralls'
12
+ gem 'rspec', '>= 3.00'
13
+ gem 'rubocop', '>= 0.27'
14
+ gem 'simplecov', '>= 0.9'
15
+ gem 'webmock'
16
+ end
17
+
4
18
  gemspec
5
19
 
data/README.md CHANGED
@@ -20,7 +20,8 @@ Or install it yourself as:
20
20
  ## Usage
21
21
 
22
22
  Get a developer key as explained [here](http://www.youtube.com/watch?v=Im69kzhpR3I)
23
- If you are using rails, create a app/config/yourub.yml file as follow:
23
+ After that, you have 2 ways to use the client. If you want to use it in your
24
+ rails app, create a app/config/yourub.yml file as follow:
24
25
  ```
25
26
  yourub_defaults: &yourub_defaults
26
27
  developer_key: 'YoUrDevEl0PerKey'
@@ -40,44 +41,57 @@ test:
40
41
  <<: *yourub_defaults
41
42
  ```
42
43
 
43
- ### Available parameters
44
- `:query` String, example `aliens`
45
-
46
- `:id` Sting, a valid youtube video id, example `NisCkxU544c`. If this parameter is set, tha others are ignored
47
-
48
- `:country` String, one or more alpha-2 country codes [ISO 3166-1](http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm), example `US` or `IT, DE`. The default one is `US`
49
-
50
- `:category` String, example `comedy`. It accept the wildcard `all`, that retrieves videos for all the category for the given nation, or the default one (US) if no one is given
51
-
52
- `:count_filter` Hash, example `{views: ">= 100"}` or `{views: "== 600"}`
44
+ If you want to use it from the console, or in another program, you can simply
45
+ pass an hash containing the needed option
46
+ ```ruby
47
+ options = { developer_key: 'mySecretKey',
48
+ application_name: 'yourub',
49
+ application_version: 2.0,
50
+ log_level: 3 }
53
51
 
54
- `:max_results` Integer, between 1 and 50
52
+ client = Yourub::Client.new(options)
53
+ ```
55
54
 
56
- `:order` String, one of these: 'date', 'rating', 'relevance', 'title', 'videocount', 'viewcount'. The default one is `'relevance'`
57
55
 
58
- It's necessary at least one of this parameters to start a search: `:country`, `:category`, `:query`, `:id`
59
-
60
56
  ### Examples
61
57
 
62
58
  For example, to find the most recent videos in the category "sports" in Germany
63
59
  ```ruby
64
60
  client = Yourub::Client.new
65
- client.search(country: "DE", category: "sports", order: 'date')
66
- client.videos
61
+ client.search(country: "DE", category: "sports", order: 'date') do |v|
62
+ puts v
63
+ end
67
64
  ```
68
65
 
69
66
  To find video for a specific thema, use the parameter query
70
67
 
71
68
  ```ruby
72
69
  client = Yourub::Client.new
73
- client.search(query: "aliens")
74
- client.videos
70
+ client.search(query: "aliens") do |v|
71
+ puts v
72
+ end
75
73
  ```
76
74
  that is the content of the response:
77
75
  ```
78
76
  [{"kind"=>"youtube#video", "etag"=>"\"N5Eg36Gl054SUNiWWc-Su3t5O-k/U6AzLXvcnZt2WFqpnq9_dksV7DA\"", "id"=>"NisCkxU544c", "snippet"=>{"publishedAt"=>"2009-04-05T05:20:10.000Z", "channelId"=>"UCCHcEUksSVKsRDH86j77Ntg", "title"=>"Like A Boss (ft. Seth Rogen) - Uncensored Version", "description"=>"http://www.itunes.com/thelonelyisland\r\n\r\nThe new single from The Lonely Island's debut album \"INCREDIBAD\" In stores now!\r\n\r\nFeaturing Seth Rogen.\r\n\r\nThe Lonely Island is Andy Samberg, Akiva Schaffer & Jorma Taccone.", "thumbnails"=>{"default"=>{"url"=>"https://i1.ytimg.com/vi/NisCkxU544c/default.jpg", "width"=>120, "height"=>90}, "medium"=>{"url"=>"https://i1.ytimg.com/vi/NisCkxU544c/mqdefault.jpg", "width"=>320, "height"=>180}, "high"=>{"url"=>"https://i1.ytimg.com/vi/NisCkxU544c/hqdefault.jpg", "width"=>480, "height"=>360}, "standard"=>{"url"=>"https://i1.ytimg.com/vi/NisCkxU544c/sddefault.jpg", "width"=>640, "height"=>480}, "maxres"=>{"url"=>"https://i1.ytimg.com/vi/NisCkxU544c/maxresdefault.jpg", "width"=>1280, "height"=>720}}, "channelTitle"=>"thelonelyisland", "categoryId"=>"23", "liveBroadcastContent"=>"none"}, "statistics"=>{"viewCount"=>"120176425", "likeCount"=>"594592", "dislikeCount"=>"15121", "favoriteCount"=>"0", "commentCount"=>"208109"}}]
79
77
  ```
78
+ ### Available parameters
79
+ `:query` String, example `aliens`
80
+
81
+ `:id` Sting, a valid youtube video id, example `NisCkxU544c`. If this parameter is set, tha others are ignored
82
+
83
+ `:country` String, one or more alpha-2 country codes [ISO 3166-1](http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm), example `US` or `IT, DE`. The default one is `US`
84
+
85
+ `:category` String, example `comedy`. It accept the wildcard `all`, that retrieves videos for all the category for the given nation, or the default one (US) if no one is given
86
+
87
+ `:count_filter` Hash, example `{views: ">= 100"}` or `{views: "== 600"}`
80
88
 
89
+ `:max_results` Integer, between 1 and 50
90
+
91
+ `:order` String, one of these: 'date', 'rating', 'relevance', 'title', 'videocount', 'viewcount'. The default one is `'relevance'`
92
+
93
+ It's necessary at least one of this parameters to start a search: `:country`, `:category`, `:query`, `:id`
94
+
81
95
  ### Methods
82
96
  `search`, search youtube videos for the given parameters
83
97
  ```ruby
@@ -93,13 +107,10 @@ client.get_views("G2b0OIkTraI")
93
107
  ```
94
108
 
95
109
 
96
- To have more values back, use the option `extended_info`
97
- ##TODO
98
110
 
99
- 1. adding a CLI
100
- 2. the result should be yield, and not saved in an instance variable
101
- 3. replace GoogleApiClient
102
- 4. Implementing playlist
111
+ ##TODO
112
+ * the result should be yield, and not saved in an instance variable
113
+ * Implementing playlist
103
114
 
104
115
  ## Contributing
105
116
 
data/Rakefile CHANGED
@@ -1 +1,19 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'bundler'
3
+ Bundler::GemHelper.install_tasks
4
+
5
+ task :erd do
6
+ FORMAT = 'svg'
7
+ `bundle exec ruby ./etc/erd.rb > ./etc/erd.dot`
8
+ `dot -T #{FORMAT} ./etc/erd.dot -o ./etc/erd.#{FORMAT}`
9
+ end
10
+
11
+ require 'rspec/core/rake_task'
12
+ RSpec::Core::RakeTask.new(:spec)
13
+
14
+ task test: :spec
15
+
16
+ require 'yard'
17
+ YARD::Rake::YardocTask.new
18
+
19
+ task default: [:spec]
data/config/yourub.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  yourub_defaults: &yourub_defaults
2
- developer_key: 'YOURDEVELOPERKEY'
2
+ developer_key: 'YourDeveloperKey'
3
3
  youtube_api_service_name: 'youtube'
4
4
  youtube_api_version: 'v3'
5
5
  application_name: "yourub"
data/lib/yourub/client.rb CHANGED
@@ -1,14 +1,39 @@
1
- require 'yourub/rest/api'
1
+ require 'yourub/meta_search'
2
2
  require 'google/api_client'
3
3
 
4
4
  module Yourub
5
5
  class Client < Google::APIClient
6
- include Yourub::REST::API
6
+ include Yourub::MetaSearch
7
7
 
8
8
  attr_reader :videos
9
- attr_accessor :config
10
9
 
11
- def initialize()
10
+ # The Yourub::Client is a subclass of the Google::APIClient.
11
+ #
12
+ # @see http://www.rubydoc.info/github/google/google-api-ruby-client/Google/APIClient
13
+ # In order to initialize the client, you have either to provide
14
+ # a configuration file 'config/yourub.yml' in your main application folder
15
+ # or to pass an hash in the initialization.
16
+ # @example
17
+ # #passing an hash
18
+ # options = { developer_key: "a_secret_key",
19
+ # application_name: "my_app",
20
+ # application_version: 2.0,
21
+ # log_level: "INFO"}
22
+ # client = Yourub::Client.new(options)
23
+ #
24
+ # If you don't provide all the values, default values will be used.The only
25
+ # mandatory value is the developer_key
26
+ #
27
+ # @example
28
+ # #assuming that you have a file in config/yourub.yml (see the example in
29
+ # #the source repository)
30
+ # client = Yourub::Client.new()
31
+
32
+ def initialize(options = {})
33
+ unless options.empty?
34
+ Yourub::Config.override_config_file(options)
35
+ end
36
+
12
37
  args = {
13
38
  :key => config.developer_key,
14
39
  :application_name => config.application_name,
@@ -18,18 +43,21 @@ module Yourub
18
43
  super(args)
19
44
  end
20
45
 
21
- def config
22
- Yourub::Config
23
- end
24
-
46
+ # @return countries [Array] contain a list of the available alpha-2 country codes ISO 3166-1
25
47
  def countries
26
48
  Yourub::Validator.available_countries
27
49
  end
28
50
 
51
+ # it returns the youtube service object
52
+ # @see http://www.rubydoc.info/github/google/google-api-ruby-client/Google/APIClient#discovered_api-instance_method
29
53
  def youtube_api
30
- @youtube_api ||= self.discovered_api(config.youtube_api_service_name,
31
- config.youtube_api_version)
54
+ @youtube_api ||= self.discovered_api(
55
+ config.youtube_api_service_name, config.youtube_api_version
56
+ )
32
57
  end
33
58
 
59
+ def config
60
+ Yourub::Config
61
+ end
34
62
  end
35
63
  end
data/lib/yourub/config.rb CHANGED
@@ -12,10 +12,43 @@ module Yourub
12
12
  def_delegators :@config, :developer_key,:youtube_api_service_name, :log_level,
13
13
  :youtube_api_version, :application_name, :application_version
14
14
 
15
+ MANDATORY_KEYS = [:developer_key, :application_name, :application_version, :log_level]
16
+
17
+ # It loads the configuration file
18
+ # this method is used in the railtie.rb and in the default.rb files
19
+ # @example
20
+ # Yourub::Config.load!(File.join("config", "yourub.yml"), 'yourub_defaults')
15
21
  def load!(file_path, environment)
16
22
  @config = OpenStruct.new YAML.load_file(file_path)[environment]
17
23
  end
18
- end
19
24
 
25
+
26
+ def override_config_file(hash)
27
+ opt = valid_options(hash)
28
+ @config = OpenStruct.new opt
29
+ end
30
+
31
+ private
32
+
33
+ def valid_options(hash)
34
+ opt = default_options.merge(hash)
35
+ raise ArgumentError.new(
36
+ "please provide an hash containing at least a valid developer_key"
37
+ ) if opt[:developer_key].empty?
38
+ return opt
39
+ end
40
+
41
+ def default_options
42
+ {
43
+ developer_key: "",
44
+ youtube_api_service_name: "youtube",
45
+ youtube_api_version: "v3",
46
+ application_name: "yourub",
47
+ application_version: Yourub::VERSION,
48
+ log_level: "WARN"
49
+ }
50
+ end
51
+
52
+ end
20
53
  end
21
54
  end
@@ -3,4 +3,4 @@ Yourub::Config.load!(File.join("config", "yourub.yml"), 'yourub_defaults')
3
3
  logger = Logger.new(STDOUT)
4
4
  logger.level = Logger.const_get(Yourub::Config.log_level.upcase)
5
5
 
6
- Yourub.logger = logger
6
+ Yourub.logger = logger
@@ -0,0 +1,134 @@
1
+ require 'yourub/rest/api'
2
+
3
+ module Yourub
4
+ module MetaSearch
5
+ include Yourub::REST::API
6
+
7
+ # Search through the youtube API, executing multiple queries where necessary
8
+ # @param criteria [Hash]
9
+ # @example
10
+ # client = Yourub::Client.new
11
+ # client.search(country: "DE", category: "sports", order: 'date')
12
+ def search(criteria)
13
+ begin
14
+ @api_options= {
15
+ :part => 'snippet',
16
+ :type => 'video',
17
+ :order => 'relevance',
18
+ :safeSearch => 'none',
19
+ }
20
+ @categories = []
21
+ @count_filter = {}
22
+ @criteria = Yourub::Validator.confirm(criteria)
23
+ search_by_criteria do |result|
24
+ yield result
25
+ end
26
+ rescue ArgumentError => e
27
+ Yourub.logger.error "#{e}"
28
+ end
29
+ end
30
+
31
+ # return the number of times a video was watched
32
+ # @param video_id[Integer]
33
+ # @example
34
+ # client = Yourub::Client.new
35
+ # client.get_views("G2b0OIkTraI")
36
+ def get_views(video_id)
37
+ params = { :id => video_id, :part => 'statistics' }
38
+ request = Yourub::REST::Videos.list(self,params)
39
+ v = Yourub::Result.format(request).first
40
+ v ? Yourub::CountFilter.get_views_count(v) : nil
41
+ end
42
+
43
+ # return an hash containing the metadata for the given video
44
+ # @param video_id[Integer]
45
+ # @example
46
+ # client = Yourub::Client.new
47
+ # client.get("G2b0OIkTraI")
48
+ def get(video_id)
49
+ params = {:id => video_id, :part => 'snippet,statistics'}
50
+ request = Yourub::REST::Videos.list(self,params)
51
+ Yourub::Result.format(request).first
52
+ end
53
+
54
+ private
55
+
56
+ def search_by_criteria
57
+ merge_criteria_with_api_options
58
+ retrieve_categories
59
+ retrieve_videos do |res|
60
+ yield res
61
+ end
62
+ end
63
+
64
+ def merge_criteria_with_api_options
65
+ mappings = {query: :q, max_results: :maxResults, country: :regionCode}
66
+ @api_options.merge! @criteria
67
+ @api_options.keys.each do |k|
68
+ @api_options[ mappings[k] ] = @api_options.delete(k) if mappings[k]
69
+ end
70
+ end
71
+
72
+ def retrieve_categories
73
+ if @criteria.has_key? :category
74
+ @categories = Yourub::REST::Categories.for_country(self,@criteria[:country])
75
+ @categories = Yourub::Validator.valid_category(@categories, @criteria[:category])
76
+ end
77
+ end
78
+
79
+ def retrieve_videos
80
+ consume_criteria do |criteria|
81
+ begin
82
+ req = Yourub::REST::Search.list(self, criteria)
83
+ get_details_for_each_video(req) do |v|
84
+ yield v
85
+ end
86
+ rescue StandardError => e
87
+ Yourub.logger.error "Error #{e} retrieving videos for the criteria: #{criteria.to_s}"
88
+ end
89
+ end
90
+ end
91
+
92
+ def consume_criteria
93
+ to_consume = @api_options
94
+ if @criteria[:country]
95
+ @criteria[:country].each do |country|
96
+ to_consume[:regionCode] = country
97
+ consume_categories(to_consume) do |cat|
98
+ yield cat
99
+ end
100
+ end
101
+ else
102
+ yield to_consume
103
+ end
104
+ end
105
+
106
+ def consume_categories(to_consume)
107
+ if @categories.size > 0
108
+ @categories.each do |cat|
109
+ to_consume[:videoCategoryId] = cat.keys[0].to_i
110
+ yield to_consume
111
+ end
112
+ else
113
+ yield to_consume
114
+ end
115
+ end
116
+
117
+ def get_details_for_each_video(video_list)
118
+ video_list.data.items.each do |video_item|
119
+ v = Yourub::REST::Videos.single_video(self, video_item.id.videoId)
120
+ v = Yourub::Result.format(v)
121
+ if v && Yourub::CountFilter.accept?(v.first)
122
+ yield v.first
123
+ end
124
+ end
125
+ end
126
+
127
+ def add_video_to_search_result(entry)
128
+ if Yourub::CountFilter.accept?(entry)
129
+ @videos.push(entry)
130
+ end
131
+ end
132
+
133
+ end
134
+ end
@@ -1,4 +1,8 @@
1
+ #require 'yourub/rest/search'
2
+ require 'yourub/rest/request'
3
+ require 'yourub/rest/categories'
1
4
  require 'yourub/rest/search'
5
+ require 'yourub/rest/videos'
2
6
 
3
7
  module Yourub
4
8
  module REST
@@ -7,6 +11,8 @@ module Yourub
7
11
  # include Yourub::REST::Playlists
8
12
  # include Yourub::REST::Channels
9
13
  include Yourub::REST::Search
14
+ include Yourub::REST::Categories
15
+ include Yourub::REST::Videos
10
16
  end
11
17
  end
12
18
  end
@@ -0,0 +1,39 @@
1
+ require 'yourub/rest/request'
2
+
3
+ module Yourub
4
+ module REST
5
+ module Categories
6
+ class << self
7
+ # it returns an Array containing the categories for the given country,
8
+ # or the DEFAULT_COUNTRY if no countries was given.
9
+ # @param client[Yourub::Client]
10
+ # @param country[Array]
11
+ #
12
+ #
13
+ # @example
14
+ # client = Yourub::Client.new
15
+ # categories = Yourub::REST::Categories.for_country(client, ["US"])
16
+ #
17
+ def for_country(client, country)
18
+ categories = []
19
+ param = {"part" => "snippet","regionCode" => country }
20
+ categories_list = video_categories_list_request(client, param)
21
+ categories_list.data.items.each do |cat_result|
22
+ category_name = parse_name(cat_result["snippet"]["title"])
23
+ categories.push(cat_result["id"] => category_name)
24
+ end
25
+ return categories
26
+ end
27
+
28
+ private
29
+ def video_categories_list_request(client, params)
30
+ Yourub::REST::Request.new(client,"video_categories", "list", params)
31
+ end
32
+
33
+ def parse_name(name)
34
+ return name.gsub("/", "-").downcase.gsub(/\s+/, "")
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -2,25 +2,43 @@ module Yourub
2
2
  module REST
3
3
  class Request
4
4
  attr_reader :data, :status
5
-
5
+ #
6
+ # Once initializated, the Request object forward a request to
7
+ # youtube api, once the request is completed, the variables @status and @data are populated
8
+ #
6
9
  # @param client [Yourub::Client]
7
10
  # @param resource_type [String]
8
11
  # @param method [String]
9
12
  # @param params [Hash]
13
+ #
10
14
  # @return [Youtube::Request]
15
+ # @example
16
+ # Yourub::REST::Request.new(client,"video_categories", "list", param)
17
+ #
11
18
  def initialize(client, resource_type, method, params)
12
19
  @client = client
13
- @resource_type = resource_type
14
- @method = method
20
+ @resource_type = resource_type.to_sym
21
+ @method = method.to_sym
15
22
  @params = params
16
23
  perform
17
24
  end
18
25
 
26
+ private
27
+ #
28
+ # call the 'execute!' method on the client
29
+ #
30
+ # == Returns :
31
+ # The Request object with the variable @status and @data initialized
32
+ # @status [Int]
33
+ # @data [String]
34
+ #
19
35
  def perform
36
+ api_method =@client.youtube_api.send(@resource_type).send(@method)
20
37
  r = @client.execute!(
21
- :api_method => @client.youtube_api.send(@resource_type.to_sym).send(@method.to_sym),
38
+ :api_method => api_method,
22
39
  :parameters => @params
23
40
  )
41
+ #byebug
24
42
  @data = r.data
25
43
  @status = r.status
26
44
  end