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.
@@ -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
@@ -1,7 +1,8 @@
1
1
  # Utilities
2
2
  require 'date'
3
3
  require 'logger'
4
- require 'serel/exts'
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
@@ -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] = find_constant(v).new(data[k.to_s])
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.to_snake unless klass
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.to_snake
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.to_snake, :plural).get
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.to_snake, :plural).#{meth}(val)
172
+ new_relation(name.split('::').last.underscore, :plural).#{meth}(val)
170
173
  end
171
174
  RUBY
172
175
  end
@@ -4,7 +4,7 @@ module Serel
4
4
 
5
5
  def initialize(type, qty)
6
6
  @type = type
7
- @klass = find_constant(type)
7
+ @klass = Serel.const_get(type.to_s.classify)
8
8
  @scope = {
9
9
  api_key: Serel::Base.api_key,
10
10
  site: Serel::Base.site
@@ -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 << find_constant(@type).new(item)
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.1.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 00:00:00.000000000 Z
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: &70270109018980 !ruby/object:Gem::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: *70270109018980
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: &70270109018540 !ruby/object:Gem::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: *70270109018540
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: &70270109018120 !ruby/object:Gem::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: *70270109018120
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: 1.8.11
120
+ rubygems_version: 2.0.2
101
121
  signing_key:
102
- specification_version: 3
122
+ specification_version: 4
103
123
  summary: A Ruby library for the Stack Exchange API
104
124
  test_files: []
@@ -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