govkit-h 0.7.1.0

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.
Files changed (72) hide show
  1. data/.document +5 -0
  2. data/.rspec +3 -0
  3. data/Gemfile +13 -0
  4. data/LICENSE +20 -0
  5. data/README.md +70 -0
  6. data/Rakefile +82 -0
  7. data/USAGE +1 -0
  8. data/VERSION +1 -0
  9. data/generators/govkit/govkit_generator.rb +24 -0
  10. data/generators/govkit/templates/govkit.rb +24 -0
  11. data/govkit.gemspec +130 -0
  12. data/init.rb +4 -0
  13. data/lib/generators/govkit/govkit_generator.rb +21 -0
  14. data/lib/generators/govkit/templates/create_mentions.rb +21 -0
  15. data/lib/generators/govkit/templates/govkit.rb +24 -0
  16. data/lib/generators/govkit/templates/mention.rb +15 -0
  17. data/lib/gov_kit.rb +45 -0
  18. data/lib/gov_kit/acts_as_noteworthy.rb +63 -0
  19. data/lib/gov_kit/configuration.rb +58 -0
  20. data/lib/gov_kit/follow_the_money.rb +176 -0
  21. data/lib/gov_kit/open_congress.rb +125 -0
  22. data/lib/gov_kit/open_congress/bill.rb +171 -0
  23. data/lib/gov_kit/open_congress/blog_post.rb +15 -0
  24. data/lib/gov_kit/open_congress/news_post.rb +15 -0
  25. data/lib/gov_kit/open_congress/person.rb +141 -0
  26. data/lib/gov_kit/open_congress/person_stat.rb +13 -0
  27. data/lib/gov_kit/open_congress/roll_call.rb +14 -0
  28. data/lib/gov_kit/open_congress/roll_call_comparison.rb +28 -0
  29. data/lib/gov_kit/open_congress/voting_comparison.rb +44 -0
  30. data/lib/gov_kit/open_states.rb +132 -0
  31. data/lib/gov_kit/railtie.rb +24 -0
  32. data/lib/gov_kit/resource.rb +190 -0
  33. data/lib/gov_kit/search_engines.rb +7 -0
  34. data/lib/gov_kit/search_engines/bing.rb +38 -0
  35. data/lib/gov_kit/search_engines/google_blog.rb +32 -0
  36. data/lib/gov_kit/search_engines/google_news.rb +47 -0
  37. data/lib/gov_kit/search_engines/technorati.rb +35 -0
  38. data/lib/gov_kit/search_engines/wikipedia.rb +27 -0
  39. data/lib/gov_kit/transparency_data.rb +144 -0
  40. data/lib/gov_kit/vote_smart.rb +126 -0
  41. data/lib/govkit.rb +1 -0
  42. data/spec/fixtures/bing/news_search.response +1 -0
  43. data/spec/fixtures/bing/no_results.response +1 -0
  44. data/spec/fixtures/follow_the_money/business-page0.response +28 -0
  45. data/spec/fixtures/follow_the_money/business-page1.response +12 -0
  46. data/spec/fixtures/follow_the_money/contribution.response +12 -0
  47. data/spec/fixtures/follow_the_money/unauthorized.response +8 -0
  48. data/spec/fixtures/open_congress/person.response +8 -0
  49. data/spec/fixtures/open_states/401.response +10 -0
  50. data/spec/fixtures/open_states/404.response +9 -0
  51. data/spec/fixtures/open_states/410.response +6 -0
  52. data/spec/fixtures/open_states/bill.response +240 -0
  53. data/spec/fixtures/open_states/bill_query.response +1990 -0
  54. data/spec/fixtures/open_states/committee_find.response +53 -0
  55. data/spec/fixtures/open_states/committee_query.response +190 -0
  56. data/spec/fixtures/open_states/legislator.response +34 -0
  57. data/spec/fixtures/open_states/legislator_query.response +144 -0
  58. data/spec/fixtures/open_states/state.response +60 -0
  59. data/spec/fixtures/search_engines/google_news.response +8 -0
  60. data/spec/fixtures/transparency_data/contributions.response +18 -0
  61. data/spec/fixtures/transparency_data/entities_search.response +7 -0
  62. data/spec/fixtures/transparency_data/entities_search_limit_0.response +7 -0
  63. data/spec/fixtures/transparency_data/entities_search_limit_1.response +7 -0
  64. data/spec/fixtures/transparency_data/grants_find_all.response +7 -0
  65. data/spec/fixtures/transparency_data/lobbyists_find_all.response +7 -0
  66. data/spec/follow_the_money_spec.rb +61 -0
  67. data/spec/open_congress_spec.rb +108 -0
  68. data/spec/open_states_spec.rb +213 -0
  69. data/spec/search_engines_spec.rb +44 -0
  70. data/spec/spec_helper.rb +36 -0
  71. data/spec/transparency_data_spec.rb +106 -0
  72. metadata +258 -0
@@ -0,0 +1,171 @@
1
+ module GovKit
2
+ module OpenCongress
3
+ class Bill < OpenCongressObject
4
+ attr_accessor :bill_type, :id, :introduced, :last_speech, :last_vote_date, :last_vote_roll, :last_vote_where, :last_action, :number, :plain_language_summary, :session, :sponsor, :co_sponsors, :title_full_common, :status, :most_recent_actions, :bill_titles, :recent_blogs, :recent_news, :ident
5
+
6
+ def initialize(params)
7
+ super Bill, params
8
+ end
9
+
10
+ def ident
11
+ "#{session}-#{bill_type}#{number}"
12
+ end
13
+
14
+ def self.find(params)
15
+
16
+ url = construct_url("bills", params)
17
+
18
+ if (result = make_call(url))
19
+ parse_results(result)
20
+ else
21
+ nil
22
+ end
23
+
24
+ end
25
+
26
+ def self.most_blogged_bills_this_week
27
+ url = construct_url("most_blogged_bills_this_week", {})
28
+ if (result = make_call(url))
29
+ bills = parse_results(result)
30
+ return bills
31
+ else
32
+ nil
33
+ end
34
+ end
35
+
36
+ def self.bills_in_the_news_this_week
37
+ url = construct_url("bills_in_the_news_this_week", {})
38
+ if (result = make_call(url))
39
+ bills = parse_results(result)
40
+ return bills
41
+ else
42
+ nil
43
+ end
44
+ end
45
+
46
+ def self.most_tracked_bills_this_week
47
+ url = construct_url("most_tracked_bills_this_week", {})
48
+ if (result = make_call(url))
49
+ bills = parse_results(result)
50
+ return bills
51
+ else
52
+ nil
53
+ end
54
+ end
55
+
56
+ def self.most_supported_bills_this_week
57
+ url = construct_url("most_supported_bills_this_week", {})
58
+ if (result = make_call(url))
59
+ bills = parse_results(result)
60
+ return bills
61
+ else
62
+ nil
63
+ end
64
+ end
65
+
66
+ def self.most_opposed_bills_this_week
67
+ url = construct_url("most_opposed_bills_this_week", {})
68
+ if (result = make_call(url))
69
+ bills = parse_results(result)
70
+ return bills
71
+ else
72
+ nil
73
+ end
74
+ end
75
+
76
+ def self.find_by_query(q)
77
+ url = Bill.construct_url("bills_by_query", {:q => q})
78
+
79
+ if (result = make_call(url))
80
+ bills = parse_results(result)
81
+ else
82
+ nil
83
+ end
84
+ end
85
+
86
+ def self.find_by_idents(idents)
87
+ q = []
88
+ if idents.class.to_s == "Array"
89
+ q = idents
90
+ else
91
+ q = idents.split(',')
92
+ end
93
+
94
+ url = Bill.construct_url("bills_by_ident", {:ident => q.join(',')})
95
+
96
+ if (result = make_call(url))
97
+ bills = parse_results(result)
98
+ else
99
+ nil
100
+ end
101
+ end
102
+
103
+ def opencongress_users_supporting_bill_are_also
104
+ url = Bill.construct_url("opencongress_users_supporting_bill_are_also/#{ident}", {})
105
+ if (result = Bill.make_call(url))
106
+ bills = Bill.parse_supporting_results(result)
107
+ return bills
108
+ else
109
+ nil
110
+ end
111
+ end
112
+
113
+ def opencongress_users_opposing_bill_are_also
114
+ url = Bill.construct_url("opencongress_users_opposing_bill_are_also/#{ident}", {})
115
+ if (result = Bill.make_call(url))
116
+ bills = Bill.parse_supporting_results(result)
117
+ return bills
118
+ else
119
+ nil
120
+ end
121
+ end
122
+
123
+ def self.parse_results(result)
124
+
125
+ bills = []
126
+ result["bills"].each do |bill|
127
+
128
+ these_recent_blogs = bill["recent_blogs"]
129
+ blogs = []
130
+
131
+ if these_recent_blogs
132
+ these_recent_blogs.each do |trb|
133
+ blogs << BlogPost.new(trb)
134
+ end
135
+ end
136
+
137
+ bill["recent_blogs"] = blogs
138
+
139
+
140
+ these_recent_news = bill["recent_news"]
141
+ news = []
142
+ if these_recent_news
143
+ these_recent_news.each do |trb|
144
+ news << NewsPost.new(trb)
145
+ end
146
+ end
147
+
148
+ bill["recent_news"] = news
149
+
150
+ these_co_sponsors = bill["co_sponsors"]
151
+ co_sponsors = []
152
+ if these_co_sponsors
153
+ these_co_sponsors.each do |tcs|
154
+ co_sponsors << Person.new(tcs)
155
+ end
156
+ end
157
+
158
+ bill["co_sponsors"] = co_sponsors
159
+
160
+
161
+ bill["sponsor"] = Person.new(bill["sponsor"]) if bill["sponsor"]
162
+
163
+
164
+ bills << Bill.new(bill)
165
+ end
166
+ bills
167
+ end
168
+
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,15 @@
1
+ module GovKit
2
+ module OpenCongress
3
+
4
+ class BlogPost < OpenCongressObject
5
+
6
+ attr_accessor :title, :date, :url, :source_url, :excerpt, :source, :average_rating
7
+
8
+ def initialize(params)
9
+ super BlogPost, params
10
+ end
11
+
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module GovKit
2
+ module OpenCongress
3
+
4
+ class NewsPost < OpenCongressObject
5
+
6
+ attr_accessor :title, :date, :url, :source_url, :excerpt, :source, :average_rating
7
+
8
+ def initialize(params)
9
+ super NewsPost, params
10
+ end
11
+
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,141 @@
1
+ module GovKit
2
+ module OpenCongress
3
+
4
+ class Person < OpenCongressObject
5
+
6
+ attr_accessor :firstname, :lastname, :bioguideid, :birthday, :district, :email, :gender, :id, :metavid_id, :middlename,
7
+ :name, :nickname, :osid, :party, :religion, :state, :title, :unaccented_name, :url, :user_approval,
8
+ :youtube_id, :oc_user_comments, :oc_users_tracking, :abstains_percentage, :with_party_percentage, :recent_news,
9
+ :recent_blogs, :person_stats
10
+
11
+ def initialize(params)
12
+ super Person, params
13
+ end
14
+
15
+ def self.find(params)
16
+
17
+ url = construct_url("people", params)
18
+ if (result = make_call(url))
19
+ people = parse_results(result)
20
+ return people
21
+ else
22
+ nil
23
+ end
24
+
25
+ end
26
+
27
+ def self.compare(person1, person2)
28
+ url = "#{GovKit::configuration.opencongress_base_url}person/compare.json?person1=#{person1.id}&person2=#{person2.id}"
29
+ if (result = make_call(url))
30
+ comparison = VotingComparison.new(result["comparison"])
31
+ else
32
+ nil
33
+ end
34
+
35
+ end
36
+
37
+ def self.senators_most_in_the_news_this_week
38
+
39
+ url = construct_url("senators_most_in_the_news_this_week", {})
40
+ if (result = make_call(url))
41
+ people = parse_results(result)
42
+ return people
43
+ else
44
+ nil
45
+ end
46
+
47
+ end
48
+
49
+ def self.representatives_most_in_the_news_this_week
50
+
51
+ url = construct_url("representatives_most_in_the_news_this_week", {})
52
+ if (result = make_call(url))
53
+ people = parse_results(result)
54
+ return people
55
+ else
56
+ nil
57
+ end
58
+
59
+ end
60
+
61
+ def self.most_blogged_senators_this_week
62
+
63
+ url = construct_url("most_blogged_senators_this_week", {})
64
+ if (result = make_call(url))
65
+ people = parse_results(result)
66
+ return people
67
+ else
68
+ nil
69
+ end
70
+
71
+ end
72
+
73
+ def self.most_blogged_representatives_this_week
74
+
75
+ url = construct_url("most_blogged_representatives_this_week", {})
76
+ if (result = make_call(url))
77
+ people = parse_results(result)
78
+ return people
79
+ else
80
+ nil
81
+ end
82
+
83
+ end
84
+
85
+ def opencongress_users_supporting_person_are_also
86
+ url = Person.construct_url("opencongress_users_supporting_person_are_also/#{id}", {})
87
+ if (result = Person.make_call(url))
88
+ people = Person.parse_supporting_results(result)
89
+ return people
90
+ else
91
+ nil
92
+ end
93
+ end
94
+
95
+ def opencongress_users_opposing_person_are_also
96
+ url = Person.construct_url("opencongress_users_opposing_person_are_also/#{id}", {})
97
+ if (result = Person.make_call(url))
98
+ people = Person.parse_supporting_results(result)
99
+ return people
100
+ else
101
+ nil
102
+ end
103
+ end
104
+
105
+ def self.parse_results(result)
106
+
107
+ people = []
108
+ result["people"].each do |person|
109
+
110
+ these_recent_blogs = person["recent_blogs"]
111
+ blogs = []
112
+ these_recent_blogs.each do |trb|
113
+ blogs << BlogPost.new(trb)
114
+ end
115
+
116
+ person["recent_blogs"] = blogs
117
+
118
+
119
+ these_recent_news = person["recent_news"]
120
+ news = []
121
+ these_recent_news.each do |trb|
122
+ news << NewsPost.new(trb)
123
+ end
124
+
125
+ person["person_stats"] = PersonStat.new(person["person_stats"]) if person["person_stats"]
126
+
127
+ person["recent_news"] = news
128
+
129
+ people << Person.new(person)
130
+ end
131
+
132
+ people
133
+
134
+ end
135
+
136
+
137
+ end
138
+
139
+
140
+ end
141
+ end
@@ -0,0 +1,13 @@
1
+ module GovKit
2
+ module OpenCongress
3
+ class PersonStat < OpenCongressObject
4
+
5
+ attr_accessor :votes_most_often_with_id, :opposing_party_votes_most_often_with_id, :votes_least_often_with_id, :same_party_votes_least_often_with_id, :party_votes_percentage, :abstains_percentage, :abstains_percentage_rank, :party_votes_percentage_rank, :sponsored_bills, :cosponsored_bills, :abstains, :sponsored_bills_passed_rank, :cosponsored_bills_passed_rank, :sponsored_bills_passed, :cosponsored_bills_passed, :sponsored_bills_rank, :cosponsored_bills_rank
6
+
7
+ def initialize(params)
8
+ super PersonStat, params
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module GovKit
2
+ module OpenCongress
3
+ class RollCall < OpenCongressObject
4
+
5
+ attr_accessor :abstains, :presents, :roll_type, :title, :question, :republican_position, :democratic_position,
6
+ :amendment_id, :ayes, :nays, :bill, :date, :number, :id, :required, :where
7
+
8
+ def initialize(params)
9
+ super RollCall, params
10
+ end
11
+
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,28 @@
1
+ module GovKit
2
+ module OpenCongress
3
+ class RollCallComparison < OpenCongressObject
4
+
5
+ attr_accessor :roll_call, :person1, :person2
6
+
7
+ def initialize(params)
8
+ super RollCallComparison, params
9
+
10
+ set_people
11
+ set_roll_call
12
+
13
+ end
14
+
15
+ def set_people
16
+ self.person1 = self.person1["stong"]
17
+ self.person2 = self.person2["stong"]
18
+ end
19
+
20
+ def set_roll_call
21
+ self.roll_call = RollCall.new(self.roll_call)
22
+ end
23
+
24
+
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,44 @@
1
+ module GovKit
2
+ module OpenCongress
3
+
4
+ class VotingComparison < OpenCongressObject
5
+
6
+ attr_accessor :total_votes, :same_vote, :percentage, :person1, :person2, :shared_committees, :hot_votes,
7
+ :other_votes
8
+
9
+ def initialize(params)
10
+ super VotingComparison, params
11
+
12
+ set_people
13
+ set_votes
14
+
15
+ end
16
+
17
+ def set_people
18
+ self.person1 = Person.new(self.person1["person"])
19
+ self.person2 = Person.new(self.person2["person"])
20
+ end
21
+
22
+ def set_votes
23
+
24
+ these_hot_votes = []
25
+ hot_votes["vote"].each do |v|
26
+ nv = RollCallComparison.new(v)
27
+ these_hot_votes << nv
28
+ end
29
+
30
+ self.hot_votes = these_hot_votes
31
+
32
+ these_other_votes = []
33
+ other_votes["vote"].each do |v|
34
+ nv = RollCallComparison.new(v)
35
+ these_other_votes << nv
36
+ end
37
+
38
+ self.other_votes = these_other_votes
39
+
40
+ end
41
+
42
+ end
43
+ end
44
+ end