sentiql 0.1.2 → 0.1.3

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.
data/README.rdoc ADDED
@@ -0,0 +1,66 @@
1
+ == SentiQL
2
+ A minimalistic Ruby wrapper for MySQL. I love using SQL for data selection, except for basic selects (e.g. finding something by id), I love using OM interface to create, update and delete records in the database and I love when lib is not "overcoded". When you combine all this love, you get SentiQL.
3
+
4
+ == Why SentiQL
5
+ I don't like using ActiveRecord or other fat ORMs because I think they are breaking following rules:
6
+ 1. "Make everything as simple as possible, but not simpler" - Albert Einstein.
7
+ 2. Rule of Clarity. Clarity is better than cleverness. (Unix Philosophy)
8
+ 3. Rule of Simplicity: Design for simplicity; add complexity only where you must. (Unix Philosophy)
9
+
10
+ Plus. I think it is wrong to put a thick abstraction layer on one of the biggest web application's performance bottlenecks.
11
+
12
+ == Notice
13
+ This is REALY a work in progress, I wrote this lib during one evening after reading "Metaprogramming Ruby: Program Like a Ruby Pros". It is less then 140 LOCs, so even if it is missing one or other thing, just open the sentiql.rb file and happy hacking.
14
+
15
+ == Instalation
16
+ gem install sentiql
17
+
18
+ == How To
19
+ 1. Connect to database
20
+ DB = Mysql2::Client.new(
21
+ :host=>'localhost',
22
+ :username=>'username',
23
+ :password=>'password',
24
+ :database=>'db'
25
+ )
26
+ DB.query_options.merge!(:symbolize_keys=>true)
27
+ SentiQL::Base.connection = DB
28
+
29
+ 2. Working with User data
30
+
31
+ # creating
32
+ u = User.new :name=>'Tyler Durden', :password=>'project_mayhem'
33
+ u.save
34
+
35
+ # updating
36
+ u[:name] = 'Tyler'
37
+ u.save
38
+
39
+ # reading
40
+ t = User.find_by :name=>'Tyler' # -> and instance of User
41
+ t = SentiQL::Base.first 'SELECT name FROM users where name=? LIMIT 1', ['Tyler'] # -> {:name=>'Tyler', :password=>'project_mayhem'}
42
+ users = SentiQL::Base.all 'SELECT name FROM users' # -> [{:name=>'Tyler'}]
43
+
44
+ # runing SQL query
45
+ SentiQL::Base.execute 'DELETE FROM users WHERE name=?', ['Robert Paulson']
46
+
47
+
48
+ 3. User model
49
+
50
+ class User < SentiQL::Base
51
+
52
+ set_schema :name, :password, :created_at # column names of the table that you will play with
53
+ set_table :users # table name
54
+
55
+ before_create :set_timestamp
56
+
57
+ protected
58
+
59
+ def set_timestamp
60
+ self[:created_at] = Time.now
61
+ end
62
+
63
+ end
64
+
65
+ == Licence
66
+ I have no idea about this sort of things.
@@ -1,3 +1,3 @@
1
1
  module SentiQL
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/lib/sentiql.rb CHANGED
@@ -7,6 +7,7 @@ module SentiQL
7
7
 
8
8
  def initialize attrs={}
9
9
  @attrs = {}
10
+ @errors = {}
10
11
  attrs.each_pair do |key, value|
11
12
  @attrs[key.to_sym] = value
12
13
  end
data/spec/sentiql_spec.rb CHANGED
@@ -111,12 +111,12 @@ describe SentiQL::Base do
111
111
 
112
112
  describe '.first' do
113
113
  it 'returns nil when no records found' do
114
- r = SentiQL.first 'SHOW TABLES LIKE ?', ['non_existing_tbl%']
114
+ r = SentiQL::Base.first 'SHOW TABLES LIKE ?', ['non_existing_tbl%']
115
115
  r.should == nil
116
116
  end
117
117
 
118
118
  it 'returns a hash if record found with keys representing column values' do
119
- r = SentiQL.first 'SELECT CONCAT(?,?) AS str', ['a','b']
119
+ r = SentiQL::Base.first 'SELECT CONCAT(?,?) AS str', ['a','b']
120
120
  r.should be_an_instance_of(Hash)
121
121
  r[:str].should == 'ab'
122
122
  end
@@ -124,7 +124,7 @@ describe SentiQL::Base do
124
124
 
125
125
  describe '.all' do
126
126
  it 'returns Mysql2::Result which holds data in Hashes' do
127
- r = SentiQL.all 'SHOW OPEN TABLES'
127
+ r = SentiQL::Base.all 'SHOW OPEN TABLES'
128
128
  r.should be_an_instance_of(Mysql2::Result)
129
129
  r.first.should be_an_instance_of(Hash)
130
130
  end
data/spec/spec_helper.rb CHANGED
@@ -4,11 +4,11 @@ require 'rspec'
4
4
  require 'active_record'
5
5
  require 'mysql2'
6
6
 
7
- require 'sentiql'
7
+ #require 'sentiql'
8
8
 
9
9
  ROOT_PATH = File.dirname(__FILE__)
10
10
 
11
-
11
+ require File.join(ROOT_PATH, '..', 'lib', 'sentiql')
12
12
  @config = YAML.load_file(File.join(ROOT_PATH, '..', "config/database.yml"))['test']
13
13
 
14
14
  DB = Mysql2::Client.new(
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: sentiql
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.2
5
+ version: 0.1.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Martynas Miliauskas
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-15 00:00:00 +01:00
13
+ date: 2011-05-23 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -69,6 +69,7 @@ extra_rdoc_files: []
69
69
  files:
70
70
  - .gitignore
71
71
  - Gemfile
72
+ - README.rdoc
72
73
  - Rakefile
73
74
  - config/database.yml
74
75
  - db/migrate/20110515_test_tables.rb