trendious 0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2906af90658cc85c3b8b5921ebf229d95da9e5ff
4
+ data.tar.gz: 4ba8017325c6d46564380ff40b88a9a5104fdf85
5
+ SHA512:
6
+ metadata.gz: 028c5e7e5c733deba674e3b4bbaf690a2b2bff829b581ba3a4b4cdc78e4c318344fc021d842c377b6563e95d522e5a332d86be35e826d7c0bea93e1327e0bd9a
7
+ data.tar.gz: cd88683046a2d0c6f07dd729670b32eb4971fb781ffec541a9705655d9f125fcb0b9c119366b33e4f270f147a34af5ad91c1cfcb9f074a4cb9433239149febdb
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'activesupport'
@@ -0,0 +1,21 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activesupport (4.2.4)
5
+ i18n (~> 0.7)
6
+ json (~> 1.7, >= 1.7.7)
7
+ minitest (~> 5.1)
8
+ thread_safe (~> 0.3, >= 0.3.4)
9
+ tzinfo (~> 1.1)
10
+ i18n (0.7.0)
11
+ json (1.8.3)
12
+ minitest (5.8.1)
13
+ thread_safe (0.3.5)
14
+ tzinfo (1.2.2)
15
+ thread_safe (~> 0.1)
16
+
17
+ PLATFORMS
18
+ ruby
19
+
20
+ DEPENDENCIES
21
+ activesupport
@@ -0,0 +1,81 @@
1
+ ## About Trendious
2
+
3
+ Trendious helps you to get world best reviews from the fans about movies.
4
+
5
+ With the following request
6
+ ```
7
+ trendious -q "Forrest Gump"
8
+ ```
9
+ You should be able to get something similar to this
10
+
11
+ ```
12
+ [0] Forrest Gump!
13
+ [1] Forrest Gump by Cutestreak Designs, 2012.
14
+ [2] 8-Bit Cinema Presents: Forrest Gump
15
+ [3] Forrest Gump Vs The Shawshank Redemption
16
+ [4] Forrest Gump 2: The Maze Runner
17
+ [5] Forrest Gump (1994) movie memories by MovieManCHAD
18
+ [6] Forrest Gump : After credit scene
19
+ [7] 12 Life Lessons Forrest Gump Taught Us
20
+ [8] Celebrate Forrest Gump's 20th Anniversary with an Honest Trailer
21
+ [9] Forrest Gump Gets Another Run With IMAX Release
22
+ ```
23
+
24
+ To read the desired post you can easily access it by the index
25
+
26
+ ```
27
+ trendious -q "Shawshank" -r 0
28
+ ```
29
+
30
+ ```
31
+ The Shawshank Redemption: An emotional masterpiece
32
+ Website link: http://moviepilot.com/reviews/2855793
33
+
34
+ Today I watched The Shawshank Redemption for the first time and I know that this film is considered one of the best films of all time, so my expectations were high to say the least. I wasn't disappointed at all this film is outstanding, so now I'm going to explain that in more detail. There are a ton of positives to this film, which include: a fantastic story, great story progression, great acting and there is a lot of emotion felt for the characters. To expand, the story in this film is fantastic and I was hooked from start to finish; with its 2 and a half hour run time I was afraid it could be slow, however the film had excellent story progression and I wasn't bored for a second. Any film with Morgan Freeman narrating is always good and makes this film even better, finally there is a lot of emotion in this film and in certain moments they are genuinely sad; the emotion in the film is not to the extent of 12 years a slave but it is still great not all films can truly move me. On the side of negatives there aren't any, it is a perfect film. Overall this film is a masterpiece and as I can't find any negatives at all I have to rate this film: 10/10
35
+
36
+ ```
37
+
38
+ To change page of search result you can do it by adding key `-p`
39
+
40
+ ```
41
+ trendious -q "Marvel" -p 3
42
+ ```
43
+
44
+ Other killer feature with this application is to accessing trending, that's from where this application took his name.
45
+
46
+ ```
47
+ trendious -T
48
+ ```
49
+ ```
50
+ [0] Great Directors
51
+ [1] Superheroes
52
+ [2] Oscars
53
+ [3] Pixar Movies
54
+ [4] Hidden Gems
55
+ [5] Sci-Fi Movies
56
+ [6] Comedy Movies
57
+ [7] Zombies
58
+ [8] Action Movies
59
+ ...
60
+ ```
61
+
62
+ To check the trending for the following tag add `-t`
63
+
64
+ ```
65
+ trendious -T -t 2
66
+ ```
67
+
68
+ Here you as well can change the page and read the relevant post with `-r [index]`
69
+
70
+ ```
71
+ [0] The Revenant: The Stage Is Set For Leo's Crowning Glory
72
+ [1] 'The Revenant' Poster and its Sheer Beauty
73
+ [2] August: Osage County: Julia Roberts Gets Meryl Streep to Eat Her Bitchin' Fish
74
+ [3] Why can't Leonardo DiCaprio win an Oscar?
75
+ [4] LEGO Movie Snubbed. Budapest Leading. This Years Oscars Is Full Of Surprises!
76
+ [5] Will This Awesome 'How to Train Your Dragon 2' Making-Of Documentary Ensure The Movie Wins The Oscar?
77
+ [6] "Everything Is Awesome" Was Pretty Awesome Performed Live at the Oscars
78
+ [7] 12 Years a Slave (2013) - Non-Spoiler Review
79
+ [8] Two Jews On The Oscars
80
+ [9] New York Film Festival 2014: Whiplash Movie Review
81
+ ```
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative "../lib/trendious"
4
+
5
+ Trendious::Application.new.run
@@ -0,0 +1 @@
1
+ require_relative './trendious/all'
@@ -0,0 +1,3 @@
1
+ Dir.entries(File.expand_path('.', File.dirname(__FILE__))).sort.each {|f|
2
+ require File.expand_path("./#{f}", File.dirname(__FILE__)) if f =~ /\.rb/i
3
+ }
@@ -0,0 +1,56 @@
1
+ require 'optparse'
2
+
3
+ module Trendious
4
+ class Application
5
+ def initialize
6
+ @client = Trendious::Client.new
7
+ @options = {}
8
+ end
9
+
10
+ def run
11
+ OptionParser.new do |opts|
12
+ opts.banner = "Usage: trendious [options]"
13
+ opts.on("-q", "--query [String]", String, "Search by name") {|o| @options[:query] = o }
14
+ opts.on("-R", "--read [Integer]", Integer, "Read entry with index") {|o| @options[:read] = o }
15
+ opts.on("-p", "--page [Integer]", Integer, "Select N page") {|o| @options[:page] = o }
16
+ opts.on("-T", "--tags", "Show tags") {|o| @options[:tags] = o }
17
+ opts.on("-t", "--trending [Integer]", Integer, "Select trending by index") {|o| @options[:trending] = o}
18
+ opts.on("-v", "--version", "Display current Trendious version") {|o| @options[:version] = o }
19
+ end.parse!
20
+
21
+ puts output
22
+ end
23
+
24
+ private
25
+
26
+ def tags
27
+ @client.tags.entries
28
+ end
29
+
30
+ def posts
31
+ @client.posts_by_name(@options[:query], @options[:page]).entries
32
+ end
33
+
34
+ def read_entry(entry_by_idx)
35
+ entry = entry_by_idx.read
36
+
37
+ body = entry["body"] || entry["html_body"]
38
+
39
+ entry["title"] + "\n" +
40
+ "Website link: #{entry_by_idx.link}\n\n" +
41
+ body.gsub!(/<.*?>/, " ")
42
+ end
43
+
44
+ def output
45
+ return Trendious::VERSION if @options[:version]
46
+ if @options[:tags]
47
+ return read_entry(tags[@options[:trending]].trending(@options[:page]).entries[@options[:read]]) if @options[:read]
48
+ return tags[@options[:trending]].trending(@options[:page]).entries.each_with_index.map{|p,idx| "[#{idx}] #{p.title}" } if @options[:trending]
49
+ tags.each_with_index.map{|tag, idx| "[#{idx}] #{tag.name}" }
50
+ elsif @options[:query]
51
+ return read_entry(posts[@options[:read]]) if @options[:read]
52
+ posts.each_with_index.map{|p,idx| "[#{idx}] #{p.name}" }
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,31 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'json'
4
+
5
+ module Trendious
6
+ class Client
7
+ def initialize
8
+ end
9
+
10
+ def search(hash = {})
11
+ query = {q: "marvel"}.merge!(hash)
12
+ query = query.map {|k,v| "#{k}=#{v}" }.join("&")
13
+ uri = URI("http://api.moviepilot.com/v3/search?#{query}")
14
+ puts "Request URI: #{uri}"
15
+ Trendious::Search.new Net::HTTP.get(uri)
16
+ end
17
+
18
+ def tags
19
+ Trendious::Tags.new Net::HTTP.get(URI('http://api.moviepilot.com/v4/tags'))
20
+ end
21
+
22
+ def posts_by_name(name, page = 0)
23
+ form_name = name.gsub!(' ', '%20')
24
+ search({q: name, without_type: "user,tag", page: page})
25
+ end
26
+
27
+ def tags_by_name(name, page = 0)
28
+ search({q: name, with_type: "tag", page: page})
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,15 @@
1
+ module Trendious
2
+ class Collection
3
+ def first
4
+ entries.first
5
+ end
6
+
7
+ def last
8
+ entries.last
9
+ end
10
+
11
+ def [] idx
12
+ entries[idx]
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,33 @@
1
+ require 'active_support/inflector'
2
+
3
+ module Trendious
4
+ class Entry
5
+ attr_reader :entry
6
+
7
+ def initialize hash
8
+ @entry = hash
9
+
10
+ @entry.keys.each do |k|
11
+ self.class.instance_eval do
12
+ define_method(k) do
13
+ @entry[k]
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ def link
20
+ URI.join "http://moviepilot.com", type_path, id.to_s
21
+ end
22
+
23
+ def type_path
24
+ "#{type.pluralize}/"
25
+ end
26
+
27
+ def read
28
+ uri = URI.join "http://api.moviepilot.com", "/v4/", type_path, id.to_s
29
+
30
+ JSON.parse(Net::HTTP.get(uri))
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,4 @@
1
+ module Trendious
2
+ class Post < Entry
3
+ end
4
+ end
@@ -0,0 +1,17 @@
1
+ module Trendious
2
+ class Search < Collection
3
+ attr_reader :response
4
+
5
+ def initialize(res)
6
+ @response = JSON.parse(res)
7
+ end
8
+
9
+ def entries
10
+ @response['search'].map {|h| Post.new h }
11
+ end
12
+
13
+ def total
14
+ @response['total']
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module Trendious
2
+ class Tag < Entry
3
+ def trending(page = 0)
4
+ @page = page
5
+ fetch('trending')
6
+ end
7
+
8
+ def recent(page = 0)
9
+ @page = page
10
+ fetch('recent')
11
+ end
12
+
13
+ private
14
+
15
+ def fetch(name)
16
+ uri = URI("http://api.moviepilot.com/v4/tags/#{slug}/recent?page=#{@page}")
17
+ puts "Request URI: #{uri}"
18
+ Trendious::Tags.new Net::HTTP.get(uri)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module Trendious
2
+ class Tags < Collection
3
+ attr_reader :response
4
+
5
+ def initialize(res)
6
+ @response = JSON.parse(res)
7
+ end
8
+
9
+ def entries
10
+ @response['collection'].map {|h| Tag.new h }
11
+ end
12
+
13
+ def find(name)
14
+ entries.select {|tag| tag.name.downcase.include? name.downcase }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module Trendious
2
+ VERSION = '0.1'
3
+ end
@@ -0,0 +1,17 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'trendious/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'trendious'
7
+ s.version = Trendious::VERSION
8
+ s.date = '2015-10-25'
9
+ s.summary = "trendious"
10
+ s.description = "Trendious helps you to get world best reviews from the fans about movies."
11
+ s.authors = ["Viacheslav Rudkovskyi"]
12
+ s.email = 'rrubyist@gmail.com'
13
+ s.files = `git ls-files`.split("\n")
14
+ s.executables = ['trendious']
15
+ s.homepage = 'http://github.com/rubyruby15/trendious'
16
+ s.license = 'MIT'
17
+ end
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: trendious
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Viacheslav Rudkovskyi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Trendious helps you to get world best reviews from the fans about movies.
14
+ email: rrubyist@gmail.com
15
+ executables:
16
+ - trendious
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - Gemfile
21
+ - Gemfile.lock
22
+ - README.md
23
+ - bin/trendious
24
+ - lib/trendious.rb
25
+ - lib/trendious/all.rb
26
+ - lib/trendious/application.rb
27
+ - lib/trendious/client.rb
28
+ - lib/trendious/collection.rb
29
+ - lib/trendious/entry.rb
30
+ - lib/trendious/post.rb
31
+ - lib/trendious/search.rb
32
+ - lib/trendious/tag.rb
33
+ - lib/trendious/tags.rb
34
+ - lib/trendious/version.rb
35
+ - trendious.gemspec
36
+ homepage: http://github.com/rubyruby15/trendious
37
+ licenses:
38
+ - MIT
39
+ metadata: {}
40
+ post_install_message:
41
+ rdoc_options: []
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project:
56
+ rubygems_version: 2.2.2
57
+ signing_key:
58
+ specification_version: 4
59
+ summary: trendious
60
+ test_files: []