one-eye-eater 0.1.15 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc8db83ea6ac323877f490faa5a122b1175a3b0d
4
- data.tar.gz: 4be8aa7691b17577db81a9f8844a05a3c819463a
3
+ metadata.gz: 558d9909a9a19fd930477d0137809fd1f11ae8c5
4
+ data.tar.gz: 41687a9806bec3099fff52e72d4403cbb53fa5cb
5
5
  SHA512:
6
- metadata.gz: 24a4ff387c034e3d1ff14916db9bb6fa39a7a5e13ba97db6f965465cc67183ae0fb78833f89f9369845f883df883fe2d0b2a86945e467d072474f8ef0aba8f38
7
- data.tar.gz: 3ff92ef6ef53f2bc3bb66cc74df11f00cbea8080a7a1aef1aa7483b770b5e6424b445907ca8c522d8b7579bc698e892da002010bfc5de68d9c09b038c6a63408
6
+ metadata.gz: aa5e819f78446938e5f2c5d545f5021ef7133d5eff7fab98ddf02b7ec9d7e9dd58be5c6e0418814539d2b5d1cac219992ae9ecf933bba78b6512657bb3ce385f
7
+ data.tar.gz: c0644a620b026830a392803c866ab8644e45a41278c8f370fe36cf21f179f68998dad95b2fefdff17c10c54d046005fc2e54e89dded0e1878a7eb3aff2ccfd9b
data/README.rdoc CHANGED
@@ -27,6 +27,17 @@ For traditional, RESTful endpoints, use Rails-style CRUD actions:
27
27
  @district = OneEye::District.find(1)
28
28
  @district.destroy
29
29
 
30
+ == Dynamic Dispatch
31
+
32
+ For endpoints with custom aggregation options, One Eye Eater classes will dynamically dispatch
33
+ methods called on them as custom finders:
34
+
35
+ # GET /insights/snapshot_performance/schools
36
+ OneEye::Insights::SnapshotPerformance.schools(:district_id => 1)
37
+
38
+ # GET /insights/snapshot_usage/districts
39
+ OneEye::Insights::SnapshotUsage.districts(:assessment_area => "CCSS.ELA", :district_id => 1)
40
+
30
41
  == Copyright
31
42
 
32
43
  Copyright (c) 2014 Edmodo. See LICENSE.txt for
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.15
1
+ 0.1.16
data/lib/api.rb CHANGED
@@ -46,16 +46,11 @@ module OneEye
46
46
 
47
47
  def standardize_request(http_method, name, options)
48
48
  name = "/#{name}"
49
- # name = slash_name(name)
50
49
  options = standardize_options(options)
51
50
  name += "/#{options[:id]}" if options.keys.include? :id
52
51
  [name, options]
53
52
  end
54
53
 
55
- def slash_name(name)
56
- "/#{name.to_s.gsub(/\_/) { "/" }}"
57
- end
58
-
59
54
  def standardize_options(options={})
60
55
  if options.class == Fixnum
61
56
  options = {id: options}
data/lib/models/base.rb CHANGED
@@ -23,12 +23,6 @@ module OneEye
23
23
  eos
24
24
  end
25
25
 
26
- def make_array_convertable(attrs)
27
- def attrs.to_hash
28
- Hash[self.each_slice(2).to_a]
29
- end
30
- end
31
-
32
26
  def attributes=(attrs)
33
27
  make_array_convertable attrs if attrs.is_a? Array
34
28
  attrs.to_hash.each { |k, v| send "#{k}=", v }
@@ -70,6 +64,23 @@ module OneEye
70
64
  destroy
71
65
  end
72
66
 
67
+ private
68
+ def self.resources_url
69
+ self.name.gsub(/\w+\:\:/) {}.underscore.downcase.pluralize
70
+ end
71
+
72
+ def self.method_missing(name, *args, &block)
73
+ missing_finder name, *args, &block
74
+ end
75
+
76
+ def method_missing(name, *args, &block)
77
+ if name[-1] == "="
78
+ return instance_variable_set "@#{name[0..-2]}", args[0]
79
+ else
80
+ instance_variable_get "@#{name}"
81
+ end
82
+ end
83
+
73
84
  def non_nil_attributes
74
85
  instance_variables.inject Hash.new do |obj, key|
75
86
  obj[key.to_s[1..-1].to_sym] = instance_variable_get(key) unless instance_variable_get(key).nil?
@@ -85,16 +96,15 @@ module OneEye
85
96
  self.class.resources_url
86
97
  end
87
98
 
88
- private
89
- def self.resources_url
90
- self.name.gsub(/\w+\:\:/) {}.underscore.downcase.pluralize
99
+ def self.missing_finder(name, *args, &block)
100
+ @models = api.get("#{self.name.gsub(/OneEye\:\:/) {}.underscore}/#{name.to_s.underscore}", *args)
101
+ return @models.map { |model| new model } if @models.map
102
+ new @models
91
103
  end
92
104
 
93
- def method_missing(name, *args, &block)
94
- if name[-1] == "="
95
- return instance_variable_set "@#{name[0..-2]}", args[0]
96
- else
97
- instance_variable_get "@#{name}"
105
+ def make_array_convertable(attrs)
106
+ def attrs.to_hash
107
+ Hash[self.each_slice(2).to_a]
98
108
  end
99
109
  end
100
110
  end
@@ -0,0 +1,4 @@
1
+ module OneEye
2
+ module Insights
3
+ end
4
+ end
@@ -0,0 +1,8 @@
1
+ require_relative "../base"
2
+
3
+ module OneEye
4
+ module Insights
5
+ class SnapshotPerformance < OneEye::Base
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative "../base"
2
+
3
+ module OneEye
4
+ module Insights
5
+ class SnapshotSuggestedGroup < OneEye::Base
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative "../base"
2
+
3
+ module OneEye
4
+ module Insights
5
+ class SnapshotUsage < OneEye::Base
6
+ end
7
+ end
8
+ end
@@ -2,11 +2,11 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: one-eye-eater 0.1.15 ruby lib
5
+ # stub: one-eye-eater 0.1.16 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "one-eye-eater"
9
- s.version = "0.1.15"
9
+ s.version = "0.1.16"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
@@ -33,6 +33,10 @@ Gem::Specification.new do |s|
33
33
  "lib/models/district.rb",
34
34
  "lib/models/group.rb",
35
35
  "lib/models/group_membership.rb",
36
+ "lib/models/insights/insights.rb",
37
+ "lib/models/insights/snapshot_performance.rb",
38
+ "lib/models/insights/snapshot_suggested_group.rb",
39
+ "lib/models/insights/snapshot_usage.rb",
36
40
  "lib/models/school.rb",
37
41
  "lib/models/user.rb",
38
42
  "lib/one-eye-eater.rb",
@@ -32,26 +32,28 @@ describe OneEye::Base do
32
32
  expect(@schools.first.name).to eq("October's Very Own Academy")
33
33
  end
34
34
 
35
+ it "dynamically dispatches custom finders", :finders do
36
+ expect(OneEye::Insights::SnapshotUsage.districts(:district_id => 22037).first.num_teachers).to eq(5)
37
+ expect(OneEye::Insights::SnapshotPerformance.schools(:district_id => 22037,
38
+ :assessment_area => "CCSS.ELA")
39
+ .first.progress_percent).to eq(2.7)
40
+ end
41
+
35
42
  it "sets attributes", :attributes do
36
43
  @school = OneEye::School.new :city => "Philly", :state => "PA"
37
44
  expect(@school.attributes).to eq({"city" => "Philly", "state" => "PA"})
38
45
  end
39
46
 
40
- # Commented out to avoid creating a bunch of instances
41
- # describe "Creating and destroying" do
42
- # before(:each) do
43
- # @district = OneEye::District.create(:name => "YMCMB District")
44
- # end
45
-
46
- # it "creates instance via a backend post" do
47
- # expect(@district.name).to eq("YMCMB District")
48
- # @district.destroy
49
- # end
50
-
51
- # it "destroys instances" do
52
- # expect(@district.destroy).to eq("")
53
- # end
54
- # end
47
+ describe "Creating and destroying" do
48
+ before(:each) do
49
+ @district = OneEye::District.create(:name => "YMCMB District")
50
+ end
51
+
52
+ it "creates instance via a backend post" do
53
+ expect(@district.name).to eq("YMCMB District")
54
+ @district.destroy
55
+ end
56
+ end
55
57
 
56
58
  it "updates instances", :create do
57
59
  @district = OneEye::District.new(:id => 22037)
data/spec/one_eye_spec.rb CHANGED
@@ -4,7 +4,7 @@ describe OneEye do
4
4
 
5
5
  StagingAPI = OneEye::API.new
6
6
 
7
- # it "translates method calls into urls" do
8
- # expect(StagingAPI.districts(21417).parsed_response["id"]).to eq(21417)
9
- # end
7
+ it "translates method calls into urls", :dynamic_method do
8
+ expect(StagingAPI.districts(21417).parsed_response["id"]).to eq(21417)
9
+ end
10
10
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: one-eye-eater
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.15
4
+ version: 0.1.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Shollenberger
@@ -200,6 +200,10 @@ files:
200
200
  - lib/models/district.rb
201
201
  - lib/models/group.rb
202
202
  - lib/models/group_membership.rb
203
+ - lib/models/insights/insights.rb
204
+ - lib/models/insights/snapshot_performance.rb
205
+ - lib/models/insights/snapshot_suggested_group.rb
206
+ - lib/models/insights/snapshot_usage.rb
203
207
  - lib/models/school.rb
204
208
  - lib/models/user.rb
205
209
  - lib/one-eye-eater.rb