featured 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/Gemfile +3 -0
  2. data/Gemfile.lock +35 -0
  3. data/lib/featured/feature.rb +61 -0
  4. metadata +63 -0
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ featured (0.1)
5
+ fog (~> 1.8)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ builder (3.1.4)
11
+ excon (0.16.10)
12
+ fog (1.9.0)
13
+ builder
14
+ excon (~> 0.14)
15
+ formatador (~> 0.2.0)
16
+ mime-types
17
+ multi_json (~> 1.0)
18
+ net-scp (~> 1.0.4)
19
+ net-ssh (>= 2.1.3)
20
+ nokogiri (~> 1.5.0)
21
+ ruby-hmac
22
+ formatador (0.2.4)
23
+ mime-types (1.21)
24
+ multi_json (1.6.1)
25
+ net-scp (1.0.6)
26
+ net-ssh (>= 2.6.5)
27
+ net-ssh (2.6.6)
28
+ nokogiri (1.5.6)
29
+ ruby-hmac (0.4.0)
30
+
31
+ PLATFORMS
32
+ ruby
33
+
34
+ DEPENDENCIES
35
+ featured!
@@ -0,0 +1,61 @@
1
+ require "fog"
2
+
3
+ module Featured
4
+ class Feature
5
+
6
+ attr_accessor :item
7
+
8
+ def self.db
9
+ @db ||= Fog::AWS::DynamoDB.new(aws_access_key_id: ENV['AWS_ACCESS_KEY'], aws_secret_access_key: ENV['AWS_SECRET_KEY'])
10
+ end
11
+
12
+ def self.schema(attrs)
13
+ attrs.each do |attr, type|
14
+ class_eval "def #{attr}; @item['#{attr}']['#{type}'] if @item.key? '#{attr}' end", __FILE__, __LINE__
15
+ class_eval "def #{attr}= value; @item['#{attr}'] = {'#{type}' => value} end", __FILE__, __LINE__
16
+ end
17
+ end
18
+
19
+ schema entity: :S, name: :S, created_at: :N
20
+
21
+ def self.set(item)
22
+ entry = new
23
+ entry.item = item
24
+ entry
25
+ end
26
+
27
+ def self.init(entity, name)
28
+ entry = new
29
+ entry.item = {}
30
+ entry.entity = entity
31
+ entry.name = name
32
+ entry.created_at = Time.now.to_i.to_s
33
+ entry
34
+ end
35
+
36
+ def self.get(entity, name)
37
+ response = db.get_item(:features, {HashKeyElement: {S: entity}, RangeKeyElement: {S: name}})
38
+ if item = response.body['Item']
39
+ set(item)
40
+ end
41
+ rescue
42
+ nil
43
+ end
44
+
45
+ def self.gets(entity)
46
+ response = db.query(:features, {S: entity})
47
+ if items = response.body['Items']
48
+ items.map do |item|
49
+ set(item)
50
+ end
51
+ end
52
+ rescue
53
+ []
54
+ end
55
+
56
+ def self.put(entity, name)
57
+ entry = init(entity, name)
58
+ response = db.put_item(:features, entry.item, Expected: {entity: {Exists: false}, name: {Exists: false}})
59
+ end
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: featured
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mark Fine
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fog
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.8'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.8'
30
+ description: Features.
31
+ email: mark.fine@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - lib/featured/feature.rb
37
+ - Gemfile
38
+ - Gemfile.lock
39
+ homepage: http://github.com/heroku/featured
40
+ licenses: []
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 1.8.24
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: features
63
+ test_files: []