module Tumblr::Post
Constants
- DATA_POST_TYPES
- STANDARD_POST_OPTIONS
- VALID_POST_TYPES
Public Instance Methods
audio(blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 68 def audio(blog_name, options = {}) valid_opts = STANDARD_POST_OPTIONS + [:data, :caption, :external_url] validate_options(valid_opts, options) validate_no_collision options, [:data, :external_url] options[:type] = 'audio' extract_data!(options) post(post_path(blog_name), options) end
chat(blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 60 def chat(blog_name, options = {}) valid_opts = STANDARD_POST_OPTIONS + [:title, :conversation] validate_options(valid_opts, options) options[:type] = 'chat' post(post_path(blog_name), options) end
create_post(type, blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 88 def create_post(type, blog_name, options = {}) if VALID_POST_TYPES.include?(type) send(type, blog_name, options) else raise ArgumentError.new "\"#{type}\" is not a valid post type" end end
delete(blog_name, id)
click to toggle source
# File lib/tumblr/post.rb, line 21 def delete(blog_name, id) post(blog_path(blog_name, 'post/delete'), :id => id) end
edit(blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 10 def edit(blog_name, options = {}) convert_source_array :source, options extract_data!(options) if DATA_POST_TYPES.include?(options[:type]) post(blog_path(blog_name, 'post/edit'), options) end
link(blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 52 def link(blog_name, options = {}) valid_opts = STANDARD_POST_OPTIONS + [:title, :url, :description] validate_options(valid_opts, options) options[:type] = 'link' post(post_path(blog_name), options) end
photo(blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 25 def photo(blog_name, options = {}) valid_opts = STANDARD_POST_OPTIONS + [:caption, :link, :data, :source, :photoset_layout] validate_options(valid_opts, options) validate_no_collision options, [:data, :source] convert_source_array :source, options options[:type] = 'photo' extract_data!(options) post(post_path(blog_name), options) end
quote(blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 36 def quote(blog_name, options = {}) valid_opts = STANDARD_POST_OPTIONS + [:quote, :source] validate_options(valid_opts, options) options[:type] = 'quote' post(post_path(blog_name), options) end
reblog(blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 17 def reblog(blog_name, options = {}) post(blog_path(blog_name, 'post/reblog'), options) end
text(blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 44 def text(blog_name, options = {}) valid_opts = STANDARD_POST_OPTIONS + [:title, :body] validate_options(valid_opts, options) options[:type] = 'text' post(post_path(blog_name), options) end
video(blog_name, options = {})
click to toggle source
# File lib/tumblr/post.rb, line 78 def video(blog_name, options = {}) valid_opts = STANDARD_POST_OPTIONS + [:data, :embed, :caption] validate_options(valid_opts, options) validate_no_collision options, [:data, :embed] options[:type] = 'video' extract_data!(options) post(post_path(blog_name), options) end
Private Instance Methods
convert_source_array(key, options)
click to toggle source
Allow source to be passed as an Array
# File lib/tumblr/post.rb, line 103 def convert_source_array(key, options) if options.has_key?(key) && options[key].kind_of?(Array) options[key].each.with_index do |src, idx| options["#{key.to_s}[#{idx}]"] = src end options.delete(key) end end
extract_data!(options)
click to toggle source
Look for the various ways that data can be passed, and normalize the result in this hash
# File lib/tumblr/post.rb, line 114 def extract_data!(options) if options.has_key?(:data) data = options.delete :data if Array === data data.each.with_index do |filepath, idx| if filepath.is_a?(Faraday::UploadIO) options["data[#{idx}]"] = filepath else mime_type = extract_mimetype(filepath) options["data[#{idx}]"] = Faraday::UploadIO.new(filepath, mime_type) end end elsif data.is_a?(Faraday::UploadIO) options["data"] = data else mime_type = extract_mimetype(data) options["data"] = Faraday::UploadIO.new(data, mime_type) end end end
extract_mimetype(filepath)
click to toggle source
# File lib/tumblr/post.rb, line 136 def extract_mimetype(filepath) mime = MIME::Types.type_for(filepath) if (mime.empty?) mime_type = "application/octet-stream" else mime_type = MIME::Types.type_for(filepath)[0].content_type end mime_type end
post_path(blog_name)
click to toggle source
# File lib/tumblr/post.rb, line 98 def post_path(blog_name) blog_path(blog_name, 'post') end