tweetwine 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/CHANGELOG.rdoc +5 -0
  2. data/Gemfile +1 -1
  3. data/README.md +2 -2
  4. data/Rakefile +5 -0
  5. data/benchmark/home_bm.rb +36 -0
  6. data/lib/tweetwine/character_encoding.rb +1 -1
  7. data/lib/tweetwine/http.rb +1 -1
  8. data/lib/tweetwine/support.rb +28 -26
  9. data/lib/tweetwine/twitter.rb +8 -5
  10. data/lib/tweetwine/version.rb +1 -1
  11. data/lib/tweetwine.rb +0 -2
  12. data/man/tweetwine.7 +3 -3
  13. data/man/tweetwine.7.ronn +2 -2
  14. data/project.rb +2 -0
  15. data/test/fixture/config_integration.yaml +1 -1
  16. data/test/integration/authorization_test.rb +1 -1
  17. data/test/integration/global_options_test.rb +1 -1
  18. data/test/integration/invalid_config_file_test.rb +1 -1
  19. data/test/integration/search_statuses_test.rb +1 -1
  20. data/test/integration/show_followers_test.rb +1 -1
  21. data/test/integration/show_friends_test.rb +1 -1
  22. data/test/integration/show_home_test.rb +1 -1
  23. data/test/integration/show_mentions_test.rb +1 -1
  24. data/test/integration/show_user_test.rb +1 -1
  25. data/test/integration/update_status_test.rb +42 -21
  26. data/test/integration/use_http_proxy_test.rb +6 -6
  27. data/test/integration/user_help_test.rb +2 -2
  28. data/test/support/assertions.rb +58 -0
  29. data/test/support/common.rb +10 -0
  30. data/test/support/common_helpers.rb +43 -0
  31. data/test/support/doubles.rb +35 -0
  32. data/test/{integration/helper.rb → support/integration_test_case.rb} +12 -7
  33. data/test/support/mocha_integration.rb +16 -0
  34. data/test/support/tweets.rb +95 -0
  35. data/test/support/unit_test_case.rb +28 -0
  36. data/test/support/webmock_integration.rb +16 -0
  37. data/test/unit/character_encoding_test.rb +1 -1
  38. data/test/unit/cli_test.rb +4 -4
  39. data/test/unit/config_test.rb +1 -1
  40. data/test/unit/http_test.rb +1 -1
  41. data/test/unit/oauth_test.rb +1 -1
  42. data/test/unit/obfuscate_test.rb +1 -1
  43. data/test/unit/option_parser_test.rb +1 -1
  44. data/test/unit/promise_test.rb +1 -1
  45. data/test/unit/support_test.rb +1 -1
  46. data/test/unit/tweet_test.rb +3 -3
  47. data/test/unit/twitter_test.rb +29 -27
  48. data/test/unit/ui_test.rb +3 -3
  49. data/test/unit/uri_test.rb +1 -1
  50. data/test/unit/url_shortener_test.rb +1 -1
  51. data/tweetwine.gemspec +5 -4
  52. metadata +122 -97
  53. data/test/helper.rb +0 -60
  54. data/test/unit/helper.rb +0 -108
  55. data/test/unit/tweet_helper.rb +0 -95
metadata CHANGED
@@ -1,129 +1,140 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: tweetwine
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.4.3
4
5
  prerelease:
5
- version: 0.4.2
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Tuomas Kareinen
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-05-18 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2011-10-31 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: oauth
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2152362380 !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
23
21
  version: 0.4.4
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: gem-man
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2152362380
25
+ - !ruby/object:Gem::Dependency
26
+ name: gem-man
27
+ requirement: &2152361800 !ruby/object:Gem::Requirement
30
28
  none: false
31
- requirements:
29
+ requirements:
32
30
  - - ~>
33
- - !ruby/object:Gem::Version
34
- version: 0.2.0
31
+ - !ruby/object:Gem::Version
32
+ version: 0.3.0
35
33
  type: :development
36
- version_requirements: *id002
37
- - !ruby/object:Gem::Dependency
38
- name: minitest
39
34
  prerelease: false
40
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *2152361800
36
+ - !ruby/object:Gem::Dependency
37
+ name: minitest
38
+ requirement: &2152361280 !ruby/object:Gem::Requirement
41
39
  none: false
42
- requirements:
40
+ requirements:
43
41
  - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 2.1.0
42
+ - !ruby/object:Gem::Version
43
+ version: 2.4.0
46
44
  type: :development
47
- version_requirements: *id003
48
- - !ruby/object:Gem::Dependency
49
- name: mocha
50
45
  prerelease: false
51
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *2152361280
47
+ - !ruby/object:Gem::Dependency
48
+ name: mocha
49
+ requirement: &2152360780 !ruby/object:Gem::Requirement
52
50
  none: false
53
- requirements:
51
+ requirements:
54
52
  - - ~>
55
- - !ruby/object:Gem::Version
53
+ - !ruby/object:Gem::Version
56
54
  version: 0.9.12
57
55
  type: :development
58
- version_requirements: *id004
59
- - !ruby/object:Gem::Dependency
60
- name: open4
61
56
  prerelease: false
62
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *2152360780
58
+ - !ruby/object:Gem::Dependency
59
+ name: open4
60
+ requirement: &2152360220 !ruby/object:Gem::Requirement
63
61
  none: false
64
- requirements:
62
+ requirements:
65
63
  - - ~>
66
- - !ruby/object:Gem::Version
64
+ - !ruby/object:Gem::Version
67
65
  version: 1.0.1
68
66
  type: :development
69
- version_requirements: *id005
70
- - !ruby/object:Gem::Dependency
71
- name: rake
72
67
  prerelease: false
73
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *2152360220
69
+ - !ruby/object:Gem::Dependency
70
+ name: perftools.rb
71
+ requirement: &2152350500 !ruby/object:Gem::Requirement
74
72
  none: false
75
- requirements:
73
+ requirements:
76
74
  - - ~>
77
- - !ruby/object:Gem::Version
75
+ - !ruby/object:Gem::Version
76
+ version: 0.5.6
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2152350500
80
+ - !ruby/object:Gem::Dependency
81
+ name: rake
82
+ requirement: &2152349660 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
78
87
  version: 0.8.7
79
88
  type: :development
80
- version_requirements: *id006
81
- - !ruby/object:Gem::Dependency
82
- name: ronn
83
89
  prerelease: false
84
- requirement: &id007 !ruby/object:Gem::Requirement
90
+ version_requirements: *2152349660
91
+ - !ruby/object:Gem::Dependency
92
+ name: ronn
93
+ requirement: &2152348480 !ruby/object:Gem::Requirement
85
94
  none: false
86
- requirements:
95
+ requirements:
87
96
  - - ~>
88
- - !ruby/object:Gem::Version
97
+ - !ruby/object:Gem::Version
89
98
  version: 0.7.3
90
99
  type: :development
91
- version_requirements: *id007
92
- - !ruby/object:Gem::Dependency
93
- name: timecop
94
100
  prerelease: false
95
- requirement: &id008 !ruby/object:Gem::Requirement
101
+ version_requirements: *2152348480
102
+ - !ruby/object:Gem::Dependency
103
+ name: timecop
104
+ requirement: &2152347240 !ruby/object:Gem::Requirement
96
105
  none: false
97
- requirements:
106
+ requirements:
98
107
  - - ~>
99
- - !ruby/object:Gem::Version
108
+ - !ruby/object:Gem::Version
100
109
  version: 0.3.5
101
110
  type: :development
102
- version_requirements: *id008
103
- - !ruby/object:Gem::Dependency
104
- name: webmock
105
111
  prerelease: false
106
- requirement: &id009 !ruby/object:Gem::Requirement
112
+ version_requirements: *2152347240
113
+ - !ruby/object:Gem::Dependency
114
+ name: webmock
115
+ requirement: &2152346240 !ruby/object:Gem::Requirement
107
116
  none: false
108
- requirements:
117
+ requirements:
109
118
  - - ~>
110
- - !ruby/object:Gem::Version
111
- version: 1.6.2
119
+ - !ruby/object:Gem::Version
120
+ version: 1.7.7
112
121
  type: :development
113
- version_requirements: *id009
114
- description: |
115
- A simple but tasty Twitter agent for command line use, designed for quickly
122
+ prerelease: false
123
+ version_requirements: *2152346240
124
+ description: ! 'A simple but tasty Twitter agent for command line use, designed for
125
+ quickly
126
+
116
127
  showing the latest tweets.
117
128
 
129
+ '
118
130
  email: tkareine@gmail.com
119
- executables:
131
+ executables:
120
132
  - tweetwine
121
133
  extensions: []
122
-
123
- extra_rdoc_files:
134
+ extra_rdoc_files:
124
135
  - CHANGELOG.rdoc
125
136
  - LICENSE.txt
126
- files:
137
+ files:
127
138
  - .gitignore
128
139
  - CHANGELOG.rdoc
129
140
  - Gemfile
@@ -131,6 +142,7 @@ files:
131
142
  - README.md
132
143
  - RELEASING.txt
133
144
  - Rakefile
145
+ - benchmark/home_bm.rb
134
146
  - bin/tweetwine
135
147
  - contrib/tweetwine-completion.bash
136
148
  - lib/tweetwine.rb
@@ -166,10 +178,8 @@ files:
166
178
  - test/fixture/update_without_urls.json
167
179
  - test/fixture/user.json
168
180
  - test/fixture/users.json
169
- - test/helper.rb
170
181
  - test/integration/authorization_test.rb
171
182
  - test/integration/global_options_test.rb
172
- - test/integration/helper.rb
173
183
  - test/integration/invalid_config_file_test.rb
174
184
  - test/integration/search_statuses_test.rb
175
185
  - test/integration/show_followers_test.rb
@@ -180,17 +190,24 @@ files:
180
190
  - test/integration/update_status_test.rb
181
191
  - test/integration/use_http_proxy_test.rb
182
192
  - test/integration/user_help_test.rb
193
+ - test/support/assertions.rb
194
+ - test/support/common.rb
195
+ - test/support/common_helpers.rb
196
+ - test/support/doubles.rb
197
+ - test/support/integration_test_case.rb
198
+ - test/support/mocha_integration.rb
199
+ - test/support/tweets.rb
200
+ - test/support/unit_test_case.rb
201
+ - test/support/webmock_integration.rb
183
202
  - test/unit/character_encoding_test.rb
184
203
  - test/unit/cli_test.rb
185
204
  - test/unit/config_test.rb
186
- - test/unit/helper.rb
187
205
  - test/unit/http_test.rb
188
206
  - test/unit/oauth_test.rb
189
207
  - test/unit/obfuscate_test.rb
190
208
  - test/unit/option_parser_test.rb
191
209
  - test/unit/promise_test.rb
192
210
  - test/unit/support_test.rb
193
- - test/unit/tweet_helper.rb
194
211
  - test/unit/tweet_test.rb
195
212
  - test/unit/twitter_test.rb
196
213
  - test/unit/ui_test.rb
@@ -200,37 +217,40 @@ files:
200
217
  - man/tweetwine.7
201
218
  homepage: https://github.com/tkareine/tweetwine
202
219
  licenses: []
220
+ post_install_message: ! '
221
+
222
+ Tweetwine requires a JSON parser library. Ruby 1.9 comes bundled with one by
203
223
 
204
- post_install_message: "\n\
205
- Tweetwine requires a JSON parser library. Ruby 1.9 comes bundled with one by\n\
206
- default. For Ruby 1.8, you can install 'json' gem, for example.\n\n"
207
- rdoc_options:
224
+ default. For Ruby 1.8, you can install ''json'' gem, for example.
225
+
226
+
227
+ '
228
+ rdoc_options:
208
229
  - --title
209
- - tweetwine 0.4.2
230
+ - tweetwine 0.4.3
210
231
  - --exclude
211
232
  - test
212
- require_paths:
233
+ require_paths:
213
234
  - lib
214
- required_ruby_version: !ruby/object:Gem::Requirement
235
+ required_ruby_version: !ruby/object:Gem::Requirement
215
236
  none: false
216
- requirements:
217
- - - ">="
218
- - !ruby/object:Gem::Version
219
- version: "0"
220
- required_rubygems_version: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ! '>='
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ required_rubygems_version: !ruby/object:Gem::Requirement
221
242
  none: false
222
- requirements:
223
- - - ">="
224
- - !ruby/object:Gem::Version
225
- version: "0"
243
+ requirements:
244
+ - - ! '>='
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
226
247
  requirements: []
227
-
228
248
  rubyforge_project:
229
- rubygems_version: 1.8.2
249
+ rubygems_version: 1.8.10
230
250
  signing_key:
231
251
  specification_version: 3
232
252
  summary: Tweetwine shows the latest tweets from the command line quickly.
233
- test_files:
253
+ test_files:
234
254
  - test/fixture/config_integration.yaml
235
255
  - test/fixture/config_unit.yaml
236
256
  - test/fixture/home.json
@@ -244,10 +264,8 @@ test_files:
244
264
  - test/fixture/update_without_urls.json
245
265
  - test/fixture/user.json
246
266
  - test/fixture/users.json
247
- - test/helper.rb
248
267
  - test/integration/authorization_test.rb
249
268
  - test/integration/global_options_test.rb
250
- - test/integration/helper.rb
251
269
  - test/integration/invalid_config_file_test.rb
252
270
  - test/integration/search_statuses_test.rb
253
271
  - test/integration/show_followers_test.rb
@@ -258,17 +276,24 @@ test_files:
258
276
  - test/integration/update_status_test.rb
259
277
  - test/integration/use_http_proxy_test.rb
260
278
  - test/integration/user_help_test.rb
279
+ - test/support/assertions.rb
280
+ - test/support/common.rb
281
+ - test/support/common_helpers.rb
282
+ - test/support/doubles.rb
283
+ - test/support/integration_test_case.rb
284
+ - test/support/mocha_integration.rb
285
+ - test/support/tweets.rb
286
+ - test/support/unit_test_case.rb
287
+ - test/support/webmock_integration.rb
261
288
  - test/unit/character_encoding_test.rb
262
289
  - test/unit/cli_test.rb
263
290
  - test/unit/config_test.rb
264
- - test/unit/helper.rb
265
291
  - test/unit/http_test.rb
266
292
  - test/unit/oauth_test.rb
267
293
  - test/unit/obfuscate_test.rb
268
294
  - test/unit/option_parser_test.rb
269
295
  - test/unit/promise_test.rb
270
296
  - test/unit/support_test.rb
271
- - test/unit/tweet_helper.rb
272
297
  - test/unit/tweet_test.rb
273
298
  - test/unit/twitter_test.rb
274
299
  - test/unit/ui_test.rb
data/test/helper.rb DELETED
@@ -1,60 +0,0 @@
1
- # coding: utf-8
2
-
3
- %w{
4
- minitest/spec
5
- tweetwine
6
- webmock
7
- }.each { |lib| require lib }
8
-
9
- MiniTest::Unit.autorun
10
- WebMock.disable_net_connect!
11
-
12
- module Tweetwine
13
- module Test
14
- module CommonHelper
15
- def file_mode(file)
16
- File.stat(file).mode & 0777
17
- end
18
-
19
- def fixture_path(filename)
20
- File.join(File.dirname(__FILE__), 'fixture', filename)
21
- end
22
-
23
- def fixture_file(filename)
24
- File.open(fixture_path(filename)) do |f|
25
- f.readlines.join("\n")
26
- end
27
- end
28
-
29
- def tmp_env(vars = {})
30
- originals = {}
31
- vars.each_pair do |key, value|
32
- key = key.to_s
33
- originals[key] = ENV[key]
34
- ENV[key] = value
35
- end
36
- yield
37
- ensure
38
- originals.each_pair do |key, value|
39
- ENV[key] = value
40
- end
41
- end
42
-
43
- def tmp_kcode(val)
44
- original = $KCODE
45
- $KCODE = val
46
- yield
47
- ensure
48
- $KCODE = original
49
- end
50
- end
51
-
52
- module WebMockIntegration
53
- include WebMock::API
54
-
55
- def teardown
56
- WebMock.reset!
57
- end
58
- end
59
- end
60
- end
data/test/unit/helper.rb DELETED
@@ -1,108 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'helper'
4
- require 'mocha'
5
-
6
- Mocha::Configuration.prevent(:stubbing_non_existent_method)
7
-
8
- module Tweetwine::Test
9
- module Unit
10
- module Assertions
11
- # Asserts whether an Enumeration-like object contains all the elements.
12
- # Fails unless +actual+ contains the same elements as +expected+,
13
- # ignoring the order of the elements.
14
- def assert_contains_exactly(expected, actual, msg_diff_size = nil, msg_diff_elems = nil)
15
- assert_equal(expected.size, actual.size, message(msg_diff_size) {
16
- 'Expected %s to be of same size as %s' % [actual.inspect, expected.inspect]
17
- })
18
- assert(enumerable_minus_each_element(actual, expected).empty?, message(msg_diff_elems) {
19
- 'Expected %s to contain all the elements of %s' % [actual.inspect, expected.inspect]
20
- })
21
- end
22
-
23
- # Fails unless +str+ is a full match to +regex+.
24
- def assert_full_match(regex, str, msg = nil)
25
- match_data = regex.match(str)
26
- assert(str == match_data.to_s, message(msg) {
27
- 'Expected %s to be a full match to %s' % [str, regex.inspect]
28
- })
29
- end
30
-
31
- # Fails if +str+ is a full match to +regex+.
32
- def assert_no_full_match(regex, str, msg = nil)
33
- match_data = regex.match(str)
34
- assert(str != match_data.to_s, message(msg) {
35
- 'Expected %s not to be a full match to %s' % [str, regex.inspect]
36
- })
37
- end
38
-
39
- # Fails unless +fun.call(*args)+ is equal to +expected+ and
40
- # +fun.call(*args)+ is equal to +fun.call(*args.reverse)+.
41
- def assert_commutative(expected, args, msg_not_expected = nil, msg_not_commutative = nil, &fun)
42
- left_args = args
43
- left_actual = fun.call(left_args)
44
- assert_equal(expected, left_actual, message(msg_not_expected) {
45
- 'Expected %s, not %s' % [expected.inspect, left_actual.inspect]
46
- })
47
- right_args = args.reverse
48
- right_actual = fun.call(*right_args)
49
- assert_equal(left_actual, right_actual, message(msg_not_commutative) {
50
- 'Expected fun%s => %s to be commutative with fun%s => %s' %
51
- [left_args.inspect, left_actual.inspect, right_args.inspect, right_actual.inspect]
52
- })
53
- end
54
-
55
- private
56
-
57
- def enumerable_minus_each_element(enumerable, elements)
58
- remaining = enumerable.dup.to_a
59
- elements.each do |e|
60
- index = remaining.index(e)
61
- remaining.delete_at(index) if index
62
- end
63
- remaining
64
- end
65
- end
66
-
67
- module Doubles
68
- def mock_config
69
- @config = mock('Config')
70
- Tweetwine::CLI.stubs(:config).returns(@config)
71
- end
72
-
73
- def mock_http
74
- @http = mock('Http')
75
- Tweetwine::CLI.stubs(:http).returns(@http)
76
- end
77
-
78
- def mock_oauth
79
- @oauth = mock('OAuth')
80
- Tweetwine::CLI.stubs(:oauth).returns(@oauth)
81
- end
82
-
83
- def mock_ui
84
- @ui = mock('UI')
85
- Tweetwine::CLI.stubs(:ui).returns(@ui)
86
- end
87
-
88
- def mock_url_shortener
89
- @url_shortener = mock('UrlShortener')
90
- Tweetwine::CLI.stubs(:url_shortener).returns(@url_shortener)
91
- end
92
-
93
- def stub_config(options = {})
94
- @config = options
95
- Tweetwine::CLI.stubs(:config).returns(@config)
96
- end
97
- end
98
-
99
- class TestCase < MiniTest::Spec
100
- include WebMockIntegration
101
- include Tweetwine
102
- include Assertions
103
- include Doubles
104
- include Tweetwine::Test::CommonHelper
105
- extend Tweetwine::Test::CommonHelper
106
- end
107
- end
108
- end
@@ -1,95 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'timecop'
4
-
5
- module Tweetwine::Test::Unit
6
- module TweetHelper
7
- FIELD_PATHS = {
8
- :from_user => %w{screen_name},
9
- :to_user => %w{status in_reply_to_screen_name},
10
- :retweet => %w{retweeted_status},
11
- :created_at => %w{status created_at},
12
- :status => %w{status text}
13
- }.freeze
14
-
15
- DEFAULT_TIMESTAMP = Time.utc(2011, 'feb', 17, 22, 28, 0)
16
-
17
- DEFAULT_FIELD_VALUES = {
18
- :from_user => 'fred',
19
- :to_user => nil,
20
- :retweet => nil,
21
- :created_at => DEFAULT_TIMESTAMP.iso8601,
22
- :status => nil
23
- }.freeze
24
-
25
- RECORD_SKELETON = {
26
- 'screen_name' => nil,
27
- 'retweeted_status' => nil,
28
- 'status' => {
29
- 'in_reply_to_screen_name' => nil,
30
- 'created_at' => nil,
31
- 'text' => nil
32
- }.freeze
33
- }.freeze
34
-
35
- def create_record(fields = {})
36
- record = create_nonrt_record(nonrt_fields(fields))
37
- modify_to_rt_record(record, fields[:rt_user]) if fields[:rt_user]
38
- record
39
- end
40
-
41
- def create_tweet(fields = {})
42
- Tweetwine::Tweet.new(create_record(fields), FIELD_PATHS)
43
- end
44
-
45
- def at_default_time(&block)
46
- Timecop.freeze(TweetHelper::DEFAULT_TIMESTAMP, &block)
47
- end
48
-
49
- def create_timestamp(minus_seconds)
50
- (TweetHelper::DEFAULT_TIMESTAMP - minus_seconds).iso8601
51
- end
52
-
53
- private
54
-
55
- def find_hash_of_field_path(hash, path)
56
- path = [path] unless path.is_a? Array
57
- if path.size > 1
58
- hash_path, field = path[0..-2], path.last
59
- [Tweetwine::Support.find_hash_path(hash, hash_path), field]
60
- else
61
- [hash, path.first]
62
- end
63
- end
64
-
65
- def nonrt_fields(fields)
66
- DEFAULT_FIELD_VALUES.merge(fields.reject { |(k, v)| k == :rt_user })
67
- end
68
-
69
- def create_nonrt_record(fields)
70
- FIELD_PATHS.inject(deep_copy(RECORD_SKELETON)) do |result, (path_name, path_actual)|
71
- hash, field = find_hash_of_field_path(result, path_actual)
72
- hash[field] = fields[path_name]
73
- result
74
- end
75
- end
76
-
77
- def modify_to_rt_record(record, rt_user)
78
- rt_hash, rt_field = find_hash_of_field_path(record, FIELD_PATHS[:retweet])
79
- fr_hash, fr_field = find_hash_of_field_path(record, FIELD_PATHS[:from_user])
80
- st_hash, st_field = find_hash_of_field_path(record, FIELD_PATHS[:status])
81
- rt_hash[rt_field] = {
82
- fr_field => fr_hash[fr_field].dup,
83
- 'status' => st_hash.dup
84
- }
85
- fr_hash[fr_field] = rt_user
86
- st_hash[st_field] = 'retweeted status text. you should not see me.'
87
- cr_hash, cr_field = find_hash_of_field_path(record, FIELD_PATHS[:created_at])
88
- cr_hash[cr_field] = 'old created timestamp. you should not see me.'
89
- end
90
-
91
- def deep_copy(obj)
92
- Marshal.load(Marshal.dump(obj))
93
- end
94
- end
95
- end