serel 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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