tweetkit 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bbe5383237873cc70fc690eae61657b0641dc028dd7111d075ec3e69ec02655d
4
- data.tar.gz: a24ddbb318a39976f38efbc96d6819d2504f883a991774aa6d42c657a86d551b
3
+ metadata.gz: 3b07ebb4cb2a6e55ce6e360cc628b9ea213bc6f00b3b66a914272b178297a5d6
4
+ data.tar.gz: 3d931da262b922272d3547c0e7f0a0e49eebd540cc1a4c4389185c3dbc323dcf
5
5
  SHA512:
6
- metadata.gz: d6d7b9ac9f3b053d03fc722c30c110a818ebe8d8775df5ffa616751fdfcd0cb7d689c1f9d0e28a8e03e38ceff6ef322d7c05b15e48d3815b0e94482261eaa636
7
- data.tar.gz: c22139dfd9c9a8d79fc71b760645bfe9da4654da9bf136e64ef97a9d048396a240294e27547910fb6a0e9f8f9c1f96c0d1bc179491de7ca61aa7257dd2a018f9
6
+ metadata.gz: 3c4be49f6e7f30c633b52fce7a458cb0168a8f29d4e178effe289a5a2acd00ff6d2b4673b09e30434e33d0c422c18c83862a279042e22ea1c7b7d56d7d5866ed
7
+ data.tar.gz: a9dcd0fbac29cded9f8fe38712c1daa43c4945d0bfe07f96343385e4da3abd90958a7facfb551726c91de217ce0b500d36a6aa5dde301491ee9ef35fd973e893
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tweetkit (0.1.1)
4
+ tweetkit (0.1.2)
5
5
  faraday (>= 0.9)
6
6
  faraday_middleware (~> 1.0.0)
7
7
  simple_oauth (~> 0.3.0)
data/bin/console CHANGED
@@ -11,4 +11,19 @@ require "tweetkit"
11
11
  # Pry.start
12
12
 
13
13
  require "irb"
14
+
15
+ def reload!
16
+ puts 'Reloading ...'
17
+ # Main project directory.
18
+ root_dir = File.expand_path('..', __dir__)
19
+ # Directories within the project that should be reloaded.
20
+ reload_dirs = %w{lib}
21
+ # Loop through and reload every file in all relevant project directories.
22
+ reload_dirs.each do |dir|
23
+ Dir.glob("#{root_dir}/#{dir}/**/*.rb").each { |f| load(f) }
24
+ end
25
+ # Return true when complete.
26
+ true
27
+ end
28
+
14
29
  IRB.start(__FILE__)
@@ -1,33 +1,82 @@
1
1
  require 'json'
2
+ require 'pry'
2
3
 
3
4
  module Tweetkit
4
5
  class Response
5
- attr_accessor :expansions, :meta, :original_response, :tweets
6
+ attr_accessor :resources, :meta, :original_response, :tweets
6
7
 
7
8
  def initialize(response)
8
9
  @original_response = response.body
9
10
  parsed_response = JSON.parse(@original_response)
10
11
  @tweets = Tweetkit::Response::Tweets.new(parsed_response)
11
12
  @meta = Tweetkit::Response::Meta.new(@tweets.meta)
12
- @expansions = Tweetkit::Response::Expansions.new(@tweets.expansions)
13
+ @resources = Tweetkit::Response::Resources.new(@tweets.resources)
13
14
  end
14
15
 
15
- class Expansions
16
+ class Resources
16
17
  include Enumerable
17
18
 
18
- attr_accessor :expansions
19
+ VALID_RESOURCES = Set['users', 'tweets', 'media']
19
20
 
20
- def initialize(expansions)
21
- @expansions = expansions
21
+ attr_accessor :resources
22
+
23
+ def initialize(resources)
24
+ @resources = resources
25
+ build_and_normalize_resources(resources) unless resources.nil?
22
26
  end
23
27
 
24
- def method_missing(attribute, **args)
25
- data = expansions[attribute.to_s]
26
- data.empty? ? super : data
28
+ def build_and_normalize_resources(resources)
29
+ resources.each_key do |resource_type|
30
+ normalized_resource = build_and_normalize_resource(@resources[resource_type], resource_type)
31
+ instance_variable_set(:"@#{resource_type}", normalized_resource)
32
+ self.class.define_method(resource_type) { instance_variable_get("@#{resource_type}") }
33
+ end
34
+ end
35
+
36
+ def build_and_normalize_resource(resource, resource_type)
37
+ Tweetkit::Response::Resources::Resource.new(resource, resource_type)
27
38
  end
28
39
 
29
- def respond_to_missing?(method)
30
- expansions.respond_to? method
40
+ def method_missing(method, **args)
41
+ return nil if VALID_RESOURCES.include?(method.to_s)
42
+
43
+ super
44
+ end
45
+
46
+ def respond_to_missing?(method, *args)
47
+ VALID_RESOURCES.include?(method.to_s) || super
48
+ end
49
+
50
+ class Resource
51
+ include Enumerable
52
+
53
+ attr_accessor :normalized_resource, :original_resource
54
+
55
+ RESOURCE_NORMALIZATION_KEY = {
56
+ 'users': 'id'
57
+ }.freeze
58
+
59
+ def initialize(resource, resource_type)
60
+ @original_resource = resource
61
+ @normalized_resource = {}
62
+ normalization_key = RESOURCE_NORMALIZATION_KEY[resource_type.to_sym]
63
+ resource.each do |data|
64
+ key = data[normalization_key]
65
+ @normalized_resource[key.to_i] = data
66
+ end
67
+ end
68
+
69
+ def each(*args, &block)
70
+ @normalized_resource.each(*args, &block)
71
+ end
72
+
73
+ def each_data(*args, &block)
74
+ @normalized_resource.values.each(*args, &block)
75
+ end
76
+
77
+ def find(key)
78
+ @normalized_resource[key.to_i]
79
+ end
31
80
  end
32
81
  end
33
82
 
@@ -45,7 +94,7 @@ module Tweetkit
45
94
  data.empty? ? super : data
46
95
  end
47
96
 
48
- def respond_to_missing?(method)
97
+ def respond_to_missing?(method, *args)
49
98
  meta.respond_to? method
50
99
  end
51
100
  end
@@ -53,12 +102,12 @@ module Tweetkit
53
102
  class Tweets
54
103
  include Enumerable
55
104
 
56
- attr_accessor :tweets, :meta, :expansions
105
+ attr_accessor :tweets, :meta, :resources
57
106
 
58
107
  def initialize(response)
59
- @tweets = response['data'].collect { |tweet| Tweetkit::Response::Tweet.new(tweet) }
108
+ @tweets = response['data'] ? response['data'].collect { |tweet| Tweetkit::Response::Tweet.new(tweet) } : []
60
109
  @meta = response['meta']
61
- @expansions = response['includes']
110
+ @resources = response['includes']
62
111
  end
63
112
 
64
113
  def each(*args, &block)
@@ -73,15 +122,12 @@ module Tweetkit
73
122
  @tweets.join(' ')
74
123
  end
75
124
 
76
- def method_missing(attribute, **args)
77
- result = tweets.public_send(attribute, **args)
78
- super unless result
79
- rescue StandardError
80
- super
125
+ def method_missing(method, **args)
126
+ tweets.public_send(method, **args)
81
127
  end
82
128
 
83
- def respond_to_missing?(method)
84
- tweets.respond_to? method
129
+ def respond_to_missing?(method, *args)
130
+ tweets.respond_to?(method)
85
131
  end
86
132
  end
87
133
 
@@ -97,8 +143,8 @@ module Tweetkit
97
143
  data.empty? ? super : data
98
144
  end
99
145
 
100
- def respond_to_missing?(method)
101
- tweet.respond_to? method
146
+ def respond_to_missing?(method, *args)
147
+ tweet.respond_to?(method) || super
102
148
  end
103
149
  end
104
150
  end
@@ -1,3 +1,3 @@
1
1
  module Tweetkit
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tweetkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Foo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-11 00:00:00.000000000 Z
11
+ date: 2021-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday