Skip to content

Instantly share code, notes, and snippets.

@gmanley
Created July 10, 2012 08:25
Show Gist options
  • Save gmanley/3082017 to your computer and use it in GitHub Desktop.
Save gmanley/3082017 to your computer and use it in GitHub Desktop.
require 'bundler/setup'
Bundler.require
module Soshified
def self.setup!
config = YAML.load_file(File.join(File.dirname(__FILE__), 'config/db.yml'))
DataMapper::Logger.new(STDOUT, :debug)
DataMapper.setup(:default, config['ipgallery'])
end
end
class Member
include DataMapper::Resource
has 1, :profile
property :id, Serial, field: 'member_id'
property :name, String
property :email, String
property :display_name, String, field: 'members_display_name'
property :day_of_birth, Integer, field: 'bday_day'
property :month_of_birth, Integer, field: 'bday_month'
property :year_of_birth, Integer, field: 'bday_year'
def birthday
birthday_components = [year_of_birth, month_of_birth, day_of_birth]
unless birthday_components.include?(0) || birthday_components.include?(nil)
Date.new(*birthday_components) rescue binding.pry
end
end
def age
if birthday
now = Date.today
now.year - birthday.year - ((now.month > birthday.month || (now.month == birthday.month && now.day >= birthday.day)) ? 0 : 1)
end
end
end
class Profile
include DataMapper::Resource
storage_names[:default] = "pfields_content"
belongs_to :member
property :member_id, Serial
property :country, String, field: 'field_2'
end
us_members = Member.all(fields: [:day_of_birth, :month_of_birth, :year_of_birth], profile: { country: 'us' })
ages = us_members.map(&:age).compact
Hash[ages.group_by {|i| i}.map {|key, value| [key, value.count] }].sort.each do |age|
puts "#{age.first} years old: #{age.last} members"
end # =>
# 22002 Total Membeers from US
# Out of the 4947 that gave their age:
# 0 years old: 2 members
# 1 years old: 4 members
# 2 years old: 7 members
# 3 years old: 6 members
# 4 years old: 2 members
# 5 years old: 2 members
# 6 years old: 1 member
# 7 years old: 1 member
# 10 years old: 3 members
# 11 years old: 11 members
# 12 years old: 27 members
# 13 years old: 61 members
# 14 years old: 133 members
# 15 years old: 259 members
# 16 years old: 421 members
# 17 years old: 455 members
# 18 years old: 546 members
# 19 years old: 536 members
# 20 years old: 546 members
# 21 years old: 476 members
# 22 years old: 394 members
# 23 years old: 246 members
# 24 years old: 220 members
# 25 years old: 123 members
# 26 years old: 102 members
# 27 years old: 77 members
# 28 years old: 60 members
# 29 years old: 50 members
# 30 years old: 35 members
# 31 years old: 28 members
# 32 years old: 17 members
# 33 years old: 10 members
# 34 years old: 7 members
# 35 years old: 9 members
# 36 years old: 6 members
# 37 years old: 5 members
# 38 years old: 2 members
# 39 years old: 2 members
# 40 years old: 3 members
# 41 years old: 4 members
# 43 years old: 1 member
# 44 years old: 2 members
# 45 years old: 3 members
# 47 years old: 2 members
# 49 years old: 2 members
# 50 years old: 2 members
# 51 years old: 2 members
# 53 years old: 1 member
# 54 years old: 1 member
# 55 years old: 1 member
# 58 years old: 2 members
# 61 years old: 1 member
# 67 years old: 1 member
# 68 years old: 1 member
# 70 years old: 1 member
# 72 years old: 1 member
# 84 years old: 1 member
# 97 years old: 1 member
# 98 years old: 4 members
# 99 years old: 4 members
# 100 years old: 4 members
# 101 years old: 8 members
# 102 years old: 2 members
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment