serel 1.1.1 → 1.2.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.
- checksums.yaml +7 -0
- data/lib/serel.rb +3 -2
- data/lib/serel/base.rb +8 -5
- data/lib/serel/relation.rb +1 -1
- data/lib/serel/request.rb +1 -1
- metadata +42 -22
- data/lib/serel/exts.rb +0 -92
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 0d2ac836a5faddaade4ed9de4d5024ed73da3642
|
|
4
|
+
data.tar.gz: 0ec3151f3b9061f9f720685d50e29ca4009481ff
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 729d7d80fec1337b1a733041cbe4d22f6966c67b193a9eaf51678f1ff7121a3f43cbc47919d3ad363309af2970bd44d73a1df28594c986c5e18d1ab3abb12d46
|
|
7
|
+
data.tar.gz: 6452f817c80b027e803ead63793b8c9ef4dfb2dfa14d01dab83b0651126ab461dc10b9eaaeaf153f352635010671d39ab2a49a138b76d5e676074769944b7afb
|
data/lib/serel.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# Utilities
|
|
2
2
|
require 'date'
|
|
3
3
|
require 'logger'
|
|
4
|
-
require '
|
|
4
|
+
require 'active_support/core_ext/class/attribute'
|
|
5
|
+
require 'active_support/core_ext/string/inflections'
|
|
5
6
|
require 'serel/relation'
|
|
6
7
|
require 'serel/response'
|
|
7
8
|
|
|
@@ -35,4 +36,4 @@ require 'net/http'
|
|
|
35
36
|
require 'uri'
|
|
36
37
|
require 'zlib'
|
|
37
38
|
|
|
38
|
-
class Serel::NoAPIKeyError < StandardError; end
|
|
39
|
+
class Serel::NoAPIKeyError < StandardError; end
|
data/lib/serel/base.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
module Serel
|
|
2
2
|
class Base
|
|
3
|
+
# Dummy class used to make our attributes clearer.
|
|
4
|
+
class Boolean; end
|
|
5
|
+
|
|
3
6
|
class_attribute :all_finder_methods, :api_key, :associations, :attributes, :finder_methods, :logger, :network, :site
|
|
4
7
|
self.all_finder_methods = %w(find get all)
|
|
5
8
|
|
|
@@ -9,7 +12,7 @@ module Serel
|
|
|
9
12
|
if associations
|
|
10
13
|
associations.each do |k,v|
|
|
11
14
|
if data[k.to_s]
|
|
12
|
-
@data[k] =
|
|
15
|
+
@data[k] = Serel.const_get(v.to_s.classify).new(data[k.to_s])
|
|
13
16
|
end
|
|
14
17
|
end
|
|
15
18
|
end
|
|
@@ -91,7 +94,7 @@ module Serel
|
|
|
91
94
|
#
|
|
92
95
|
# Returns an instance of Serel::Relation
|
|
93
96
|
def self.new_relation(klass = nil, qty = :singular)
|
|
94
|
-
klass = name.split('::').last.
|
|
97
|
+
klass = name.split('::').last.underscore unless klass
|
|
95
98
|
Serel::Relation.new(klass.to_s, qty)
|
|
96
99
|
end
|
|
97
100
|
|
|
@@ -114,7 +117,7 @@ module Serel
|
|
|
114
117
|
# Create an 'shallow' instance with multiple IDs. Used for vectorized requests
|
|
115
118
|
def self.with_ids(*ids)
|
|
116
119
|
idstr = ids.join(";")
|
|
117
|
-
n = name.split('::').last.
|
|
120
|
+
n = name.split('::').last.underscore
|
|
118
121
|
new({"#{n}_id".to_s => idstr})
|
|
119
122
|
end
|
|
120
123
|
|
|
@@ -155,7 +158,7 @@ module Serel
|
|
|
155
158
|
|
|
156
159
|
def get
|
|
157
160
|
if self.respond_to?(:get)
|
|
158
|
-
new_relation(name.split('::').last.
|
|
161
|
+
new_relation(name.split('::').last.underscore, :plural).get
|
|
159
162
|
else
|
|
160
163
|
raise NoMethodError
|
|
161
164
|
end
|
|
@@ -166,7 +169,7 @@ module Serel
|
|
|
166
169
|
%w(access_token filter fromdate inname intitle min max nottagged order page pagesize since sort tagged title todate url).each do |meth|
|
|
167
170
|
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
168
171
|
def self.#{meth}(val)
|
|
169
|
-
new_relation(name.split('::').last.
|
|
172
|
+
new_relation(name.split('::').last.underscore, :plural).#{meth}(val)
|
|
170
173
|
end
|
|
171
174
|
RUBY
|
|
172
175
|
end
|
data/lib/serel/relation.rb
CHANGED
data/lib/serel/request.rb
CHANGED
|
@@ -51,7 +51,7 @@ module Serel
|
|
|
51
51
|
# If any items were returned, iterate over the results and populate the response
|
|
52
52
|
if body["items"]
|
|
53
53
|
body["items"].each do |item|
|
|
54
|
-
result <<
|
|
54
|
+
result << Serel.const_get(@type.to_s.classify).new(item)
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
|
metadata
CHANGED
|
@@ -1,49 +1,71 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: serel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 1.2.0
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Thomas McDonald
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date: 2013-03-
|
|
11
|
+
date: 2013-03-23 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: activesupport
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - '>='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - '>='
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
14
27
|
- !ruby/object:Gem::Dependency
|
|
15
28
|
name: rspec
|
|
16
|
-
requirement:
|
|
17
|
-
none: false
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
18
30
|
requirements:
|
|
19
|
-
- -
|
|
31
|
+
- - '>='
|
|
20
32
|
- !ruby/object:Gem::Version
|
|
21
33
|
version: '0'
|
|
22
34
|
type: :development
|
|
23
35
|
prerelease: false
|
|
24
|
-
version_requirements:
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - '>='
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
25
41
|
- !ruby/object:Gem::Dependency
|
|
26
42
|
name: vcr
|
|
27
|
-
requirement:
|
|
28
|
-
none: false
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
44
|
requirements:
|
|
30
|
-
- -
|
|
45
|
+
- - '>='
|
|
31
46
|
- !ruby/object:Gem::Version
|
|
32
47
|
version: '0'
|
|
33
48
|
type: :development
|
|
34
49
|
prerelease: false
|
|
35
|
-
version_requirements:
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
36
55
|
- !ruby/object:Gem::Dependency
|
|
37
56
|
name: webmock
|
|
38
|
-
requirement:
|
|
39
|
-
none: false
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
40
58
|
requirements:
|
|
41
|
-
- -
|
|
59
|
+
- - '>='
|
|
42
60
|
- !ruby/object:Gem::Version
|
|
43
61
|
version: '0'
|
|
44
62
|
type: :development
|
|
45
63
|
prerelease: false
|
|
46
|
-
version_requirements:
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - '>='
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
47
69
|
description:
|
|
48
70
|
email: tom@conceptcoding.co.uk
|
|
49
71
|
executables: []
|
|
@@ -56,7 +78,6 @@ files:
|
|
|
56
78
|
- lib/serel/base.rb
|
|
57
79
|
- lib/serel/comment.rb
|
|
58
80
|
- lib/serel/event.rb
|
|
59
|
-
- lib/serel/exts.rb
|
|
60
81
|
- lib/serel/inbox.rb
|
|
61
82
|
- lib/serel/info.rb
|
|
62
83
|
- lib/serel/post.rb
|
|
@@ -79,26 +100,25 @@ files:
|
|
|
79
100
|
- README.md
|
|
80
101
|
homepage: http://serel.tom.is
|
|
81
102
|
licenses: []
|
|
103
|
+
metadata: {}
|
|
82
104
|
post_install_message:
|
|
83
105
|
rdoc_options: []
|
|
84
106
|
require_paths:
|
|
85
107
|
- lib
|
|
86
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
|
-
none: false
|
|
88
109
|
requirements:
|
|
89
|
-
- -
|
|
110
|
+
- - '>='
|
|
90
111
|
- !ruby/object:Gem::Version
|
|
91
112
|
version: '0'
|
|
92
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
|
-
none: false
|
|
94
114
|
requirements:
|
|
95
|
-
- -
|
|
115
|
+
- - '>='
|
|
96
116
|
- !ruby/object:Gem::Version
|
|
97
117
|
version: '0'
|
|
98
118
|
requirements: []
|
|
99
119
|
rubyforge_project:
|
|
100
|
-
rubygems_version:
|
|
120
|
+
rubygems_version: 2.0.2
|
|
101
121
|
signing_key:
|
|
102
|
-
specification_version:
|
|
122
|
+
specification_version: 4
|
|
103
123
|
summary: A Ruby library for the Stack Exchange API
|
|
104
124
|
test_files: []
|
data/lib/serel/exts.rb
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# TODO: make file less ugly.
|
|
2
|
-
|
|
3
|
-
def remove_possible_method(method)
|
|
4
|
-
if method_defined?(method) || private_method_defined?(method)
|
|
5
|
-
remove_method(method)
|
|
6
|
-
end
|
|
7
|
-
rescue NameError
|
|
8
|
-
# If the requested method is defined on a superclass or included module,
|
|
9
|
-
# method_defined? returns true but remove_method throws a NameError.
|
|
10
|
-
# Ignore this.
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def singleton_class?
|
|
14
|
-
!name || '' == name
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def singleton_class
|
|
18
|
-
class << self
|
|
19
|
-
self
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def class_attribute(*attrs)
|
|
24
|
-
if attrs.last.is_a?(Hash)
|
|
25
|
-
options = attrs.pop
|
|
26
|
-
else
|
|
27
|
-
options = {}
|
|
28
|
-
end
|
|
29
|
-
instance_reader = options.fetch(:instance_reader, true)
|
|
30
|
-
instance_writer = options.fetch(:instance_writer, true)
|
|
31
|
-
|
|
32
|
-
attrs.each do |name|
|
|
33
|
-
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
34
|
-
def self.#{name}() nil end
|
|
35
|
-
def self.#{name}?() !!#{name} end
|
|
36
|
-
|
|
37
|
-
def self.#{name}=(val)
|
|
38
|
-
singleton_class.class_eval do
|
|
39
|
-
remove_possible_method(:#{name})
|
|
40
|
-
define_method(:#{name}) { val }
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
if singleton_class?
|
|
44
|
-
class_eval do
|
|
45
|
-
remove_possible_method(:#{name})
|
|
46
|
-
def #{name}
|
|
47
|
-
defined?(@#{name}) ? @#{name} : singleton_class.#{name}
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
val
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
if instance_reader
|
|
55
|
-
remove_possible_method :#{name}
|
|
56
|
-
def #{name}
|
|
57
|
-
defined?(@#{name}) ? @#{name} : self.class.#{name}
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def #{name}?
|
|
61
|
-
!!#{name}
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
RUBY
|
|
65
|
-
|
|
66
|
-
attr_writer name if instance_writer
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def find_constant(symbol)
|
|
71
|
-
str = symbol.to_s.dup
|
|
72
|
-
match = /_([a-z])/.match(str)
|
|
73
|
-
if match
|
|
74
|
-
str.gsub!(match[0], match[1].upcase)
|
|
75
|
-
end
|
|
76
|
-
str[0] = str[0].upcase
|
|
77
|
-
Serel.const_get(str)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
class String
|
|
81
|
-
# Yeah, it's #underscore in Rails, but that's not half as fun.
|
|
82
|
-
def to_snake
|
|
83
|
-
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
|
84
|
-
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
|
85
|
-
tr("-", "_").
|
|
86
|
-
downcase
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
# Dummy class used to make our attributes clearer.
|
|
91
|
-
class Boolean
|
|
92
|
-
end
|