twords 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/lib/twords/configuration.rb +72 -3
- data/lib/twords/instance_methods.rb +4 -4
- data/lib/twords/twitter_client.rb +4 -2
- data/lib/twords/version.rb +2 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 201fe822e2fdd8c1ec5168fd73deb7cfb8dd29db
|
4
|
+
data.tar.gz: e3b057e402b2b3f1c5f47235de4f687836322c55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b55531d7030c0fce27b3cd0e54c82f739c7cc3ff5b90596d087a7a8cf73d2ec3b5434c21daed60423b3fb3fcf55f724f6a3bf0dd65f8460348eab92f0a0f8d9
|
7
|
+
data.tar.gz: 85ebd69ab5677bf649cb618ae491f9bba4b3868c2030dd6254891bde8939f5509a3ac0e9d6ea2e3530a1cc0834e833d4a4e448d17dd6788cec442b30fd1bc506
|
data/README.md
CHANGED
@@ -22,6 +22,12 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
$ gem install twords
|
24
24
|
|
25
|
+
## Documentation
|
26
|
+
|
27
|
+
[http://rdoc.info/gems/twords][documentation]
|
28
|
+
|
29
|
+
[documentation]: http://rdoc.info/gems/twords
|
30
|
+
|
25
31
|
## Usage
|
26
32
|
|
27
33
|
Twords takes a configuration block, and if it doesn't find one it will set the following defaults:
|
data/lib/twords/configuration.rb
CHANGED
@@ -4,8 +4,36 @@ require 'twitter'
|
|
4
4
|
require 'twords/twitter_client'
|
5
5
|
|
6
6
|
class Twords
|
7
|
-
# Configuration object
|
7
|
+
# Configuration object for the Twords namespace. One instance to rule them all.
|
8
|
+
# All options can be changed with public setter methods. One Twords::Configuration instance
|
9
|
+
# is shared across all objects in the Twords namespace. Changing the configuration will affect
|
10
|
+
# all objects, even those that are already instantiated. To set app configuration, do not
|
11
|
+
# initialize a Twords::Configuration object directly - nothing will happen.
|
12
|
+
# Do it through Twords.config(&block).
|
13
|
+
#
|
14
|
+
# @see Twords.config
|
15
|
+
# @example
|
16
|
+
# Twords.config do |config|
|
17
|
+
# config.rejects = %w[my us we an w/ because b/c or are this is from
|
18
|
+
# be on the for to and at our of in rt a with &
|
19
|
+
# that it by as if was]
|
20
|
+
#
|
21
|
+
# config.range = 30
|
22
|
+
# config.up_to { Time.now }
|
23
|
+
# config.include_hashtags = false
|
24
|
+
# config.include_uris = false
|
25
|
+
# config.include_mentions = false
|
26
|
+
#
|
27
|
+
# config.twitter_client do |twitter|
|
28
|
+
# twitter.consumer_key = ENV['TWITTER_CONSUMER_KEY']
|
29
|
+
# twitter.consumer_secret = ENV['TWITTER_CONSUMER_SECRET']
|
30
|
+
# twitter.access_token = ENV['TWITTER_ACCESS_TOKEN']
|
31
|
+
# twitter.access_token_secret = ENV['TWITTER_ACCESS_TOKEN_SECRET']
|
32
|
+
# end
|
33
|
+
# end
|
8
34
|
class Configuration
|
35
|
+
# Default words to ignore. Strings must match exactly and are checked with
|
36
|
+
# Array#include?
|
9
37
|
DEFAULT_REJECTS = %w[
|
10
38
|
my us we an w/ because
|
11
39
|
b/c or are this is from
|
@@ -14,6 +42,10 @@ class Twords
|
|
14
42
|
that it by as if was
|
15
43
|
].freeze
|
16
44
|
|
45
|
+
# Default configuration block to pass to Twords::TwitterClient.new.
|
46
|
+
# Feel free to customize the variables in a configuration block of your own,
|
47
|
+
# but never hard code the values. Or just make the values available at the default
|
48
|
+
# locations.
|
17
49
|
DEFAULT_TWITTER_CONFIG = lambda do |twitter|
|
18
50
|
twitter.consumer_key = ENV['TWITTER_CONSUMER_KEY']
|
19
51
|
twitter.consumer_secret = ENV['TWITTER_CONSUMER_SECRET']
|
@@ -21,6 +53,8 @@ class Twords
|
|
21
53
|
twitter.access_token_secret = ENV['TWITTER_ACCESS_TOKEN_SECRET']
|
22
54
|
end
|
23
55
|
|
56
|
+
# Full set of default options that will be passed to the Configuration object
|
57
|
+
# on initialization and reset.
|
24
58
|
DEFAULT_OPTIONS = {
|
25
59
|
include_uris: false,
|
26
60
|
include_hashtags: false,
|
@@ -36,42 +70,77 @@ class Twords
|
|
36
70
|
|
37
71
|
attr_accessor :range
|
38
72
|
|
73
|
+
# Initializes a new Twords::Configuration object with default configuration.
|
74
|
+
#
|
75
|
+
# @api public
|
76
|
+
# @return [Twords::Configuration]
|
39
77
|
def initialize
|
40
78
|
set_defaults
|
41
79
|
end
|
42
80
|
|
81
|
+
# Resets all configuration options to "factory" default settings.
|
82
|
+
#
|
83
|
+
# @api public
|
84
|
+
# @return [Twords::Configuration]
|
85
|
+
# @see Twords.reset_config!
|
43
86
|
def reset!
|
44
87
|
tap { set_defaults }
|
45
88
|
end
|
46
89
|
|
90
|
+
# Configure a new Twords::TwitterClient with a configuration block.
|
91
|
+
# If no block is given the existing client is returned unchanged.
|
92
|
+
#
|
93
|
+
# @api public
|
94
|
+
# @return [Twords::TwitterClient]
|
47
95
|
def twitter_client(&block)
|
48
|
-
@client = TwitterClient.new(&block)
|
96
|
+
@client = TwitterClient.new(&block) if block_given?
|
97
|
+
@client
|
49
98
|
end
|
50
99
|
|
100
|
+
# Set the words to be skipped during analysis.
|
101
|
+
#
|
102
|
+
# @param args [Array<String>] an indefinite list of words to ignore
|
51
103
|
def rejects=(*args)
|
52
|
-
@rejects = args.flatten
|
104
|
+
@rejects = args.flatten.map(&:to_s)
|
53
105
|
end
|
54
106
|
|
107
|
+
# Set whether hashtags should be counted. If true, any word beginning with "#" will be ignored.
|
108
|
+
#
|
109
|
+
# @param boolean [true, false] will raise an error if the value is not a Boolean value
|
55
110
|
def include_hashtags=(boolean)
|
56
111
|
not_a_boolean_error(boolean)
|
57
112
|
@include_hashtags = boolean
|
58
113
|
end
|
59
114
|
|
115
|
+
# Set whether URIs should be counted. If true, uses URI#regexp to match.
|
116
|
+
#
|
117
|
+
# @param boolean [true, false] will raise an error if the value is not a Boolean value
|
60
118
|
def include_uris=(boolean)
|
61
119
|
not_a_boolean_error(boolean)
|
62
120
|
@include_uris = boolean
|
63
121
|
end
|
64
122
|
alias include_urls= include_uris=
|
65
123
|
|
124
|
+
# Set whether @-mentions should be counted. If true, any word beginning with "@" will be ignored.
|
125
|
+
#
|
126
|
+
# @param boolean [true, false] will raise an error if the value is not a Boolean value
|
66
127
|
def include_mentions=(boolean)
|
67
128
|
not_a_boolean_error(boolean)
|
68
129
|
@include_mentions = boolean
|
69
130
|
end
|
70
131
|
|
132
|
+
# Takes a block and stores for lazy evaluation to define the end of the time range being checked.
|
133
|
+
# The return value of the block must respond to #to_time and return a Time object when called.
|
134
|
+
#
|
135
|
+
# @return [Proc]
|
71
136
|
def up_to(&time_block)
|
72
137
|
@up_to_block = time_block
|
73
138
|
end
|
74
139
|
|
140
|
+
# Calls the Proc value of #up_to_block and calls #to_time on the return value. Expects a Time object
|
141
|
+
# to be returned.
|
142
|
+
#
|
143
|
+
# @return [Time]
|
75
144
|
def up_to_time
|
76
145
|
up_to_block.call.to_time
|
77
146
|
end
|
@@ -150,8 +150,8 @@ class Twords
|
|
150
150
|
#
|
151
151
|
# @api public
|
152
152
|
# @return [Integer] representing the byte count of the file
|
153
|
-
# @param opts [Hash]
|
154
|
-
# @option opts [String] :filename A relative pathname to
|
153
|
+
# @param opts [Hash] File writing options. All except for :filename are passed to File#open.
|
154
|
+
# @option opts [String] :filename A relative pathname. Defaults to 'twords_report.csv'
|
155
155
|
def write_to_csv(opts = {})
|
156
156
|
filename = opts.fetch(:filename) { 'twords_report.csv' }
|
157
157
|
write_file(filename, :to_csv, opts)
|
@@ -170,8 +170,8 @@ class Twords
|
|
170
170
|
#
|
171
171
|
# @api public
|
172
172
|
# @return [Integer] representing the byte count of the file
|
173
|
-
# @param opts [Hash] customizable file writing options. All but :filename
|
174
|
-
# @option opts [String] :filename A relative pathname to
|
173
|
+
# @param opts [Hash] customizable file writing options. All but :filename arepassed to File#open
|
174
|
+
# @option opts [String] :filename A relative pathname. Defaults to 'twords_report.json'
|
175
175
|
def write_to_json(opts = {})
|
176
176
|
filename = opts.fetch(:filename) { 'twords_report.json' }
|
177
177
|
write_file(filename, :to_json, opts)
|
@@ -7,10 +7,10 @@ class Twords
|
|
7
7
|
class TwitterClient
|
8
8
|
include ConfigAccessible
|
9
9
|
|
10
|
-
# A Twitter::REST::Client that provides
|
10
|
+
# A Twitter::REST::Client that provides a direct interface to the Twitter API
|
11
11
|
#
|
12
12
|
# @api public
|
13
|
-
# @
|
13
|
+
# @return [Twitter::REST::Client]
|
14
14
|
attr_reader :client
|
15
15
|
|
16
16
|
# Initializes a new Twords::TwitterClient object and assigns to the @client instance variable
|
@@ -25,6 +25,7 @@ class Twords
|
|
25
25
|
# @api public
|
26
26
|
# for block { |twitter| ... }
|
27
27
|
# @yield [Twitter::REST::Client] yields the Twitter::REST::Client for configuration
|
28
|
+
# @see Twords::Configuration#twitter_client
|
28
29
|
# @see https://github.com/sferik/twitter#configuration
|
29
30
|
def initialize(&block)
|
30
31
|
@client = Twitter::REST::Client.new(&block)
|
@@ -35,6 +36,7 @@ class Twords
|
|
35
36
|
#
|
36
37
|
# @api public
|
37
38
|
# @param screen_names [Array<String>] the twitter screen names from which to pull the tweets
|
39
|
+
# @return [Array<Twitter::Tweet>]
|
38
40
|
def filter_tweets(screen_names)
|
39
41
|
full_timeline(screen_names).each_with_object([]) do |tweet, memo|
|
40
42
|
next if tweet.created_at > up_to_time
|
data/lib/twords/version.rb
CHANGED